Cadogan, ну как, руками... Есть такой предмет - книга заклинаний, его активная способность, является аналогом "skill menu", вмещающим 11 способностей. Еще есть такая способность - поставка ресурсов, она представляет из себя пустышку которая требует за каст золото или дерево, самое простое отказатся от дерева и сделать из него скиллпоинты.
Есть функция проверки кол-ва ловкости героя, при этом можно посмотреть сколько ловкости от характеристик и сколько от предметов, исходя из кол-ва ловкости вручать предметные абилки на атаку.
Самое простое - апгрейды, триггерно повышать уровень улучшения которое будет действовать на героя, увы это не идеальный вариант, но один из самых просты. Так же вручать способности предметов на регенерацию здоровья \ маны.
Напрямую - никак, есть место только под 5 способностей. Делать свою систему прокачки способностей из спеллбука или какие либо еще способы, на подобии рпгшных карт.
Аксид бомба, юзаю аксид бомбу и чертика в качестве основы для триггерных заклинаний со снарядом. Есть еще вариант, даммик с атакой и ядовитой стрелой - но у дамика должны быть те же визуальные параметры атаки что у юнита (точка начала атаки и так далее), чтобы снаряд вылетал из руки а не из жопы.
На юнитов подвергнутых паузе, не работает счетчик лимита урона, на этом баге основана связка способностей одного героя из доты, а именно Tiny -stone giant.
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
Проверка на то что пересекает ли вектор окружность,
» WarCraft 3 / WFE - Warcraft Feature Extender
» WarCraft 3 / Как настроить бонусы от характеристик
» WarCraft 3 / Так почему же юнит удаляется?
» WarCraft 3 / Как настроить бонусы от характеристик
» WarCraft 3 / Отравленный кинжал
все вредные абилки наносят 0 ед. урона перед эффектом.
» WarCraft 3 / Отравленный кинжал
» WarCraft 3 / Получить имя функции в jass как строку
» RenderEdge / [RenderEdge] Memory Hack
» WarCraft 3 / По поводу ракетного залпа Механика
» RenderEdge / [RenderEdge] Memory Hack
А как их искать?
Интересен GetFrameAdress
» WarCraft 3 / можно ли сменить анимацию дистанционной атаки на юнита?
» WarCraft 3 / Возможна ли без JASS автоматическая добыча древесины?
» RenderEdge / [RenderEdge] Memory Hack
» RenderEdge / [RenderEdge] Memory Hack
» RenderEdge / [RenderEdge] Memory Hack
» WarCraft 3 / Код Jaas, изменение кода в уже готовой наработке.
(гугли по сайту чаво это и как включить)
» 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 / Атака всех видимых врагов заклинанием