• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Is someone help me about this jass code? It is a long story, click for the details.

Status
Not open for further replies.
Level 17
Joined
Jun 2, 2009
Messages
1,137
Hello everyone. I have a 20 years old map and still i am updating it. Today i have cleaned many leaks and unused triggers but i have a serious problem about this one. This Jass created by one of my friends and i have no idea what is about that. It is inside the top of the triggers (name of the map in the trigger editor)

What is this? And what happens when i delete this? If it includes anything important can you tell me about that? I will do these on GUI OR let us re-organize if you can help me if you want to let it stay as Jass.

My map is AoS/MOBA map. Both of the sides picks their heroes and fights each other. I can provide extra details if you need it.

JASS:
globals
    constant integer CLASS_STR = 1
    constant integer CLASS_AGI = 2
    constant integer CLASS_INT = 3
endglobals

native UnitAlive takes unit id returns boolean

function GetHeroIndexById takes integer id returns integer
    local integer i = 1
    loop
        if id == udg_HeroTypes[i] then
            return i
        endif
        set i = i + 1
        exitwhen i == udg_Total_Heroes + 1
    endloop
    return 0
endfunction

function GetHeroIndex takes unit u returns integer
    return GetHeroIndexById(GetUnitTypeId(u))
endfunction

function GetHeroClassById takes integer id returns integer
    return udg_HeroClass[GetHeroIndexById(id)]
endfunction

function GetHeroClass takes unit u returns integer
    return GetHeroClassById(GetUnitTypeId(u))
endfunction

function GetRandomHeroId takes nothing returns integer
    local integer random = GetRandomInt(1, udg_Total_Heroes)
    if udg_HeroChoosen[random] then
        return GetRandomHeroId()
    endif
    return random
endfunction

function GetRandomHeroIdByClass takes integer class returns integer
    local integer i = 0
    local integer id = 0
    loop
        set id = GetRandomHeroId()
        //call BJDebugMsg(I2S(id))
        //set i = GetHeroIndexById(id)
        exitwhen udg_HeroClass[id] == class
    endloop
    return id
endfunction

function GiveRandomHeroByClass takes player p, integer class returns unit
    local real x = GetStartLocationX(GetPlayerStartLocation(p))
    local real y = GetStartLocationY(GetPlayerStartLocation(p))
    set bj_lastCreatedUnit = CreateUnit(p, udg_HeroTypes[GetRandomHeroIdByClass(class)], x, y, 270.00)
    set udg_HeroChoosen[GetHeroIndex(bj_lastCreatedUnit)] = true
    return bj_lastCreatedUnit
endfunction

function GetRandomHero takes player owner returns unit
    set udg_Trig_Player = owner
    set udg_Yiit_Endstring = ""
    call TriggerExecute(gg_trg_Give_Random_Hero)
    if bj_lastCreatedUnit == null then
        call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Error number 4, send this replay to [email protected]")
        return GetRandomHero(owner)
    endif
    return bj_lastCreatedUnit
endfunction

function HiddenMessageSearch takes nothing returns nothing
    local integer i = 0
    local string name
    loop
        exitwhen i == 12
        set name = StringCase(GetPlayerName(Player(i)), true)
      
        if name == "NOOBOFTHETURKEY" and udg_HiddenMessageNoob then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        elseif name == "JEDI2" and udg_HiddenMessageJedi then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        elseif name == "SPECY" and udg_HiddenMessageSpecy then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        endif
      
        set i = i + 1
    endloop
endfunction

function HiddenMessageCmSearch takes nothing returns nothing
    local integer i = 0
    local string name
    loop
        exitwhen i == 12
        set name = StringCase(GetPlayerName(Player(i)), true)
      
        if SubString(name, 0, 15) == "NOOBOFTHETURKEY" and udg_HiddenMessageNoob then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        elseif SubString(name, 0, 5) == "JEDI2" and udg_HiddenMessageJedi then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        elseif SubString(name, 0, 5) == "SPECY" and udg_HiddenMessageSpecy then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        endif
      
        set i = i + 1
    endloop
endfunction

function HiddenMessage takes string message returns nothing
    set udg_String = message
    if udg_CmOn then
        call ExecuteFunc("HiddenMessageCmSearch")
    else
        call ExecuteFunc("HiddenMessageSearch")
    endif
    set udg_HiddenMessageJedi = false
    set udg_HiddenMessageNoob = false
    set udg_HiddenMessageSpecy = false
endfunction

function GetHeroIcon takes unit u returns string
    local string s = null
    local integer id = GetUnitTypeId(u)
    local integer i = 1
    loop
        if id == udg_HeroTypes[i] then
            return udg_Hero_Icon[i]
        endif
        set i = i + 1
        exitwhen i == udg_Total_Heroes + 1
    endloop
  
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Error number 2, send this replay to [email protected]")
    return "ReplaceableTextures\\WorldEditUI\\DoodadPlaceholder.blp"
endfunction

function MultiboardSetWidth takes multiboard mb, integer column, integer row, real width returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row - 1, column - 1)
    call MultiboardSetItemWidth(mbitem, width / 100.00)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

function MultiboardSetStyle takes multiboard mb, integer column, integer row, boolean showValue, boolean showIcon returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row - 1, column - 1)
    call MultiboardSetItemStyle(mbitem, showValue, showIcon)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

function MultiboardSetValue takes multiboard mb, integer column, integer row, string value returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row - 1, column - 1)
    call MultiboardSetItemValue(mbitem, value)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

function MultiboardSetIcon takes multiboard mb, integer column, integer row, string iconFileName returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row - 1, column - 1)
    call MultiboardSetItemIcon(mbitem, iconFileName)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

Reminder: I don' understand about Jass coding. Don't assume i have a knowledge about that.
 

Attachments

  • yes.png
    yes.png
    42.6 KB · Views: 15
Level 17
Joined
Jun 2, 2009
Messages
1,137
It seems i am able to save my map when i delete these. I think they we're just messages. Am i right? But still i want to learn about rest of the trigger.

JASS:
function HiddenMessageSearch takes nothing returns nothing
    local integer i = 0
    local string name
    loop
        exitwhen i == 12
        set name = StringCase(GetPlayerName(Player(i)), true)
        
        if name == "NOOBOFTHETURKEY" and udg_HiddenMessageNoob then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        elseif name == "JEDI2" and udg_HiddenMessageJedi then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        elseif name == "SPECY" and udg_HiddenMessageSpecy then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        endif
        
        set i = i + 1
    endloop
endfunction

function HiddenMessageCmSearch takes nothing returns nothing
    local integer i = 0
    local string name
    loop
        exitwhen i == 12
        set name = StringCase(GetPlayerName(Player(i)), true)
        
        if SubString(name, 0, 15) == "NOOBOFTHETURKEY" and udg_HiddenMessageNoob then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        elseif SubString(name, 0, 5) == "JEDI2" and udg_HiddenMessageJedi then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        elseif SubString(name, 0, 5) == "SPECY" and udg_HiddenMessageSpecy then
            call DisplayTextToPlayer(Player(i), 0, 0, udg_String)
        endif
        
        set i = i + 1
    endloop
endfunction

function HiddenMessage takes string message returns nothing
    set udg_String = message
    if udg_CmOn then
        call ExecuteFunc("HiddenMessageCmSearch")
    else
        call ExecuteFunc("HiddenMessageSearch")
    endif
    set udg_HiddenMessageJedi = false
    set udg_HiddenMessageNoob = false
    set udg_HiddenMessageSpecy = false
endfunction
 
