32

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

Принятый ответ
WAGARAX, способности не сбивающие текущий приказ, их штук 7 на весь варкравт, все эти абилки без указания цели. Виндвалк, берсерк, божественный щит, иммолейшин, щит маны и все прочие щиты на вкл\выкл.
32

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

WAGARAX, Адресса и оффсеты, а так же инструкции. Все сугубо индивидуально. Потому что можно просто менять значения в структуре - тогда нужны оффсеты, а можно сделать "хук" - своего рода событие на выполнение кода в движке, которое запустит другой код, это уже инструкции.
32

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

Нужно будет прикрепить вначале темы, мб у кого еще проблемы?
32

» WarCraft 3 / Изменение характеристик через SLK таблицы

Принятый ответ
Из доты, в пустой карте сделай такой же скилл с тем же ИД, после сохрани карту и пройдись по ней виджитайзером, открой слк таблицу и целиком скрипируй поля абилки. Вставить думаю будет не проблема...
32

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

ScopteRectuS, там дело в кодировке или чем то еще связянным с отсупами и именами,
32

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

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

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

Ну карту с хуком на упешное заврешение атаки состряпал, но блин - пока фаталит, при ударе.... Щяс разберемся..
32

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

WAGARAX, нужен расширенный редактор JNGP у которого стандартный pjass.exe заменен на тот что приложен вначале темы, тогда карты с мемхаком из этой темы ( лучше берите из детекта урона ссылка ) и улыбайтесь, у вас есть мемхак, ну а как использовать его функции описано либо тут либо вы спрашивайте, вам обязательно ответят.
32

» WarCraft 3 / Fatal error в процессе игры...

DracoL1ch, напоминает одну карту где так баговали апгрейды, которые слижком уж дофига че меняли у героев.
32

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

sunset92, ну быть может, а мемхак какой юзаешь? Отсюда или из темы с детектом урона?
32

» WarCraft 3 / Разные типы диспелла

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

» WarCraft 3 / Заклинание: Blink Strike

NazarPunk:
неужели это так плохо?
Лезть напрямую в движок без API плохой тон.
quq_CCCP:
но по мне ты усложнил его через чур.
Чего ж я такого черезчур наовэркодил, если не секрет?
Ну как по мне, уж много импортных библиотек которые бы если честно "не усрались", про твой личный код ничего говорить не буду, тут на вкус и цвет все фломастеры разные, а вот таймер утилс - мусор, драколич подтвердит. Таймер самый легкий хендл в игре, аттач и ресайкл работает медленне чем просто создание таймера + хештаблица. Потом ты делаешь спелл на показ, в своей карте хоть на gamecache + RB, тут на публику.
Лично я считаю дурным тоном пихать 100500 сторонних либ в спеллы на показ + еще и сомнительные наработки.
NazarPunk, Насчет мемхака:
1 - ты сам себе осмысленно собрался выстрелить в ногу?
2 - если бы хотели, вы бы уже сидели и смотрели на надпись на экране "Перевидите 100usd на кошлек xxxxxxxxxxxxxxxxx, иначе вашим фалам хана!" а так это никому не интересно, потом написать уж прям тру вирус - не так уж и просто, потом "ЗАЧЕМ" - ? Ради потроллить пару человек сидеть и кодить много кода? Ну те кто страдает такими вот шуточками, на это попросту неспособен, а тот кто способен подобным никогда заниматься не будет.
32

» WarCraft 3 / Как установить аглоязычный редактор на лицензию?

Принятый ответ
Вопрос зачем? Все что ты оставил стандартным будет на английском языке у зарубежных игроков, что за глупости?
32

» WarCraft 3 / Заклинание: Blink Strike

NazarPunk, как почему, есть идеи как это сделать еще? С тем функционалом что подарил нам лич можно без проблем делать абилки по всем правилам варкравта, всякие копии атаки, модификаторы, и так далее, все что есть в игре у стандартных абилок - есть и у вас, неужели это так плохо?
Если вам жмет кошелек то можно найти с++ программиста, который напишет вам ддл и у вас будет то чего до этого в игре даже близко не было. Не надо ни каких лаунчеров, хренаунчеров, все работает как есть.
Спел довольно прикольно выглядит, но по мне ты усложнил его через чур.
ClotPh, можно вручать ядовитые стрелы герою и через TrowSpell кидать на врагов, механика будет как у вивера в доте.
32

