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 не не слышал, ты можешь выдать видимость над всеми юнитами, сделать каст и тут же забрать видимость, все.
32

» WarCraft 3 / Существует ли событие наведения курсора на способность?

Насколько помню было что то такое, в дотахелпере. Хз возможно ли добратся до этого события с уровня jass, т.к это событие сугубо локальное.
32

» WarCraft 3 / RenderEdge(memhak)

Tumart, за хак считаться небудет, на ракапе стоит защита от карт мемхака, она обходится. Инфу можно купить у драколича.
32

» WarCraft 3 / Как работает функция ?!

HAMHAM, все зависит от игры и что ты грузишь.
Если у тебя скажем дота, то имеет смысл грузить данные после выбора героя а не всех сразу, тк в карте 112 героев из которых одновременно могут присутствовать только 10, поэтому при инициализации загружать всех бессмыслено. Делаем продажу дамиков с иконкой и описанием как у героя, после покупки даммика просим игрока подождать (пока пикнут союзники к примеру) и запускаем прелоад скрипт для конкретно этого героя, а затем создаем его.
32

» WarCraft 3 / Как работает функция ?!

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

» WarCraft 3 / Заставить ИИ кастовать заклинания из спеллбука

Bergi_Bear, ну так когда играет ИИ просто вручаешь кодом ему весь набор из спеллбука а спеллбук удаляешь.
32

» WarCraft 3 / Заставить ИИ кастовать заклинания из спеллбука

Bergi_Bear, а ии зачем нужен спеллбук? Когда ему пофиг на панель приказов, можно тыкать абилки прям так без спеллбука.
32

» WarCraft 3 / Slark Wars

Серьезно, Slark Wars, я думал что если сделать Seketon king wars - никто даже не запустит.
32

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

prog, в доте есть работники 1 в 1 как в архивах игры, и еще 100500 юнитов. Так что не имеет смысла морочится, проще всего работаь с нестандартными обьектами и произвести слк оптимизации.
32

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

PT153, все одинаково, все объекты которые вы изменили в редакторе объектов хранятся в карте, про скорость и прочее бред.
Запомните - все параметры стандартных объектов хранятся в архивах игры и только там, вы со своей картой никак на них не влияете.
Ни какой разницы нет какие вы взяли ИД для своих самоделок, стоит вам изменить что у угодно у стандартной абилки - она мгновенно перемещается к вам в карту, в файл объектных данных, которые да не такие быстрые как слк таблицы.