16

» WarCraft 3 / Призванные боссом юниты и иже с ними

если это ИИ, то SetUnitPosition() назначает нейтралу новую точку для охраны. криво, но легко.
16

» WarCraft 3 / Прошу просто назвать причины фатала

да какие обиды, я про это не раз слышал. Время покажет.
Неопределенное поведение сродни чтению из области временной памяи - иногда там может быть армор, а иногда и мусор случайный. Если, читая из одного места, ты всегда получаешь единственно верный результат, то это детерминированное поведение. А сделана ли функция костылем или хаком, это вообще из другой оперы. Ты с определением попутал.
16

» WarCraft 3 / Прошу просто назвать причины фатала

ну нееет, здесь как раз определенное - возвращается всегда значение армора и никакая погода на марсе на значение не влияет. Поведение полностью предпопределено, как и во всем мемхаке. Ошибки возникают, когда лезешь не туда или используется функция из игры, которая не готова к индивидуальному вызову (например, стек не чистит за собой и т.п.). Используя только чтение, можно быть уверенным в стабильности на 100%
16

» WarCraft 3 / Прошу просто назвать причины фатала

function IsUnitDead takes unit u returns boolean
    return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
endfunction
единственный вариант, когда GetUnitTypeId() вернет 0, это если u==null. Но, внезапно, если юнит "протек", то он может еще висеть в памяти после уничтожения, и тип у него будет что ни на есть обычный, легитимный, хотя юнит уже технически мертв. Поэтому такая проверка просто бессмысленна.
16

» WarCraft 3 / Прошу просто назвать причины фатала

ну давай будем честными, здесь ты назвал мемхак костылем и хаком, когда он таковым не является. использовать чтение и запись в большинстве случаев крайне просто. намного сложнее, если речь заходит о том, что надо патч накладывать на исполняемый код, но такое неофиту даже на пальцах объяснить сложно.
современный варкрафт задрочен на 90% и состоит из костылей на 50%, самых разных. нет ничего постыдного время от времени забывать кого-то из этого зоопарка. Некоторые нативки я для себя открывал спустя год после того, как уже занимался доткой профессионально.
16

» WarCraft 3 / Прошу просто назвать причины фатала

function IsDead takes unit u returns boolean
	return GetWidgetLife(u) < 0.405 or IsUnitType(u,UNIT_TYPE_DEAD)
endfunction
никогда не подводила
ну а портируемость в 99.9% не нужна, если ты специально не пишешь систему для людей. В моей карте системы используются только мной, и мемхак всецело мой же, варкрафт обновляться выше 26 не будет, поэтому плевать на то, что костыли местами.
16

» WarCraft 3 / Hashtable

утечка - это 4 байта. сколько таких надо, чтобы заполнить зхотя бы гиг памяти? вот неразрушенный объект - другой вопрос
16

» WarCraft 3 / Hashtable

локальные объекты протекать могут, конечно, но их упустить сложнее. текст таги имеют длительность жизни, которая их корректно стирает. у молний и уберсплатов лимита я не знаю, есть ли он вообще или нет. а если лимита нет, то и бояться утечек нечего
16

» WarCraft 3 / Hashtable

каждый объект агент, каждый хендл агент, но не каждый хендл или агент обязаны быть синхронными. из определения ничего не узнать, просто берешь хендл любого созданного тобой объекта. Если он меньше 1000 - это асинхронный объект
16

» WarCraft 3 / Боевая единица и максимальная скорость перемещения

не нужна там длл, просто ограничение в 2 местах стоит, если убрать, то можно и выше. просто 522 - это оптимальное значение, когда юнит ооооочень редко мажет мимо чекпоинтов. Если брать даже 600 - уже начниаются проскоки и юнит начинает метаться, разворачиваясь обратно. Так что советую строить баланс вокруг 522
16

» WarCraft 3 / движение через ( X . y )