Level 39
Joined
Feb 27, 2007
Messages
5,012
I think they we're just messages. Am i right?
Yes, you are correct! (I specifically appreciate that you took the time to think this through and guess about which functions do what--it really shows that you're capable of learning more about triggers.) If enabled, they display a 'hidden' message to any players whose in-game names start with NOOBOFTHETURKEY, JEDI2, or SPECY. They're not currently enabled in the code you wrote.

All of the code in your first post is just defining functions (and 3 global variables) that can be called by other code. None of the code 'runs' automatically, so you don't have to worry about it being nefarious. It's likely that some other triggers in this map use some of these defined functions, so deleting them will cause compile errors that will prevent the map from being saved.

I think you should only delete the code that you mentioned in your second post (the messages stuff), and leave the rest. You could delete more and try to save to see which functions' deletions cause compile errors (because they are being called from other triggers). When you get an error like this it will say "Undeclared function FUNCTION_NAME_HERE"; what you need to do is add back in the function it says is missing. For example if it says "Undeclared function GetHeroIcon" you need to copy and paste the GetHeroIcon function back in.

Repeat this for all functions to find out which ones aren't used. It's possible you get multiple compile errors listed in the Syntax Errors window; if that happens, you only need to worry about trying to 'fix' the first one. When that one is fixed, try to save again and either you'll have 0 errors now or you'll have a different undefined function it's yelling about.
 
Level 17
Joined
Jun 2, 2009
Messages
1,137
@Bribe and @Pyrogasm thank you for your help. Read the first post, i already told i am able to save my map when i remove these but what about rest of the code? It looks like it includes a things about multiboard size and hero icons. If i understand what are these, i can make these as GUI. Because it is annoying to have a code that you don't understand.
 

Bribe

Code Moderator
Level 50
Joined
Sep 26, 2009
Messages
9,464
@Bribe and @Pyrogasm thank you for your help. Read the first post, i already told i am able to save my map when i remove these but what about rest of the code? It looks like it includes a things about multiboard size and hero icons. If i understand what are these, i can make these as GUI. Because it is annoying to have a code that you don't understand.
If you want to ask someone for this level of help, you should post it on the Requests forum rather than here (since this is a place for people who already know quite a bit about coding but may not have the time to convert something for you to GUI).

As for understanding the code, honestly (and I cannot stress this enough): learn to code. Either learn to use the script, or abandon it and all it does and do everything yourself as you see fit in GUI.
 
Level 17
Joined
Jun 2, 2009
Messages
1,137
If you want to ask someone for this level of help, you should post it on the Requests forum rather than here (since this is a place for people who already know quite a bit about coding but may not have the time to convert something for you to GUI).

As for understanding the code, honestly (and I cannot stress this enough): learn to code. Either learn to use the script, or abandon it and all it does and do everything yourself as you see fit in GUI.
I mean i just need someone who can read the code for me, so i can make it on the GUI. Converting is my problem don't worry.
 
Level 17
Joined
Jun 2, 2009
Messages
1,137
Not all JASS code can be converted to GUI in a reasonable way. People often resorted to writing JASS script directly to get around the limitations of GUI.
At least is someone can help me what is this doing?


JASS:
globals
    constant integer CLASS_STR = 1
    constant integer CLASS_AGI = 2
    constant integer CLASS_INT = 3
endglobals

native UnitAlive takes unit id returns boolean

function GetHeroIndexById takes integer id returns integer
    local integer i = 1
    loop
        if id == udg_HeroTypes[i] then
            return i
        endif
        set i = i + 1
        exitwhen i == udg_Total_Heroes + 1
    endloop
    return 0
endfunction

function GetHeroIndex takes unit u returns integer
    return GetHeroIndexById(GetUnitTypeId(u))
endfunction

function GetHeroClassById takes integer id returns integer
    return udg_HeroClass[GetHeroIndexById(id)]
endfunction

function GetHeroClass takes unit u returns integer
    return GetHeroClassById(GetUnitTypeId(u))
endfunction

function GetRandomHeroId takes nothing returns integer
    local integer random = GetRandomInt(1, udg_Total_Heroes)
    if udg_HeroChoosen[random] then
        return GetRandomHeroId()
    endif
    return random
endfunction

function GetRandomHeroIdByClass takes integer class returns integer
    local integer i = 0
    local integer id = 0
    loop
        set id = GetRandomHeroId()
        //call BJDebugMsg(I2S(id))
        //set i = GetHeroIndexById(id)
        exitwhen udg_HeroClass[id] == class
    endloop
    return id
endfunction

function GiveRandomHeroByClass takes player p, integer class returns unit
    local real x = GetStartLocationX(GetPlayerStartLocation(p))
    local real y = GetStartLocationY(GetPlayerStartLocation(p))
    set bj_lastCreatedUnit = CreateUnit(p, udg_HeroTypes[GetRandomHeroIdByClass(class)], x, y, 270.00)
    set udg_HeroChoosen[GetHeroIndex(bj_lastCreatedUnit)] = true
    return bj_lastCreatedUnit
endfunction

function GetRandomHero takes player owner returns unit
    set udg_Trig_Player = owner
    set udg_Yiit_Endstring = ""
    call TriggerExecute(gg_trg_Give_Random_Hero)
    if bj_lastCreatedUnit == null then
        call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Error number 4, send this replay to [email protected]")
        return GetRandomHero(owner)
    endif
    return bj_lastCreatedUnit
endfunction


function GetHeroIcon takes unit u returns string
    local string s = null
    local integer id = GetUnitTypeId(u)
    local integer i = 1
    loop
        if id == udg_HeroTypes[i] then
            return udg_Hero_Icon[i]
        endif
        set i = i + 1
        exitwhen i == udg_Total_Heroes + 1
    endloop
 
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Error number 2, send this replay to [email protected]")
    return "ReplaceableTextures\\WorldEditUI\\DoodadPlaceholder.blp"
endfunction

function MultiboardSetWidth takes multiboard mb, integer column, integer row, real width returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row - 1, column - 1)
    call MultiboardSetItemWidth(mbitem, width / 100.00)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

function MultiboardSetStyle takes multiboard mb, integer column, integer row, boolean showValue, boolean showIcon returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row - 1, column - 1)
    call MultiboardSetItemStyle(mbitem, showValue, showIcon)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

function MultiboardSetValue takes multiboard mb, integer column, integer row, string value returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row - 1, column - 1)
    call MultiboardSetItemValue(mbitem, value)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

function MultiboardSetIcon takes multiboard mb, integer column, integer row, string iconFileName returns nothing
    local multiboarditem mbitem = MultiboardGetItem(mb, row - 1, column - 1)
    call MultiboardSetItemIcon(mbitem, iconFileName)
    call MultiboardReleaseItem(mbitem)
    set mbitem = null
endfunction

It seems it is talking about random hero and multiboard but already have a triggers about it.
It will broke my random hero and multiboard triggers if i will remove this code?
I want to read it OR i want to convert it into GUI. Because i have a code in my map that i don't understand.

If i will share my multiboard and random hero triggers, can someone help me about that?
 
Level 39
Joined
Feb 27, 2007
Messages
5,012
At least is someone can help me what is this doing?
...
It will broke my random hero and multiboard triggers if i will remove this code?
... You could delete more and try to save to see which functions' deletions cause compile errors (because they are being called from other triggers). When you get an error like this it will say "Undeclared function FUNCTION_NAME_HERE"; what you need to do is add back in the function it says is missing. For example if it says "Undeclared function GetHeroIcon" you need to copy and paste the GetHeroIcon function back in.

Repeat this for all functions to find out which ones aren't used. It's possible you get multiple compile errors listed in the Syntax Errors window; if that happens, you only need to worry about trying to 'fix' the first one. When that one is fixed, try to save again and either you'll have 0 errors now or you'll have a different undefined function it's yelling about.
 
Level 17
Joined
Jun 2, 2009
Messages
1,137
I have already deleted messages. I mean rest of the code that refers multiboard and random hero thing.
No error means no problem? I don't understand what these things do and i don't know they will affect something or not.
Is someone can help me about that? Let me give you an example what kind of help i need

--- Example help requrest that i need ---

