Здраствуйте. Начну с кода:
function Trig_Income_and_Disincome_Copy_O_Func002Func001002001001002 takes nothing returns boolean
return GetBooleanAnd( GetUnitFoodMade(GetFilterUnit()) == 30, IsUnitInGroup(GetFilterUnit(), udg_GroupEnded) == true )
endfunction
function Trig_Income_and_Disincome_Copy_O_Func002Func002002001003001001002 takes nothing returns boolean
return GetBooleanAnd( GetUnitFoodMade(GetFilterUnit()) == 35, IsUnitInGroup(GetFilterUnit(), udg_GroupEnded) == true )
endfunction
function Trig_Income_and_Disincome_Copy_O_Func002Func003002001003001001002 takes nothing returns boolean
return GetBooleanAnd( GetUnitFoodMade(GetFilterUnit()) == 40, IsUnitInGroup(GetFilterUnit(), udg_GroupEnded) == true )
endfunction
function Trig_Income_and_Disincome_Copy_O_Func002Func004002001003001001002 takes nothing returns boolean
return GetBooleanAnd( GetUnitFoodMade(GetFilterUnit()) == 50, IsUnitInGroup(GetFilterUnit(), udg_GroupEnded) == true )
endfunction
function Trig_Income_and_Disincome_Copy_O_Func002Func005002001003001001002 takes nothing returns boolean
return GetUnitFoodMade(GetFilterUnit()) == 150
endfunction
function Trig_Income_and_Disincome_Copy_O_Func002Func006002001003001001002 takes nothing returns boolean
return GetUnitFoodMade(GetFilterUnit()) == 75
endfunction
function Trig_Income_and_Disincome_Copy_O_Func002A takes nothing returns nothing
set udg_Boolexpr = Condition(function Trig_Income_and_Disincome_Copy_O_Func002Func001002001001002)
set udg_LocalOtrad = GetUnitsOfPlayerMatching(GetEnumPlayer(), udg_Boolexpr)
set udg_Inc = ( CountUnitsInGroup(udg_LocalOtrad) * 30 )
call GroupClear( udg_LocalOtrad )
set udg_Boolexpr = Condition(function Trig_Income_and_Disincome_Copy_O_Func002Func002002001003001001002)
set udg_LocalOtrad = GetUnitsOfPlayerMatching(GetEnumPlayer(), udg_Boolexpr)
set udg_Inc = ( ( udg_Inc + ( CountUnitsInGroup(udg_LocalOtrad)) * 35 ) )
call GroupClear( udg_LocalOtrad )
set udg_Boolexpr = Condition(function Trig_Income_and_Disincome_Copy_O_Func002Func003002001003001001002)
set udg_LocalOtrad = GetUnitsOfPlayerMatching(GetEnumPlayer(), udg_Boolexpr)
set udg_Inc = ( ( udg_Inc + ( CountUnitsInGroup(udg_LocalOtrad)) * 40 ) )
call GroupClear( udg_LocalOtrad )
set udg_Boolexpr = Condition(function Trig_Income_and_Disincome_Copy_O_Func002Func004002001003001001002)
set udg_LocalOtrad = GetUnitsOfPlayerMatching(GetEnumPlayer(), udg_Boolexpr)
set udg_Inc = ( ( udg_Inc + ( CountUnitsInGroup(udg_LocalOtrad)) * 50 ) )
call GroupClear( udg_LocalOtrad )
set udg_Boolexpr = Condition(function Trig_Income_and_Disincome_Copy_O_Func002Func005002001003001001002)
set udg_LocalOtrad = GetUnitsOfPlayerMatching(GetEnumPlayer(), udg_Boolexpr)
set udg_Inc = ( ( udg_Inc + ( CountUnitsInGroup(udg_LocalOtrad)) * 150 ) )
call GroupClear( udg_LocalOtrad )
set udg_Boolexpr = Condition(function Trig_Income_and_Disincome_Copy_O_Func002Func006002001003001001002)
set udg_LocalOtrad = GetUnitsOfPlayerMatching(GetEnumPlayer(), udg_Boolexpr)
set udg_Inc = ( ( udg_Inc + ( CountUnitsInGroup(udg_LocalOtrad)) * 75 ) )
call GroupClear( udg_LocalOtrad )
call DisplayTimedTextToForce( GetForceOfPlayer(GetEnumPlayer()), 5.00, ( "|cffffcc00Доход золота (каждые 15 секунд): |cff00ff00" + I2S(udg_Inc) ) )
set udg_Inc = ( ( udg_Inc + ( GetPlayerTechCountSimple('R004', GetEnumPlayer()) * 75 ) ) * 1 )
call DisplayTimedTextToForce( GetForceOfPlayer(GetEnumPlayer()), 5.00, ( "|cffffcc00Дополнительный доход (от улучшений): |cff00ff00" + I2S(( GetPlayerTechCountSimple('R004', GetEnumPlayer()) * 75 )) ) )
set udg_Inc = ( ( udg_Inc - ( GetPlayerUnitCount(GetEnumPlayer(), false) * 25 ) ) * 1 )
call DisplayTimedTextToForce( GetForceOfPlayer(GetEnumPlayer()), 5.00, ( "|cffffcc00Потребление на войска: |c00FF0303" + I2S(( 25 * GetPlayerUnitCount(GetEnumPlayer(), false) )) ) )
if udg_Inc > 0 then
call DisplayTimedTextToForce( GetForceOfPlayer(GetEnumPlayer()), 5.00, ( "|cffffcc00Итого баланс: |r" + ( "|cff00ff00" + I2S(udg_Inc) + " (Профицит)|r" ) ) )
else
if udg_Inc == 0 then
call DisplayTimedTextToForce( GetForceOfPlayer(GetEnumPlayer()), 5.00, ( "|cffffcc00Итого баланс: |r" + ( "|cffffff00" + I2S(udg_Inc) + " (Нулевой бюджет)|r" ) ) )
else
call DisplayTimedTextToForce( GetForceOfPlayer(GetEnumPlayer()), 5.00, ( "|cffffcc00Итого баланс: |r" + ( "|cffff0000" + I2S(( udg_Inc * -1 )) + " (Дефицит)|r" ) ) )
endif
endif
call AdjustPlayerStateBJ( udg_Inc, GetEnumPlayer(), PLAYER_STATE_RESOURCE_GOLD )
set udg_Inc = 0
endfunction
function Trig_Income_and_Disincome_Copy_O_Actions takes nothing returns nothing
call ForForce( GetPlayersAll(), function Trig_Income_and_Disincome_Copy_O_Func002A )
endfunction
//===========================================================================
function InitTrig_Income_and_Disincome_Copy_O takes nothing returns nothing
set gg_trg_Income_and_Disincome_Copy_O = CreateTrigger( )
call DisableTrigger( gg_trg_Income_and_Disincome_Copy_O )
call TriggerRegisterTimerExpireEventBJ( gg_trg_Income_and_Disincome_Copy_O, udg_Compteur1 )
call TriggerAddAction( gg_trg_Income_and_Disincome_Copy_O, function Trig_Income_and_Disincome_Copy_O_Actions )
endfunction
Суть дела. Более менее нравится текущая система доходов расходов, но когда юнитов на карте становится много (тысячи неизбежны при кол-ве игроков 12+ уж точно), кроме обычных подлагиваний по причине попросту нереально огромного числа юнитов, есть именно короткое зависание при срабатывании вот этого кода. Что можно еще улучшить, изменить, чтобы на производительность в момент тика таймера (старт трига) провисание было минимальным (а лучше и не было).
Понимаю, копаться в чужом коде то еще дело, так что если надо что-то расписать или пояснить, говорите. Можете просто назвать идеи, куда копать. Спасибо за понимание.
Принятый ответ
VinerX, вджасс на рефе работает, но лучше тогда бы на луа тебе сделали)
если сомневаешься то сделаю на джассе тогда уж
если сомневаешься то сделаю на джассе тогда уж
вот, я без понятия работает ли, потому что лень создавать юнитов под эти условия, да и может накосячил случайно где-то и работает не так как задумано, поможет или нет не знаю, но попробуй что-ли(?)
код
function Trig_Income_Cond takes nothing returns boolean
local integer i
set udg_lastFilterUnit = GetFilterUnit( )
set i = GetUnitFoodMade( udg_lastFilterUnit )
if IsUnitInGroup( udg_lastFilterUnit, udg_GroupEnded ) or ( i == 150 or i == 75 ) then
set udg_Inc = udg_Inc + i
endif
return false
endfunction
function Trig_Income_and_Disincome_Copy_Enum_Func takes nothing returns nothing
local integer i
set udg_TempPlayer = GetEnumPlayer( )
set udg_Inc = 0
call GroupEnumUnitsOfPlayer( udg_LocalOtrad, udg_TempPlayer, udg_IncomeCondition )
call DisplayTimedTextToPlayer( udg_TempPlayer, 0.00, 0.00, 5.00, "|cffffcc00Доход золота (каждые 15 секунд):|r |cff00ff00" + I2S( udg_Inc ) + "|r" )
set i = GetPlayerTechCount( udg_TempPlayer, 'R004', true ) * 75
set udg_Inc = udg_Inc + i
call DisplayTimedTextToPlayer( udg_TempPlayer, 0.00, 0.00, 5.00, "|cffffcc00Дополнительный доход (от улучшений):|r |cff00ff00" + I2S( i ) + "|r" )
set i = GetPlayerUnitCount( udg_TempPlayer, false ) * 25
set udg_Inc = udg_Inc - i
call DisplayTimedTextToPlayer( udg_TempPlayer, 0.00, 0.00, 5.00, "|cffffcc00Потребление на войска:|r |c00FF0303" + I2S( i ) + "|r" )
if udg_Inc > 0 then
call DisplayTimedTextToPlayer( udg_TempPlayer, 0.00, 0.00, 5.00, "|cffffcc00Итого баланс:|r |cff00ff00" + I2S( udg_Inc ) + " (Профицит)|r" )
elseif udg_Inc == 0 then
call DisplayTimedTextToPlayer( udg_TempPlayer, 0.00, 0.00, 5.00, "|cffffcc00Итого баланс:|r |cffffff000 (Нулевой бюджет)|r" )
else
call DisplayTimedTextToPlayer( udg_TempPlayer, 0.00, 0.00, 5.00, "|cffffcc00Итого баланс:|r |cffff0000" + I2S( -udg_Inc ) + " (Дефицит)|r" )
endif
call SetPlayerState( udg_TempPlayer, PLAYER_STATE_GOLD_GATHERED, GetPlayerState( udg_TempPlayer, PLAYER_STATE_GOLD_GATHERED ) + udg_Inc )
set udg_Inc = 0
endfunction
function Trig_Income_and_Disincome_Copy_O_Actions takes nothing returns nothing
call ForForce( bj_FORCE_ALL_PLAYERS, function Trig_Income_and_Disincome_Copy_Enum_Func )
endfunction
//===========================================================================
function InitTrig_Income_and_Disincome_Copy_O takes nothing returns nothing
set gg_trg_Income_and_Disincome_Copy_O = CreateTrigger( )
call DisableTrigger( gg_trg_Income_and_Disincome_Copy_O )
call TriggerRegisterTimerExpireEvent( gg_trg_Income_and_Disincome_Copy_O, udg_Compteur1 )
call TriggerAddAction( gg_trg_Income_and_Disincome_Copy_O, function Trig_Income_and_Disincome_Copy_O_Actions )
set udg_IncomeCondition = Condition( function Trig_Income_Cond )
endfunction
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован rsfghd
если сомневаешься то сделаю на джассе тогда уж
Отредактирован VinerX
Отредактирован rsfghd
замени PLAYER_STATE_GOLD_GATHERED на PLAYER_STATE_RESOURCE_GOLD
Отредактирован VinerX