local location loc=GetUnitLoc(GetEnumUnit())
local location tcLoc=GetUnitLoc(udg_topot_caster)
local real a=AngleBetweenPoints(tcLoc, loc)
call SetUnitX(GetEnumUnit(),GetLocationX(loc) +CosBJ(a) * 10.00 )
call SetUnitY(GetEnumUnit(),GetLocationY(loc) +SinBJ(a) * 10.00 )
call RemoveLocation(tcLoc)
call RemoveLocation(loc)
set tcLoc=null
set loc=null
16

» WarCraft 3 / движение через ( X . y )

Каюсь, в школе я больше пинал БИНОМЫ, чем учился, о чем немного и сожалею сейчас. Геометрия тоже была в списке "ненавижусука" предметов, поэтому движение и хитрости углов мне в итоге довелось изучить уже на примерах скиллов доты. Вот если бы хоть кто-нбудь показывал реальную применимость этих синусов в жизни, авось и учили бы их охотнее.
Другими словами - учись на примерах остальных. В 2д-системе, которой является варкрафт, нет нужды погружаться в пространственную геометрию, плоскости достаточно. Высота - обособленная координата без особых запросов Поэтому находи в любой карте навык с движением, которое тебе надо, и читай код.
Ну а если эстет и хочешь, чтобы юнит рисовал восьмерку с радиусом кривизны равным 3х навык абилки, тогда да, придется углубиться.
16

» WarCraft 3 / Отследить стан

проверка на класс как минимум у стандартного стана возвращает false, так что ищи лучше баф
да, приказ стана == стан
16

» WarCraft 3 / Отследить стан

>> IsUnitType( unit, UNIT_TYPE_STUNNED ).
оно ваще работает? там идет перебор всех абилок, и даже баф стана отвечает false на проверку, хз что она проверяет
Проще всего отследить стан по получению юнитом приказа STUNNED
constant integer ORDER_stunned=851973
Но т.к. ты играешь на GUI, тебе должно хватить и проверки на баф. Просто не создавай станов с другим кодом бафа и будет счастье.
16

» WarCraft 3 / Наименование функций и переменных

ох и ярость берет за эти "правила", писанные как для взрослых. особенно умиляют 4 пробела. Хоспади, когда же наступит будущее, где табы будут во всех редакторах одинаковыми.
16

» WarCraft 3 / Событие A unit comes within range of unit

никак не отследить, записывать в триггер, кто является целью, и сравнивать, создавая по одному триггеру на каждое такое событие, чтобы четко знать, к кому подошли
16

» WarCraft 3 / GetWidgeLife(...), GetUnitState(...)

разница там действительно минимальная, просто Widget удобнее, ибо всего один аргумент печатать
16

» WarCraft 3 / Наименование функций и переменных

ну у меня стиль сильно скакал, в зависимости от года, но прочитать старое обычно не было проблемой. А локалки - однобуквенный алиас, unit -> u, trigger -> t, timer (if trigger exists) -> tt, integer i, eventid eid, etc
16

» WarCraft 3 / Наименование функций и переменных

google -> правила именования переменных
с вероятностью 99.9% никто, кроме тебя, этот код всё равно читать не будет.
16

» WarCraft 3 / JASS: группа или массив?

Ну вот из псевдокода по IsUnitInGroup:
v5 начинается с 0-го элемента списка
while ( *(_DWORD *)(v5 + 8) != a2 )
{
v5 = *(_DWORD *)(v5 + 4);
if ( v5 <= 0 )
goto LABEL_8;
}
Приведи задачу, где необходима будет именно рекурсия, я че-то не понимаю
16

» WarCraft 3 / Момент полного удаления боевой единицы из игры

Запарно было и свою систему баунти писать, и таблицы колбеков составлять. Зато месяц мучений - и регулируй что хочешь и как хочешь. Причем вся сложность сугубо в таблицах, а не в коде.