DracoL1ch #1 - 15 часов назад 2
DracoL1ch #2 - 17 часов назад 3

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

Эм, ну да, на пассивках не тестил, ибо в этом плане сломанные Afla проще
Там просто нет этой функции на пассивках вообще, ясно откуда вылет.
» фикс под пассивки
по крайней мере часть пассивок
function InitCustomChargesData takes nothing returns nothing
	set ChargesIndicatorDataHandle=GetHandleId(ChargesIndicatorData)
	set Memory[pCustomChargesDisplayer/4 + 0] = 0x0824448B
	set Memory[pCustomChargesDisplayer/4 + 1] = 0x7C8B5756
	set Memory[pCustomChargesDisplayer/4 + 2] = 0x57500C24
	set Memory[pCustomChargesDisplayer/4 + 3] = 0x8DE8F18B
	set Memory[pCustomChargesDisplayer/4 + 4] = 0x85000372
	call WMem(pCustomChargesDisplayer+4*3 + 3,GameDLL+0x378A0 - (pCustomChargesDisplayer+4*3 + 3) - 4)
	set Memory[pCustomChargesDisplayer/4 + 5] = 0x397C75FF
	set Memory[pCustomChargesDisplayer/4 + 6] = 0x777F407E
	set Memory[pCustomChargesDisplayer/4 + 7] = 0x51605E5F
	set Memory[pCustomChargesDisplayer/4 + 8] = 0x4E8B9090
	set Memory[pCustomChargesDisplayer/4 + 9] = 0xCC40B830
	set Memory[pCustomChargesDisplayer/4 + 10] = 0xD0FF6F2D
	call WMem(pCustomChargesDisplayer+4*9 + 2,GameDLL+0x2DCC40)
	set Memory[pCustomChargesDisplayer/4 + 11] = 0x6974C085
	set Memory[pCustomChargesDisplayer/4 + 12] = 0x8B905159
	set Memory[pCustomChargesDisplayer/4 + 13] = 0x3476FFD8
	set Memory[pCustomChargesDisplayer/4 + 14] = 0x99996850
	set Memory[pCustomChargesDisplayer/4 + 15] = 0x10B89999
	call WMem(pCustomChargesDisplayer+4*14 + 2,ChargesIndicatorDataHandle)
	set Memory[pCustomChargesDisplayer/4 + 16] = 0xFF6F3CAB
	call WMem(pCustomChargesDisplayer+4*15 + 3,GameDLL+0x3CAB10)
	set Memory[pCustomChargesDisplayer/4 + 17] = 0x0CC483D0
	set Memory[pCustomChargesDisplayer/4 + 18] = 0x4C74C085
	set Memory[pCustomChargesDisplayer/4 + 19] = 0x90905990
	set Memory[pCustomChargesDisplayer/4 + 20] = 0x828B168B
	set Memory[pCustomChargesDisplayer/4 + 21] = 0x00000308
	set Memory[pCustomChargesDisplayer/4 + 22] = 0x53347E8B
	set Memory[pCustomChargesDisplayer/4 + 23] = 0xD0FFCE8B
	set Memory[pCustomChargesDisplayer/4 + 24] = 0x533476FF
	set Memory[pCustomChargesDisplayer/4 + 25] = 0x99999968
	set Memory[pCustomChargesDisplayer/4 + 26] = 0xB8D88B99
	call WMem(pCustomChargesDisplayer+4*25 + 1,ChargesIndicatorDataHandle)
	set Memory[pCustomChargesDisplayer/4 + 27] = 0x6F3CAA90
	call WMem(pCustomChargesDisplayer+4*27 + 0,GameDLL+0x3CAA90)
	set Memory[pCustomChargesDisplayer/4 + 28] = 0xC483D0FF
	set Memory[pCustomChargesDisplayer/4 + 29] = 0x51C88B0C
	set Memory[pCustomChargesDisplayer/4 + 30] = 0xCF8BD38B
	set Memory[pCustomChargesDisplayer/4 + 31] = 0x332E10B8
	set Memory[pCustomChargesDisplayer/4 + 32] = 0x6AD0FF6F
	call WMem(pCustomChargesDisplayer+4*31 + 1,GameDLL+0x332E10)
	set Memory[pCustomChargesDisplayer/4 + 33] = 0x8BD38B01
	set Memory[pCustomChargesDisplayer/4 + 34] = 0x2E40B8CF
	set Memory[pCustomChargesDisplayer/4 + 35] = 0xD0FF6F33
	call WMem(pCustomChargesDisplayer+4*34 + 2,GameDLL+0x332E40)
	set Memory[pCustomChargesDisplayer/4 + 36] = 0x5F07EB5B
	set Memory[pCustomChargesDisplayer/4 + 37] = 0x0008C25E
	set Memory[pCustomChargesDisplayer/4 + 38] = 0xC2615990
	set Memory[pCustomChargesDisplayer/4 + 39] = 0x90900008
