т.е. ты не уверен что-ли?)
в основном причина как раз таки в утечках и постоянно увеличивающихся кол-во объектов (не утечек: юниты, декорации, предметы и т.д.)
можешь в принципе попробовать перевести триггеры на джасс, мне уже писали по этому поводу, и перевод на нормальный джасс спасало от лагов, задержек, фризов, называй как хочешь
может там в целом беда с логикой в действиях происходит
если на карте увеличивается кол-во юнитов, а твои периодики перебирают юнитов на карте, то думаю логическая цепочка говорит сама за себя, с проблемой не очень хорошо ознакомил нас, нужно больше подробностей
у меня есть переменная с id применённой способности
чего? ты просто выдумал какое-то другое применение этой нативке или что?
она конвертирует целочисленный приказ в строковой, НЕ ПРИКАЗ ВЗЯТЫЙ ИЗ РАВКОДА АБИЛКИ
есть событие юнит завершает подготовку боевой единицы, юнит триггера это тот, кто создал юнита, подготовленный юнит это тот, кто появился, ему и меняешь владельца
сейчас вникся в тему, нафиг тебе код на джассе я искренне не пойму, это на гуи в 2 строчки делается
насчёт сути
что хочу узнать - есть ли способ по id приказа добавить способность другому юниту и отдать приказ на применение?
бд делай, абилок и их приказов
globals
integer SpellID
string SpellOrder
integer SpellTargetType
constant integer Stomp = 1
endglobals
function init takes nothing returns nothing
set SpellID[0] = 'A000'
set SpellOrder[0] = "thunderbolt"
set SpellTargetType[0] = 0 // 0 - target, 1 - no target, 2 - point
set SpellID[Stomp] = 'A001'
set SpellOrder[Stomp] = "stomp"
set SpellTargetType[Stomp] = 1
endfunction
function myfunc takes unit u returns nothing
local integer i = GetRandomInt( 0, 1 )
call UnitAddAbility( u, SpellID[i] )
if SpellTargetType[i] == 0 then
call IssueTargetOrder( u, SpellOrder[i], GetNearUnitInRange( ... ) )
elseif SpellTargetType[i] == 1 then
call IssueImmediateOrder( u, SpellOrder[i] )
elseif SpellTargetType[i] == 2 then
call IssuePointOrder( u, SpellOrder[i], x, y )
endif
endfunction
function Trig_Order_Actions takes nothing returns nothing
local string s = GetUnitName(GetTriggerUnit()) + udg_Sep
local string order = OrderId2String(GetIssuedOrderId())
local string target = ""
if order != null and order != "" then
set s = s + order + " -- " + I2S(GetIssuedOrderId())
else
set s = s + I2S(GetIssuedOrderId())
endif
if GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER then
if GetOrderTargetDestructable() != null then
set target = "target destructable -- " + GetDestructableName(GetOrderTargetDestructable())
elseif GetOrderTargetItem() != null then
set target = "target item -- " + GetItemName(GetOrderTargetItem())
else
set target = "target unit -- " + GetUnitName(GetOrderTargetUnit())
endif
elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER then
//set target = "target point -- (" + R2SX(GetOrderPointX()) + ", " + R2SX(GetOrderPointY()) + ")"
endif
if target != "" then
set s = s + udg_Sep + target
endif
//call Message(10., s)
endfunction
//===========================================================================
function InitTrig_Order takes nothing returns nothing
set gg_trg_Order = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_ORDER )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerAddAction( gg_trg_Order, function Trig_Order_Actions )
endfunction
ну типа как-то так, не уверен в работоспособности потому что не проверял
раскрыть
globals
destructable bj_lastFilterDestructable = null
destructable nearDestructable = null
real g_distance
real g_x
real g_y
endglobals
function NearDestructable takes nothing returns nothing
local real x
local real y
local real d
set bj_lastFilterDestructable = GetEnumDestructable( )
set x = GetDestructableX( bj_lastFilterDestructable )
set y = GetDestructableY( bj_lastFilterDestructable )
set d = SquareRoot( ( g_x - x ) * ( g_x - x ) + ( g_y - y ) * ( g_y - y ) )
if d < g_distance then
set g_distance = d
set nearDestructable = bj_lastFilterDestructable
endif
endfunction
function GetNearDestructable takes real x, real y, real radius, boolexpr b returns destructable
local rect r = Rect( x - radius, y - radius, x + radius, y + radius )
set nearDestructable = null
set g_distance = radius
set g_x = x
set g_y = y
call EnumDestructablesInRect( r, b, function NearDestructable )
call RemoveRect( r )
set r = null
return nearDestructable
endfunction
в булекспр можешь кинуть любое условие для фильтрации деструктов, т.е. например
если "летящий шарик" это юнит, то делай его изначально плавающим, добавляя абилку 'Arav'
высоту ты можешь узнать через общепринятую функцию:
globals
location LFZ = Location( 0.00, 0.00 )
endglobals
function GetLocZ takes real x, real y returns real
call MoveLocation( LFZ, x, y )
return GetLocationZ( LFZ )
endfunction
1 - у юнита есть строка, "награда за уничтожение" и её грани (доп. рандомного кол-ва золота), для игроков в триггерах нужно включить награду за убийство
2 - таблица/формула опыта в константах
3 - если юнит стоит на карте, можно щёлкнуть по нему и выбрать выпадающие предметы, иначе - триггерно (при смерти юнита создавать на его месте предмет)
JIEGEND, ну так используй проверку на тип юнита, очевидно .-.
если юнит равен рыцарю, добавить +2 к переменной, если юнит пехотинец, +1
и нафиг ты выбираешь всех юнитов в области с действием выбрать всех юнитов в области?
у тебя в области могут быть 100 юнитов и получится, что ты сделал 99 лишних действий, т.е. тебе этот цикл вообще нафиг не нужен
» WarCraft 3 / Как установить альтернативную анимацию смерти?
» WarCraft 3 / нестандартная модель летает в воздухе когда ставишь
знакомое, я тогда даже не знал про мдлвис и декорации опускать не умел)
через ctrl+page down, ctrl+page up можно опустить/поднять декорацию
» WarCraft 3 / Задержка в карте.
в основном причина как раз таки в утечках и постоянно увеличивающихся кол-во объектов (не утечек: юниты, декорации, предметы и т.д.)
» WarCraft 3 / Задержка в карте.
» WarCraft 3 / OrderId2String
» WarCraft 3 / OrderId2String
» WarCraft 3 / OrderId2String
» WarCraft 3 / OrderId2String
она конвертирует целочисленный приказ в строковой, НЕ ПРИКАЗ ВЗЯТЫЙ ИЗ РАВКОДА АБИЛКИ
» WarCraft 3 / Превращеия Юнитов из казармы из Своих в союзных
» WarCraft 3 / отлов приказа способности, добавление и каст
» WarCraft 3 / Высота подъема
» WarCraft 3 / отлов приказа способности, добавление и каст
насчёт сути бд делай, абилок и их приказов
» WarCraft 3 / отлов приказа способности, добавление и каст
» WarCraft 3 / Высота подъема
когда выставляешь высоту юнита, в аргументе rate ставь 0 для мгновенного изменения высоты, а не 10000000
Ред. rsfghd
» WarCraft 3 / GetClosestDestructable
» WarCraft 3 / Вместо своей модельки просто тень.
» WarCraft 3 / Высота подъема
высоту ты можешь узнать через общепринятую функцию:
» WarCraft 3 / During The Dark Portal
» WarCraft 3 / Помощь по выпадении лута
2 - таблица/формула опыта в константах
3 - если юнит стоит на карте, можно щёлкнуть по нему и выбрать выпадающие предметы, иначе - триггерно (при смерти юнита создавать на его месте предмет)
» WarCraft 3 / Mega Shot "скилы под ключ"
» WarCraft 3 / Руны
» WarCraft 3 / Внимание вопрос
» WarCraft 3 / Руны
» WarCraft 3 / Руны
» WarCraft 3 / Внимание вопрос
если юнит равен рыцарю, добавить +2 к переменной, если юнит пехотинец, +1
и нафиг ты выбираешь всех юнитов в области с действием выбрать всех юнитов в области?
у тебя в области могут быть 100 юнитов и получится, что ты сделал 99 лишних действий, т.е. тебе этот цикл вообще нафиг не нужен