Someone: Hello JFAMAP can you help me about that? What is this? I don't understand?

  • NextTarget10
    • Events
      • Unit - A unit enters 13 <gen>
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ((Triggering unit) is in HerolarBotDevil) Equal to True
        • Then - Actions
          • Set CurrentTarget[(Player number of (Owner of (Triggering unit)))] = 13 <gen>
          • Unit - Set the custom value of (Entering unit) to 13
JFAMAP

You have a region called 13 and if someone enters in this region
If entering unit is in unitgroup HerolarBotDevil
There are point array trigger called NextTarget, it sets it's next raget at Region called 14
And sets the custom value of unit who enters to 13

Someone: Thank you. Now i understand what should i do. Now i can delete this trigger and create my own. OR now i have control over on this trigger. Thank you
 

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,198
At least is someone can help me what is this doing?
GetHeroIndexById, GetHeroIndex, GetHeroClassById, GetHeroClass, GetRandomHeroId, GetRandomHeroIdByClass, GiveRandomHeroByClass, GetRandomHero all seem to be utility methods for obtaining hero data specific to your map, from arrays initialised in some trigger elsewhere.

The constants seem to be related to obtaining hero primary attribute, likely in a system located elsewhere.

GetHeroIcon seems to be a utility method to get an icon from a hero, again using data located somewhere else. Likely for leaderboard or multiboard use?

MultiboardSetWidth, MultiboardSetStyle, MultiboardSetValue, MultiboardSetIcon are utility functions intended to manipulate multiboards more efficiently. This is a perfect example of something GUI cannot do since its multiboard manipulation functions are much less efficient at manipulating single items due to inbuilt loops. In old legacy builds of Warcraft III this inefficiency used to be a huge problem for bigger multiboards since it made GUI triggers manipulating a lot of individual cells (not using bulk fill) prone to hitting the thread execution op limit and crashing the thread before execution had finished. This should be less of an issue in more recent versions of Warcraft III as the op limit was drastically raised.
 
Level 17
Joined
Jun 2, 2009
Messages
1,137
GetHeroIndexById, GetHeroIndex, GetHeroClassById, GetHeroClass, GetRandomHeroId, GetRandomHeroIdByClass, GiveRandomHeroByClass, GetRandomHero all seem to be utility methods for obtaining hero data specific to your map, from arrays initialised in some trigger elsewhere.

The constants seem to be related to obtaining hero primary attribute, likely in a system located elsewhere.

GetHeroIcon seems to be a utility method to get an icon from a hero, again using data located somewhere else. Likely for leaderboard or multiboard use?

MultiboardSetWidth, MultiboardSetStyle, MultiboardSetValue, MultiboardSetIcon are utility functions intended to manipulate multiboards more efficiently. This is a perfect example of something GUI cannot do since its multiboard manipulation functions are much less efficient at manipulating single items due to inbuilt loops. In old legacy builds of Warcraft III this inefficiency used to be a huge problem for bigger multiboards since it made GUI triggers manipulating a lot of individual cells (not using bulk fill) prone to hitting the thread execution op limit and crashing the thread before execution had finished. This should be less of an issue in more recent versions of Warcraft III as the op limit was drastically raised.


Damn it... I have a complex mod called -captains mod and it changes many things with the ban/pick system with different multiboard.

Thank you for your help dear @Dr Super Good but i think this one exceeds my knowledge. I don't think i am gonna touch it but it is annoying also..


JASS:
scope CM initializer Init
globals
 
    //Cm modu yaz_ld_g_nda tum playerlere gosterilecek yaz_
    private constant string MODE_STRING = "Captains Mode Activated"
  
    //Ustteki cm modu yaz_s_n_n ekranda kac saniye gozukecegi
    private constant real MODE_STRING_TIME = 10.00
 
    //Cm multiboard_n_n oyunda gozuken ismi
    private constant string MULTIBOARD_NAME = "Captains Mode"
  
    //Cmdeki tum ban ve picklerin toplam say_s_
    private constant integer BAN_PICK_COUNT = 16
  
    // Cm Pick/Ban sirasi
    // 1 Sayisi Devil Ban
    // 2 Sayisi Devil Pick
    // 3 Sayisi Reaper Ban
    // 4 Sayisi Reaper Pick
    // 0 sayisi son anlamina gelir
    // anlamina gelir.
    // oyun s_ras_nda bu s_ralamay_ degistirebiliyorsun, mesela at_yorum
    // modu yazan kisi -cmReaper yada -cm2 yazinca once reaperin
    // pickleyecegi sekilde ayarla vs vs
    private string Cm_Turns = "1 3 1 3 2 4 4 2 2 4 1 3 4 2 2 4 0"
  
    //Ban phase s_ras_nda tavernlerin orada c_kacak floating textin yaz_s_
    private constant string BAN_TEXT = "|c00FF0000BAN|r"
  
    //Pick phase s_ras_nda tavernlerin orada c_kacak floating textin yaz_s_
    private constant string PICK_TEXT = "|c000000FFPICK|r"
  
    //Floating textlerde o s_rada pick/ban_ yapan kaptan_n ismi gozuksun mu
    private constant boolean TEXT_SHOW_CAPTAIN_NAMES = true
 
    //Hero secme suresi
    private constant integer CHOOSE_TIME =40
 
    //Extra hero secme suresi
    private constant integer EXTRA_TIME = 60
  
    //Cm bittikten sonra herolar_ sececek wisp gibi yaratigin id'si
    private constant integer HERO_SELECTOR_ID = 'e00L'
  
    //Cm modda playerlerin isminde aldiklari heronun ismi yazacakmi
    //Ornek: Jedi2(Shadow Mage)
    private constant boolean SET_PLAYER_NAME = false
  
    //Clan devil herolarinin picklenmelerinden onceki sahibi olacak playerin jass numarasi
    private constant integer DEVIL_HEROES_OWNER = PLAYER_NEUTRAL_PASSIVE
  
    //Clan reaper herolarinin picklenmelerinden onceki sahibi olacak playerin jass numarasi
    private constant integer REAPER_HEROES_OWNER = PLAYER_NEUTRAL_PASSIVE
  
    //Multiboardda picklenen herolar_n onunde yazacak yaz_
    private constant string PICK_STRING = "Picks:"
  
    //Multiboardda banlanan herolar_n onunde yazacak yaz_
    private constant string BAN_STRING = "Bans:"
  
    //Cm bittikten kac sn sonra map_n normal multiboardinin gorulecegi
    private constant real MULTIBOARD_SHOW_TIME = 0.00
      
    //Oyuna kac goldla baslanacagi
    private constant integer CM_START_GOLD = 700
  
    //Cm bittikten kac sn sonra creeplerin spawn olacagi
    private constant real CREEP_SPAWN_TIME = 120.00
  
endglobals

globals
    private string PlayerRedName
    private string PlayerGreenName
    private boolean Ban
    private string Check
    //private integer array PickedHeroes
   // private integer array BannedHeroes
endglobals
 