» WarCraft 3 / Ошибка при загрузке карты в World Edit

Принятый ответ
В мпк редакторе открой карту да удали модель, вот и все.
32

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

Хук на событие - Юнит успешно завершает атаку.
код
  unit array GlobalUnitArrayForDataPassing
    integer pGlobalUnitArrayForDataPassing=0
 
function PresetSomeArray takes nothing returns nothing
   
    set GlobalUnitArrayForDataPassing[1]=null
    set GlobalUnitArrayForDataPassing[1099]=null
    return
endfunction
 
function TypecastUnitArray takes nothing returns nothing
    local integer GlobalUnitArrayForDataPassing
endfunction
//# +nosemanticerror
function GetUnitArrayAddress takes nothing returns integer
    return GlobalUnitArrayForDataPassing
endfunction
 
function OnAttackDamageCalculationHook takes nothing returns nothing
    local integer isource=GetDataFromDataArray1(65)
    local integer itarget=GetDataFromDataArray1(66)
    local integer result=GetDataFromDataArray1(68)
    if result==1 or SimulatedAttackCounter>0 then
//  in case if result==0 we forced this attack via trigger, but have to push the target manually then
        set tt_unit1=GetDataFromUnitArray(3)//source
        set tt_unit2=GetDataFromUnitArray(4)//target
        if HaveSavedHandle(MHT,GetHandleId(tt_unit1),GetHandleId(tt_unit2)) then
            call ExecuteFunc("AttackReadyToGoInit")
        else
            if GetDataFromDataArray1(67)=='item' then//targettype
                set tt_widget1=tt_unit2
                call ExecuteFunc("ItemAttackReadyToGoInit")
            endif
        endif
    endif
endfunction
 
function InitAttackDamageCalculationHook takes integer pTriggerHandle returns nothing
    local integer old1=RMem(pMeleeAttackCatcher)
    local integer old2=RMem(pMeleeAttackCatcher+4)
    local integer oldprotection = ChangeOffsetProtection(pMeleeAttackCatcher,8,0x40)
