Cần cao nhân viết lại thành GUI hay chỉ rõ các biến .

Thảo luận trong 'World Editor' bắt đầu bởi Ice_water, 13/9/08.

  1. Ice_water

    Ice_water Dragon Quest

    Tham gia ngày:
    11/1/07
    Bài viết:
    1,457
    function Trig_Kontrollpunkte_IsTowerOrHero takes nothing returns boolean
    local unit U = GetFilterUnit()
    local boolean Ret = false

    if not IsUnitAliveBJ(U) then
    set U = null
    return false
    endif

    // multiple or:
    if GetUnitTypeId(U) == 'h000' then
    set Ret = true
    endif
    if GetUnitTypeId(U) == 'h001' then
    set Ret = true
    endif
    if IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) then
    set Ret = true
    endif

    set U = null

    return Ret
    endfunction

    function Trig_Kontrollpunkte_IsAlliedTowerOrHero takes nothing returns boolean
    if IsUnitAlly(GetFilterUnit(), GetOwningPlayer(GetEnumUnit())) then
    if Trig_Kontrollpunkte_IsTowerOrHero() then
    return true
    endif
    endif
    return false
    endfunction

    function Trig_Kontrollpunkte_IsEnemyTowerOrHero takes nothing returns boolean
    if IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetEnumUnit())) then
    if Trig_Kontrollpunkte_IsTowerOrHero() then
    return true
    endif
    endif
    return false
    endfunction

    function Trig_Kontrollpunkte_IsFab takes nothing returns boolean
    local unit U = GetFilterUnit()
    local boolean Ret = false

    if not IsUnitAliveBJ(U) then
    set U = null
    return false
    endif

    // multiple or:
    if (GetUnitTypeId(U) == 'h002') then
    set Ret = true
    endif
    if (GetUnitTypeId(U) == 'h003') then
    set Ret = true
    endif
    if (GetUnitTypeId(U) == 'h004') then
    set Ret = true
    endif

    set U = null
    return Ret
    endfunction

    function Trig_Kontrollpunkte_IsTeamFab1 takes nothing returns boolean
    if udg_Team_Of_Player[GetConvertedPlayerId(GetOwningPlayer(GetFilterUnit()))] == 1 then
    if Trig_Kontrollpunkte_IsFab() then
    return true
    endif
    endif
    return false
    endfunction

    function Trig_Kontrollpunkte_IsTeamFab2 takes nothing returns boolean
    if udg_Team_Of_Player[GetConvertedPlayerId(GetOwningPlayer(GetFilterUnit()))] == 2 then
    if Trig_Kontrollpunkte_IsFab() then
    return true
    endif
    endif
    return false
    endfunction

    function Trig_Kontrollpunkte_SetHealDown takes nothing returns nothing
    call SetUnitAbilityLevelSwapped( 'A00G', GetEnumUnit(), 2 )
    endfunction

    function Trig_Kontrollpunkte_SetHealUp takes nothing returns nothing
    call SetUnitAbilityLevelSwapped( 'A00G', GetEnumUnit(), 1 )
    endfunction

    function Trig_Kontrollpunkte_UnitSelected takes nothing returns boolean
    return IsUnitSelected(GetEnumUnit(), GetFilterPlayer())
    endfunction

    function Trig_Kontrollpunkte_SelectUnit takes nothing returns nothing
    call SelectUnitAddForPlayer( GetEnumUnit(), GetEnumPlayer() )
    endfunction

    function Trig_Kontrollpunkte_TeamKPCheck takes nothing returns nothing
    local group Team1KPs = GetUnitsOfPlayerAndTypeId(Player(10), 'h00P')
    local group Team2KPs = GetUnitsOfPlayerAndTypeId(Player(11), 'h00P')
    local group G
    local integer HandleThisTeam = 0

    if CountUnitsInGroup(Team1KPs) == 0 then
    set HandleThisTeam = 1
    set G = GetUnitsInRectMatching(udg_Playable_Map, Condition(function Trig_Kontrollpunkte_IsTeamFab1))
    endif

    if CountUnitsInGroup(Team2KPs) == 0 then
    set HandleThisTeam = 2
    set G = GetUnitsInRectMatching(udg_Playable_Map, Condition(function Trig_Kontrollpunkte_IsTeamFab2))
    endif


    if HandleThisTeam !=0 then
    call ForGroupBJ( G, function Trig_Kontrollpunkte_SetHealDown )
    call DestroyGroup( G )
    call DisplayTimedTextToForce( udg_Players_Team[HandleThisTeam], 5,"|cfffed312Dein Team besitzt keinen Kontrollpunkt und repariert Panzer nun langsamer.|r" )
    call DisplayTimedTextToForce( udg_Players_Team[3 - HandleThisTeam], 5, "|cfffed312Der Feind besitzt keinen Kontrollpunkt und repariert Panzer nun langsamer.|r" )
    else
    if GetUnitAbilityLevelSwapped('A00G', udg_HQ[1]) == 2 then
    set HandleThisTeam = 1
    set G = GetUnitsInRectMatching(udg_Playable_Map, Condition(function Trig_Kontrollpunkte_IsTeamFab1))
    endif

    if GetUnitAbilityLevelSwapped('A00G', udg_HQ[2]) == 2 then
    set HandleThisTeam = 2
    set G = GetUnitsInRectMatching(udg_Playable_Map, Condition(function Trig_Kontrollpunkte_IsTeamFab2))
    endif

    if HandleThisTeam !=0 then
    call ForGroupBJ( G, function Trig_Kontrollpunkte_SetHealUp )
    call DestroyGroup( G )
    call DisplayTimedTextToForce( udg_Players_Team[HandleThisTeam], 5,"|cfffed312Dein Team besitzt einen Kontrollpunkt und repariert Panzer nun normal.|r" )
    call DisplayTimedTextToForce( udg_Players_Team[3 - HandleThisTeam], 5,"|cfffed312Der Feind besitzt einen Kontrollpunkt und repariert Panzer nun normal.|r" )
    endif
    endif

    call DestroyGroup( Team1KPs )
    call DestroyGroup( Team2KPs )
    set HandleThisTeam = 0
    set G = null
    set Team1KPs = null
    set Team2KPs = null
    endfunction

    function Trig_Kontrollpunkte_CheckThisPoint takes nothing returns nothing
    local force F
    local unit U = GetEnumUnit()
    local location P = GetUnitLoc(U)
    local integer OwningTeam = udg_Team_Of_Player[GetConvertedPlayerId(GetOwningPlayer(U))]
    local group NearbyAllies
    local group NearbyEnemies = GetUnitsInRangeOfLocMatching(500.00, P, Condition(function Trig_Kontrollpunkte_IsEnemyTowerOrHero))

    if CountUnitsInGroup(NearbyEnemies) == 0 then
    // Es sind keine Feinde in der Nähe, der Kontrollpunkt erholt sich vom letzten Angriff
    if ( GetUnitUserData(U) != 0 ) then
    call SetUnitUserData( U, ( GetUnitUserData(U) - 1 ) )
    endif
    else
    set NearbyAllies = GetUnitsInRangeOfLocMatching(500.00, P, Condition(function Trig_Kontrollpunkte_IsAlliedTowerOrHero))
    if CountUnitsInGroup(NearbyAllies) == 0 then
    // Es sind keine Freunde, jedoch Feinde am Kontrollpunkt. Er wird erobert.
    if GetUnitUserData(U) == 0 then
    call DisplayTimedTextToForce( udg_Players_Team[OwningTeam], 5,"|cffff0000Eine feindliche Einheit beginnt, einen Kontrollpunkt zu erobern.|r" )
    call DisplayTimedTextToForce( udg_Players_Team[3 - OwningTeam], 5,"|cff00ff00Eine verbündete Einheit beginnt, einen Kontrollpunkt zu erobern.|r" )
    call PingMinimapLocForForceEx( udg_Players, GetUnitLoc(U), 0.80, bj_MINIMAPPINGSTYLE_SIMPLE, 64.00, 64.00, 64.00 )
    endif

    if GetUnitUserData(U) < 9 then
    call SetUnitUserData( U, ( GetUnitUserData(U) + 1 ) )
    else
    set F = GetPlayersMatching(Condition(function Trig_Kontrollpunkte_UnitSelected))

    call SetUnitOwner( U, ConvertedPlayer(13 - OwningTeam), true )
    call SetUnitUserData( U, 0 )

    call ForForce( F, function Trig_Kontrollpunkte_SelectUnit )
    call DestroyForce( F )
    set F = null

    call DisplayTimedTextToForce( udg_Players_Team[OwningTeam], 5,"|cffff0000Eine feindliche Einheit hat einen Kontrollpunkt erobert.|r" )
    call DisplayTimedTextToForce( udg_Players_Team[3 - OwningTeam], 5,"|cff00ff00Eine verbündete Einheit hat einen Kontrollpunkt erobert.|r" )
    call PingMinimapLocForForceEx( udg_Players, P, 0.80, bj_MINIMAPPINGSTYLE_SIMPLE, 64.00, 64.00, 64.00 )

    call AddSpecialEffectLocBJ( P, "Abilities\\Spells\\Other\\Charm\\CharmTarget.mdl" )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )

    call Trig_Kontrollpunkte_TeamKPCheck()
    endif
    endif
    call DestroyGroup( NearbyAllies )
    set NearbyAllies = null
    endif

    call RemoveLocation ( P )
    call DestroyGroup( NearbyEnemies )
    set NearbyEnemies = null
    set OwningTeam = 0
    set P = null
    set U = null
    endfunction

    function Trig_Kontrollpunkte_Actions takes nothing returns nothing
    local group KPs = GetUnitsOfTypeIdAll('h00P')
    call ForGroupBJ( KPs, function Trig_Kontrollpunkte_CheckThisPoint )
    call DestroyGroup( KPs )
    endfunction

    //===========================================================================
    function InitTrig_Kontrollpunkte takes nothing returns nothing
    set gg_trg_Kontrollpunkte = CreateTrigger( )
    call DisableTrigger( gg_trg_Kontrollpunkte )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Kontrollpunkte, 1.00 )
    call TriggerAddAction( gg_trg_Kontrollpunkte, function Trig_Kontrollpunkte_Actions )
    endfunction
     
  2. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    đau mắt quá, cho vào code tag hộ cái. :-s

    ấn vào biếu tượng này: [​IMG] rồi paste code vào đó
     
  3. Dark_DragonKing

    Dark_DragonKing Mr & Ms Pac-Man

    Tham gia ngày:
    23/7/08
    Bài viết:
    217
    Mã:
    function Trig_Kontrollpunkte_IsTowerOrHero takes nothing returns boolean
    local unit U = GetFilterUnit()
    local boolean Ret = false
    
    if not IsUnitAliveBJ(U) then
    set U = null
    return false
    endif
    
    // multiple or:
    if GetUnitTypeId(U) == 'h000' then
    set Ret = true
    endif
    if GetUnitTypeId(U) == 'h001' then
    set Ret = true
    endif
    if IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) then
    set Ret = true
    endif
    
    set U = null
    
    return Ret
    endfunction
    
    function Trig_Kontrollpunkte_IsAlliedTowerOrHero takes nothing returns boolean
    if IsUnitAlly(GetFilterUnit(), GetOwningPlayer(GetEnumUnit())) then
    if Trig_Kontrollpunkte_IsTowerOrHero() then
    return true
    endif
    endif
    return false
    endfunction
    
    function Trig_Kontrollpunkte_IsEnemyTowerOrHero takes nothing returns boolean
    if IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetEnumUnit())) then
    if Trig_Kontrollpunkte_IsTowerOrHero() then
    return true
    endif
    endif
    return false
    endfunction
    
    function Trig_Kontrollpunkte_IsFab takes nothing returns boolean
    local unit U = GetFilterUnit()
    local boolean Ret = false
    
    if not IsUnitAliveBJ(U) then
    set U = null
    return false
    endif
    
    // multiple or:
    if (GetUnitTypeId(U) == 'h002') then
    set Ret = true
    endif
    if (GetUnitTypeId(U) == 'h003') then
    set Ret = true
    endif
    if (GetUnitTypeId(U) == 'h004') then
    set Ret = true
    endif
    
    set U = null
    return Ret
    endfunction
    
    function Trig_Kontrollpunkte_IsTeamFab1 takes nothing returns boolean
    if udg_Team_Of_Player[GetConvertedPlayerId(GetOwningPlayer(GetFilterUnit ()))] == 1 then
    if Trig_Kontrollpunkte_IsFab() then
    return true
    endif
    endif
    return false
    endfunction
    
    function Trig_Kontrollpunkte_IsTeamFab2 takes nothing returns boolean
    if udg_Team_Of_Player[GetConvertedPlayerId(GetOwningPlayer(GetFilterUnit ()))] == 2 then
    if Trig_Kontrollpunkte_IsFab() then
    return true
    endif
    endif
    return false
    endfunction
    
    function Trig_Kontrollpunkte_SetHealDown takes nothing returns nothing
    call SetUnitAbilityLevelSwapped( 'A00G', GetEnumUnit(), 2 )
    endfunction
    
    function Trig_Kontrollpunkte_SetHealUp takes nothing returns nothing
    call SetUnitAbilityLevelSwapped( 'A00G', GetEnumUnit(), 1 )
    endfunction
    
    function Trig_Kontrollpunkte_UnitSelected takes nothing returns boolean
    return IsUnitSelected(GetEnumUnit(), GetFilterPlayer())
    endfunction
    
    function Trig_Kontrollpunkte_SelectUnit takes nothing returns nothing
    call SelectUnitAddForPlayer( GetEnumUnit(), GetEnumPlayer() )
    endfunction
    
    function Trig_Kontrollpunkte_TeamKPCheck takes nothing returns nothing
    local group Team1KPs = GetUnitsOfPlayerAndTypeId(Player(10), 'h00P')
    local group Team2KPs = GetUnitsOfPlayerAndTypeId(Player(11), 'h00P')
    local group G
    local integer HandleThisTeam = 0
    
    if CountUnitsInGroup(Team1KPs) == 0 then
    set HandleThisTeam = 1
    set G = GetUnitsInRectMatching(udg_Playable_Map, Condition(function Trig_Kontrollpunkte_IsTeamFab1))
    endif
    
    if CountUnitsInGroup(Team2KPs) == 0 then
    set HandleThisTeam = 2
    set G = GetUnitsInRectMatching(udg_Playable_Map, Condition(function Trig_Kontrollpunkte_IsTeamFab2))
    endif
    
    
    if HandleThisTeam !=0 then
    call ForGroupBJ( G, function Trig_Kontrollpunkte_SetHealDown )
    call DestroyGroup( G )
    call DisplayTimedTextToForce( udg_Players_Team[HandleThisTeam], 5,"|cfffed312Dein Team besitzt keinen Kontrollpunkt und repariert Panzer nun langsamer.|r" )
    call DisplayTimedTextToForce( udg_Players_Team[3 - HandleThisTeam], 5, "|cfffed312Der Feind besitzt keinen Kontrollpunkt und repariert Panzer nun langsamer.|r" )
    else
    if GetUnitAbilityLevelSwapped('A00G', udg_HQ[1]) == 2 then
    set HandleThisTeam = 1
    set G = GetUnitsInRectMatching(udg_Playable_Map, Condition(function Trig_Kontrollpunkte_IsTeamFab1))
    endif
    
    if GetUnitAbilityLevelSwapped('A00G', udg_HQ[2]) == 2 then
    set HandleThisTeam = 2
    set G = GetUnitsInRectMatching(udg_Playable_Map, Condition(function Trig_Kontrollpunkte_IsTeamFab2))
    endif
    
    if HandleThisTeam !=0 then
    call ForGroupBJ( G, function Trig_Kontrollpunkte_SetHealUp )
    call DestroyGroup( G )
    call DisplayTimedTextToForce( udg_Players_Team[HandleThisTeam], 5,"|cfffed312Dein Team besitzt einen Kontrollpunkt und repariert Panzer nun normal.|r" )
    call DisplayTimedTextToForce( udg_Players_Team[3 - HandleThisTeam], 5,"|cfffed312Der Feind besitzt einen Kontrollpunkt und repariert Panzer nun normal.|r" )
    endif
    endif
    
    call DestroyGroup( Team1KPs )
    call DestroyGroup( Team2KPs )
    set HandleThisTeam = 0
    set G = null
    set Team1KPs = null
    set Team2KPs = null
    endfunction
    
    function Trig_Kontrollpunkte_CheckThisPoint takes nothing returns nothing
    local force F
    local unit U = GetEnumUnit()
    local location P = GetUnitLoc(U)
    local integer OwningTeam = udg_Team_Of_Player[GetConvertedPlayerId(GetOwningPlayer(U))]
    local group NearbyAllies
    local group NearbyEnemies = GetUnitsInRangeOfLocMatching(500.00, P, Condition(function Trig_Kontrollpunkte_IsEnemyTowerOrHero))
    
    if CountUnitsInGroup(NearbyEnemies) == 0 then
    // Es sind keine Feinde in der Nähe, der Kontrollpunkt erholt sich vom letzten Angriff
    if ( GetUnitUserData(U) != 0 ) then
    call SetUnitUserData( U, ( GetUnitUserData(U) - 1 ) )
    endif
    else
    set NearbyAllies = GetUnitsInRangeOfLocMatching(500.00, P, Condition(function Trig_Kontrollpunkte_IsAlliedTowerOrHero))
    if CountUnitsInGroup(NearbyAllies) == 0 then
    // Es sind keine Freunde, jedoch Feinde am Kontrollpunkt. Er wird erobert.
    if GetUnitUserData(U) == 0 then
    call DisplayTimedTextToForce( udg_Players_Team[OwningTeam], 5,"|cffff0000Eine feindliche Einheit beginnt, einen Kontrollpunkt zu erobern.|r" )
    call DisplayTimedTextToForce( udg_Players_Team[3 - OwningTeam], 5,"|cff00ff00Eine verbündete Einheit beginnt, einen Kontrollpunkt zu erobern.|r" )
    call PingMinimapLocForForceEx( udg_Players, GetUnitLoc(U), 0.80, bj_MINIMAPPINGSTYLE_SIMPLE, 64.00, 64.00, 64.00 )
    endif
    
    if GetUnitUserData(U) < 9 then
    call SetUnitUserData( U, ( GetUnitUserData(U) + 1 ) )
    else
    set F = GetPlayersMatching(Condition(function Trig_Kontrollpunkte_UnitSelected))
    
    call SetUnitOwner( U, ConvertedPlayer(13 - OwningTeam), true )
    call SetUnitUserData( U, 0 )
    
    call ForForce( F, function Trig_Kontrollpunkte_SelectUnit )
    call DestroyForce( F )
    set F = null
    
    call DisplayTimedTextToForce( udg_Players_Team[OwningTeam], 5,"|cffff0000Eine feindliche Einheit hat einen Kontrollpunkt erobert.|r" )
    call DisplayTimedTextToForce( udg_Players_Team[3 - OwningTeam], 5,"|cff00ff00Eine verbündete Einheit hat einen Kontrollpunkt erobert.|r" )
    call PingMinimapLocForForceEx( udg_Players, P, 0.80, bj_MINIMAPPINGSTYLE_SIMPLE, 64.00, 64.00, 64.00 )
    
    call AddSpecialEffectLocBJ( P, "Abilities\\Spells\\Other\\Charm\\CharmTarget. mdl" )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    
    call Trig_Kontrollpunkte_TeamKPCheck()
    endif
    endif
    call DestroyGroup( NearbyAllies )
    set NearbyAllies = null
    endif
    
    call RemoveLocation ( P )
    call DestroyGroup( NearbyEnemies )
    set NearbyEnemies = null
    set OwningTeam = 0
    set P = null
    set U = null
    endfunction
    
    function Trig_Kontrollpunkte_Actions takes nothing returns nothing
    local group KPs = GetUnitsOfTypeIdAll('h00P')
    call ForGroupBJ( KPs, function Trig_Kontrollpunkte_CheckThisPoint )
    call DestroyGroup( KPs )
    endfunction
    
    //================================================== =========================
    function InitTrig_Kontrollpunkte takes nothing returns nothing
    set gg_trg_Kontrollpunkte = CreateTrigger( )
    call DisableTrigger( gg_trg_Kontrollpunkte )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Kontrollpunkte, 1.00 )
    call TriggerAddAction( gg_trg_Kontrollpunkte, function Trig_Kontrollpunkte_Actions )
    endfunction
    
     
  4. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Copy nguyên cái trên thì có ích gì đâu :-s, các khoảng trống mất hết rồi, khó đọc lắm :-s
     
  5. Ice_water

    Ice_water Dragon Quest

    Tham gia ngày:
    11/1/07
    Bài viết:
    1,457
    Người viết code có ghi khoảng cách đâu :-s
     
  6. Diệp Thanh

    Diệp Thanh Kirin Tor Moderator Lão Làng GVN

    Tham gia ngày:
    7/2/04
    Bài viết:
    4,398
    chuyện ngược đời...convert sang JASS nói còn nghe được..tự dưng đòi chuyển sang GUI..mệt lắm..code thì dài..mà chắc gì cái đoạn code ấy đã hay..
     
  7. Ice_water

    Ice_water Dragon Quest

    Tham gia ngày:
    11/1/07
    Bài viết:
    1,457
    Không hay thì tui cũng chẳng cần giúp :whew:
     
  8. MjnWu

    MjnWu Youtube Master Race

    Tham gia ngày:
    10/9/07
    Bài viết:
    98
    Nơi ở:
    BD
    code đó nói về cái gì zậy bạn (:|
     

Chia sẻ trang này