function SelectCmHero takes nothing returns boolean
    //bj_lastLoadedUnit = Secilen hero
    //bj_lastCreatedUnit = Secen wisp
    //bj_groupEnumOwningPlayer = Secen player
    local unit hero = LoadUnitHandle(udg_hash, GetHandleId(GetTriggeringTrigger()), 0)
    local unit wisp
    local player owner
    set bj_lastLoadedUnit = LoadUnitHandle(udg_hash, GetHandleId(GetTriggeringTrigger()), 0)
    //if GetUnitTypeId(GetEnteringUnit()) == HERO_SELECTOR_ID and (GetOwningPlayer(hero) == Player(DEVIL_HEROES_OWNER) or GetOwningPlayer(hero) == Player(REAPER_HEROES_OWNER)) then
  
    // GECICI NEUTRAL SORUNU USTTEKI IF CONDITION
    if GetUnitTypeId(GetEnteringUnit()) == HERO_SELECTOR_ID and (GetOwningPlayer(hero) == udg_ClanDevilPlayer or GetOwningPlayer(hero) == udg_ClanReaperPlayer) then
    // GECICI NEUTRAL SORUNU
  
        set wisp = GetEnteringUnit()
        set owner = GetOwningPlayer(wisp)
    //set udg_MB_Bool[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = true
        set udg_MB_Bool[GetConvertedPlayerId(owner)] = true
        call SetUnitOwner(hero, owner, true)
        call PauseUnit(hero, false)
        call RemoveUnit(wisp)
        call SetPlayerStateBJ(owner, PLAYER_STATE_RESOURCE_FOOD_USED, 0)
        if SET_PLAYER_NAME then
            //call SetPlayerName(owner, GetPlayerName(owner) + udg_Player_Colors[GetConvertedPlayerId(owner)]+"(" + GetUnitName(hero) + ")|r")
            call SetPlayerName(owner, GetPlayerName(owner)+"(" + GetUnitName(hero) + ")|r")
        endif
        if GetLocalPlayer() == owner then
            call ClearSelection()
            call SelectUnit(hero, true)
        endif
        call SetPlayerTechMaxAllowed(owner, 'HERO', 0)
        set udg_GOD_PlayerNumber = GetPlayerId(owner) + 1
        set udg_GOD_Hero[udg_GOD_PlayerNumber] = hero
        set udg_GOD_B = 1
        loop
            exitwhen udg_GOD_B > udg_GOD_ButtonNumber
            call DialogSetMessage(udg_GOD_Dialog[udg_GOD_PlayerNumber], "TRIGSTR_1266")
            set udg_GOD_DialogButton[( ( ( udg_GOD_PlayerNumber - 1 ) * 8 ) + udg_GOD_B )] = DialogAddButton(udg_GOD_Dialog[udg_GOD_PlayerNumber], udg_GOD_Buton_Name[udg_GOD_B], 0)
            set udg_GOD_B = udg_GOD_B + 1
        endloop
        call DialogDisplay(ConvertedPlayer(udg_GOD_PlayerNumber), udg_GOD_Dialog[udg_GOD_PlayerNumber], true)
        call FlushChildHashtable(udg_hash, GetHandleId(GetTriggeringTrigger()))
        call TriggerClearConditions(GetTriggeringTrigger())
        call DestroyTrigger(GetTriggeringTrigger())
        call MultiboardSetIcon( udg_NewTable, 1, udg_Table_PlayerLine[GetConvertedPlayerId(owner)], GetHeroIcon(hero) )
        set wisp = null
        set owner = null
    endif
    set hero = null
    return false
endfunction
 
function MULTIDEVAM takes nothing returns nothing
    call MultiboardDisplay(udg_NewTable, true)
    call DestroyTimer(GetExpiredTimer())
endfunction
 
//Pickler bittikten 120 sn sonra calisan trigger
function SpawnCreeps takes nothing returns nothing
    call DestroyTimer(GetExpiredTimer())
    // bak surda cm bitktten 120 sn sonra calisan bolum varmis hehe OHA YER B0TT0
endfunction
 
//Pickler bittikten 60 sn sonra calisan trigger
function SwitchMulti takes nothing returns nothing
    call DestroyMultiboard(udg_CmBoard)
    call TimerDialogDisplay(udg_TankTimerW, true)
    if udg_NewTable != null then
        call MultiboardDisplay(udg_NewTable, true)
    else
        call TriggerExecute(gg_trg_Table_Setup)
        call TimerStart(CreateTimer(), 1.00, false, function MULTIDEVAM)
    endif
    call TriggerExecute(gg_trg_Maden)
    call DestroyTimer(GetExpiredTimer())
endfunction
 
//Pickler bittikten sonra calisan kisim
function FinishCm takes nothing returns nothing
    local integer i = 0
    call SetPlayerName(udg_ClanDevilPlayer, "|CFFFF0303Clan Devil|r")
    call SetPlayerName(udg_ClanReaperPlayer, "|CFF20C000Clan Reaper|r")
    call SetPlayerName(Player(1), udg_PlayerNames[2])
    call SetPlayerName(Player(7), udg_PlayerNames[8])
    //call SetPlayerStateBJ(Player(1), PLAYER_STATE_RESOURCE_GOLD, udg_CmPlayer2Gold)
    //call SetPlayerStateBJ(Player(7), PLAYER_STATE_RESOURCE_GOLD, udg_CmPlayer8Gold)
 
    call SetPlayerMaxHeroesAllowed(0, Player(1))
    call SetPlayerMaxHeroesAllowed(0, Player(7))
  
    //// surayi GUI ile baglamak geldi simdi aklima
    call TriggerExecute(gg_trg_Comman_CM_Devam)
  
    ////call EnableTrigger(gg_trg_ExtraCreepsTIMER)
    ////call EnableTrigger(gg_trg_extra_creeps_vs_melee) //SUPHELI
    ////call EnableTrigger(gg_trg_Mekanik_Timer_ve_Ejder) //cmden sonra ac
    ////call TriggerExecute(gg_trg_Mekanik_Timer_ve_Ejder)
    ////call EnableTrigger(gg_trg_gametimer) //cmden sonra ac
    ////call EnableTrigger(gg_trg_Her_saniye_gold) //cmden sonra ac
    ////call EnableTrigger(gg_trg_Maden)
    ////call EnableTrigger(gg_trg_Heroes_Sent)
    ////call EnableTrigger(gg_trg_Table_Level_Update)
    ////call EnableTrigger(gg_trg_Table_Level_Update_Once)
    ////call EnableTrigger(gg_trg_Table_Kills_Deaths)
    ////call EnableTrigger(gg_trg_Table_Update_Lumbers)
    ////call TimerStart(udg_timer_creep_cikis_ap, 120.00, false, null)
    ////call TimerStart(udg_timer_nc_kucuk, 120.00, false, null)
    ////call TimerStart(udg_timer_lord_duyuru, 2580.00, false, null)
    ////call TimerStart(udg_timer_lord_creep_devam, 2760.00, false, null)
    call DestroyTextTag(udg_CmFloat)
    call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  |c007d7d7dEnd|r" )
    call MultiboardSetValue(udg_CmBoard, 7, 10, "|c006969FFStatus:|r  |c007d7d7dEnd|r" )
    loop
        exitwhen i == 6
        if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            call SetPlayerStateBJ( Player(i), PLAYER_STATE_RESOURCE_GOLD, CM_START_GOLD )
            set bj_lastCreatedUnit = CreateUnit(Player(i), HERO_SELECTOR_ID, GetRectCenterX(gg_rct_GameGuideDevil), GetRectCenterY(gg_rct_GameGuideDevil), 0)
            if GetLocalPlayer() == Player(i) then
                call PanCameraToTimed(GetRectCenterX(gg_rct_GameGuideDevil), GetRectCenterY(gg_rct_GameGuideDevil), 0.00)
                call ClearSelection()
                call SelectUnit(bj_lastCreatedUnit, true)
            endif
        endif
        set i = i + 1
    endloop
  
    set i = 7
      
    loop
        exitwhen i == 12
        if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            call SetPlayerStateBJ( Player(i), PLAYER_STATE_RESOURCE_GOLD, CM_START_GOLD )
            set bj_lastCreatedUnit = CreateUnit(Player(i), HERO_SELECTOR_ID, GetRectCenterX(gg_rct_GameGuideReaper), GetRectCenterY(gg_rct_GameGuideReaper), 0)
            if GetLocalPlayer() == Player(i) then
                call PanCameraToTimed(GetRectCenterX(gg_rct_GameGuideReaper), GetRectCenterY(gg_rct_GameGuideReaper), 0.00)
                call ClearSelection()
                call SelectUnit(bj_lastCreatedUnit, true)
            endif
        endif
        set i = i + 1
    endloop
    call TimerStart(CreateTimer(), MULTIBOARD_SHOW_TIME, false, function SwitchMulti)
  
  
    ////call TimerStart(CreateTimer(), CREEP_SPAWN_TIME, false, function Spawns)
  
    if GetPlayerSlotState(udg_ClanDevilPlayer) != PLAYER_SLOT_STATE_EMPTY then
        call SetPlayerName(udg_ClanDevilPlayer, PlayerRedName)
    endif
  
    if GetPlayerSlotState(udg_ClanReaperPlayer) != PLAYER_SLOT_STATE_EMPTY then
        call SetPlayerName(udg_ClanDevilPlayer, PlayerGreenName)
    endif
