DracoL1ch #1 - 4 дня назад 6

» WarCraft 3 / Разница в объявлении real

Используй точку, или будешь попадаться на приколы вроде того, что функция, возвращающая real, не может вернуть просто 0
function X takes nothing returns real
return 0
endfunction
в моем случае на ней падал поток. поведение неясно, так что лучше ставь точку, не убудет
DracoL1ch #2 - 6 дней назад 0

» WarCraft 3 / Краш карты.

приложи лучше .txt файл с крашем из папки /errors
DracoL1ch #3 - 6 дней назад 0

» WarCraft 3 / Версии war3 и нововведения

близзардам не лень? мелкие изменеиня? ты с какой вселенной, братишка? в нашей вселенной близзарды относятся к варкрафту как к дохлой корове
DracoL1ch #4 - 1 неделю назад 6

» WarCraft 3 / Jass как первый ЯП?

jass - это такой паскаль для скрипт-кидди, не более.
DracoL1ch #5 - 1 неделю назад 0

» WarCraft 3 / Способности для героя

ClotPh:
DracoL1ch, в смысле? Мемхаком же легко. Да и без него какое-то извращение было, но уже сложное.
Где автор, а где мх? Разные уровни
DracoL1ch #6 - 1 неделю назад 0

» WarCraft 3 / Способности для героя

В процессе игры - никак
DracoL1ch #7 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Безумие на цель

berserk баф не связан с абилкой
берсерк с негативным множителем сводит урон на 0, любой
автору нужно AIdd, там есть от физ атак множитель, кому не лень - объясните по необходимости.
DracoL1ch #8 - 2 недели назад (отредактировано ) 2

» WarCraft 3 / Максимальное количество хеш-таблиц

Нет никакой проблемы в том, чтобы работать сразу с 255 таблицами, почему бы и нет. Сам принцип хранения ключей подразумевает возможность того, что данные смешаются, а также чем жирнее таблица, тем больше время доступа (не проверял, чисто на слово верю кому-то из далекого прошлого). У меня 21 хт используется, не жалуюсь.
Данные смешаются == хеш ключа совпадет.
Leo: Jass hashtables don't hash anything at all hahaha. Well, they are hashtables, but a hashtable is supposed to have a hash function, which will return a unique value for each key you pass it, to avoid collisions. For example, object data is stored in hashtables as well, and the hash function is that IntegerHash function from my code.
Me - heh you mean their naming is misleading, I see
Leo - I wouldn't say misleading, usually a hashtable is an array of linked lists, which is exactly what the jass hashtable does. But the difference is that it doesn't use any hashing function, it just takes the value directly, extracts the last 3 or 4 bits, and uses that as an array index. Make a search on how hashtables work and you will understand. It's pretty much a standard c++ hashtable, an array of linked lists. It takes the key value, extracts the last bits, and uses that as the array index, and then starts iterating the linked list at that key.
Me - ok got it, I thought at first there are collisions between a keys with similar bytes
Leo - there are, but a hashtable usually has a hashing function associated to return unique values for every different key, thus avoiding collisions. But JASS hashtables don't have any hash function
Me - so we have collisions much more often than supposed to?
Leo - yes
DracoL1ch #9 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Максимальное количество хеш-таблиц

по крайней мере из globals инициализация InitHashtable идет до начала загрузки. Ну а лимит реализован просто - однажды у тебя будет 255 вызовов InitHashtable и после этого новые создаваться не будут.
DracoL1ch #10 - 2 недели назад 0

» WarCraft 3 / Максимальное количество хеш-таблиц

Забавный факт - хештаблица генерируется в момент выделения карты в лобби, а не при загрузке или исполнении скрипта. Точнее, сперва при проверке синтаксиса, а затем - когда жмется "старт". А обычный скрипт выполняется примерно после середины полосы загрузки.
Но вообще да, в движке жестко указано 255 таблиц максимум, дальше InitHashtable просто не сработают.
DracoL1ch #11 - 2 недели назад (отредактировано ) 2

» WarCraft 3 / Деформации земли и утечки.

создаешь объект, спрашиваешь, какой у него handle
если меньше 0x100000 - беспокоиться не о чем, он локальный и сам разрушится, если не помешаешь ссылками на него (да и то не факт, что это влияет для них). тем паче, что даже в нативке указывается, вечная или нет деформация
этот (terraindeform) - локальный, если что.
DracoL1ch #12 - 2 недели назад 0
DracoL1ch #13 - 2 недели назад 0
DracoL1ch #14 - 2 недели назад 0

» WarCraft 3 / Фаталит карта

Игра имеет 32 слота под размещение данных вроде GetTriggerUnit()
Возможно, фатал случается, когда все 32 штуки заполняются из-за рекурсивного вызова, и идет попытка размещения поверх, ну либо какие-то еще внутренние структуры жестко ограничены сверху. Простой бесконечный цикл сам закрывается по истечению предоставленного лимита операций.
DracoL1ch #15 - 2 недели назад 1

» WarCraft 3 / Фаталит карта

