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'у же пофиг на расширение файла.
Мы сохраняем в геймкешь как в хештаблицу значение, запись и чтение производится по паре произвольных строк, если в хештаблице в качестве ключей используются целые числа, то в кеше строки.
Ты создаешь в кеше занятые ячейки, сам геймкешь похож на слк таблицу абилок.
потом локально ты записываешь в ячеку кеша нужные тебе данные:
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", но само название разумеется никакой роли не играет.
Bergi_Bear, имя файла разное для файла.
pld - preload data file, генерируется preload gen end
Ищешь в памяти адресс строк которые должны попасть в pld скрипт и меняешь их, если необходимо.
Ну а так строчку с сохранением в кешь пожалуйста.
В карте создаем и инициализируем кешь, как его назвать неважно.
В кеше 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 файл по своему хотению.
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
Проверка на то что пересекает ли вектор окружность,
HAMHAM, все зависит от игры и что ты грузишь.
Если у тебя скажем дота, то имеет смысл грузить данные после выбора героя а не всех сразу, тк в карте 112 героев из которых одновременно могут присутствовать только 10, поэтому при инициализации загружать всех бессмыслено. Делаем продажу дамиков с иконкой и описанием как у героя, после покупки даммика просим игрока подождать (пока пикнут союзники к примеру) и запускаем прелоад скрипт для конкретно этого героя, а затем создаем его.
Ну для начала есть целый набор функций, которые позволяют узнать что грузит игра скажем когда появляется герой, а так же функция которая сама сгенерирует скрипт со всеми preload которые нужны и все такое.
prog, в доте есть работники 1 в 1 как в архивах игры, и еще 100500 юнитов. Так что не имеет смысла морочится, проще всего работаь с нестандартными обьектами и произвести слк оптимизации.
PT153, все одинаково, все объекты которые вы изменили в редакторе объектов хранятся в карте, про скорость и прочее бред.
Запомните - все параметры стандартных объектов хранятся в архивах игры и только там, вы со своей картой никак на них не влияете.
Ни какой разницы нет какие вы взяли ИД для своих самоделок, стоит вам изменить что у угодно у стандартной абилки - она мгновенно перемещается к вам в карту, в файл объектных данных, которые да не такие быстрые как слк таблицы.
Да по большому счету их и не защищают, а делают сложно-добываемыми из карты. Как и собственна вся защита, она рассчитана чтобы ты срубил побольше доната пока её сломают и все, дальше новая версия с новой защитой.
DracoL1ch, ну многие долбят о протекте - типа в карту вложены бабки, мы не хотим чтобы это досталось нашим конкурентам (владельцы хост ботов соревнуются кто больше высосет денег из комьюнити).
Наверное китайцы страдают этим из за того же, не хотят делится источником дохода.
» WarCraft 3 / Система подсчета сыгранных игр
как сохранять данные в файл? А очень просто:
Проверить наличие файла на машине юзера можно с помощью нативки GetSoundFileDuration, но у файла должно быть звуковое расширение, остальное неважно. Preloader'у же пофиг на расширение файла.
» WarCraft 3 / Система подсчета сыгранных игр
потом локально ты записываешь в ячеку кеша нужные тебе данные:
Далее нам нужно выполнить синхронизацию.
Записать в кешь данные с машины игрока можно прямо в pld файле, не юзая никакие имена игроков и прочее говно.
Важно чтобы имя кеша в карте и pld файле и карте было одинаковым, в данном случаи "data.w3v", но само название разумеется никакой роли не играет.
Ред. quq_CCCP
» WarCraft 3 / Система подсчета сыгранных игр
pld - preload data file, генерируется preload gen end
Ищешь в памяти адресс строк которые должны попасть в pld скрипт и меняешь их, если необходимо.
Ну а так строчку с сохранением в кешь пожалуйста.
Ред. quq_CCCP
» WarCraft 3 / Система подсчета сыгранных игр
В кеше N ячеек, по 1 для каждой игрока, записывешь в каждую глобально 0 (любую одинаковую информацию), потом вызываешь прелоад - глобально, но путь к файлу разный, у всех игроков, при этом содержимое примерно одинаковое, кроме данных, при этом запись в кешь ты производишь прямо в pld файле, достаточно инициализировать кешь с тем же именем что в игре, ну а после синхронизация данных между игроками.
в прелоаде можно делать примерно так:
» WarCraft 3 / Система подсчета сыгранных игр
Ну нужен геймкешь и прелоад.
» WarCraft 3 / Система подсчета сыгранных игр
» WarCraft 3 / Polar
» WarCraft 3 / Атака всех видимых врагов заклинанием
» WarCraft 3 / Атака всех видимых врагов заклинанием
» WarCraft 3 / Существует ли событие наведения курсора на способность?
» WarCraft 3 / RenderEdge(memhak)
» WarCraft 3 / Существует ли событие наведения курсора на способность?
» WarCraft 3 / RenderEdge(memhak)
» WarCraft 3 / Как работает функция ?!
Если у тебя скажем дота, то имеет смысл грузить данные после выбора героя а не всех сразу, тк в карте 112 героев из которых одновременно могут присутствовать только 10, поэтому при инициализации загружать всех бессмыслено. Делаем продажу дамиков с иконкой и описанием как у героя, после покупки даммика просим игрока подождать (пока пикнут союзники к примеру) и запускаем прелоад скрипт для конкретно этого героя, а затем создаем его.
» WarCraft 3 / Как работает функция ?!
» WarCraft 3 / Заставить ИИ кастовать заклинания из спеллбука
» WarCraft 3 / Заставить ИИ кастовать заклинания из спеллбука
» WarCraft 3 / Полноценный Антимапхак.
» WarCraft 3 / Заставить ИИ кастовать заклинания из спеллбука
» WarCraft 3 / Slark Wars
» WarCraft 3 / Что лучше стандартный или нестандартный обьекты?
» WarCraft 3 / Что лучше стандартный или нестандартный обьекты?
Запомните - все параметры стандартных объектов хранятся в архивах игры и только там, вы со своей картой никак на них не влияете.
Ни какой разницы нет какие вы взяли ИД для своих самоделок, стоит вам изменить что у угодно у стандартной абилки - она мгновенно перемещается к вам в карту, в файл объектных данных, которые да не такие быстрые как слк таблицы.
» WarCraft 3 / Дисинх на Iccup при хостинге через бота на несколько серверов.
» WarCraft 3 / Защита карты в 2019
» WarCraft 3 / Защита карты в 2019
Наверное китайцы страдают этим из за того же, не хотят делится источником дохода.