//call echo("jook "+Int2Hex(pReservedMemoryForMeleeAttackHook))
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+0]=0x30498B60
    set Memory[pReservedMemoryForMeleeAttackHook/4+1]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+2]=0xE80B8900
    call WMem(pReservedMemoryForMeleeAttackHook+5,DataArray1Address+260)// source address
    set Memory[pReservedMemoryForMeleeAttackHook/4+3]=(GameDLL+0x2DCC40)-(pReservedMemoryForMeleeAttackHook+12)-4
    set Memory[pReservedMemoryForMeleeAttackHook/4+4]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+5]=0x61038900
    call WMem(pReservedMemoryForMeleeAttackHook+17,pGlobalUnitArrayForDataPassing+12)// source GlobalUnitArrayForDataPassing[3]
    set Memory[pReservedMemoryForMeleeAttackHook/4+6]=0x6C798160
    set Memory[pReservedMemoryForMeleeAttackHook/4+7]=0xFFFFFFFF
    set Memory[pReservedMemoryForMeleeAttackHook/4+8]=0xC1833a74
    set Memory[pReservedMemoryForMeleeAttackHook/4+9]=0x0000E86C
    set Memory[pReservedMemoryForMeleeAttackHook/4+10]=0xC88B0000
    call WMem(pReservedMemoryForMeleeAttackHook+38,(GameDLL+0x4786B0)-(pReservedMemoryForMeleeAttackHook+38)-4)
    set Memory[pReservedMemoryForMeleeAttackHook/4+11]=0x000000B8
    set Memory[pReservedMemoryForMeleeAttackHook/4+12]=0x8B088900
    call WMem(pReservedMemoryForMeleeAttackHook+45,DataArray1Address+264)//66 target address
    set Memory[pReservedMemoryForMeleeAttackHook/4+13]=0x1C5B8B19
    set Memory[pReservedMemoryForMeleeAttackHook/4+14]=0x00BBD3FF
    set Memory[pReservedMemoryForMeleeAttackHook/4+15]=0x89000000
    call WMem(pReservedMemoryForMeleeAttackHook+59,DataArray1Address+268)//67 target type
    set Memory[pReservedMemoryForMeleeAttackHook/4+16]=0x00E89003
    set Memory[pReservedMemoryForMeleeAttackHook/4+17]=0xBB000000
    call WMem(pReservedMemoryForMeleeAttackHook+67,(GameDLL+0x2DCC40)-(pReservedMemoryForMeleeAttackHook+67)-4)
    set Memory[pReservedMemoryForMeleeAttackHook/4+18]=pGlobalUnitArrayForDataPassing+16//4 target handle
    set Memory[pReservedMemoryForMeleeAttackHook/4+19]=0x00BB0389
    set Memory[pReservedMemoryForMeleeAttackHook/4+20]=0xC7000000
    call WMem(pReservedMemoryForMeleeAttackHook+79,DataArray1Address+272)//68 result
    set Memory[pReservedMemoryForMeleeAttackHook/4+21]=0x00000103
    set Memory[pReservedMemoryForMeleeAttackHook/4+22]=0x0BEB9000
    set Memory[pReservedMemoryForMeleeAttackHook/4+23]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+24]=0x0003C700
    call WMem(pReservedMemoryForMeleeAttackHook+93,DataArray1Address+272)//68 result
    set Memory[pReservedMemoryForMeleeAttackHook/4+25]=0x61000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+26]=0x90909060
    set Memory[pReservedMemoryForMeleeAttackHook/4+27]=0x00000068
    set Memory[pReservedMemoryForMeleeAttackHook/4+28]=0x0000B800
    call WMem(pReservedMemoryForMeleeAttackHook+27*4+1,pTriggerHandle)
    set Memory[pReservedMemoryForMeleeAttackHook/4+29]=0xD0FF0000
    call WMem(pReservedMemoryForMeleeAttackHook+28*4+2,pTriggerExecute)
    set Memory[pReservedMemoryForMeleeAttackHook/4+30]=0x6104C483
    set Memory[pReservedMemoryForMeleeAttackHook/4+31]=0x8B575651
    set Memory[pReservedMemoryForMeleeAttackHook/4+32]=0xB8BE8BF1
    set Memory[pReservedMemoryForMeleeAttackHook/4+33]=0x8B000002
    set Memory[pReservedMemoryForMeleeAttackHook/4+34]=0x00ACBE84
    set Memory[pReservedMemoryForMeleeAttackHook/4+35]=0x84030000
    set Memory[pReservedMemoryForMeleeAttackHook/4+36]=0x0000A0BE
    set Memory[pReservedMemoryForMeleeAttackHook/4+37]=0x8C860300
    set Memory[pReservedMemoryForMeleeAttackHook/4+38]=0x8B000000
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+39]=0x00008C8E
    set Memory[pReservedMemoryForMeleeAttackHook/4+40]=0x988E8900
    set Memory[pReservedMemoryForMeleeAttackHook/4+41]=0xC7000000
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+42]=0x00008C86
    set Memory[pReservedMemoryForMeleeAttackHook/4+43]=0x00000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+44]=0xBE8C8B00
    set Memory[pReservedMemoryForMeleeAttackHook/4+45]=0x00000094
    set Memory[pReservedMemoryForMeleeAttackHook/4+46]=0x88BE948B
    set Memory[pReservedMemoryForMeleeAttackHook/4+47]=0xE9000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+48]=GameDLL + 0xC697E - (pReservedMemoryForMeleeAttackHook/4+48)*4 - 4
   
    set Memory[pMeleeAttackCatcher/4]=0xE9E9E9E9
    set Memory[pMeleeAttackCatcher/4+1]=0x90909090
   
    call WMem(pMeleeAttackCatcher + 1, pReservedMemoryForMeleeAttackHook - pMeleeAttackCatcher - 5 )
   
    call ChangeOffsetProtection(pMeleeAttackCatcher,8,oldprotection)
   
   
