32

» WarCraft 3 / WFE - Warcraft Feature Extender

Tailer007, ну собственно вот наработка - xgm.guru/p/wc3/memory-hack-with-natives
Так же я расколупал китайскую карту и выкполупал мемхак на 1.27+, оно реально работает. так что можно не боятся что как плейграунд перейдут все на 1.27 и все, хана, капец. Все евро PvPGN сидящие на 1.27b и 1.28a тоже доступны.
Конечно, это создает некоторые сложности. Но когда это останавливало модмейкеров Warcraft 3?
Ну а с загрузкой и выгрузкой длл большой вопрос, мне бы тоже хотелось несколько плюшек запилить, но как сделать так чтобы у игроков все это не висело в памяти после игры, да и вовсе на том же айкапе можно поиграть в карту с мемхаком, а потом пойти в айдотку и крашнутся, очень бы не хотелось делать такие подлянки игрокам.
32

» WarCraft 3 / WFE - Warcraft Feature Extender

Tailer007, Ну нативки можно добавить самим, IseFog же делал уже, так же нам нечего боятся старших патчей, есть мемхак на 1.27+, с записью и всем чем над. Правд на старшие патчи оффсетов маловато. Щяс пока думаю над выгрузкой dll при выходе из карты, то хотелось бы напихать улучшалок, но вот они будут висеть всю игру, прока юзер не закроет вар.
В дота хелпере кстати вроде есть восстановление памяти, полезная штука, если делать изменения вроде детекта урона или еще чего.
32

» WarCraft 3 / WFE - Warcraft Feature Extender

Bergi_Bear, интересно на гитхабе последняя версия или нет? Там же вроде быстрый синх звезли, и возможность трекабли двигать по экрану...
32

» WarCraft 3 / Как настроить бонусы от характеристик

Cadogan, ну как, руками... Есть такой предмет - книга заклинаний, его активная способность, является аналогом "skill menu", вмещающим 11 способностей. Еще есть такая способность - поставка ресурсов, она представляет из себя пустышку которая требует за каст золото или дерево, самое простое отказатся от дерева и сделать из него скиллпоинты.
32

» WarCraft 3 / Так почему же юнит удаляется?

Принятый ответ
Точно больше 100500 утечек нет? Эт хз как же надо было забить хт чтобы такое приключилось?
32

» WarCraft 3 / Как настроить бонусы от характеристик

Принятый ответ
  1. Есть функция проверки кол-ва ловкости героя, при этом можно посмотреть сколько ловкости от характеристик и сколько от предметов, исходя из кол-ва ловкости вручать предметные абилки на атаку.
  2. Самое простое - апгрейды, триггерно повышать уровень улучшения которое будет действовать на героя, увы это не идеальный вариант, но один из самых просты. Так же вручать способности предметов на регенерацию здоровья \ маны.
  3. Напрямую - никак, есть место только под 5 способностей. Делать свою систему прокачки способностей из спеллбука или какие либо еще способы, на подобии рпгшных карт.
32

» WarCraft 3 / Отравленный кинжал

Очень просто, интервал урона на 360 сек и все, все уроны в 0.
все вредные абилки наносят 0 ед. урона перед эффектом.
32

» WarCraft 3 / Отравленный кинжал

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

» WarCraft 3 / Получить имя функции в jass как строку

Принятый ответ
Нет, но есть тула - Jass SPy которая позволяет следить когда какая функция вызывается и какие аргументы...
32

» RenderEdge / [RenderEdge] Memory Hack

pro100master, лна находит штуки 4 оффсета, я то надеялся на побольше, т.к фрейм адресс мне неизвестен на 1.27б
32

» WarCraft 3 / По поводу ракетного залпа Механика

На юнитов подвергнутых паузе, не работает счетчик лимита урона, на этом баге основана связка способностей одного героя из доты, а именно Tiny -stone giant.
32

» RenderEdge / [RenderEdge] Memory Hack

Это все оффсеты? Чет маловато по сравнению с мх лича, ну лан....
А как их искать?
Интересен GetFrameAdress
32

» RenderEdge / [RenderEdge] Memory Hack

Да думал спросить его про методику поиска оффсетов для мемхака, на старшие патчи.
32

» WarCraft 3 / Система подсчета сыгранных игр

вот это посути ненужно:
if GetLocalPlayer()==p then
call StoreInteger( gc, "GamesCount", "P"+I2S(GetPlayerId(GetLocalPlayer())), S2I(s) ) // поидее вот так я меняю ячейку
endif
Ты же через preloader вызываешь запись в кеш, локально для каждого игрока.
как сохранять данные в файл? А очень просто:
call Preload("\")\ncall StoreInteger( InitGameCache("cache"), "GameCount", "P"+I2S(GetPlayerId(GetLocalPlayer())), S2I("Count")) \n//") // сохраним на каждый комп файл
Примерно так, мб ошибки в ситаксисе есть, но записать в ячейку кеша можно без смены имени игрока, прям так.
Проверить наличие файла на машине юзера можно с помощью нативки GetSoundFileDuration, но у файла должно быть звуковое расширение, остальное неважно. Preloader'у же пофиг на расширение файла.
32

» WarCraft 3 / Система подсчета сыгранных игр