лог фатала приложи
DracoL1ch #16 - 2 недели назад 2

» WarCraft 3 / Не отображается текст подсказки.

Не указан текст в подсказке для автокаста или отключения, короче, пробелами заполни поля описания, которые пустые хочешь
DracoL1ch #17 - 2 недели назад 0

» WarCraft 3 / Импорт моделей, архив .mix; насколько актуально

Не будут они качаться, разумеется, ведь у карты есть только один файл родной - сама карта. так что такие планы обречены
DracoL1ch #18 - 3 недели назад 2

» WarCraft 3 / Бафф Аура

У бафа уровень всегда 1, выше 0 *
DracoL1ch #19 - 3 недели назад 0

» WarCraft 3 / Отключение меню паузы и журнала

FrigatPlay
Я упрощенно объяснил, почему мало кто захочет подобным заморачиваться. Просто мимо проходил
DracoL1ch #20 - 3 недели назад 0

» WarCraft 3 / Отключение меню паузы и журнала

Блокируя возможность ливнуть, ты никому не помогаешь. Реализовать офк возможно, но не советую.
DracoL1ch #22 - 3 недели назад 0
DracoL1ch #23 - 3 недели назад 0

» WarCraft 3 / Тыкни где менять описание способность через мемхак!!!

не используй это. за строками надо чистить отдельно, иначе будут фаталы после игры, в любое время
DracoL1ch #24 - 4 недели назад 0

» WarCraft 3 / Триггеры и Нестандартные абилки

один триггер. потому что не надо будет 100 раз спрашивать, что за абилка
DracoL1ch #25 - 4 недели назад 2

» WarCraft 3 / Определить, является ли применяемая способность предметной

получение текущего приказа не требует от тебя нихера, тебе нужно, чтобы там не было "useitem", и всё
DracoL1ch #26 - 4 недели назад 4

» WarCraft 3 / Определить, является ли применяемая способность предметной

У абилок с предметов есть как минимум флаг в офсете 0x20 - 0x2000
Проверяй на него. Не знаю, может ли он появиться в других ситуациях. Вот и узнаешь :)
А еще GetUnitCurrentOrder, точно.
DracoL1ch #27 - 4 недели назад 3

» WarCraft 3 / Передача данных в другую функцию для группы

Далеко не все GetTrigger() имеют нормальный стек. GetSpellTargetUnit ломается нахер, если кастануть во время срабатывания другой спелл. Но в данном примере всё работает норм, ибо действие мгновенное
DracoL1ch #28 - 4 недели назад 0

» WarCraft 3 / Тип оружия - Нет

А нет у тебя альтернативной возможности. Нет ничего, чтобы отследить, закончил ли юнит махать руками, или прервал себе приказ каким-либо образом, в т.ч. неотслеживаемыми dropitem. А если подключать мемхак, то весь костыль становится, может, и удобным с какой-то точки зрения, но всё равно сомнительным.
DracoL1ch #29 - 4 недели назад 2

» WarCraft 3 / Тип оружия - Нет

А че толку от этого? Мемхак и так дает контроль над моментом нанесения урона и точкой завершения атаки, манипулируй уроном и будет тебе счастье
DracoL1ch #30 - 1 месяц назад 0

» WarCraft 3 / Ловим урон с Мемхаком

а, ну возможно. для типа урона точно нужна степень, тип атаки мне проверять не надобно было. ничего неожиданного не вижу в переписи, пару глобалок у близзов забрал, чтобы локалки не создавать
DracoL1ch #31 - 1 месяц назад 2

» WarCraft 3 / Ловим урон с Мемхаком

function OnDamageReceivedHookWorker takes nothing returns nothing
	local integer offset=Memory[pDamageEspData/4]
	local integer target=Memory[pDamageTarget/4]
	local integer hu
	local real bonusdmg
	local real flatbonusdmg
	if offset>0 then
		set offset=Memory[offset/4+2]//RMem(offset+0x8)
	endif
	if DamageIncrementer>8000 then
		set DamageIncrementer=10
	endif
	set DamageIncrementer=DamageIncrementer+1
	set RaindropBeenActivated=false
	if offset>0 then
		set DamageAttackTypes[DamageIncrementer]=Memory[offset/4+0x20/4]//RMem(offset+0x20)
		set DamageDamageTypes[DamageIncrementer]=Memory[offset/4+0x14/4]//RMem(offset+0x14)
		set DamageValues[DamageIncrementer]=mI2R(Memory[offset/4+0x10/4])//RMem(offset+0x10))
		
		set tt_unit2=I2Unit(target)//tt_unit2 = target
		if DamageValues[DamageIncrementer]>0.1 then
			set tt_unit1=I2Unit(RMem(offset))//tt_unit1 == source
//			call echo(GetUnitName(tt_unit1)+" damages "+GetUnitName(tt_unit2)+" for "+R2S(DamageValues[DamageIncrementer]))
		endif
		if true then
			set bj_meleeNearestMineDist=RMaxBJ(DamageValues[DamageIncrementer] - 120.,1.)
			set bj_randomSubGroupChance=DamageValues[DamageIncrementer]-bj_meleeNearestMineDist
			call WMem(offset+0x10,mR2I(bj_meleeNearestMineDist))
			set DamageValues[DamageIncrementer]=bj_meleeNearestMineDist
		endif
	endif