//	call echo(Int2Hex(pCustomChargesDisplayer))

set Memory[pCustomChargesDisplayer/4 + 40] = 0x0824448B
	set Memory[pCustomChargesDisplayer/4 + 41] = 0x7C8B5756
	set Memory[pCustomChargesDisplayer/4 + 42] = 0x57500C24
	set Memory[pCustomChargesDisplayer/4 + 43] = 0x8390F18B
	set Memory[pCustomChargesDisplayer/4 + 44] = 0x859008C4
	set Memory[pCustomChargesDisplayer/4 + 45] = 0x397C75FF
	set Memory[pCustomChargesDisplayer/4 + 46] = 0x777F407E
	set Memory[pCustomChargesDisplayer/4 + 47] = 0x51605E5F
	set Memory[pCustomChargesDisplayer/4 + 48] = 0x4E8B9090
	set Memory[pCustomChargesDisplayer/4 + 49] = 0xCC40B830
	set Memory[pCustomChargesDisplayer/4 + 50] = 0xD0FF6F2D
	call WMem(pCustomChargesDisplayer+4*49 + 2,GameDLL+0x2DCC40)
	set Memory[pCustomChargesDisplayer/4 + 51] = 0x6974C085
	set Memory[pCustomChargesDisplayer/4 + 52] = 0x8B905159
	set Memory[pCustomChargesDisplayer/4 + 53] = 0x3476FFD8
	set Memory[pCustomChargesDisplayer/4 + 54] = 0x99996850
	set Memory[pCustomChargesDisplayer/4 + 55] = 0x10B89999
	call WMem(pCustomChargesDisplayer+4*54 + 2,ChargesIndicatorDataHandle)
	set Memory[pCustomChargesDisplayer/4 + 56] = 0xFF6F3CAB
	call WMem(pCustomChargesDisplayer+4*55 + 3,GameDLL+0x3CAB10)
	set Memory[pCustomChargesDisplayer/4 + 57] = 0x0CC483D0
	set Memory[pCustomChargesDisplayer/4 + 58] = 0x4C74C085
	set Memory[pCustomChargesDisplayer/4 + 59] = 0x90905990
	set Memory[pCustomChargesDisplayer/4 + 60] = 0x828B168B
	set Memory[pCustomChargesDisplayer/4 + 61] = 0x00000308
	set Memory[pCustomChargesDisplayer/4 + 62] = 0x53347E8B
	set Memory[pCustomChargesDisplayer/4 + 63] = 0xD0FFCE8B
	set Memory[pCustomChargesDisplayer/4 + 64] = 0x533476FF
	set Memory[pCustomChargesDisplayer/4 + 65] = 0x99999968
	set Memory[pCustomChargesDisplayer/4 + 66] = 0xB8D88B99
	call WMem(pCustomChargesDisplayer+4*65 + 1,ChargesIndicatorDataHandle)
	set Memory[pCustomChargesDisplayer/4 + 67] = 0x6F3CAA90
	call WMem(pCustomChargesDisplayer+4*67 + 0,GameDLL+0x3CAA90)
	set Memory[pCustomChargesDisplayer/4 + 68] = 0xC483D0FF
	set Memory[pCustomChargesDisplayer/4 + 69] = 0x51C88B0C
	set Memory[pCustomChargesDisplayer/4 + 70] = 0xCF8BD38B
	set Memory[pCustomChargesDisplayer/4 + 71] = 0x332E10B8
	set Memory[pCustomChargesDisplayer/4 + 72] = 0x6AD0FF6F
	call WMem(pCustomChargesDisplayer+4*71 + 1,GameDLL+0x332E10)
	set Memory[pCustomChargesDisplayer/4 + 73] = 0x8BD38B01
	set Memory[pCustomChargesDisplayer/4 + 74] = 0x2E40B8CF
	set Memory[pCustomChargesDisplayer/4 + 75] = 0xD0FF6F33
	call WMem(pCustomChargesDisplayer+4*74 + 2,GameDLL+0x332E40)
	set Memory[pCustomChargesDisplayer/4 + 76] = 0x5F07EB5B
	set Memory[pCustomChargesDisplayer/4 + 77] = 0x0008C25E
	set Memory[pCustomChargesDisplayer/4 + 78] = 0xC2615990
	set Memory[pCustomChargesDisplayer/4 + 79] = 0x90900008
