т.е. ты не уверен что-ли?)
в основном причина как раз таки в утечках и постоянно увеличивающихся кол-во объектов (не утечек: юниты, декорации, предметы и т.д.)
можешь в принципе попробовать перевести триггеры на джасс, мне уже писали по этому поводу, и перевод на нормальный джасс спасало от лагов, задержек, фризов, называй как хочешь
может там в целом беда с логикой в действиях происходит
если на карте увеличивается кол-во юнитов, а твои периодики перебирают юнитов на карте, то думаю логическая цепочка говорит сама за себя, с проблемой не очень хорошо ознакомил нас, нужно больше подробностей
у меня есть переменная с 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 лишних действий, т.е. тебе этот цикл вообще нафиг не нужен
JIEGEND, зачем ты вопрос закрыл тогда если не решил проблему ещё, ты можешь написать мне, само собой, но я не любитель всяких систем и уж тем более жанра твоей карты, поэтому детально изучать проблему нет желания, на отдельной карте продемонстрирую если нужно будет
» 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 лишних действий, т.е. тебе этот цикл вообще нафиг не нужен
» WarCraft 3 / Внимание вопрос