да какие обиды, я про это не раз слышал. Время покажет.
Неопределенное поведение сродни чтению из области временной памяи - иногда там может быть армор, а иногда и мусор случайный. Если, читая из одного места, ты всегда получаешь единственно верный результат, то это детерминированное поведение. А сделана ли функция костылем или хаком, это вообще из другой оперы. Ты с определением попутал.
ну нееет, здесь как раз определенное - возвращается всегда значение армора и никакая погода на марсе на значение не влияет. Поведение полностью предпопределено, как и во всем мемхаке. Ошибки возникают, когда лезешь не туда или используется функция из игры, которая не готова к индивидуальному вызову (например, стек не чистит за собой и т.п.). Используя только чтение, можно быть уверенным в стабильности на 100%
function IsUnitDead takes unit u returns boolean
return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
endfunction
единственный вариант, когда GetUnitTypeId() вернет 0, это если u==null. Но, внезапно, если юнит "протек", то он может еще висеть в памяти после уничтожения, и тип у него будет что ни на есть обычный, легитимный, хотя юнит уже технически мертв. Поэтому такая проверка просто бессмысленна.
ну давай будем честными, здесь ты назвал мемхак костылем и хаком, когда он таковым не является. использовать чтение и запись в большинстве случаев крайне просто. намного сложнее, если речь заходит о том, что надо патч накладывать на исполняемый код, но такое неофиту даже на пальцах объяснить сложно.
современный варкрафт задрочен на 90% и состоит из костылей на 50%, самых разных. нет ничего постыдного время от времени забывать кого-то из этого зоопарка. Некоторые нативки я для себя открывал спустя год после того, как уже занимался доткой профессионально.
function IsDead takes unit u returns boolean
return GetWidgetLife(u) < 0.405 or IsUnitType(u,UNIT_TYPE_DEAD)
endfunction
никогда не подводила
ну а портируемость в 99.9% не нужна, если ты специально не пишешь систему для людей. В моей карте системы используются только мной, и мемхак всецело мой же, варкрафт обновляться выше 26 не будет, поэтому плевать на то, что костыли местами.
локальные объекты протекать могут, конечно, но их упустить сложнее. текст таги имеют длительность жизни, которая их корректно стирает. у молний и уберсплатов лимита я не знаю, есть ли он вообще или нет. а если лимита нет, то и бояться утечек нечего
каждый объект агент, каждый хендл агент, но не каждый хендл или агент обязаны быть синхронными. из определения ничего не узнать, просто берешь хендл любого созданного тобой объекта. Если он меньше 1000 - это асинхронный объект
не нужна там длл, просто ограничение в 2 местах стоит, если убрать, то можно и выше. просто 522 - это оптимальное значение, когда юнит ооооочень редко мажет мимо чекпоинтов. Если брать даже 600 - уже начниаются проскоки и юнит начинает метаться, разворачиваясь обратно. Так что советую строить баланс вокруг 522
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
Каюсь, в школе я больше пинал БИНОМЫ, чем учился, о чем немного и сожалею сейчас. Геометрия тоже была в списке "ненавижусука" предметов, поэтому движение и хитрости углов мне в итоге довелось изучить уже на примерах скиллов доты. Вот если бы хоть кто-нбудь показывал реальную применимость этих синусов в жизни, авось и учили бы их охотнее.
Другими словами - учись на примерах остальных. В 2д-системе, которой является варкрафт, нет нужды погружаться в пространственную геометрию, плоскости достаточно. Высота - обособленная координата без особых запросов Поэтому находи в любой карте навык с движением, которое тебе надо, и читай код.
Ну а если эстет и хочешь, чтобы юнит рисовал восьмерку с радиусом кривизны равным 3х навык абилки, тогда да, придется углубиться.
оно ваще работает? там идет перебор всех абилок, и даже баф стана отвечает false на проверку, хз что она проверяет
Проще всего отследить стан по получению юнитом приказа STUNNED
constant integer ORDER_stunned=851973
Но т.к. ты играешь на GUI, тебе должно хватить и проверки на баф. Просто не создавай станов с другим кодом бафа и будет счастье.
ох и ярость берет за эти "правила", писанные как для взрослых. особенно умиляют 4 пробела. Хоспади, когда же наступит будущее, где табы будут во всех редакторах одинаковыми.
никак не отследить, записывать в триггер, кто является целью, и сравнивать, создавая по одному триггеру на каждое такое событие, чтобы четко знать, к кому подошли
ну у меня стиль сильно скакал, в зависимости от года, но прочитать старое обычно не было проблемой. А локалки - однобуквенный алиас, unit -> u, trigger -> t, timer (if trigger exists) -> tt, integer i, eventid eid, etc
Запарно было и свою систему баунти писать, и таблицы колбеков составлять. Зато месяц мучений - и регулируй что хочешь и как хочешь. Причем вся сложность сугубо в таблицах, а не в коде.
» WarCraft 3 / Как влиет число активных триггеров на загруженность карты?
» WarCraft 3 / Как влиет число активных триггеров на загруженность карты?
» WarCraft 3 / Призванные боссом юниты и иже с ними
Ред. DracoL1ch
» WarCraft 3 / Прошу просто назвать причины фатала
Неопределенное поведение сродни чтению из области временной памяи - иногда там может быть армор, а иногда и мусор случайный. Если, читая из одного места, ты всегда получаешь единственно верный результат, то это детерминированное поведение. А сделана ли функция костылем или хаком, это вообще из другой оперы. Ты с определением попутал.
» WarCraft 3 / Прошу просто назвать причины фатала
» WarCraft 3 / Прошу просто назвать причины фатала
» WarCraft 3 / Прошу просто назвать причины фатала
современный варкрафт задрочен на 90% и состоит из костылей на 50%, самых разных. нет ничего постыдного время от времени забывать кого-то из этого зоопарка. Некоторые нативки я для себя открывал спустя год после того, как уже занимался доткой профессионально.
» WarCraft 3 / Прошу просто назвать причины фатала
» WarCraft 3 / Hashtable
» WarCraft 3 / Hashtable
» WarCraft 3 / Прошу просто назвать причины фатала
в логе четко видно ид X82A
» WarCraft 3 / Hashtable
» WarCraft 3 / Боевая единица и максимальная скорость перемещения
» WarCraft 3 / движение через ( X . y )
» WarCraft 3 / движение через ( X . y )
Ред. DracoL1ch
» WarCraft 3 / движение через ( X . y )
Другими словами - учись на примерах остальных. В 2д-системе, которой является варкрафт, нет нужды погружаться в пространственную геометрию, плоскости достаточно. Высота - обособленная координата без особых запросов Поэтому находи в любой карте навык с движением, которое тебе надо, и читай код.
» WarCraft 3 / Отследить стан
да, приказ стана == стан
Ред. DracoL1ch
» WarCraft 3 / Отследить стан
Проще всего отследить стан по получению юнитом приказа STUNNED
constant integer ORDER_stunned=851973
» WarCraft 3 / Наименование функций и переменных
» WarCraft 3 / Событие A unit comes within range of unit
» WarCraft 3 / GetWidgeLife(...), GetUnitState(...)
» WarCraft 3 / Наименование функций и переменных
» WarCraft 3 / Наименование функций и переменных
с вероятностью 99.9% никто, кроме тебя, этот код всё равно читать не будет.
Ред. DracoL1ch
» WarCraft 3 / JASS: группа или массив?
v5 начинается с 0-го элемента списка
{
v5 = *(_DWORD *)(v5 + 4);
if ( v5 <= 0 )
goto LABEL_8;
}
» WarCraft 3 / Момент полного удаления боевой единицы из игры