Сейчас 19:50:49 Понедельник, 29 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Триггер срабатывает только один раз
[Вопрос] Триггер срабатывает только один раз
RedRomkaДата: Вторник, 29 Мая 2012, 12:18:30 | Сообщение # 1
2 уровень
Группа: Пользователи
Сообщений: 22
Награды: 0
Репутация: 13
Блокировки:
Всем привет. Просмотрите код. Не пониvаю в чём проблема. Он срабатывает только один раз: всё выводит верно, а повторно просто ничего не происходит.
Code

function Trig_KillText_Conditions takes nothing returns boolean
     if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true ) ) then
         return false
     endif
     if ( not( Player(12) != GetOwningPlayer(GetKillingUnit()))) then
         return false  
     endif
     return true
endfunction

function Trig_KillText_Func002Func001Func001C takes nothing returns boolean
     if ( not ( GetEnumPlayer() != GetOwningPlayer(GetKillingUnit()) ) ) then
         return false
     endif
     if ( not ( GetEnumPlayer() != Player(10) ) ) then
         return false
     endif
     if ( not ( GetEnumPlayer() != Player(11) ) ) then
         return false
     endif
     if ( not ( IsPlayerInForce(GetEnumPlayer(), udg_AssistsGroup[GetPlayerId(GetOwningPlayer(GetDyingUnit()))]) == true ) ) then
         return false
     endif
     return true
endfunction

function Trig_KillText_Func002Func001C takes nothing returns boolean
     if ( not Trig_KillsShow_Func002Func001Func001C() ) then
         return false
     endif
     return true
endfunction

function Trig_KillText_Func002A takes nothing returns nothing
   local multiboarditem mbi
   local integer i = GetPlayerId(GetEnumPlayer())
    
     if ( Trig_KillText_Func002Func001C() ) then
         set udg_AssistsPl[i]  =  udg_AssistsPl[i] +  1
         set mbi = MultiboardGetItem(udg_Table,  udg_TablePlayerRow[i] , 4)
         call MultiboardSetItemValue(mbi, I2S(udg_AssistsPl[GetPlayerId(GetEnumPlayer())]))
         set udg_AssistString[GetPlayerId(GetOwningPlayer(GetDyingUnit()))] = (udg_AssistString[GetPlayerId(GetOwningPlayer(GetDyingUnit()))] + ( udg_PlayerColor[i] + ( GetPlayerName(GetEnumPlayer()) + ( "|r" + "/" ) ) ) )
         call SetPlayerState(GetEnumPlayer(), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetEnumPlayer(), PLAYER_STATE_RESOURCE_GOLD) + 100 + 2 * GetHeroLevel(GetDyingUnit()))
     endif
      
         call MultiboardReleaseItem(mbi)  
         set mbi = null
endfunction

function Trig_KillText_Func003C takes nothing returns boolean
     if ( not ( udg_AssistString[GetPlayerId(GetOwningPlayer(GetDyingUnit()))] == "Помогли:" ) ) then
         return false
     endif
     return true
endfunction

function Trig_KillText_Actions takes nothing returns nothing
local player plk = GetOwningPlayer(GetKillingUnit())
local player pld = GetOwningPlayer(GetDyingUnit())
local integer ik = GetPlayerId(plk)
local integer id = GetPlayerId(pld)
local force f = CreateForce()
set f = bj_FORCE_ALL_PLAYERS

     set udg_AssistString[GetPlayerId(GetOwningPlayer(GetDyingUnit()))] = "Помогли:"
     call ForForce( f, function Trig_KillsShow_Func002A )
      
     if ( Trig_KillText_Func003C() ) then
         set udg_AssistString[GetPlayerId(GetOwningPlayer(GetDyingUnit()))] = ""
     endif
      
      if (IsPlayerInForce(GetLocalPlayer(), f)) then
           call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, ( udg_PlayerColor[ik]) + ( GetPlayerName(plk) + ( "|r" + ( " убил " + ( udg_PlayerColor[id] + ( ( GetPlayerName(pld) + "|r" ) + ( " и получил " + I2S(195 + 5 * GetHeroLevel(GetDyingUnit())) + " золотых монет. " + udg_AssistString[id] ) ) ) ) ) ))

     endif
     call SetPlayerState(plk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetOwningPlayer(GetKillingUnit()), PLAYER_STATE_RESOURCE_GOLD) + 195 + 5 * GetHeroLevel(GetDyingUnit()))
     call SetPlayerState(pld, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(GetOwningPlayer(GetDyingUnit()), PLAYER_STATE_RESOURCE_GOLD) - (195 + 5 * GetHeroLevel(GetDyingUnit())))
call ForceClear(f)
call DestroyForce(f)
set f = null
endfunction

//===========================================================================
function InitTrig_KillText takes nothing returns nothing
local trigger tr = CreateTrigger(  )
local integer i
     set i = 0
     loop
         call TriggerRegisterPlayerUnitEvent(tr, Player(i), EVENT_PLAYER_UNIT_DEATH, null)
         set i = i + 1
         exitwhen i == 9
     endloop
     call TriggerAddCondition( tr, Condition( function Trig_KillText_Conditions ) )
     call TriggerAddAction( tr, function Trig_KillText_Actions )
     set tr = null
endfunction
 

SirNikolasДата: Вторник, 29 Мая 2012, 15:40:43 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (RedRomka)
local force f = CreateForce()
set f = bj_FORCE_ALL_PLAYERS
Quote (RedRomka)
call ForceClear(f)
call DestroyForce(f)
CreateForce не нужно. bj_FORCE_ALL_PLAYERS - это константа. Если ты производишь очищаешь или удаляешь ее, обратно ты же не вернешь. Кстати, зачем тебе здесь вообще клан?


 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Триггер срабатывает только один раз
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz