По приказу и событию Ресурсы игрока изменились, мне почему то это очень напомнило одну наработку найма героев на подобии мода RD в DOTA, там было реализовано на основе способности поставка ресурсов + событие, юнит отдал приказ кастануть поставку ресурсов то
Создать триггер и добавить в него событие Золота игрока стало меньше чем было для каждого играющего игрока, у кого было стало меньше золота, тот игрок и выбрал героя.
Думаю тут можно отследить покупку точно таким же образом.
зависит от многих параметров
во первых нужно муи или нет
если муи то несколько с кучей могут привести к тому что кастанётся лишь 1 из спелов (ибо дамик может выполнить лишь 1 приказ одновременно)
во вторых
как часто применяются спеллы
если часто то выгоднее создать вначале даммика и держать вечно
иначе выгоднее создавать/удалять дамиков при необходимости
и ещё много всего
но как правило Много дамми юнитов с 1 спеллом выгоднее
Не совсем, некоторые приказы таки выполняются мгновенно, но большинство требует времени.
'Aslo' Slow (замедление) можно кастовать одним даммиком на всю группу юнитов сразу, а вот с молотком бурь такое не прокатит.
Дамми юнитам можно добавлять и удалять способности когда вздумается, не понимаю зачем тебе 100500 дамми и у каждого 1 или 10 скиллов?.
Для некоторых целей можно использовать 1 даммика , с заранее заготовленным скиллом - к примеру для проверки можно ли атаковать юнита в данный момент?
quq_CCCP, вот тебе кейс: урон наносится через 3 секунды после каста всем, кто был в радиусе. С общей глобальной группой это значит, что спелл non-mui, что есть плохо.
Ну причем тут отсроченные действия в группе? Я про мгновенные энумы, для всего остального есть ресайкл груп GroupUttils - ссылочка ( xgm.guru/p/wc3/venomanser )
Нет никакого смысла создавать каждый раз группы, просто создай вначале игры одну группу и занесите ее в глобальную переменную, перед использованием очищай.
Что за копипаст? Фигня какая то, напиши здесь что тебе нужно!
У тебя там ничего правильного нет, какой то копипаст примитивного диалога выбора, тебе нужно выбрать героев с помощью диалога - опиши очень подробно про то как ты видишь эту систему пика, мы поможем с реализацией.
Вопросы по функциям есть в статьях.
Конечно не кастуют, ии получает приоритет исходя из того кто большее всех дерется, кто напал или убивает союзника тот и есть наиболее подходящая цель.
Триггерно проверять нет ли в пределах досигаймости юнита без баффа, если есть то пытатся кастануть в него некоторый скилл - к примеру проклятие банши.
Есть вариант попроще, импортный common.j с аи нативками, была как то тема - суть в ии скриптах есть функции позволяющие узнать что по чем, хаков не требуется.
Ну а что мешает сделать все триггерно без Апгрейдов, просто сувать башне нужную способность, или изменять уровень способности - у способностей то уровень уменьшается на ура.
Ну есть же логи, через прелоад сохраняют.
Смотрите что происходило в момент фатала, какие юзались скиллы, кто что делал, следите за дамми юнитами.
Вот наработка xgm.guru/p/wc3/ifdebug-2
Так же было бы не лишним внести карту в студию, мб все очень банально?
События не удаляются, пока есть объект на котором они весят, но это просто целые числа, ничего они не забивают, яркий пример дота ( там еще и утечек по части триггеров куча) но катки по 70-80 мин. И все норм, на 100+ минут катках спектра и войд багается, и то из за кривого ресайкла групп.
Это в кривой доте Фрога, делаешь по человечески и все работает, а не как криворукий - создал триггер и оставил выключенным висеть.
Вот пример ссылочка по триггерам и их удалении на примере фрога, а так же проблемы связанные с триггерами.
Вроде же все разжевано на эту тему?
Или нужно что то еще?
Ну можно координаты камеры игрока. Но там нужен синк в кеше, чтобы небыло десинха, а это уже ни ГУИ.
Вот примитивный пример получение и сохранения координат камеры игрока:
scope PlayerRelated initializer InitPlayers
globals
force AllPlayers = null
trigger gg_trg_PlayerLeft = null
playerevent bj_enumPlayerEventId = null
player array PL
gamecache data
endglobals
function TriggerRegisterPlayerEventEnum takes nothing returns nothing
call TriggerRegisterPlayerEvent( bj_destInRegionDiesTrig, GetEnumPlayer( ), bj_enumPlayerEventId )
endfunction
function TriggerRegisterForceEvent takes trigger trig, force forforce, playerevent id returns nothing
set bj_destInRegionDiesTrig = trig
set bj_enumPlayerEventId = id
call ForForce( forforce, function TriggerRegisterPlayerEventEnum )
endfunction
function Trig_Player_Left_Actions takes nothing returns nothing
call ForceRemovePlayer( AllPlayers, GetTriggerPlayer( ) )
endfunction
function IsSlotPlayer takes player pl returns boolean
return GetPlayerSlotState( pl ) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController( pl ) == MAP_CONTROL_USER
endfunction
function InitPlayers takes nothing returns nothing
set AllPlayers = CreateForce( )
set gg_trg_PlayerLeft = CreateTrigger( )
set data = InitGameCache( "Data.w3v" )
set bj_forLoopAIndex = 0
loop
exitwhen bj_forLoopAIndex > bj_MAX_PLAYERS
set PL[bj_forLoopAIndex] = Player( bj_forLoopAIndex )
if IsSlotPlayer( PL[bj_forLoopAIndex] ) then
call ForceAddPlayer( AllPlayers, PL[bj_forLoopAIndex] )
call TriggerRegisterPlayerEvent( gg_trg_PlayerLeft, PL[bj_forLoopAIndex] , EVENT_PLAYER_LEAVE )
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
call TriggerAddAction( gg_trg_PlayerLeft, function Trig_Player_Left_Actions )
endfunction
endscope
function Trig_Get_Player_Screen_Cord_Conditions takes nothing returns boolean
return true
endfunction
function Trig_Get_Player_Screen_Cord_Actions takes nothing returns nothing
local player pl = GetTriggerPlayer( )
local real dx = 0.00
local real dy = 0.00
if GetLocalPlayer( ) == pl then
set dx = GetCameraEyePositionX( )
set dy = GetCameraEyePositionY( )
else
set dx = 0.00
set dy = 0.00
endif
call StoreReal( data, "Cord", "X", dx )
call StoreReal( data, "Cord", "Y", dy )
call TriggerSyncStart( )
if GetLocalPlayer( ) == pl then
call SyncStoredReal( data, "Cord", "X" )
call SyncStoredReal( data, "Cord", "Y" )
endif
call TriggerSleepAction( 2.00 )
call TriggerSyncReady( )
set dx = GetStoredReal( data, "Cord", "X" )
set dy = GetStoredReal( data, "Cord", "Y" )
// далее делаем с коорданатами камеры что хочется!
call PingMinimapEx( dx, dy, 3.00, 255, 255, 255, true )
endfunction
//===========================================================================
function InitTrig_Get_Player_Screen_Cord takes nothing returns nothing
set gg_trg_Get_Player_Screen_Cord = CreateTrigger( )
set bj_forLoopAIndex = 0
loop
exitwhen bj_forLoopAIndex > bj_MAX_PLAYERS
if IsPlayerInForce( PL[bj_forLoopAIndex], AllPlayers ) then
call TriggerRegisterPlayerChatEvent( gg_trg_Get_Player_Screen_Cord, PL[bj_forLoopAIndex], "-GetCord", true )
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
call TriggerAddCondition( gg_trg_Get_Player_Screen_Cord, Condition( function Trig_Get_Player_Screen_Cord_Conditions ) )
call TriggerAddAction( gg_trg_Get_Player_Screen_Cord, function Trig_Get_Player_Screen_Cord_Actions )
endfunction
Нафиг это гомно, сразу хештаблицу и все, темболее этот эксплоит не работает с переодическими твймерами, а не малое количество паразиьных действий намекает на низкую скорость этого алгоритма.
Не лагает, а загружается дольше - это да, лаги в мультиплеере связаны не с картой а с говвеным пингом до хоста, из за задержек и постоянных дисконектов.
А если лагает, то это скорее от хуёвого кода, моделей и т.д.?
Ну если начинает лагать через какое то время даже в сингле = код гомно.
Модели надо подгружать, ну неужели вы не слышали об этом?
Не лагает, а загружается дольше - это да, лаги в мультиплеере связаны не с картой а с говвеным пингом до хоста, из за задержек и постоянных дисконектов.
» WarCraft 3 / Отловить продажу предмета покупателю-продавцу
Создать триггер и добавить в него событие Золота игрока стало меньше чем было для каждого играющего игрока, у кого было стало меньше золота, тот игрок и выбрал героя.
Думаю тут можно отследить покупку точно таким же образом.
» WarCraft 3 / О оптимизации
'Aslo' Slow (замедление) можно кастовать одним даммиком на всю группу юнитов сразу, а вот с молотком бурь такое не прокатит.
Дамми юнитам можно добавлять и удалять способности когда вздумается, не понимаю зачем тебе 100500 дамми и у каждого 1 или 10 скиллов?.
Для некоторых целей можно использовать 1 даммика , с заранее заготовленным скиллом - к примеру для проверки можно ли атаковать юнита в данный момент?
» WarCraft 3 / Вспоминая битву червей
» WarCraft 3 / Обнуление переменной типа группа
» WarCraft 3 / Перерождение мертвых юнитов
» WarCraft 3 / Оставляют ли руны после себя мусор
С рунами\книгами и всеми PowerUp предметами нужно проделывать::
» WarCraft 3 / Обнуление переменной типа группа
» WarCraft 3 / Как сделать перенос золота?
Раздел - Буффер игры на гуях...
» WarCraft 3 / Исправьте ошибки
У тебя там ничего правильного нет, какой то копипаст примитивного диалога выбора, тебе нужно выбрать героев с помощью диалога - опиши очень подробно про то как ты видишь эту систему пика, мы поможем с реализацией.
Вопросы по функциям есть в статьях.
» WarCraft 3 / Удалить предмет и дать игроку его цену в золоте
» WarCraft 3 / ИИ не кастует автоматом
Триггерно проверять нет ли в пределах досигаймости юнита без баффа, если есть то пытатся кастануть в него некоторый скилл - к примеру проклятие банши.
Ред. quq_CCCP
» WarCraft 3 / Как передать переменную через GUI в другую функцию?
» WarCraft 3 / Удалить предмет и дать игроку его цену в золоте
» WarCraft 3 / Апгрейд способности отдельного здания
» WarCraft 3 / Улучшение требует места в инвентаре
» WarCraft 3 / Отследить Fatal Error
Смотрите что происходило в момент фатала, какие юзались скиллы, кто что делал, следите за дамми юнитами.
Вот наработка xgm.guru/p/wc3/ifdebug-2
Так же было бы не лишним внести карту в студию, мб все очень банально?
» WarCraft 3 / Как сменить анимацию юнита?
Так же может быть 100500 разных моделей.
Ред. quq_CCCP
» WarCraft 3 / Есть ли предел/потеря производительности от дофига ивентов
Это в кривой доте Фрога, делаешь по человечески и все работает, а не как криворукий - создал триггер и оставил выключенным висеть.
Вот пример ссылочка по триггерам и их удалении на примере фрога, а так же проблемы связанные с триггерами.
Вроде же все разжевано на эту тему?
Или нужно что то еще?
» WarCraft 3 / Воскрешение героя в триггерах
Раздел герой на гуях, действие Revive (instanty)
» WarCraft 3 / Отлов цели способности "Healing Ward"
GetUnitX\Y от GetSummonedUnit()
» WarCraft 3 / Система отлова нанесённого урона
JASS API в помощь.
» WarCraft 3 / Запомнить любую нужную точку на карте
Вот примитивный пример получение и сохранения координат камеры игрока:
» WarCraft 3 / Передача параметров в Таймер
» WarCraft 3 / Вопрос по поводу лагов
Модели надо подгружать, ну неужели вы не слышали об этом?
» WarCraft 3 / Вопрос по поводу лагов