endfunction
 
public function SwitchToDevil takes boolean devil returns nothing
    if devil then
 
  
        // Lumber
        call SetPlayerStateBJ( Player(1), PLAYER_STATE_RESOURCE_LUMBER, 1 )
        // neden 2 tane lmber veriyoruz lan bilmem :D
        call SetPlayerStateBJ( Player(7), PLAYER_STATE_RESOURCE_LUMBER, 0 )
      
        // Food
        call SetPlayerStateBJ(Player(1), PLAYER_STATE_RESOURCE_FOOD_USED, 0)
        call SetPlayerStateBJ(Player(7), PLAYER_STATE_RESOURCE_FOOD_USED, 3)
      
 
        call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  Active" )
        call MultiboardSetValue(udg_CmBoard, 7, 10, "|c006969FFStatus:|r  |c007d7d7dWait|r" )
        set udg_CmCounter = 1
    else
 
      
        // Lumber
        call SetPlayerStateBJ( Player(1), PLAYER_STATE_RESOURCE_LUMBER, 0 )
        call SetPlayerStateBJ( Player(7), PLAYER_STATE_RESOURCE_LUMBER, 1 )
 
        // Food
        call SetPlayerStateBJ(Player(1), PLAYER_STATE_RESOURCE_FOOD_USED, 3)
        call SetPlayerStateBJ(Player(7), PLAYER_STATE_RESOURCE_FOOD_USED, 0)
 
 
        set udg_CmCounter = 2
        call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  |c007d7d7dWait|r" )
        call MultiboardSetValue(udg_CmBoard, 7, 10, "|c006969FFStatus:|r  Active" )
    endif
endfunction
 
function CmMovePickedUnit takes unit u, boolean devil returns nothing
    call PauseUnit(u, true)
    if devil then
      
        call SetUnitColor(u, PLAYER_COLOR_RED)
        call SetUnitFacing(u, 270.00)
        if udg_CmDevilPickCount == 1 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem2))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem2))
        elseif udg_CmDevilPickCount == 2 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem3))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem3))
        elseif udg_CmDevilPickCount == 3 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem4))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem4))
        elseif udg_CmDevilPickCount == 4 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem5))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem5))
        elseif udg_CmDevilPickCount == 5 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem6))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem6))
        endif
  
    else
      
        call SetUnitColor(u, PLAYER_COLOR_GREEN)
        call SetUnitFacing(u, 90.00)
        if udg_CmReaperPickCount == 1 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem8))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem8))
        elseif udg_CmReaperPickCount == 2 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem9))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem9))
        elseif udg_CmReaperPickCount == 3 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem10))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem10))
        elseif udg_CmReaperPickCount == 4 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem11))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem11))
        elseif udg_CmReaperPickCount == 5 then
            call SetUnitX(u, GetRectCenterX(gg_rct_PlayerItem12))
            call SetUnitY(u, GetRectCenterY(gg_rct_PlayerItem12))
        endif
  
    endif
endfunction
 
private function DevilBan takes unit picked returns nothing
    set udg_CmDevilBanCount = udg_CmDevilBanCount + 1
    set udg_CmReaperTime = CHOOSE_TIME
    set udg_HeroChoosen[GetHeroIndexById(GetUnitTypeId(picked))] = true
    call SetUnitOwner(picked, Player(DEVIL_HEROES_OWNER), false)
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 8.00, udg_PlayerNames[2]+" has banned "+ GetUnitName(picked))
    //call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  |c007d7d7dWait|r" )
    //call MultiboardSetValue(udg_CmBoard, 7, 10, "|c006969FFStatus:|r  Active" )
    call MultiboardSetStyle(udg_CmBoard, udg_CmDevilBanCount + 1, 3, false, true)
    call MultiboardSetIcon(udg_CmBoard, udg_CmDevilBanCount + 1, 3, GetHeroIcon(picked))
  
    call RemoveUnit(picked)
endfunction
 
private function DevilPick takes unit picked returns nothing
    set udg_CmDevilPickCount = udg_CmDevilPickCount + 1
    set udg_CmReaperTime = CHOOSE_TIME
    set udg_HeroChoosen[GetHeroIndexById(GetUnitTypeId(picked))] = true
    call SetUnitOwner(picked, Player(DEVIL_HEROES_OWNER), false)
  
    // GECICI NEUTRAL SORUNU
    call SetUnitOwner(picked, udg_ClanDevilPlayer, false)
    // GECICI NEUTRAL SORUNU
  
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 8.00, udg_PlayerNames[2]+" has selected "+ GetUnitName(picked))
    //call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  |c007d7d7dWait|r" )
    //call MultiboardSetValue(udg_CmBoard, 7, 10, "|c006969FFStatus:|r  Active" )
    call MultiboardSetStyle(udg_CmBoard, udg_CmDevilPickCount + 1, 5, false, true)
    call MultiboardSetIcon(udg_CmBoard, udg_CmDevilPickCount + 1, 5, GetHeroIcon(picked))
  
    call CmMovePickedUnit(picked, true)
    set udg_CmPickTrigger = CreateTrigger()
    call TriggerAddCondition(udg_CmPickTrigger, Condition(function SelectCmHero))
    call TriggerRegisterUnitInRange(udg_CmPickTrigger, picked, 120, null)
    call SaveUnitHandle(udg_hash, GetHandleId(udg_CmPickTrigger), 0, picked)
endfunction
 
private function ReaperBan takes unit picked returns nothing
    set udg_CmReaperBanCount = udg_CmReaperBanCount + 1
    set udg_CmDevilTime = CHOOSE_TIME
    set udg_HeroChoosen[GetHeroIndexById(GetUnitTypeId(picked))] = true
    call SetUnitOwner(picked, Player(REAPER_HEROES_OWNER), true)
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, udg_PlayerNames[8]+" has banned "+ GetUnitName(picked))
    //call MultiboardSetValue(udg_CmBoard, 7, 10, "|c006969FFStatus:|r  |c007d7d7dWait|r" )
    //call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  Active" )
    call MultiboardSetStyle(udg_CmBoard, udg_CmReaperBanCount + 7, 3, false, true)
    call MultiboardSetIcon(udg_CmBoard, udg_CmReaperBanCount + 7, 3, GetHeroIcon(picked))
  
    call RemoveUnit(picked)
endfunction
 
private function ReaperPick takes unit picked returns nothing
    set udg_CmReaperPickCount = udg_CmReaperPickCount + 1
    set udg_CmDevilTime = CHOOSE_TIME
    set udg_HeroChoosen[GetHeroIndexById(GetUnitTypeId(picked))] = true
    call SetUnitOwner(picked, Player(REAPER_HEROES_OWNER), true)
  
    // GECICI NEUTRAL SORUNU
    call SetUnitOwner(picked, udg_ClanReaperPlayer, false)
    // GECICI NEUTRAL SORUNU
  
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 8.00, udg_PlayerNames[8]+" has selected "+ GetUnitName(picked))
    call MultiboardSetValue(udg_CmBoard, 7, 10, "|c006969FFStatus:|r  |c007d7d7dWait|r" )
    ////call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  Active" )
    call MultiboardSetStyle(udg_CmBoard, udg_CmReaperPickCount + 7, 5, false, true)
    call MultiboardSetIcon(udg_CmBoard, udg_CmReaperPickCount + 7, 5, GetHeroIcon(picked))
  
    call CmMovePickedUnit(picked, false)
    set udg_CmPickTrigger = CreateTrigger()
    call TriggerAddCondition(udg_CmPickTrigger, Condition(function SelectCmHero))
    call TriggerRegisterUnitInRange(udg_CmPickTrigger, picked, 120, null)
    call SaveUnitHandle(udg_hash, GetHandleId(udg_CmPickTrigger), 0, picked)
