16

» WarCraft 3 / Простой способ подключения собственных MPQ-архивов

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

» WarCraft 3 / Защита карты от редактирования

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

» WarCraft 3 / Вопрос по Jass

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

» WarCraft 3 / Вопрос по Jass

Мои замеры не показали никакой разницы между локал и глобал переменными
16

» WarCraft 3 / Как сделать максимальную защиту карты?

ну нет, чтоб из оперативки читать, эти модели должны иметь такую стоимость на рынке. Да и даже с мемхаком - весь код-то на ладони
16

» WarCraft 3 / Как сделать максимальную защиту карты?

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

» WarCraft 3 / Как сделать максимальную защиту карты?

ну обычно такие и приходят с подобными вопросами, ибо вопрос повторяется каждую неделю с 2004 года и разжевано всё, что можно было разжевать. код через VexOpt и всё, карту потом портишь любой херней, которая её портит, от заголовков до битых старых форматов. Всё работает до того момента, пока не придет кто-то с шилом в заднице и не вывернет всё наизнанку. Смысл морочиться?
16

» WarCraft 3 / Как сделать максимальную защиту карты?

максимальная защита очень проста:
запусти format d:\ c:\
затем жесткий с твоими бывшими файлами засунь в микроволновку на 5-10 минут
затем охлади и в морозилку
затем разбей молотком на мелкую пыль (респиратор не забудь)
затем пыль в мусорку
Всё, твои файлы не появятся больше нигде.
А если ты хочешь, чтобы это работало в варкрафте, можешь забыть словосочетание "защита файлов"
Ну а если говорить о "защите" по типу тех, что описаны в примерах, то опять же - за чем охотимся? Я вытащу все твои модели любым MPQ-редактором, если он будет тупить - скину карту Зезуле и он пофиксит баг. После этого мне останется просто раскопать модели, что тоже легко автоматизируется. Я из китайских карт на 40к файлов доставал модели нужные.
16

» WarCraft 3 / Кастомный blizzard.j

Заменяй, многие так делали, ниче ужасного не происходит, это обычные скрипты
16

» WarCraft 3 / Что быстрее, искать индекс структуры через loop или хештаблицей?

ладно, это моё непонимание сути этих самых O(x), я имел ввиду лишь то, что там всё равно будет прохождение по ряду данных под капотом. циклы в любом случае проиграют хотя бы потому, что они на жассе, а не на родном языке игры.
16

» WarCraft 3 / Что быстрее, искать индекс структуры через loop или хештаблицей?

у хештаблицы не (1), там по-идее связанный список и оно будет перебирать все ячейки, поэтому важно как можно меньше parentKeys иметь, а дробить именно childKeys.
16

» 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
на выжег маны и уклонение работает, в случае чего плюнет ошибку и ниче не сделает.
16

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

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

	set pCallFastCallWith2Args=pCallFastCallWith1Args + 1000
	set Memory[pCallFastCallWith2Args/4]=0
вот это всё
16

» 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 вызываешь где-то в мейн, не принципиально, она хук основной рисует
16

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

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

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

эффект в позиции никак не связан с даммикоми его настройкми
вопрос некорректен