endfunction

function VisualChargesSystem_InitHookOnAbility takes unit u, integer id returns nothing
	local integer a
	local integer b
	set a=GetUnitAbility(u,id)
	if a!=0 then
		if RMem(RMem(a)+0x1C4)==GameDLL+0x378A0 then
			call SaveUnlockWriteMemory(RMem(a)+0x1C4,pCustomChargesDisplayer,true,true)
		elseif RMem(RMem(a)+0x1C4)==GameDLL+0x20AF0 then
			call SaveUnlockWriteMemory(RMem(a)+0x1C4,pCustomChargesDisplayer+40*4,true,true)
		else
			call BJDebugMsg("Unknown base ability, hook is not possible")
		endif
	endif
endfunction
на выжег маны и уклонение работает, в случае чего плюнет ошибку и ниче не сделает.
DracoL1ch #3 - 23 часа назад (отредактировано ) 5

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

потому что у тебя вообще нет инита функций мемхака
которые включают в себя AllocateExecutableMemory
set pCallFastCallWith1Args=AllocateExecutableMemory(64000)
	
	set Memory[pCallFastCallWith1Args/4]=0

	set pCallFastCallWith2Args=pCallFastCallWith1Args + 1000
	set Memory[pCallFastCallWith2Args/4]=0
вот это всё
DracoL1ch #4 - 2 дня назад 2

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

ты в неё передаешь size, убедись что он достаточен (60к)
DracoL1ch #5 - 2 дня назад 2

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

это универсально для любой абилки
DracoL1ch #6 - 2 дня назад (отредактировано ) 3

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

там, где AllocateExecutableMemory вызывается, указан объем выделяемой памяти
поставь туда 70000 и вперед, остальное набирай дальше
пример использования
((код jass
call VisualChargesSystem_SetCharges(u,'A064',3)//записывает юниту в абилку колво зарядов
call VisualChargesSystem_Init(u,'A064')//активирует отображение зарядов на этом id на этом юните
call VisualChargesSystem_InitHookOnAbility(u,'A064')//включает хук на эту абилку (основу) для отображения
))
В коде _Init() рядом лежит отключатель, если отображать не нужн
InitCustomChargesData вызываешь где-то в мейн, не принципиально, она хук основной рисует
DracoL1ch #7 - 2 дня назад 3

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

ну вот код, внедрение должно быть довольно понятным
я понятия не имею, какие у вас там настройки, но выделенная через malloc память должна быть больше, чем 55000 :)
DracoL1ch #8 - 3 дня назад 8

» WarCraft 3 / Быстрее ли GetWidgetX чем GetUnitX?

одинаковы до долей процента
DracoL1ch #9 - 3 дня назад 2

» WarCraft 3 / Вопрос по оптимизации способностей

эффект в позиции никак не связан с даммикоми его настройкми
вопрос некорректен
DracoL1ch #10 - 5 дней назад 0

