32

» WarCraft 3 / Стабилизация

FrigatPlay, нет ну серьезно, как еще тут можно определить?
Ладно когда есть форум и под моделью срачь из коментов что не то пальто, автор пей яд и так далее...
Ну а если нет, то гадать...
32

» WarCraft 3 / Утечки

pro100master, ГУИ это именно графический интерфейс, то что он преобразуется в Jass и есть самое корявое, поэтому нужно писать карту на jass без использования гуи. Ибо бж функции которые испольюзуются для гуи - багнуты, утечны, имеют в себя кучу мусора.
32

» WarCraft 3 / Стабилизация

Удалить.
Не ну думаю ты пока она не фатальнет не узнаешь что она битая...
32

» WarCraft 3 / Кординаты иконки

Clamp, до 1.27а работали случайно наборы координат с неверными значениями (меньше нуля и\или больше 4), это баг, только в след патчах близзарды сделали проверку на некорректные корды и так же проверку на 0-11, чтобы иконки таки скрывались.
У драколича эти координаты не раз фаталили.
Самый безопасный способ задание чисел типа -100500 редактируюя слк таблицы (редактор не дает такие числа вводить).
На сегодняшний момент работают без багов координаты -2147483648, -2147483648, но их нельзя задать через редактор.
32

» WarCraft 3 / Кординаты иконки

bOrissko, 0,-11 (но будет фатал у некоторых игроков)
Прочие способы недоступны из редактора обьектов.
32

» WarCraft 3 / Утечки

FrigatPlay, Эмм мне надо давать частные уроки картостроения?
Я вот честно хз, статей вроде много но никто не читает и некому не даются..
32

» WarCraft 3 / Качественная ночь

LordDracula, это вот- так с наскока не сделаешь, придется долго подбирать методом тыка все составляющие.
32

» WarCraft 3 / Качественная ночь

Сделать кастомный фильтр, туман, светлячков. И наложить погодный эффект с лунными лучами.
А если руки из нужного места, сделать свою кастом модель погодного эффекта где тучи бы ползли по небу и затеняли землю, оставляя просветы.
Кстати на сайте вроде были кастом модели дня\ночи.
32

» WarCraft 3 / Выбор конкретной анимации

vlad2010pilot, ну это порядковый номер анимации в контейнере.
native SetUnitAnimationByIndex takes unit whichUnit, integer whichAnimation returns nothing
Только этой функцией у вас получится проиграть эти 50 анимаций.
32

» WarCraft 3 / Утечки группы.

Я использую в своей карте вот столько фильтров:
код
function RunnerFilter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and GetUnitAbilityLevel( bj_lastFilterUnit, 'Arun' ) > 0 and LoadBoolean( gg_htb_HashData, GetHandleId( bj_lastFilterUnit ), ExKeyHasStaff )
endfunction

function EnemyFilter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitInvulnerable( bj_lastFilterUnit ) or IsUnitWard( bj_lastFilterUnit ) )
endfunction

function Enemy_Summoned_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and ( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_SUMMONED ) or GetUnitAbilityLevel( bj_lastFilterUnit, 'ANsu' ) == 1 )
endfunction

function Chain_Enemy_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE )or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitWard( bj_lastFilterUnit )  or IsUnitInGroup( bj_lastFilterUnit, LoadGroupHandle( gg_htb_HashData, GetHandleId( GetExpiredTimer( ) ), ExKeyChainGroup ) ) or IsUnitInvulnerable( bj_lastFilterUnit ) or bj_lastFilterUnit == bj_lastReplacedUnit )
endfunction

function Wave_Enemy_Filter takes nothing returns boolean
    local DamageData dd = GetDataBX( GetExpiredTimer( ) )
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not ( IsUnitInGroup( bj_lastFilterUnit, dd.grp ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitWard( bj_lastFilterUnit )  or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction

function Dispel_Enemy_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not ( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_ANCIENT ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE ) or IsUnitInvulnerable( bj_lastFilterUnit ) or ( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_SAPPER ) and not(GetUnitTypeId( bj_lastFilterUnit ) == 'n005') ) )
endfunction

