Что за копипаст? Фигня какая то, напиши здесь что тебе нужно!
У тебя там ничего правильного нет, какой то копипаст примитивного диалога выбора, тебе нужно выбрать героев с помощью диалога - опиши очень подробно про то как ты видишь эту систему пика, мы поможем с реализацией.
Вопросы по функциям есть в статьях.
Конечно не кастуют, ии получает приоритет исходя из того кто большее всех дерется, кто напал или убивает союзника тот и есть наиболее подходящая цель.
Триггерно проверять нет ли в пределах досигаймости юнита без баффа, если есть то пытатся кастануть в него некоторый скилл - к примеру проклятие банши.
Есть вариант попроще, импортный 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
Нафиг это гомно, сразу хештаблицу и все, темболее этот эксплоит не работает с переодическими твймерами, а не малое количество паразиьных действий намекает на низкую скорость этого алгоритма.
Не лагает, а загружается дольше - это да, лаги в мультиплеере связаны не с картой а с говвеным пингом до хоста, из за задержек и постоянных дисконектов.
А если лагает, то это скорее от хуёвого кода, моделей и т.д.?
Ну если начинает лагать через какое то время даже в сингле = код гомно.
Модели надо подгружать, ну неужели вы не слышали об этом?
Не лагает, а загружается дольше - это да, лаги в мультиплеере связаны не с картой а с говвеным пингом до хоста, из за задержек и постоянных дисконектов.
Если охото сделать зарыды со счетчиком то тут 2 пути:
Юзать стандартные абилки со счетчиком зарядов, а их только 2 совы охотницы и вспышки орудийного расчета гномов. Увы первая цель декор онли, вторая цель точка онли, на юнита никак, кстати хорошо подходит под кастом блинки, кастуется почти мгновенно, быстрее канала, без всяких рукомаханий.
Использовать N способностей с разными иконками, на которых будет изображен счетчик, изменяя уровень способности или вовсе весть скилл через 'Eneg' (Техника, скилл механика, позволяет изменять поля скиллов) то можно создать скиллы со счетчиком, допустим пока есть заряды у скилла нету кулдауна, скилл последнего заряда имеет кулдаун.
Увы туча ипорта да и найти качественные иконки со счетчиком дело непростое.
Все скиллы наносят урон типом атаки Заклинание (ATTACK_TYPE_NORMAL) а тип урона влияет тока на блокираторы урона, негативные баффы наносят 0.00 ед. урона неизвестным типом урона (DAMAGE_TYPE_UNKNOWN или просто null), что ативирует событие - юнит получает урон, даже когда юнит неуязвим - нужно для агра юнитов к примеру.
Почти все DAMAGE_TYPE_FIRE\COLD и так далее одинаковы, их близзарды сделали для красоты - проверить на тип урона мы никак не можем, магический и магический а от холода он или огня никак, что собственно и не особо важно - результат один.
Ну тут только добавлать герою предметные абилки на повышение защиты, есть вроде же готовые системы добавления всего что только можно, хп-мп, защиту, скорость и так далее.
Гугли Custom Hero stat system.
Вот пример ссылочка
quq_CCCP,
1 - id приказа и id магии, которую юзает дамик различные
2 - да, может отличаться, не думал что может повлиять (надо проверить)
3 - это касается всех скилов? (допустим у меня есть скилл буран (dummy) и просто буран) Если я сначало скастую буран, то у даммика буран (dummy) может не сработать? (мог неправильно понять)
Джасс почти не знаю, сорри...
Речь только если у тебя канал с настройками и базовым ид приказа бурана, то да.
» 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 / Вопрос по поводу лагов
» WarCraft 3 / Инвиз у зданий.
» WarCraft 3 / Как сделать стаки способностей?
Ред. quq_CCCP
» WarCraft 3 / Тип урона у способностей
Почти все DAMAGE_TYPE_FIRE\COLD и так далее одинаковы, их близзарды сделали для красоты - проверить на тип урона мы никак не можем, магический и магический а от холода он или огня никак, что собственно и не особо важно - результат один.
» WarCraft 3 / Как триггерно сделать бонус защиты
Гугли Custom Hero stat system.
Вот пример ссылочка
» WarCraft 3 / Блокировка урона
» WarCraft 3 / Иногда не срабатывают некоторые спеллы
Ред. quq_CCCP
» WarCraft 3 / Иногда не срабатывают некоторые спеллы