» WarCraft 3 / Сценарий > Параметры карты > "Набор игровых" Это ?

это параметр какие настройки дефолтных юнитов брать. типа пехотинец в 1.07 отличается по статам от 1.26
DracoL1ch #11 - 5 дней назад 0

» WarCraft 3 / RemoveUnit или KillUnit?

ужасов, конечно, не будет - просто при удалении юнита не сработают никакие триггеры на то, что он умер или покинул регион, что может ввести в замешательство какие-то системы. В чистой карте проблем не появится.
DracoL1ch #12 - 5 дней назад 0
DracoL1ch #13 - 1 неделю назад 0

» WarCraft 3 / RemoveUnit или KillUnit?

не надо никого ремувить, игра не тупая, сама ремувнет. Даже героя проще отдать нейтралам, чтобы убрать иконку, чем ремувить
DracoL1ch #14 - 1 неделю назад 0

» WarCraft 3 / Покупка wc3

Да, базу и тфт покупать отдельно по $10 каждую :)
DracoL1ch #15 - 1 неделю назад 0

» WarCraft 3 / Warcraft 3 Patch 1.29.2

по-идее да, протестите уже кто-нибудь, сам мучаюсь.
DracoL1ch #16 - 1 неделю назад 0

» WarCraft 3 / SetAbilityUbertip под первой версией мемхака=Fatal

RMem/WMem - вторая версия, есть еще третья и, скорее всего, последняя
function SetAbilityStringParam2 takes integer id, integer off, string newVal, integer lvl returns boolean
	local integer k=GetAbilityUIDefCaching(id)
	if k < 1 then
		return false
	endif
	set k=k+off
	set k=RMem(k)
	if k>0 then
		set k=k+lvl*4-4
		call AddNewOffsetToRestoreFast(k)
		call WMem(k,GetStringAddress(newVal))
		return true
	endif
	return false
endfunction
по аналогии легко сделать
DracoL1ch #17 - 2 недели назад 0

» WarCraft 3 / Глючный AddUnitToStock

Он на чистом жасс, с глобалками и т. п. Реально сможешь сам интегрировать
?
DracoL1ch #18 - 2 недели назад 2
DracoL1ch #19 - 2 недели назад 2

» WarCraft 3 / Глючный AddUnitToStock

нарисовалось, дал сссру на разборку, мб добавит
DracoL1ch #20 - 2 недели назад 4

» WarCraft 3 / I2R

жасс читает символы один раз, при загрузке, а дальше всё в байткоде и не имеет никакого значения
тестирование нужно запускать в разных тредах, чтобы не было накопительного эффекта, и без циклов, ибо варкрафт как-то суперплохо с ними работает и они сбивают все замеры. пруфы - www.hiveworkshop.com/threads/hashtable-vs-array.289909
у меня под это дело вынесен специальный скрипт, генерирующий две стены
function SpeedRun takes nothing returns nothing

locals
call fStartTimer()
variant 1
variant 1
variant 1
call BJDebugMsg("Variant 1: "+I2S(fStopTimer()))
call ExecuteFunc("SpeedRunX")
endfunction

function SpeedRunX takes nothing returns nothing

locals
call fStartTimer()
variant 2
variant 2
variant 2
call BJDebugMsg("Variant 2: "+I2S(fStopTimer()))
endfunction
DracoL1ch #21 - 2 недели назад 0

» WarCraft 3 / I2R

Ну просто функция - это официальный вариант, а можно перемножить
Затраты времени в мат операциях ничтожны по определению
DracoL1ch #22 - 2 недели назад 0

» WarCraft 3 / I2R

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

» WarCraft 3 / Лимит символов

Откуда у вас такие проблемы с запятыми? Ставьте кавычки, если редактор этого не делает сам.
1023 лимит для почти всех видов описаний, кроме предметов
на заголовки обычно 127 обрубают
итемы 512
DracoL1ch #24 - 2 недели назад 3

» WarCraft 3 / Продажа вещей

да есть нормальная возможность узнавать цену предмета и без мх
function ShoppingGarbage takes nothing returns boolean
	if GetItemPlayer(GetFilterItem())==Players[15] then
		call RemoveItem(GetFilterItem())
	endif
	return false