endfunction
 
private function CheckTurn takes nothing returns boolean
    local integer sum = udg_CmDevilBanCount + udg_CmReaperBanCount + udg_CmDevilPickCount + udg_CmReaperPickCount
    local string char = SubString(Cm_Turns, 2 * sum, 2 * sum + 1)
  
    set Check = char
  
    if char == "1" then //Devil ban
        call SwitchToDevil(true)
        set Ban = true
        if TEXT_SHOW_CAPTAIN_NAMES then
            call SetTextTagTextBJ(udg_CmFloat, udg_PlayerNames[2]+" - "+BAN_TEXT, 20.00 )
        else
            call SetTextTagTextBJ(udg_CmFloat, BAN_TEXT, 20.00 )
        endif
        //call SetTextTagColorBJ(udg_CmFloat, 0, 0, 100, 0 )
    elseif char == "2" then //Devil pick
        call SwitchToDevil(true)
        set Ban = false
        if TEXT_SHOW_CAPTAIN_NAMES then
            call SetTextTagTextBJ(udg_CmFloat, udg_PlayerNames[2]+" - "+PICK_TEXT, 20.00 )
        else
            call SetTextTagTextBJ(udg_CmFloat, PICK_TEXT, 20.00 )
        endif
        //call SetTextTagColorBJ(udg_CmFloat, 0, 0, 100, 0 )
    elseif char == "3" then //Reaper ban
        call SwitchToDevil(false)
        set Ban = true
        if TEXT_SHOW_CAPTAIN_NAMES then
            call SetTextTagTextBJ(udg_CmFloat, udg_PlayerNames[8]+" - "+BAN_TEXT, 20.00 )
        else
            call SetTextTagTextBJ(udg_CmFloat, BAN_TEXT, 20.00 )
        endif
        //call SetTextTagColorBJ(udg_CmFloat, 0, 0, 100, 0 )
    elseif char == "4" then //Reaper pick
        call SwitchToDevil(false)
        set Ban = false
        if TEXT_SHOW_CAPTAIN_NAMES then
            call SetTextTagTextBJ(udg_CmFloat, udg_PlayerNames[8]+" - "+PICK_TEXT, 20.00 )
        else
            call SetTextTagTextBJ(udg_CmFloat, PICK_TEXT, 20.00 )
        endif
        //call SetTextTagColorBJ(udg_CmFloat, 0, 0, 100, 0 )
    elseif char == "0" or sum == BAN_PICK_COUNT then //End cm
        return false
    else
        call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Error number 0, send this replay to [email protected]")
    endif
    return true
endfunction
 
function CmDevilFirstBan takes nothing returns nothing
    local unit u
    local integer i = 0
    local player picker
 
    if GetTriggerEventId() == EVENT_PLAYER_UNIT_SELL then
         // Lumber
        call SetPlayerStateBJ( Player(1), PLAYER_STATE_RESOURCE_LUMBER, 0 )
        call SetPlayerStateBJ( Player(7), PLAYER_STATE_RESOURCE_LUMBER, 0 )
 
        // Food
        call SetPlayerStateBJ(Player(1), PLAYER_STATE_RESOURCE_FOOD_USED, 3)
        call SetPlayerStateBJ(Player(7), PLAYER_STATE_RESOURCE_FOOD_USED, 3)
    endif
  
    if CheckTurn() == false then
        call TriggerClearConditions(GetTriggeringTrigger())
        call DestroyTrigger(GetTriggeringTrigger())
        call FinishCm()
        return
    endif
  
    if GetTriggerEventId() == EVENT_PLAYER_UNIT_SELL then //Bir Hero Satildiysa
        set u = GetSoldUnit()
 
      
 
      
//        //TEST
//        set picker = GetOwningPlayer(u)
//       
//        if picker == Player(1) then
//            // Hero pickleyen tak_m devil ise
//            if Check != "1" or Check != "2" then
//                // Pick sirasi devilda degilse
//                call DisplayTextToForce( GetPlayersAll(), ( ( udg_PlayerNames[GetConvertedPlayerId(picker)] + " hero aldi." ) + "" ) )
//                call SetPlayerMaxHeroesAllowed( 0, picker )
//                call SetPlayerStateBJ( picker, PLAYER_STATE_RESOURCE_LUMBER, 0 )
//            endif
//        else
//            // Hero pickleyen tak_m reaper ise
//            if Check != "3" or Check != "4" then
//                // Pick sirasi reaperda
//                call DisplayTextToForce( GetPlayersAll(), ( ( udg_PlayerNames[GetConvertedPlayerId(picker)] + " hero aldi." ) + "" ) )
//                call SetPlayerMaxHeroesAllowed( 0, picker )
//                call SetPlayerStateBJ( picker, PLAYER_STATE_RESOURCE_LUMBER, 0 )
//           endif
//        endif
//       
//       set picker = null
//        //TEST
      
      
        loop
            exitwhen i == 12
            call SetPlayerTechMaxAllowed(Player(i), GetUnitTypeId(u), 0)
            set i = i + 1
        endloop
      
        if udg_CmCounter == 1 then //Satin Alan Devilse
            if Ban then
                call DevilBan(u)
                set u = null
                return //Devil hero banladi, actionlari sonlandir.
            else
                call DevilPick(u)
                set u = null
                return //Devil bir hero ald_, actionlari sonlandir
            endif
        elseif udg_CmCounter == 2 then //Satin Alan Reaperse
            if Ban then
                call ReaperBan(u)
                set u = null
                return //Reaper hero banladi, actionlari sonlandir.
            else
                call ReaperPick(u)
                set u = null
                return //Reaper bir hero ald_, actionlari sonlandir
            endif
        endif
        set u = null
  
  
    else //Hero satin alinmamis, timer tickler.
        if udg_CmCounter == 1 then //Pick - Ban sirasi devildeyse,
        if udg_CmDevilTime > 0 then //Devilin suresini kontrol et
            set udg_CmDevilTime = udg_CmDevilTime - 1
            call MultiboardSetValue(udg_CmBoard, 1, 7, "|c006969FFTime:|r  |c007d7d7d"+I2S(udg_CmDevilTime)+"|r")
        else //Devilin suresini dolmussa
            if udg_CmDevilExtra > 0 then //Devilin extrasini kontrol et
                set udg_CmDevilExtra = udg_CmDevilExtra - 1
                call MultiboardSetValue(udg_CmBoard, 1, 8, "|c006969FFExtra:|r  |c007d7d7d"+I2S(udg_CmDevilExtra)+"|r")
            else //Devilin suresi bitmis, random bir hero verin lavuklara
                //GET RANDOM HERO
                set u = GetRandomHero(Player(DEVIL_HEROES_OWNER))
                    if Ban then
                        call DevilBan(u)
                        return //Devil random bir hero banladi, actionlari sonlandir.
                    endif
                    call DevilPick(u)
                    return //Devil random bir hero ald_, actionlari sonlandir
                endif
            endif
        elseif udg_CmCounter == 2 then //Pick - Ban sirasi reaperde
            if udg_CmReaperTime > 0 then //Reaperin suresini kontrol et
                set udg_CmReaperTime = udg_CmReaperTime - 1
                call MultiboardSetValue(udg_CmBoard, 7, 7, "|c006969FFTime:|r  |c007d7d7d"+I2S(udg_CmReaperTime)+"|r")
            else // Reaperin suresi dolmussa
                if udg_CmReaperExtra > 0 then //Reaperin extrasini kontrol et
                    set udg_CmReaperExtra = udg_CmReaperExtra - 1
                    call MultiboardSetValue(udg_CmBoard, 7, 8, "|c006969FFExtra:|r  |c007d7d7d"+I2S(udg_CmReaperExtra)+"|r")
                else //Reaperin suresi bitmis, random bir hero verin lavuklara
                    set u = GetRandomHero(Player(REAPER_HEROES_OWNER))
                    if Ban then
                        call ReaperBan(u)
                        return //Reaper random bir hero banladi, actionlari sonlandir.
                    endif
                    call ReaperPick(u)
                    return //Reaper random bir hero ald_, actionlari sonlandir
                endif
            endif
        endif
    endif