смотри:
call StoreInteger( gc, "Ключ А", "Ключ Б", 0 )
Мы сохраняем в геймкешь как в хештаблицу значение, запись и чтение производится по паре произвольных строк, если в хештаблице в качестве ключей используются целые числа, то в кеше строки.
call StoreInteger( gc, "GamesCount", "P0", 0 ) //ячейка 1
call StoreInteger( gc, "GamesCount", "P1", 0 ) //ячейка 2
...
call StoreInteger( gc, "GamesCount", "P11", 0 ) //ячейка 12
Ты создаешь в кеше занятые ячейки, сам геймкешь похож на слк таблицу абилок.
потом локально ты записываешь в ячеку кеша нужные тебе данные:
If GetLocalPlayer() == Player(0) then
	call StoreInteger( gc, "GamesCount", "P0", 129 )
endif
Данным кодом на машине красного игрока мы записали в ячейку кеша данные.
Далее нам нужно выполнить синхронизацию.
call TriggerSyncStart()
if GetLocalPlayer() == Player(0) then
	call SyncStoredInteger(gc, "GamesCount", "P0")
endif
call TriggerSleepAction( 2.00 )
call TriggerSyncReady()
После чего толко ты можешь использовать данные.
Записать в кешь данные с машины игрока можно прямо в pld файле, не юзая никакие имена игроков и прочее говно.
call Preload("\")\ncall SetPlayerName(Player(15),\""+s+"\")\ncall ExecuteFunc(\"Test\")\n//") // сохраним на каждый комп файл 
Вместо ExecuteFunc можно написать StoreInteger( InitGameChache("data.w3v"), "GameCounts", "p"+I2S(GetPlayerId(GetLocalPlayer)), GetPlayerGameCount() )
Важно чтобы имя кеша в карте и pld файле и карте было одинаковым, в данном случаи "data.w3v", но само название разумеется никакой роли не играет.
32

» WarCraft 3 / Система подсчета сыгранных игр

Bergi_Bear, имя файла разное для файла.
pld - preload data file, генерируется preload gen end
Ищешь в памяти адресс строк которые должны попасть в pld скрипт и меняешь их, если необходимо.
Ну а так строчку с сохранением в кешь пожалуйста.
32

» WarCraft 3 / Система подсчета сыгранных игр

В карте создаем и инициализируем кешь, как его назвать неважно.
В кеше N ячеек, по 1 для каждой игрока, записывешь в каждую глобально 0 (любую одинаковую информацию), потом вызываешь прелоад - глобально, но путь к файлу разный, у всех игроков, при этом содержимое примерно одинаковое, кроме данных, при этом запись в кешь ты производишь прямо в pld файле, достаточно инициализировать кешь с тем же именем что в игре, ну а после синхронизация данных между игроками.
в прелоаде можно делать примерно так:
код
function PreloadFiles takes nothing returns nothing
    local gamecache gc = InitGameCache( "MMD.Dat" )
    local string st = "Runner"
    
    //===========================================================================
    //  preload runner id data 
    //===========================================================================
    call StoreInteger(gc,st,"0",'E000')     //1 - A
    call StoreInteger(gc,st,"1",'E001')     //2 - B
    call StoreInteger(gc,st,"2",'E002')     //3 - C
    call StoreInteger(gc,st,"3",'E003')     //4 - D
    call StoreInteger(gc,st,"4",'E004')     //5 - E
    call StoreInteger(gc,st,"5",'E005')     //6 - F
    call StoreInteger(gc,st,"6",'E006')     //7 - G
    call StoreInteger(gc,st,"7",'E007')     //8 - H
    call StoreInteger(gc,st,"8",'E008')     //9 - I
    call StoreInteger(gc,st,"9",'E009')     //10 - K
    call StoreInteger(gc,st,"10",'E00A')    //11 - J
    call StoreInteger(gc,st,"11",'E00B')    //12 - K
    call StoreInteger(gc,st,"12",'E00C')    //13 - L
    call StoreInteger(gc,st,"13",'E00D')    //14 - M
    call StoreInteger(gc,st,"14",'E00E')    //15 - N
    call StoreInteger(gc,st,"15",'E00F')    //16 - O
    call StoreInteger(gc,st,"16",'E00G')    //17 - P
    call StoreInteger(gc,st,"17",'E00H')    //18 - R
    call StoreInteger(gc,st,"18",'E00I')    //19 - S
    call StoreInteger(gc,st,"19",'E00J')    //20 - T
    call StoreInteger(gc,st,"20",'E00K')    //21 - U
    call StoreInteger(gc,st,"21",'E00L')    //22 - V
    call StoreInteger(gc,st,"22",'E00M')    //23 - W	

    call StoreInteger(gc,st,"Max",22)    //Максимум эльфиек
    set st = null
    set gc = null
endfunction
Кстати у тебя же есть мемхак, ты можешь модифицировать все что пишется в pld файл по своему хотению.
32

» WarCraft 3 / Polar

Как то уныло, побольше бы функций.
function Is2cc takes real r, real cx, real cy, real px1, real py1, real px2, real py2 returns boolean
        local real dx = 0.00 
        local real dy =  0.00 
        local real a =  0.00 
        local real b = 0.00  
        local real c = 0.00 
        
        set px1 = px1 - cx
        set py1 = py1 - cy
        set px2 = px2 - cx
        set py2 = py2 - cy
        set dx = px2 - px1
        set dy = py2 - py1
        set a = dx * dx + dy * dy
        set b = 2.00 * ( px1 * dx + py1 * dy )
        set c = px1 * px1 + py1 * py1 - r * r
        
        if ( -b < 0.00 ) then
            return ( c < 0.00 )
        elseif ( -b < ( 2.00 * a ) ) then
            return ( ( 4.0 * a * c - b * b ) < 0 )
        endif
        return ( a + b + c < 0 )
    endfunction
Проверка на то что пересекает ли вектор окружность,