endfunction

function ShoppingClear takes nothing returns nothing
	call EnumItemsInRect(ShoppingSquare,Filter(function ShoppingGarbage),null)
endfunction

function GetItemGoldCostById takes integer id returns integer
	local integer gold=0
	local integer d=0
	if id==0 then
		return 0
	endif
	if not HaveSavedInteger(ItemCosts,'GOLD',id) then
		set gold=GetPlayerState(Players[15],PLAYER_STATE_RESOURCE_GOLD)
		set d=50000
		call SetPlayerState(Players[15],PLAYER_STATE_RESOURCE_GOLD,d)
		call AddItemToStock(ShoppingUnit,id,1,1)
		call IssueImmediateOrderById(ShoppingUnit,id)
		set d = d - GetPlayerState(Players[15],PLAYER_STATE_RESOURCE_GOLD)
		call SetPlayerState(Players[15],PLAYER_STATE_RESOURCE_GOLD,gold)
		call SaveInteger(ItemCosts,'GOLD',id,d)
		call ShoppingClear()
	else
		set d=LoadInteger(ItemCosts,'GOLD',id)
	endif
//call echo(GetObjectName(id)+" cost = "+I2S(d))
	return d
endfunction
ShoppingUnit стоит в ShoppingSquare и имеет абилку на продажу динамическую предметов, принадлежит 15му игроку, дальше дело техники. Ну и хт для ускорения работы
DracoL1ch #25 - 2 недели назад 2

» WarCraft 3 / Еще фатал после игры

ага, схожий, на Blkb
DracoL1ch #26 - 2 недели назад 0

» WarCraft 3 / Что такое PLAYER_STATE_OBSERVER?

это доступ к свойствам игрока, это булька, если 1 - игрок расценивается обсом, иначе обычным игроком
у обсов свои плюшки есть, много их, часть вырубается при установке OBS = 0
часть невозможно отключить, если отключать в ходе игры, только во время загрузки полноценная обрубка сработает
DracoL1ch #27 - 2 недели назад 6

» WarCraft 3 / Простой вопрос по ForceUIKey

rofl знатоки английского в треде. вообще=-то они предупреждают в каждой своей функции с LocalPlayer, что там надо аккуратнее с командами, ибо асинхронный код)
DracoL1ch #28 - 3 недели назад 0

» WarCraft 3 / Способности у закопавшихся существ

да вроде никак, юзай другие основы (?)
DracoL1ch #29 - 3 недели назад 7
DracoL1ch #30 - 3 недели назад 0

» WarCraft 3 / Как сделать, чтобы большие юниты рассталкивали маленьких

Вручать руну вв с вечным фейд таймом, пусть об предметы спотыкаются
DracoL1ch #32 - 3 недели назад 0

» WarCraft 3 / Нужна модель? - Вам сюда!

Мне нужны брейсеры энигмы из доты2
Брейсеры должны быть независимым эффектом, т.е. не саму модель энигмы менять, а создать новую, которая при аттаче окажется на руках и будет двигаться вместе с ними. Если же это невозможно, то ладно, можно и отдельной моделью целиком.
Вместе с ними нужна стилизованная черная дыра, с похожими эффектами, как на картинке. Дыра будет самостоятельным юнитом, модель должна висеть в воздухе слегка.
Предлагаю 500 рублей за брейсеры и 700 за дыру, по банковской карте. skype dracol1ch
Модель энигмы, к которой нужно лепить брейсеры, прикрепил к сообщению.
прикреплены файлы
DracoL1ch #33 - 4 недели назад 0

» WarCraft 3 / "Удаляемость" некоторых handle-объектов

скорее ломаются, потому что после этого записать в них ничего нельзя
DracoL1ch #34 - 4 недели назад 0

» WarCraft 3 / "Удаляемость" некоторых handle-объектов