endfunction
 
private function StartDeleteHeroes takes nothing returns boolean
    local unit u=GetFilterUnit()
    local player p=GetOwningPlayer(u)
    if IsUnitType(u,UNIT_TYPE_HERO)==true and p!=udg_ClanDevilPlayer and p!=udg_ClanReaperPlayer and p!=Player(PLAYER_NEUTRAL_PASSIVE)and p!=Player(PLAYER_NEUTRAL_AGGRESSIVE)and p!=Player(bj_PLAYER_NEUTRAL_EXTRA)and p!=Player(bj_PLAYER_NEUTRAL_VICTIM)then
            call RemoveUnit(u)
    endif
    set u=null
    set p=null
    return false
endfunction
 
private function DisableTriggers takes nothing returns nothing
    call DisableTrigger(gg_trg_Table_Setup)
    call DisableTrigger(gg_trg_Table_Level_Update)
    call DisableTrigger(gg_trg_Table_Level_Update_Once)
    call DisableTrigger(gg_trg_Table_Kills_Deaths)
    call DisableTrigger(gg_trg_Table_Update_Lumbers)
    call DisableTrigger(gg_trg_Normal_Pick)
    call DisableTrigger(gg_trg_Ability_Setup_2)
    call DisableTrigger(gg_trg_Heroes_Sent)
    call DisableTrigger(gg_trg_Command_Random)
    call DisableTrigger(gg_trg_Command_SH )
    call DisableTrigger(gg_trg_Command_TEST)
    call DisableTrigger(gg_trg_Command_PM)
    //creepler cm oncesi turn off
    //call DisableTrigger( gg_trg_Command_CM_Old )
    call DisableTrigger( gg_trg_Command_VS )
    //Sonradan acilacak olanlarin listesi
 
    call DisableTrigger(gg_trg_Mekanik_Timer_ve_Ejder) //cmden sonra ac
    call DisableTrigger(gg_trg_gametimer) //cmden sonra ac
    call DisableTrigger(gg_trg_Her_saniye_gold) //cmden sonra ac
    call DisableTrigger(gg_trg_Maden)
    call DisableTrigger(gg_trg_Maden_Gold)
  
  
endfunction
  