function Wave_All_Enemy_Filter takes nothing returns boolean
    local DamageData dd = GetDataBX( GetExpiredTimer( ) )
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not ( IsUnitInGroup( bj_lastFilterUnit, dd.grp ) or GetUnitAbilityLevel( bj_lastFilterUnit, 'BHav' ) > 0 or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitWard( bj_lastFilterUnit ) or IsUnitInvulnerable( bj_lastFilterUnit ) or ( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_ANCIENT ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE ) or ( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_SAPPER ) and not(GetUnitTypeId( bj_lastFilterUnit ) == 'n005') ) ) )
endfunction

function Enemy_Ward_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and IsUnitWard( bj_lastFilterUnit ) and not( IsUnitDead( bj_lastFilterUnit ) or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction

function Mine_Enemy_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not ( IsUnitWard( bj_lastFilterUnit ) or IsUnitDead( bj_lastFilterUnit ) or IsUnitInvulnerable( bj_lastFilterUnit ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_ANCIENT ) )
endfunction

function No_Dummy_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return not ( IsUnitWard( bj_lastFilterUnit ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL )  )
endfunction

function All_Enemy_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetWidgetLife( bj_lastFilterUnit ) > 0.405  and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not ( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL) or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction

function Group_Kill_Wards_enum takes nothing returns nothing
    call UnitDamageTarget( bj_lastReplacedUnit, GetEnumUnit( ), 1000.00, true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_ENHANCED, WEAPON_TYPE_WHOKNOWS )
endfunction
32

» WarCraft 3 / Утечки группы.

Ну в радиусе нужны координаты, центра окружности и её радиус...
Вам я так понял координаты не даются...
KaneThaumaturge, не надо, это помедленнее в разы + пикать всех, включая дохлых плохая затея - могут быть баги.
Для этого делаются фильтры на все случаи жизни, штук 10, и используются во всех триггерах.
32

» WarCraft 3 / Утечки группы.

ага, а тебе кого нужно? В функции есть строчка - GetUnitTypeId(GetFilterUnit()) == 'hsor'
Ну то что после == это есть ро код юнита, смотри в редакторе объектов нажав Ctr + D
32

» WarCraft 3 / Выбор конкретной анимации

vlad2010pilot, По ид анимаци проигрывай а не по имени, насколько помню по имени проигрываются только дефолт анимы.
32

» WarCraft 3 / Утечки группы.

Достаточно посмотреть как устроены эти бж функции и все будет понятно.
function OnlyAliveSourcess takes nothing returns boolean // эту функция в кастом код карты, в самом вверху.
    return GetUnitTypeId( GetFilterUnit( ) ) == 'hsor' and not ( GetWidgetLife( GetFilterUnit( ) ) < 0.405 or IsUnitType( GetFilterUnit( ), UNIT_TYPE_DEAD ) )
endfunction
//...
call GroupClear( udg_Group ) // это в кастом скрипт твоего триггера
call GroupEnumUnitsInRect( udg_Group, bj_mapInitialPlayableArea, Condition( function OnlyAliveSourcess )) // это в кастом скрипт твоего триггера
Вот без утечек и локейшинов и прочих ненужных действий.
Далее уже делай что хочешь с юнитами в группе
32

» WarCraft 3 / Удаление события, созданного с помощью "Add New Event"

PT153, смотря для чего триггер, если будите юзать мемхак, то начнете делать кастом баффы для юнитов (бафф на самом деле это не иконка в статусе, её может и не быть, это всего лишь опция, а внутри игровой триггер который как правило ждет смерти, происшествие времени, каст диспела, если это предусмотрено) К примеру самопальный стан, а если его не снять до смрети юнита - будет бага, поэтому нужно событие EventWidgetDeath.
Триггеры часто незаменимы, но чрезмерная любовь к ним (яркий пример IceFrog) приведет к багам и проблемам, так что нужно стараться не плодить их бездумно, а так же не удалять если в этом нет необходимости (да и вовсе удалять триггер в его не оч. идея, ибо фрогу векс запилил систему утилизации триггеров не просто так, учитывая что дота жила годами с куда вроде бы более значимыми багами, вероятно задолбили репотами)..
32

» WarCraft 3 / Проблема с Every 0.01 seconds of game time

ApoloZ2, да что ты говоришь, один только алгоритм говорит о том что ты ничего не учил и ничего не писал.
Периодически проверять (100 раз в сек) кол-во юниттов и плодить группы на гуях, ваще кулл.
Если хочешь сделать "Еще одну карту" в которую не будешь запускать даже сам, валяй... Наше дело предупредить.
У тебя 5 юнитов, представь что это 5 яблок на столе (как в школе учили), у тебя срабатывает код когда пропадает одно из яблок, как ты определишь что не осталось ни 1, обычным счетчиком... Целочисленная переменная, изначально равна 0, при каждом срабатывании триггера добавляй +1, если число выше или равно 5 или сколько там у тебя, делай что хочешь.
Твой код с группами кстати ищет в том числе и мертвых юнитов:
function LivingPlayerUnitsOfTypeIdFilter takes nothing returns boolean
    local unit filterUnit = GetFilterUnit()
    return IsUnitAliveBJ(filterUnit) and GetUnitTypeId(filterUnit) == bj_livingPlayerUnitsTypeId
endfunction
И еще одно но, не используйте эти готовые бж фильтры, они кривые и могут пикать мертвых юнитов, что уже было не раз...
32

» WarCraft 3 / Проблема с Every 0.01 seconds of game time

CСнова миллион утечек и тупость, нет просто счетчик сделать на целочисленной переменной и поверить на то кто умирает...
32

» WarCraft 3 / Удаление события, созданного с помощью "Add New Event"

События триггера никак нельзя удалить, можно только удалить триггер (с кондишенами и акшенами).
А кстати вот - xgm.guru/p/wc3/venomanser
Будет несомненно полезно, как правильно удалять триггеры.
Да и вовсе полезно для общего развития.
32

» WarCraft 3 / Защита карты

Еще раз, нет никаких программ и не будет для защиты карты отной кнопкой,, просто тулы векса + слк, в редакторе не откроет уже никто. Но нафиг кому нужна ваша карта? Изменить заставку на Cheated by BaHя можно без редактора карт.
Если вы параноик и хотите защиту, будите писать карту с нуля, сначала на jass потом переводить в байткоды - тогда точно хрен там кто, что изменит...
Так же есть проверка изменения кода карты и щяс снова доступен ретурн баг, а так же есть даже наработка -http://xgm.guru/p/wc3/memoryhack.
Которая как раз и позволяет смотреть менял ли кто код карты, да и вовсе подгрузка сторонних DLL в процесс игры говорит сама за себя.
Но это очень долго и сложно.
32

» WarCraft 3 / Покупка предметов союзнику под контролем

DracoL1ch, есть такая фишка у одного скилла, там есть настройка -что если ты нажал кнопку скилла, то бабки спишутся у того кому он принадлежит, иначе у тебя (того у кто нажал кнопку, а не тот кому принадлежит юнит)
32

» WarCraft 3 / Покупка предметов союзнику под контролем

DracoL1ch, один хрен он купит тому кто нажал на иконку предмета.
Союзникам под твоим контролем делают как в Кастел файтах - спеллбук со спеллами на основе поставки ресурсов (аналог канала), ну и иконками предметов из магазина и описаниями, сам спеллбук - называют (купить предмет).
Когда ты жмакнешь спелл - у союзника спишутся бабки (если в настройках поставки ресурсов стоит галочка - заряд игрока владельца) и ты создаешь под него предмет триггерно, всякий раз когда союзник выбирает магазин для покупки ему вручается спеллбук с ассортиментом этого магазина, мудрено, долно, но сравнительно просто в реализации и удобно.
32

» WarCraft 3 / Можно ли сделать улучшение не ограниченным.

Shmakov, ну если бафф в статус повешать, а так никак не изменить циферки в атаке\защите.