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
Проверка на то что пересекает ли вектор окружность,
32

» WarCraft 3 / Атака всех видимых врагов заклинанием

Esea, ShareVision не не слышал, ты можешь выдать видимость над всеми юнитами, сделать каст и тут же забрать видимость, все.