Какие-то объекты могут создавать зависимости, осовбожегние хендла не значит, что объект чисто удален. В целом это всё уже из области псевдопрограммирования - не стоит волновться о таких мелочах. Create & Destroy работают достаточно хорошо. И да, объекты это все agent
type agent extends handle all reference counted objects
DracoL1ch #35 - 4 недели назад 4

» WarCraft 3 / Удаление событий из триггера.

TriggerRemoveAction
TriggerRemoveCondition
DracoL1ch #36 - 4 недели назад 6

» WarCraft 3 / Сравнение кода по производительности

любой штатный способ быстрее любого велосипеда. группа будет быстрее перебора массива юнитов. переменная лучше, чем постоянные GetFilterUnit()
если дашь мне код в чистом жассе, я могу прямо в лайве замеры сделать
DracoL1ch #37 - 4 недели назад 1

» WarCraft 3 / Связанные handle-объекты

ресет триггер сбрасывает счетчики TriggerEvalCount TriggerExecCount на 0 и ничего больше
DracoL1ch #38 - 4 недели назад 1

» WarCraft 3 / Связанные handle-объекты

нет понятия "подчиненный". Destroy триггера не чистит ни условия, ни действия, если вручную их не разбить через DestroyTriggerAction/Condition. Только вот те же Condition кэшируются и переиспользуются, а Action висят в памяти мертвым грузом при каждом создании.
DracoL1ch #39 - 4 недели назад 0

» WarCraft 3 / Оптимизировать способности РО НЕ через Widgetizer 1.9.0.3?

мне не нужно, чтобы они работали, я тексты попробую сравнить
DracoL1ch #41 - 4 недели назад 0

» WarCraft 3 / Выделение памяти при работе с хэш-таблицей

а в чем принципиальная разнциа будет? можно написать аналогичный интерфейс под таблицы, если так нравится конкретно этот синтаксис.
и нет никаких проблем с индексами, если следовать собственным правилам. В №2 всегда кастер, в №5 всегда уровень, там же булька - есть улучшение или нет, в №17 дамми и т.д.
DracoL1ch #42 - 4 недели назад 0

» WarCraft 3 / Оптимизировать способности РО НЕ через Widgetizer 1.9.0.3?

нет, не мемхачная, дефолтная
кинь карту, которая фаталит
и ту, которая не фаталит
DracoL1ch #43 - 4 недели назад 0

» WarCraft 3 / Оптимизировать способности РО НЕ через Widgetizer 1.9.0.3?

так там же галочка стоит, удалять неиспользуемое или не трогать, разве нет?
DracoL1ch #44 - 4 недели назад 0

» WarCraft 3 / Обнуление аргументов типа handle

вкероятно, потому что +- делается при назначении переменной значения, а аргументы не переназначаются
DracoL1ch #45 - 4 недели назад 2

» WarCraft 3 / Widgetizer 1.9.0.3

автор ушел лет 10 назад, сырцов нигде нет
DracoL1ch #46 - 4 недели назад (отредактировано ) 4

» WarCraft 3 / Выделение памяти при работе с хэш-таблицей

MultiboardGetItem создает игровой объект-ячейку, MultiboardReleaseItem разбивает её обратно. Если таблица навсегда. то выгоднее хранить объекты в массиве, чтобы не терять время на постоянные Get-Release + это позволяет в дальнейшем асинхронно менять содержимое ячеек, что невозможно, если использовать функции.
Ну а кто жрет память, моешь с помощью этой тулзы глянуть (может не запускаться, у меня работает) - кинуть в корень варика и запустить при работающей игре
прикреплены файлы
DracoL1ch #47 - 4 недели назад 6

» WarCraft 3 / Выделение памяти при работе с хэш-таблицей

хт не зло, а настоящий дар свыше
у тебя везде MultiboardGetItem, а кто будет MultiboardReleaseItem делать?
DracoL1ch #48 - 4 недели назад 0

» WarCraft 3 / Система покупки и продажи предмета

ну, очевидно, хардкодный баг, я не шарю
DracoL1ch #49 - 4 недели назад 2
DracoL1ch #50 - 4 недели назад 0

» WarCraft 3 / SetImageConstantHeight

на то, лепить высоту константой или нет