function GOGOCM takes nothing returns nothing
    local integer i = 1
    local trigger cm = CreateTrigger()
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, MODE_STRING_TIME, MODE_STRING)
  
    set udg_CmBoard = CreateMultiboard()
    set udg_CmOn = true
    call TriggerExecute(gg_trg_CM_yazilirsa)
  
    if GetPlayerSlotState(udg_ClanDevilPlayer) != PLAYER_SLOT_STATE_EMPTY then
        set PlayerRedName = GetPlayerName(udg_ClanDevilPlayer)
    endif
  
    if GetPlayerSlotState(udg_ClanReaperPlayer) != PLAYER_SLOT_STATE_EMPTY then
        set PlayerGreenName = GetPlayerName(udg_ClanReaperPlayer)
    endif
  
  
    call DisableTriggers()
  
    set udg_FirstCreepWaveTime = 120
  
    call TimerDialogDisplay(udg_TankTimerW, false)
    call PauseTimer(udg_Tank_TimerSiege)
    //Training dummyleri silme
    call RemoveUnit( gg_unit_h00X_0002 )
    call RemoveUnit( gg_unit_h00X_0061 )
  
        if udg_NewTable != null then
        call MultiboardDisplay(udg_NewTable, false)
    endif
    if udg_MadenWindow[1] != null then
        call DestroyTimerDialog(udg_MadenWindow[1])
        call PauseTimer(udg_MadenTimer[1])
        set udg_MadenTime = 5000.00
        set udg_MadenTick[1] = 1
        set udg_MadenWindow[1] = null
    endif
  
  
    call MultiboardSetRowCount(udg_CmBoard, 10)
    call MultiboardSetColumnCount(udg_CmBoard, 12)
    call MultiboardSetTitleText(udg_CmBoard, MULTIBOARD_NAME)
    call MultiboardDisplay(udg_CmBoard, true)
  
    call MultiboardSetWidth(udg_CmBoard, 1, 1, 6.00)
    call MultiboardSetWidth(udg_CmBoard, 1, 2, 6.00)
    call MultiboardSetWidth(udg_CmBoard, 1, 3, 3.00)
    //               
    call MultiboardSetWidth(udg_CmBoard, 7, 1, 6.00)
    call MultiboardSetWidth(udg_CmBoard, 7, 2, 6.00)
  
    loop
        exitwhen i > 12
        call MultiboardSetStyle(udg_CmBoard, i, 1, true, false )
        call MultiboardSetStyle(udg_CmBoard, i, 2, true, false )
        call MultiboardSetStyle(udg_CmBoard, i, 4, true, false )
        call MultiboardSetStyle(udg_CmBoard, i, 6, true, false )
        call MultiboardSetStyle(udg_CmBoard, i, 7, true, false )
        call MultiboardSetStyle(udg_CmBoard, i, 8, true, false )
        call MultiboardSetStyle(udg_CmBoard, i, 9, true, false )
        call MultiboardSetStyle(udg_CmBoard, i, 10, true, false )
        call MultiboardSetStyle(udg_CmBoard, 1, i, true, false )
        call MultiboardSetStyle(udg_CmBoard, 7, i, true, false )
        call MultiboardSetWidth(udg_CmBoard, 2, i, 1.20 )
        call MultiboardSetWidth(udg_CmBoard, 3, i, 1.20 )
        call MultiboardSetWidth(udg_CmBoard, 4, i, 1.20 )
        call MultiboardSetWidth(udg_CmBoard, 5, i, 1.20 )
        call MultiboardSetWidth(udg_CmBoard, 6, i, 1.20 )
        // ORTA
        call MultiboardSetWidth(udg_CmBoard, 8, i, 1.20 )
        call MultiboardSetWidth(udg_CmBoard, 9, i, 1.20 )
        call MultiboardSetWidth(udg_CmBoard, 10, i, 1.20 )
        call MultiboardSetWidth(udg_CmBoard, 11, i, 1.20 )
        call MultiboardSetWidth(udg_CmBoard, 12, i, 1.20 )
        set i = i + 1
    endloop
    call MultiboardSetValue(udg_CmBoard, 1, 1, udg_PlayerNames[2])
    call MultiboardSetValue(udg_CmBoard, 7, 1, udg_PlayerNames[8])
    call MultiboardSetWidth(udg_CmBoard, 1, 1, 8.00)
    call MultiboardSetWidth(udg_CmBoard, 2, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 3, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 4, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 5, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 6, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 7, 1, 8.00)
    call MultiboardSetWidth(udg_CmBoard, 8, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 9, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 10, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 11, 1, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 12, 1, 0.20)
  
  
    call MultiboardSetValue(udg_CmBoard, 1, 2, "                                                                                             " )
    call MultiboardSetValue(udg_CmBoard, 7, 2, "                                                                                             " )
    call MultiboardSetValue(udg_CmBoard, 1, 3, "|c006969FF"+BAN_STRING+"|r" )
    call MultiboardSetValue(udg_CmBoard, 7, 3, "|c006969FF"+BAN_STRING+"|r" )
    call MultiboardSetValue(udg_CmBoard, 1, 4, "                                                                                             " )
    call MultiboardSetValue(udg_CmBoard, 7, 4, "                                                                                             " )
    call MultiboardSetValue(udg_CmBoard, 1, 5, "|c006969FF"+PICK_STRING+"|r" )
    call MultiboardSetValue(udg_CmBoard, 7, 5, "|c006969FF"+PICK_STRING+"|r" )
    call MultiboardSetValue(udg_CmBoard, 1, 6, "                                                                                             " )
    call MultiboardSetValue(udg_CmBoard, 7, 6, "                                                                                             " )
    call MultiboardSetWidth(udg_CmBoard, 1, 7, 5.00)
    call MultiboardSetWidth(udg_CmBoard, 7, 7, 5.00)
    call MultiboardSetWidth(udg_CmBoard, 1, 8, 5.00)
    call MultiboardSetWidth(udg_CmBoard, 7, 8, 5.00)
  
    call MultiboardSetWidth(udg_CmBoard, 2, 7, 0.15)
    call MultiboardSetWidth(udg_CmBoard, 2, 8, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 3, 8, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 4, 8, 0.20)
    call MultiboardSetWidth(udg_CmBoard, 5, 8, 2.25)
    call MultiboardSetWidth(udg_CmBoard, 3, 7, 0.20)
    set udg_CmDevilTime = CHOOSE_TIME
    set udg_CmReaperTime = CHOOSE_TIME
    set udg_CmDevilExtra = EXTRA_TIME
    set udg_CmReaperExtra = EXTRA_TIME
    call MultiboardSetValue(udg_CmBoard, 1, 7, "|c006969FFTime:|r  |c007d7d7d"+I2S(CHOOSE_TIME)+"|r")
    call MultiboardSetValue(udg_CmBoard, 7, 7, "|c006969FFTime:|r  |c007d7d7d"+I2S(CHOOSE_TIME)+"|r")
    call MultiboardSetValue(udg_CmBoard, 1, 8, "|c006969FFExtra:|r  |c007d7d7d"+I2S(EXTRA_TIME)+"|r")
    call MultiboardSetValue(udg_CmBoard, 7, 8, "|c006969FFExtra:|r  |c007d7d7d"+I2S(EXTRA_TIME)+"|r")
  
    call MultiboardSetValue(udg_CmBoard, 1, 9, "                                                                                             " )
    call MultiboardSetValue(udg_CmBoard, 7, 9, "                                                                                             " )
    call MultiboardSetWidth(udg_CmBoard, 2, 10, 0.02)
    call MultiboardSetWidth(udg_CmBoard, 3, 10, 0.02)
    call MultiboardSetWidth(udg_CmBoard, 4, 10, 0.02)
    call MultiboardSetWidth(udg_CmBoard, 5, 10, 1.00)
    call MultiboardSetWidth(udg_CmBoard, 6, 10, 0.02)
    call MultiboardSetWidth(udg_CmBoard, 8, 10, 0.02)
    call MultiboardSetWidth(udg_CmBoard, 9, 10, 0.02)
    call MultiboardSetWidth(udg_CmBoard, 10, 10, 0.02)
    call MultiboardSetWidth(udg_CmBoard, 11, 10, 0.02)
    call MultiboardSetWidth(udg_CmBoard, 1, 10, 8.00)
    call MultiboardSetWidth(udg_CmBoard, 7, 10, 8.00)
    call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  |c007d7d7dWait|r" )
    call MultiboardSetValue(udg_CmBoard, 7, 10, "|c006969FFStatus:|r  |c007d7d7dWait|r" )
  
  
    // TEST
    set i = 2
    loop
        exitwhen i > 6
        //call MultiboardSetItemIconBJ(udg_CmBoard, i, 3, "UI\\Feedback\\Resources\\ResourceGold.blp" )
        //call MultiboardSetItemIconBJ(udg_CmBoard, i, 5, "UI\\Feedback\\Resources\\ResourceGold.blp" )
        call MultiboardSetStyle(udg_CmBoard, i, 3, false, false )
        call MultiboardSetStyle(udg_CmBoard, i, 5, false, false )
        set i = i + 1
    endloop
    set i = 8
    loop
        exitwhen i > 12
        //call MultiboardSetItemIconBJ(udg_CmBoard, i, 3, "UI\\Feedback\\Resources\\ResourceGold.blp" )
        //call MultiboardSetItemIconBJ(udg_CmBoard, i, 5, "UI\\Feedback\\Resources\\ResourceGold.blp" )
        call MultiboardSetStyle(udg_CmBoard, i, 3, false, false )
        call MultiboardSetStyle(udg_CmBoard, i, 5, false, false )
        set i = i + 1
    endloop
    // TEST
    call GroupEnumUnitsInRect(bj_lastCreatedGroup, bj_mapInitialPlayableArea, Condition(function StartDeleteHeroes))
    set i = 2
    loop
        exitwhen i == 12
        call SetPlayerStateBJ( Player(i), PLAYER_STATE_RESOURCE_FOOD_USED, 3 )
        call SetPlayerStateBJ( Player(i), PLAYER_STATE_RESOURCE_LUMBER, 0 )
        call SetPlayerStateBJ( Player(i), PLAYER_STATE_RESOURCE_GOLD, 0 )
        set i = i + 1
    endloop
  
    call SetPlayerStateBJ( Player(1), PLAYER_STATE_RESOURCE_LUMBER, 1 )
  
    //Mavi ve pembenin goldlari
    call SetPlayerStateBJ( Player(1), PLAYER_STATE_RESOURCE_GOLD, 3000 )
    call SetPlayerStateBJ( Player(7), PLAYER_STATE_RESOURCE_GOLD, 3000 )
  
  
    set udg_CmCounter = 1 // 1 == Devil
    call CheckTurn()
    call MultiboardSetValue(udg_CmBoard, 1, 10, "|c006969FFStatus:|r  Active" )
    call MultiboardMinimize(udg_CmBoard, true)
    call MultiboardMinimize(udg_CmBoard, false)
    call TriggerRegisterTimerEvent(cm, 1.00, true)
    call TriggerRegisterPlayerUnitEvent(cm, Player(PLAYER_NEUTRAL_PASSIVE), EVENT_PLAYER_UNIT_SELL, null)
    call TriggerAddAction(cm, function CmDevilFirstBan)
    set udg_CmFloat = CreateTextTagLocBJ("", GetRectCenter(gg_rct_StartCamera), 0.00, 20.00, 100.00, 0, 0, 0)
    set udg_CmPlayer2Gold = GetPlayerState(Player(1), PLAYER_STATE_RESOURCE_GOLD)
    set udg_CmPlayer8Gold = GetPlayerState(Player(7), PLAYER_STATE_RESOURCE_GOLD)
    call SetPlayerStateBJ(Player(1), PLAYER_STATE_RESOURCE_GOLD, 3000)
    call SetPlayerStateBJ(Player(7), PLAYER_STATE_RESOURCE_GOLD, 3000)
    call SetPlayerName(udg_ClanDevilPlayer, "|CFFFF0303Clan Devil|r")
    call SetPlayerName(udg_ClanReaperPlayer, "|CFF20C000Clan Reaper|r")
endfunction
 
//===========================================================================
private function Init takes nothing returns nothing
    set gg_trg_Command_CM = CreateTrigger()
    call TriggerRegisterPlayerChatEvent(gg_trg_Command_CM, Player(1), "-cm", true)
    call TriggerAddAction(gg_trg_Command_CM, function GOGOCM)
endfunction
endscope
 
Status
Not open for further replies.
Top