//  pushad
//mov ecx,[ecx+30]
//mov ebx,13455E1C
//mov [ebx],ecx
//call Game.dll+2DCC40
//mov ebx,1824008C
//mov [ebx],eax
//popad
//pushad
//cmp [ecx+6C],FFFFFFFF
//je 177F8918
//add ecx,6C
//call Game.dll+4786B0
//mov ecx,eax
//mov eax,13455E20
//mov [eax],ecx
//mov ebx,[ecx]
//mov ebx,[ebx+1C]
//call ebx
//mov ebx,13455E24
//mov [ebx],eax
//nop
//call Game.dll+2DCC40
//mov ebx,18240090
//mov [ebx],eax
//mov ebx,13455E28
//mov [ebx],00000001
//nop
//jmp 177F8923
//mov ebx,13455E28
//mov [ebx],00000000
//popad
//pushad
//nop
//nop
//nop
//push 00101D61
//mov eax,Game.dll+3C3F40
//call eax
//add esp,04
//popad
//push ecx
//push esi
//push edi
//mov esi,ecx
//mov edi,[esi+000002B8]
//mov eax,[esi+edi*4+000000AC]
//add eax,[esi+edi*4+000000A0]
//add eax,[esi+000000B0]
 
//mov ecx,[esi+b0]
//mov [esi+bc],ecx
//mov [esi+b0],0
//
//mov ecx,[esi+edi*4+00000094]
//mov edx,[esi+edi*4+00000088]
//jmp Game.dll+C697E
 
endfunction
 
//mmehack init
set pReservedMemoryForMeleeAttackHook = pCallFastCallWith1Args + 35000//+200
 
//main
set pGlobalUnitArrayForDataPassing=RMem(GetUnitArrayAddress() +0xC)
set t=CreateTrigger()
    call TriggerAddAction(t,function OnAttackDamageCalculationHook)
    call InitAttackDamageCalculationHook(GetHandleId(t))
Вдруг кому то еще пригодится.
32

» WarCraft 3 / Как отследить убивающего юнита в таймере?

PT153, ну потому что события вешаются на обьект, к примеру на юнита, а не только на триггер. TriggerRegister*** возвращает triggerevent.
Ну подробнее DracoL1ch, поведает.
32

» WarCraft 3 / Как отследить убивающего юнита в таймере?

Clamp, ну я же говорю, плз пример в студию, то бывают не совсем примитивные задачи, мне нужно точно узнать что юнит умер EVENT_WINGED_DETAH, проверить на полученный урон в 0 ед, а так же проверить приказ без указания цели, таких юнитов может быть одновременно до 10.
DracoL1ch, боятся за производительность, триггер же тяжелее таймера + евенты не удаляются.
Хотя я когда проверял на карте где 30 юнитов херачили друг-друга, плодились и умирали на протяжении 15 минут, проблем чето не заметил, ни с памятью ни с числом хендлов...
32

» WarCraft 3 / Как отследить убивающего юнита в таймере?

Clamp, эмм - сударь, давайте я вам нарежу задач, а вы мне расскажите как сделать не сложнее статическим триггером? Я конечно понимаю что делать как у фрога ради анимации героя спустя 0.5 сек триггер с событием время истекло это глупость, но бывают случаи когда тебе нужно следить за конкретным юнитом особенно тщательно, события урона, смерти, получения приказов.
32

» WarCraft 3 / Что это за типы урона такие и чем они отличаются?

Принятый ответ
Тип урона, есть целая статья, ссылка
Ну большая часть - копии, особо ни на че не влияют, некоторые влияют, на взаимодействие с резистами.
Их все можно проверить мемхаком, но увы близзарды не доделали функции для jass и просто так сделать проверки на тип атаки, урона и оружия низя.
32

» WarCraft 3 / WFE - Warcraft Feature Extender

А какие там проблемы с инжектом? Вар3 процесс не удается найти? Или что антивири ругаются?
32

» WarCraft 3 / WFE - Warcraft Feature Extender

Tailer007, я ктому что нашлись люди и переделали карты на мемхак, подрубили античиты. Был бы не интересен - не старались бы, насчет не очень дружит - дружит не очень он только с сjass, но это всего то лишь несколько функций, ибо весь мемхак это typecast функции да сломанный массив, далее уже простые функции чтения \ записи которые ничего такого не используют, никак не багуют с софтом, работают в редакторе с надстройками.
Насчет 95 винды мб это о стиле окон, сколько воды то утекло с тех пор.... Игры тех лет то частенько не запускаются...