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, все одинаково, все объекты которые вы изменили в редакторе объектов хранятся в карте, про скорость и прочее бред.
Запомните - все параметры стандартных объектов хранятся в архивах игры и только там, вы со своей картой никак на них не влияете.
Ни какой разницы нет какие вы взяли ИД для своих самоделок, стоит вам изменить что у угодно у стандартной абилки - она мгновенно перемещается к вам в карту, в файл объектных данных, которые да не такие быстрые как слк таблицы.
32

» WarCraft 3 / Защита карты в 2019

MrGROX:
Модели и текстуры невозможно защитить
Да по большому счету их и не защищают, а делают сложно-добываемыми из карты. Как и собственна вся защита, она рассчитана чтобы ты срубил побольше доната пока её сломают и все, дальше новая версия с новой защитой.
32

» WarCraft 3 / Защита карты в 2019

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