endfunction
Элементарно, ватсон. По аналогии тому, как здесь я меняю урон, меняешь и тип урона, переписывая через WMem. просто вспомни, что там степени двойки должны быть, в типе атаки/урона, а не голые числа. ну а про отрицательные значения хз
DracoL1ch #32 - 1 месяц назад 0

» WarCraft 3 / Освобождение хендла

А еще можно просто не юзать ульт паладина. Ну а мусорка в хештаблице у ТС и так, и так
DracoL1ch #33 - 1 месяц назад 0

» WarCraft 3 / Освобождение хендла

nvc123:
это не утечка, это сохранение id хендла, не более. на память не влияет от слова никак, разрушь объект - и сборщик его уберет.
DracoL1ch #34 - 1 месяц назад 0

» WarCraft 3 / Освобождение хендла

вариант №1 - не нулить переменные, оставляя утечки номеров хендлов. это безопасно, да, если знаешь, что делаешь.
№2 - ловить UNIT_DEATH и чистить за ним
DracoL1ch #35 - 1 месяц назад 0

» WarCraft 3 / Область сплэш атаки

ты про клив? в варкрафте все аое-способности, аое-уроны основаны на одной и той же функции. клив - это как нанесение урона в аое из jass, там damagePoint или че-то такое. Все они одинаковы и все могут бить за спину.
DracoL1ch #36 - 2 месяца назад 4

» WarCraft 3 / Хак на память Warcraft3

function GetAbilityLevelRequired takes integer abil returns integer
	local integer a
	if abil!=0 then
		set a=GetAbilityDataDefByIdCaching(abil)
		if a>0 then
			return RMem(a+0x40)
		endif
	endif
	return 0
endfunction
DracoL1ch #37 - 2 месяца назад 0

» WarCraft 3 / Хак на память Warcraft3

Ну так покажи код-то, чего стесняешься?
DracoL1ch #38 - 2 месяца назад 2

» WarCraft 3 / Хак на память Warcraft3

очевидно, что работало раньше, работает и сейчас, выделения синхронизируются автоматически, так что проблемы не будет
DracoL1ch #39 - 2 месяца назад 2

» WarCraft 3 / Хак на память Warcraft3

ClotPh:
=~DracoL1ch, ну песец, а на что я тогда трачу сегодняшний день =/
я не вижу у тебя строк в указанном примере
DracoL1ch #40 - 2 месяца назад 0

» WarCraft 3 / Хак на память Warcraft3

Ни в коем случае не используйте записывание строки через мемхак
Речь о том, чтобы заменить ссылку на строку где-либо своей ссылкой
Хотя смысл и не теряется, но у сборщика мусора явно едет крыша, и без рестарта вк будут рандомно выпадать краши. Так что пока без обновлений строк где-либо вообще
DracoL1ch #41 - 2 месяца назад 0
DracoL1ch #42 - 2 месяца назад 0

» WarCraft 3 / существует ли функция получения строки-пути пиктограммы юнита?

ну ваще-т разметка есть, базис есть. офк можно
но пока я доживу, чтобы выложить последний мх, вечность пройдет
DracoL1ch #43 - 2 месяца назад 0

» WarCraft 3 / Разбить строку по символу

да, так и делают
я где-то в прошлом видел либу с реализацией indexOf и пары других функций, но не могу найти че-то
DracoL1ch #44 - 2 месяца назад 0

» WarCraft 3 / Разбить строку по символу

substring в помощь
нет, это скриптовый язык, здесь никаких удобств
DracoL1ch #45 - 2 месяца назад 0

» WarCraft 3 / Мусор в памяти

нуллишь, чтобы на объект было 0 ссылок и его мог удалить сборщик мусора, освободив хендл
если объект не удаляется или тебе плевать на счетчики хендлов, можно вообще ничего не нуллить и всё будет норм
DracoL1ch #46 - 2 месяца назад 4

» WarCraft 3 / Мусор в памяти

не надо нулить игроков
DracoL1ch #47 - 2 месяца назад 0

» WarCraft 3 / Не работает

мудацкий провайдер у меня, ип хгм в бане роскомпозора и всем похер. прокси наше всё
сайт вообще не открывается, если что, а у автора могут быть проблемы с уже стилями и js, как вариант
DracoL1ch #48 - 2 месяца назад (отредактировано ) 0

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

ничего не понял. естественно, кто купил, тот и купил. если че не так, возвращай деньги и всё. иначе выдай предмет. изи. со спелбуками какая-то фигня
DracoL1ch #49 - 2 месяца назад 0

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

продавай юнитов, а не предметы
да, сложно, зато 100% точность
DracoL1ch #50 - 2 месяца назад 2

» WarCraft 3 / Attack once не прокает сферы

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