globals
integer DebugLog__CurrentString=0
integer DebugLog__Seconds=0
integer DebugLog__Minutes=0
constant integer DebugLog__StringLimit=200
boolean array udg_CamT
unit array udg_Hero
integer array udg_Exp_XP
boolean array udg_ShopCam
integer array udg_Items
boolean array udg_Repick_Log
multiboard array udg_LMB
destructable array udg_ShopDes
boolean udg_GameEnd=false
texttag array udg_ShopText1
texttag array udg_ShopText2
player udg_Host=null
string array udg_DebugStr
real array udg_Player_StartX
real array udg_Player_StartY
boolean array udg_VM_Log
fogmodifier array udg_HeroPickVision
fogmodifier array udg_ShopVision
boolean array udg_CamMod
sound array udg_Speech
rect gg_rct_Akatsuki_Bot_O1=null
rect gg_rct_Akatsuki_Bot_O1_Healer_1=null
rect gg_rct_Akatsuki_Bot_O1_Healer_2=null
rect gg_rct_Akatsuki_Bot_O2=null
rect gg_rct_Akatsuki_Bot_O2_Healer_1=null
rect gg_rct_Akatsuki_Bot_O2_Healer_2=null
rect gg_rct_Akatsuki_Head=null
rect gg_rct_Akatsuki_NC_1=null
rect gg_rct_Akatsuki_NC_10=null
rect gg_rct_Akatsuki_NC_2=null
rect gg_rct_Akatsuki_NC_3=null
rect gg_rct_Akatsuki_NC_4=null
rect gg_rct_Akatsuki_NC_5=null
rect gg_rct_Akatsuki_NC_6=null
rect gg_rct_Akatsuki_NC_7=null
rect gg_rct_Akatsuki_NC_8=null
rect gg_rct_Akatsuki_NC_9=null
rect gg_rct_Akatsuki_Top_O1=null
rect gg_rct_Akatsuki_Top_O1_Healer_1=null
rect gg_rct_Akatsuki_Top_O1_Healer_2=null
rect gg_rct_Akatsuki_Top_O2=null
rect gg_rct_Akatsuki_Top_O2_Healer_1=null
rect gg_rct_Akatsuki_Top_O2_Healer_2=null
rect gg_rct_AkatsukiBotGuard1=null
rect gg_rct_AkatsukiBotGuard2=null
rect gg_rct_AkatsukiBotGuardBounds=null
rect gg_rct_AkatsukiDefeatEffect=null
rect gg_rct_AkatsukiSasoriHirukoRepair=null
rect gg_rct_AkatsukiTopGuard1=null
rect gg_rct_AkatsukiTopGuard2=null
rect gg_rct_AkatsukiTopGuardBounds=null
rect gg_rct_Alliance_Bot_O1=null
rect gg_rct_Alliance_Bot_O1_Healer_1=null
rect gg_rct_Alliance_Bot_O1_Healer_2=null
rect gg_rct_Alliance_Bot_O2=null
rect gg_rct_Alliance_Bot_O2_Healer_1=null
rect gg_rct_Alliance_Bot_O2_Healer_2=null
rect gg_rct_Alliance_Head=null
rect gg_rct_Alliance_NC_1=null
rect gg_rct_Alliance_NC_10=null
rect gg_rct_Alliance_NC_2=null
rect gg_rct_Alliance_NC_3=null
rect gg_rct_Alliance_NC_4=null
rect gg_rct_Alliance_NC_5=null
rect gg_rct_Alliance_NC_6=null
rect gg_rct_Alliance_NC_7=null
rect gg_rct_Alliance_NC_8=null
rect gg_rct_Alliance_NC_9=null
rect gg_rct_Alliance_Top_O1=null
rect gg_rct_Alliance_Top_O1_Healer_1=null
rect gg_rct_Alliance_Top_O1_Healer_2=null
rect gg_rct_Alliance_Top_O2=null
rect gg_rct_Alliance_Top_O2_Healer_1=null
rect gg_rct_Alliance_Top_O2_Healer_2=null
rect gg_rct_AllianceBotGuard1=null
rect gg_rct_AllianceBotGuard2=null
rect gg_rct_AllianceBotGuardBounds=null
rect gg_rct_AllianceDefeatEffect=null
rect gg_rct_AllianceSasoriHirukoRepair=null
rect gg_rct_AllianceTopGuard1=null
rect gg_rct_AllianceTopGuard2=null
rect gg_rct_AllianceTopGuardBounds=null
rect gg_rct_Boss=null
rect gg_rct_Creeps_Akatsuki_Bot=null
rect gg_rct_Creeps_Akatsuki_Down_2=null
rect gg_rct_Creeps_Akatsuki_Down_3=null
rect gg_rct_Creeps_Akatsuki_Down_4=null
rect gg_rct_Creeps_Akatsuki_Top=null
rect gg_rct_Creeps_Akatsuki_Up_2=null
rect gg_rct_Creeps_Akatsuki_Up_3=null
rect gg_rct_Creeps_Akatsuki_Up_4=null
rect gg_rct_Creeps_Akatsuki_Up_5=null
rect gg_rct_Creeps_Alliance_Bot=null
rect gg_rct_Creeps_Alliance_Top=null
rect gg_rct_Creeps_Down=null
rect gg_rct_Creeps_Konoha_Down_2=null
rect gg_rct_Creeps_Konoha_Down_3=null
rect gg_rct_Creeps_Konoha_Down_4=null
rect gg_rct_Creeps_Konoha_Down_5=null
rect gg_rct_Creeps_Konoha_Up_2=null
rect gg_rct_Creeps_Konoha_Up_3=null
rect gg_rct_Creeps_Konoha_Up_4=null
rect gg_rct_Creeps_Up=null
rect gg_rct_CreepsAkatsukiSpecialGroup1=null
rect gg_rct_CreepsAkatsukiSpecialGroup2=null
rect gg_rct_CreepsAkatsukiSpecialGroup3=null
rect gg_rct_CreepsAkatsukiSpecialGroup4=null
rect gg_rct_CreepsAkatsukiSpecialGroup5=null
rect gg_rct_CreepsAkatsukiSpecialGroup6=null
rect gg_rct_CreepsAkatsukiSpecialGroup7=null
rect gg_rct_CreepsAllianceSpecialGroup1=null
rect gg_rct_CreepsAllianceSpecialGroup2=null
rect gg_rct_CreepsAllianceSpecialGroup3=null
rect gg_rct_CreepsAllianceSpecialGroup4=null
rect gg_rct_CreepsAllianceSpecialGroup5=null
rect gg_rct_CreepsAllianceSpecialGroup6=null
rect gg_rct_CreepsAllianceSpecialGroup7=null
rect gg_rct_Dolina_Effect=null
rect gg_rct_Duel=null
rect gg_rct_DuelAkatsukiP1=null
rect gg_rct_DuelAllianceP1=null
rect gg_rct_Fog_in_Akatsuki=null
rect gg_rct_Gora_Effect=null
rect gg_rct_HeroJutsu=null
rect gg_rct_HeroJutsuDesc=null
rect gg_rct_HeroJutsuName=null
rect gg_rct_HeroJutsuSP=null
rect gg_rct_HeroLoc1=null
rect gg_rct_HeroLoc2=null
rect gg_rct_HeroLoc3=null
rect gg_rct_HeroLoc4=null
rect gg_rct_HeroLoc5=null
rect gg_rct_HeroLoc6=null
rect gg_rct_HeroLoc7=null
rect gg_rct_HeroLoc8=null
rect gg_rct_HeroPick=null
rect gg_rct_Iwagakure=null
rect gg_rct_Iwagakure_Vision=null
rect gg_rct_Kamui=null
rect gg_rct_Kirigakure=null
rect gg_rct_Kirigakure_Vision=null
rect gg_rct_Kumogakure=null
rect gg_rct_Kumogakure_Vision=null
rect gg_rct_LeaderHelpAkatsuki=null
rect gg_rct_LeaderHelpAlliance=null
rect gg_rct_Light_in_Alliance=null
rect gg_rct_MainRect=null
rect gg_rct_ModePick=null
rect gg_rct_NeituralUnitRect=null
rect gg_rct_Revive_Akatsuki=null
rect gg_rct_Revive_Alliance=null
rect gg_rct_Shop=null
rect gg_rct_ShopDis=null
rect gg_rct_ShopMove=null
rect gg_rct_ShopName=null
rect gg_rct_ShopOpenAkatsuki=null
rect gg_rct_ShopOpenAlliance=null
rect gg_rct_StartRect=null
rect gg_rct_Sunagakure=null
rect gg_rct_Sunagakure_Vision=null
rect gg_rct_Weather=null
rect gg_rct_Quest=null
rect gg_rct_QuestReward=null
camerasetup gg_cam_CamAkatsukiDefeat1=null
camerasetup gg_cam_CamAkatsukiDefeat2=null
camerasetup gg_cam_CamAllianceDefeat1=null
camerasetup gg_cam_CamAllianceDefeat2=null
camerasetup gg_cam_CAMERA=null
camerasetup gg_cam_CamMain=null
camerasetup gg_cam_CamMod=null
camerasetup gg_cam_CamShop=null
camerasetup gg_cam_CamTutorial1=null
camerasetup gg_cam_CamTutorial2p1=null
camerasetup gg_cam_CamTutorial2p2=null
camerasetup gg_cam_CamTutorial3p1=null
camerasetup gg_cam_CamTutorial3p2=null
camerasetup gg_cam_CamTutorial4p1=null
camerasetup gg_cam_CamTutorial4p2=null
camerasetup gg_cam_CamTutorial5=null
camerasetup gg_cam_CamTutorial6=null
camerasetup gg_cam_CamTutorial7=null
camerasetup gg_cam_CamTutorial8=null
camerasetup gg_cam_Kamui=null
camerasetup gg_cam_CamTutorial9p1=null
camerasetup gg_cam_CamTutorial9p2=null
camerasetup gg_cam_CamTutorial10=null
camerasetup gg_cam_CamJutsu=null
sound gg_snd_ArcaneSanctumWhat1=null
sound gg_snd_ArrangedTeamInvitation=null
sound gg_snd_ClanInvitation=null
sound gg_snd_GenericWarningHeroFallen1=null
sound gg_snd_ItemReceived=null
sound gg_snd_LightningBolt=null
sound gg_snd_ShrineOfAzsharaWhat1=null
sound gg_snd_TheHornOfCenarius=null
sound gg_snd_WaterElementalMissile1=null
sound gg_snd_QuestNew=null
sound gg_snd_ClanInvitation01=null
sound gg_snd_ArrangedTeamInvitation01=null
sound gg_snd_BattleNetTick=null
trigger gg_trg_Creeps_Up_Imp_1=null
trigger gg_trg_Creeps_Up_Imp_2=null
trigger gg_trg_Creeps_Up_Imp_3=null
trigger gg_trg_Creeps_Up_Imp_4=null
trigger gg_trg_Creeps_Up_Imp_5=null
trigger gg_trg_Creeps_Up_Imp_6=null
trigger gg_trg_Creeps_Up_Imp_7=null
trigger gg_trg_Creeps_Up_Imp_8=null
trigger gg_trg_Creeps_Up_Imp_9=null
trigger gg_trg_Creeps_Up_Imp_10=null
trigger gg_trg_Creeps_Down_Imp_1=null
trigger gg_trg_Creeps_Down_Imp_2=null
trigger gg_trg_Creeps_Down_Imp_3=null
trigger gg_trg_Creeps_Down_Imp_4=null
trigger gg_trg_Creeps_Down_Imp_5=null
trigger gg_trg_Creeps_Down_Imp_6=null
trigger gg_trg_Creeps_Down_Imp_7=null
trigger gg_trg_Creeps_Down_Imp_8=null
trigger gg_trg_Creeps_Down_Imp_9=null
trigger gg_trg_Creeps_Down_Imp_10=null
trigger gg_trg_GetUpLevel=null
trigger gg_trg_Creeps=null
trigger gg_trg_Neiturals=null
trigger gg_trg_Neitural_Creeps_Left_the_Rects=null
trigger gg_trg_Healers=null
trigger gg_trg_Average=null
trigger gg_trg_Refresh=null
trigger gg_trg_Repick_Command=null
trigger gg_trg_Revive_Command=null
trigger gg_trg_Tutorial_Command=null
trigger gg_trg_Viewer_Mod=null
trigger gg_trg_D_Command=null
trigger gg_trg_SES_Command=null
trigger gg_trg_W_Command=null
trigger gg_trg_TS_Command=null
trigger gg_trg_MO_Command=null
trigger gg_trg_WTF_Mod=null
trigger gg_trg_AI_Remove_Command=null
trigger gg_trg_Assists_Reg=null
trigger gg_trg_AddToAssisters=null
trigger gg_trg_Damage_System_Text_Registr=null
trigger gg_trg_Damage_System_Text_Show=null
trigger gg_trg_Denay=null
trigger gg_trg_RankSystemGetDamage=null
trigger gg_trg_RankSystemGetClick=null
trigger gg_trg_MB_Frag_Hero=null
trigger gg_trg_MB_Frag_Barracks=null
trigger gg_trg_MB_Frag_Outpost=null
trigger gg_trg_MB_Frag_Turels=null
trigger gg_trg_MB_Frag_Others=null
trigger gg_trg_Shop_Open_Alliance=null
trigger gg_trg_Shop_Open_Akatsuki=null
trigger gg_trg_Shop_Esc=null
trigger gg_trg_Shop_Track=null
trigger gg_trg_Shop_Hit=null
trigger gg_trg_Track=null
trigger gg_trg_Click=null
trigger gg_trg_CaptainAnswer=null
trigger gg_trg_Leavers=null
trigger gg_trg_Hero_Enter_an_Rect_Alliance=null
trigger gg_trg_Hero_Enter_an_Rect_Akatsuki=null
trigger gg_trg_Heroes_Speech=null
trigger gg_trg_Heroes_Speech_Select=null
trigger gg_trg_Init=null
trigger gg_trg_StartGame=null
trigger gg_trg_Settings_Track=null
trigger gg_trg_Settings_Click=null
trigger gg_trg_Multiboard=null
trigger gg_trg_Victory=null
unit gg_unit_h06R_0049=null
unit gg_unit_n01Q_0067=null
unit gg_unit_h02I_0111=null
unit gg_unit_h046_0002=null
unit gg_unit_h02I_0113=null
unit gg_unit_h07D_0070=null
unit gg_unit_n01Q_0064=null
unit gg_unit_n01Q_0065=null
unit gg_unit_h06W_0003=null
unit gg_unit_h02A_0039=null
unit gg_unit_h06R_0013=null
unit gg_unit_n01Q_0066=null
unit gg_unit_h005_0045=null
unit gg_unit_h004_0068=null
unit gg_unit_h06V_0108=null
unit gg_unit_h046_0005=null
unit gg_unit_h06V_0110=null
unit gg_unit_h02A_0014=null
destructable gg_dest_B023_0913=null
destructable gg_dest_B023_0933=null
boolean TestV=false
real AverageHP=0.
real AverageMP=0.
real AverageMS=0.
player PlayerKillerAfterCreeps=null
hashtable Hash=InitHashtable()
hashtable HH=InitHashtable()
boolean array playerAD
string NinT="target"
string NinNT="no target"
boolean insurancePick=false
boolean wtfModOn=false
boolean SpecialEffectsShow=true
real moneyForHeroTime=20.
real MainPeriod=.05
real countDownTime=701.
real countDownTextSize=.1
integer picksNumberCur=0
integer picksNumberMax=0
texttag array playerNameText
real array playerNameTextOffsetX
force playerTextForceOne=CreateForce()
force playerTextForceTwo=CreateForce()
integer ImprovementAlliance=1
integer ImprovementAkatsuki=1
real gameoverTime=8.
integer playerStartGold=1250
integer playerHeroCost=250
integer musicTime=0
integer musicBlockedNumber=0
boolean musicOn=true
boolean array musicCompositionBlock
integer hero_number=40
integer morph_number=4
integer art_number=68
multiboard gs_mb
boolean gs_log=true
destructable array gs_des
effect array gs_eff
fogmodifier array gs_fm
group grAssistersReg=CreateGroup()
group grItemsReg=CreateGroup()
force array frAssistersAdd
texttag array gameText
string nameteamOne="|cFFFE8A0EАльянс Шиноби|r"
string nameteamTwo="|cFF4E2A04Акацки|r"
real heightGameText=25.
integer mb_rowCount=25
real mb_rowWidth=.2
boolean array reviveblocklog
boolean array reviveOnLog
integer PickTime
string array PickMBName
boolean array pickOne
boolean array pickTwo
destructable PickRandom
destructable PickFilterCancel
destructable PickFilterKiller
destructable PickFilterFighter
destructable PickFilterSupport
destructable PickFilterSpecailist
effect array PickFilterEff_1
effect array PickFilterEff_2
effect array PickFilterEff_3
effect array PickFilterEff_4
effect array PickFilterEff_5
effect array PickFilterEff_6
effect array PickFilterEff_7
effect array PickFilterEff_8
effect array PickFilterEff_9
effect array PickFilterEff_10
effect array PickFilterEff_11
effect array PickFilterEff_12
effect array PickFilterEff_13
effect array PickFilterEff_14
effect array PickFilterEff_15
effect array PickFilterEff_16
effect array PickFilterEff_17
effect array PickFilterEff_18
effect array PickFilterEff_19
effect array PickFilterEff_20
effect array PickFilterEff_21
effect array PickFilterEff_22
effect array PickFilterEff_23
boolean captainMode=false
boolean captainModeAI=false
boolean captainModeEnd=false
effect captainEffectPick
real captainModeOffsetText=6.
real captainModeTimeText=5.
boolean array playerCanPick
player captainAlliance=null
player captainAkatsuki=null
integer captainAllianceHeroPickNumber=0
integer captainAllianceHeroBanNumber=0
integer captainAkatsukiHeroPickNumber=0
integer captainAkatsukiHeroBanNumber=0
integer captainTimeToChoice=0
integer array heroBlockedRawcode
destructable array destructableBlockedEmptyRawcode
destructable array destructableBlockedIconRawcode
integer captainHeroBlockedRawcode=0
integer captainPhaseCur=0
integer captainPhaseMax=0
dialog captainDialog=DialogCreate()
button captainDialogButtonYes
button captainDialogButtonNo
string captainDialogAnswerAlliance=""
string captainDialogAnswerAkatsuki=""
string captainState=""
texttag captainTextTime
real captainTextOffsetX=471.
boolean preparationOn=true
timer preparationTimer
timerdialog preparationWindow
real preparationTime=60.
boolean RatingGameOn=false
integer array RatingValue
texttag array RatingText
force RatingForce=CreateForce()
boolean array JSonlog
boolean TextShowOn=true
integer WeatherBlockedNumber=0
boolean array WeatherTypeBlock
real WeatherPeriod=GetRandomReal(185.,200.)
real Weather_fogH
real Weather_fogR
real Weather_fogG
real Weather_fogB
integer WeatherType=0
boolean WeatherOn=true
weathereffect array WeatherEffect
boolean QuestIsExecuted=false
boolean QuestTakeOn=true
integer QuestNumber=0
player QuestPlayer=null
real QuestTime=600.
timer QuestTimer=null
timerdialog QuestWindow=null
leaderboard QuestProgressBoard=null
integer QuestValue=0
effect QuestItemEff_1=null
effect QuestItemEff_2=null
effect QuestItemEff_3=null
boolean DuelOn
boolean DuelIsGoing
timer DuelTimer
timerdialog DuelWindow
real DuelPeriod
fogmodifier array DuelVision
boolean array DuelHeroOn
boolean array playerEM
player array playerEMtarget
unit array tutorialUnit
force array tutorialForce
integer tutorialUnitID=0x6E303132
fogmodifier array tutorialVision
string tutorialNameUnit="RIN"
real tutorialTalkSpeedConst=.9
real array rankDamager
integer array rankClicker
real array rankSturdy
real array rankMarathoner
real array rankNagibator
integer array rankExecutioner
integer array rankFarmila
real array rankHealer
integer array RankNumber
unit array shopUser
boolean array shopHelp1
boolean array shopHelp2
boolean array shopHelp3
effect array shopEffect1
effect array shopEffect2
effect array shopEffect3
effect array shopEffect4
effect array shopEffect5
effect array shopEffect6
effect array shopEffect7
effect array shopHelpEffect1
effect array shopHelpEffect2
effect array shopHelpEffect3
effect array shopHelpEffect4
effect array shopHelpEffect5
effect array shopHelpEffect6
effect array shopHelpEffect7
effect array shopHelpEffect8
multiboard gamestat_mb
string array gamestat_S
integer gamestat_mbTimeMin=1
integer gamestat_mbTimeSec=30
integer gamestat_botSec=0
integer gamestat_FB=0
boolean gamestat_StartLog=true
integer array gamestat_Place
integer array gamestat_KillsNumber
integer array gamestat_StrickNumber
integer array gamestat_L
integer array gamestat_K
integer array gamestat_D
integer array gamestat_A
integer array gamestat_LH
integer array gamestat_LD
integer array gamestat_NW_Old
integer array gamestat_NW_Cur
integer array gamestat_NW_New
group gakureSunaBuildings=CreateGroup()
group gakureIwaBuildings=CreateGroup()
group gakureKiriBuildings=CreateGroup()
group gakureKumoBuildings=CreateGroup()
real gakureTextHeight=350.
real gakureTextShow=2.
real gakureTextCaptureShow=5.
real gakureCaptureBanTime=30.
boolean array gakureCaptureBanLog
boolean array gakureCaptureLog
integer gakureNeedTime=15
string gakureOwnerSuna="neitural"
string gakureOwnerIwa="neitural"
string gakureOwnerKiri="neitural"
string gakureOwnerKumo="neitural"
string gakureNameSuna="|cFF106246SUNA|r"
string gakureNameIwa="|cFF4E2A04IWA|r"
string gakureNameKiri="|cFF0042FFKIRI|r"
string gakureNameKumo="|cFFFFFC01KUMO|r"
integer gakureAllianceNumber=1
integer gakureAkatsukiNumber=1
integer gakureConstXX=20
string array AllianceOutpostOwner
string array AkatsukiOutpostOwner
integer array AllianceOutpostCurrent
integer array AkatsukiOutpostCurrent
integer array AllianceOutpostForwardCurrent
integer array AllianceOutpostMageCurrent
integer array AkatsukiOutpostForwardCurrent
integer array AkatsukiOutpostMageCurrent
integer outpostNumber=3
integer outpostNumberForward=2
integer outpostNumberSupport=1
boolean outpostFirst=false
real outpostMoveDelay=1.
group outpostGrLoop=CreateGroup()
group outpostGrTarget=CreateGroup()
boolean array creepsJutsuCD
group grCreepsSpecialAI=CreateGroup()
group grCreepsSpecial=CreateGroup()
group grCreepsAI=CreateGroup()
group grCreeps=CreateGroup()
boolean TopLine=true
boolean BotLine=true
real OrderRange=500.
integer ForwardNumber=4
integer SupportNumber=2
integer AllianceKonohaForwardID=0x6830334B
integer AllianceIwaForwardID=0x68303332
integer AllianceKiriForwardID=0x68303338
integer AllianceTetsuForwardID=0x6830325A
integer AllianceSunaSupportID=0x68303030
integer AllianceKumoSupportID=0x68303256
integer AllianceHealerID=0x68303251
integer AkatsukiForwardID=0x68303033
integer AkatsukiSupportID=0x68303445
integer AkatsukiHealerID=0x6830324B
integer CEGSstepAlliance=1
integer CEGSstepAkatsuki=1
integer AllianceSpecialID=0x68303250
integer AkatsukiSpecialID=0x6830324C
integer AllianceCatapultaID=0x65303047
integer AkatsukiCatapultaID=0x75303030
boolean AkatuskiForwardTopDestroy=false
boolean AkatuskiSupportTopDestroy=false
boolean AkatuskiForwardBotDestroy=false
boolean AkatuskiSupportBotDestroy=false
boolean AllianceForwardTopDestroy=false
boolean AllianceSupportTopDestroy=false
boolean AllianceForwardBotDestroy=false
boolean AllianceSupportBotDestroy=false
boolean AllianceCatapultaOn=true
boolean AkatsukiCatapultaOn=true
integer AllianceWood=0
integer AkatsukiWood=0
integer AllianceCatapultaNumber=0
integer AkatsukiCatapultaNumber=0
integer AllianceWoodNeed=1000
integer AkatsukiWoodNeed=1000
integer WoodNeed=1000
integer AllianceGuardTopID_1=0x68303434
integer AllianceGuardTopID_2=0x68303435
integer AkatsukiGuardTopID_1=0x68303437
integer AkatsukiGuardTopID_2=0x68303439
integer AllianceGuardBotID_1=0x68303441
integer AllianceGuardBotID_2=0x68303442
integer AkatsukiGuardBotID_1=0x68303431
integer AkatsukiGuardBotID_2=0x68303433
unit NeituralUnitDestructable
unit array Boss
string BossName="хвостатых"
integer BossID
integer BossImprovementNumber=0
real BossImprovementTime=240.
item BossItem=null
string BossItemName
integer BossItemID
group grNeiturals=CreateGroup()
real array NCcreepsX
real array NCcreepsY
real array NCcreepsF
real array NCcreepsRT
integer array NCcreepsID
integer array NCcreepsData
boolean botlog=false
integer player_AI=0
integer player_Human=0
real aiEscapeHP=.4
rect array ai_coord_rect
boolean array ai_retreat_log
boolean array ai_coordmove_cd_log
boolean aiAllianceGakureMove=false
boolean aiAkatsukiGakureMove=false
string array mb_iconBTN
string array mb_iconDISBTN
integer array heroes_pick
integer array heroes_rawcode
integer array heroes_rikudo_rawcode
integer hc_killer_current=0
integer hc_fighter_current=0
integer hc_support_current=0
integer hc_specialist_current=0
integer array hc_list
boolean hc_killer_log=false
boolean hc_fighter_log=false
boolean hc_support_log=false
boolean hc_specialist_log=false
integer array morph_rawcode
integer array units_rawcode
real array ninjutsublockNumber
real array mb_heroesHP
real array mb_heroesMP
real array mb_heroesMS
real array hero_x
real array hero_y
integer Asuma=1
integer Ei=2
integer Gai=3
integer Han=4
integer Hanzo=5
integer Jiraya=6
integer Jugo=7
integer Naruto=8
integer Sasori=9
integer Tsunade=10
integer Zabuza=11
integer Haku=12
integer Hidan=13
integer Itachi=14
integer Kakashi=15
integer Minato=16
integer Mu=17
integer Neji=18
integer Orochimaru=19
integer Sai=20
integer Sasuke=21
integer Suigetsu=22
integer Chiyo=23
integer Danzo=24
integer Darui=25
integer Deidara=26
integer Gaara=27
integer Gengetsu=28
integer Hashirama=29
integer Kabuto=30
integer Madara=31
integer Mei=32
integer Nagato=33
integer Obito=34
integer Onoki=35
integer Sakura=36
integer Shikamaru=37
integer Tobirama=38
integer Zetsu=39
integer Yamato=40
boolean array madaraGunbaiCD
integer limitSandWard=4
real cdSandWard=240.
integer limitChakraWard=6
real cdChakraWard=180.
integer limitHealingWard=8
real cdHealingWard=120.
integer RAMEN=1
integer RAMEN_ID=0x49303057
integer SAND_WARD=2
integer SAND_WARD_ID=0x49303252
integer CHAKRA_WARD=3
integer CHAKRA_WARD_ID=0x49303155
integer HEALING_WARD=4
integer HEALING_WARD_ID=0x49303130
integer GAS_CHECKER=5
integer GAS_CHECKER_ID=0x49303131
integer KEMURIDAMA=6
integer KEMURIDAMA_ID=0x49303158
integer DAZZLING_GRENADE=7
integer DAZZLING_GRENADE_ID=0x49303242
integer SHUKAKU_CHAKRA_SEALED_SCROLL=8
integer SHUKAKU_CHAKRA_SEALED_SCROLL_ID=0x4930324A
integer ISOBU_CHAKRA_SEALED_SCROLL=9
integer ISOBU_CHAKRA_SEALED_SCROLL_ID=0x49303249
integer SON_GOKU_CHAKRA_SEALED_SCROLL=10
integer SON_GOKU_CHAKRA_SEALED_SCROLL_ID=0x49303136
integer SAIKEN_CHAKRA_SEALED_SCROLL=11
integer SAIKEN_CHAKRA_SEALED_SCROLL_ID=0x49303331
integer KURAMA_CHAKRA_SEALED_SCROLL=12
integer KURAMA_CHAKRA_SEALED_SCROLL_ID=0x49303050
integer EDOTENSEI_SCROLL=13
integer EDOTENSEI_SCROLL_ID=0x49303256
integer KUNAI=14
integer KUNAI_ID=0x49303134
integer SHURIKEN=15
integer SHURIKEN_ID=0x49303257
integer FUMA_SHURIKEN=16
integer FUMA_SHURIKEN_ID=0x49303349
integer SENBON=17
integer SENBON_ID=0x49303350
integer KIBAKU_KUNAI=18
integer KIBAKU_KUNAI_ID=0x4930334F
integer EIYU_NO_MIZU=19
integer EIYU_NO_MIZU_ID=0x49303034
integer KUCHIYOSE_SCROLL=20
integer KUCHIYOSE_SCROLL_ID=0x4930304A
integer HI_NO_ISHI=21
integer HI_NO_ISHI_ID=0x4930324E
integer ROSARY_MONK=22
integer ROSARY_MONK_ID=0x49303236
integer KATON=23
integer KATON_ID=0x49303141
integer FUTON=24
integer FUTON_ID=0x49303030
integer RAITON=25
integer RAITON_ID=0x49303037
integer DOTON=26
integer DOTON_ID=0x49303035
integer SUITON=27
integer SUITON_ID=0x49303032
integer HOSHI=28
integer HOSHI_ID=0x49303054
integer SENNIN_STAFF=29
integer SENNIN_STAFF_ID=0x4930314F
integer SHINIGAMI_OFFERING=30
integer SHINIGAMI_OFFERING_ID=0x49303258
integer TENSEIGAN=31
integer TENSEIGAN_ID=0x49303232
integer BENIHISAGO=32
integer BENIHISAGO_ID=0x49303234
integer SHODAI_HOKAGE_NO_KUBIKAZARI=33
integer SHODAI_HOKAGE_NO_KUBIKAZARI_ID=0x49303144
integer KOKINJO=34
integer KOKINJO_ID=0x49303430
integer KONOHA_JACKET=35
integer KONOHA_JACKET_ID_1=0x49303046
integer KONOHA_JACKET_ID_2=0x49303247
integer KONOHA_JACKET_ID_3=0x4930324B
integer KONOHA_JACKET_ID_4=0x4930324C
integer KONOHA_JACKET_ID_5=0x4930324D
integer NUKENIN_GLOVES=36
integer NUKENIN_GLOVES_ID_1=0x49303055
integer NUKENIN_GLOVES_ID_2=0x49303235
integer NUKENIN_GLOVES_ID_3=0x49303237
integer NUKENIN_GLOVES_ID_4=0x49303238
integer NUKENIN_GLOVES_ID_5=0x49303239
integer WAIST_POUCH=37
integer WAIST_POUCH_ID_1=0x49303056
integer WAIST_POUCH_ID_2=0x49303241
integer WAIST_POUCH_ID_3=0x49303243
integer WAIST_POUCH_ID_4=0x49303245
integer WAIST_POUCH_ID_5=0x49303246
integer HITAIATE=38
integer HITAIATE_ID_1=0x4930305A
integer HITAIATE_ID_2=0x49303138
integer HITAIATE_ID_3=0x49303139
integer HITAIATE_ID_4=0x49303142
integer HITAIATE_ID_5=0x49303143
integer AKATSUKI_HAT=39
integer AKATSUKI_HAT_ID=0x49303059
integer ROBBER_MACE=40
integer ROBBER_MACE_ID_1=0x4930304E
integer ROBBER_MACE_ID_2=0x49303152
integer ROBBER_MACE_ID_3=0x49303153
integer ROBBER_MACE_ID_4=0x49303154
integer ROBBER_MACE_ID_5=0x49303156
integer SAMURAI_CETTO=41
integer SAMURAI_CETTO_ID_1=0x49303051
integer SAMURAI_CETTO_ID_2=0x4930314D
integer SAMURAI_CETTO_ID_3=0x4930314E
integer SAMURAI_CETTO_ID_4=0x49303150
integer SAMURAI_CETTO_ID_5=0x49303151
integer YUKIGAKURE_GHOST=42
integer YUKIGAKURE_GHOST_ID_1=0x49303053
integer YUKIGAKURE_GHOST_ID_2=0x49303157
integer YUKIGAKURE_GHOST_ID_3=0x4930315A
integer YUKIGAKURE_GHOST_ID_4=0x49303230
integer YUKIGAKURE_GHOST_ID_5=0x49303233
integer HIRAISHIN_BOOTS=43
integer HIRAISHIN_BOOTS_ID=0x49303359
integer OMORI=44
integer OMORI_ID=0x49303353
integer AKATSUKI_ROBE=45
integer AKATSUKI_ROBE_ID=0x49303231
integer HOGO_TETSU_NO_KUNI=46
integer HOGO_TETSU_NO_KUNI_ID=0x49303244
integer ANBU_AMMUNITION=47
integer ANBU_AMMUNITION_ID=0x49303259
integer CHAKRA_NO_YOROI=48
integer CHAKRA_NO_YOROI_ID=0x49303332
integer SHITENSHOIN=49
integer SHITENSHOIN_ID=0x49303355
integer TRAINING_SUIT=50
integer TRAINING_SUIT_ID=0x49303048
integer LUMBERJACK_AXE=51
integer LUMBERJACK_AXE_ID=0x49303137
integer BATTLE_CLAW=52
integer BATTLE_CLAW_ID_1=0x49303058
integer BATTLE_CLAW_ID_2=0x49303147
integer BATTLE_CLAW_ID_3=0x49303149
integer BATTLE_CLAW_ID_4=0x4930314B
integer BATTLE_CLAW_ID_5=0x4930314C
integer SAMURAI_KATANA=53
integer SAMURAI_KATANA_ID=0x49303133
integer ANBU_TANTO=54
integer ANBU_TANTO_ID=0x49303132
integer KUROSAVA=55
integer KUROSAVA_ID=0x49303248
integer BATORUGUROBU=56
integer BATORUGUROBU_ID=0x49303033
integer FURIDO_STAFF=57
integer FURIDO_STAFF_ID=0x49303253
integer KIHOU_BLASTER=58
integer KIHOU_BLASTER_ID=0x49303052
integer SOSHUGA=59
integer SOSHUGA_ID=0x49303145
integer BASHOSEN=60
integer BASHOSEN_ID=0x4930304F
integer KUSANAGI_NO_TSURUGI=61
integer KUSANAGI_NO_TSURUGI_ID=0x49303341
integer HIRAMEKAREI=62
integer HIRAMEKAREI_ID=0x49303354
integer KABUTOWARI=63
integer KABUTOWARI_ID=0x49303031
integer SHIBUKI=64
integer SHIBUKI_ID=0x49303043
integer NUIBARI=65
integer NUIBARI_ID=0x49303432
integer TOBIRAMA_RAIJIN=66
integer TOBIRAMA_RAIJIN_ID=0x49303343
integer SHICHISEIKEN=67
integer SHICHISEIKEN_ID=0x49303431
integer NUNOBOKO_NO_KEN=68
integer NUNOBOKO_NO_KEN_ID=0x49303159
integer CHAKRA_NO_MI_ID=0x49303357
integer MADARA_GUNBAI_ID=0x49303135
integer RYUJIN_ID=0x49303433
integer ITEM_VACUUM_SHURIKEN_ID=0x4930324F
integer ITEM_HIRAISHIN_KUNAI_ID=0x4930304D
integer ICHIBI_NO_CHAKRA_ID=0x49303146
integer NIBI_NO_CHAKRA_ID=0x49303036
integer SANBI_NO_CHAKRA_ID=0x49303038
integer YONBI_NO_CHAKRA_ID=0x49303039
integer GOBI_NO_CHAKRA_ID=0x49303041
integer ROKUBI_NO_CHAKRA_ID=0x49303042
integer NANABI_NO_CHAKRA_ID=0x49303044
integer HACHIBI_NO_CHAKRA_ID=0x49303045
integer KYUBI_NO_CHAKRA_ID=0x49303047
real AIInRects__ai_general_range=1200.
real AIInRects__ai_item_cd=1.
real AIInRects__ai_coordmove_cd=2.5
real AIInRects__aiNeedHP_ChakraPanoply=.65
group AIInRects__g2=CreateGroup()
boolean array AIInRects__ai_item_cd_log
trigger ItemsActiveInstantly__getdmgRamen=CreateTrigger()
group ItemsActiveInstantly__grReg=CreateGroup()
integer array ItemsActiveInstantly_KSType
integer ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL=0x4130394C
integer ItemsActiveInstantly_EDOTENSEI_SCROLL_RESTORE_SPELL=0x4130594B
trigger ItemsPassive__getdmgANBUTanto=CreateTrigger()
trigger ItemsPassive__getdmgKurosava=CreateTrigger()
trigger ItemsPassive__getdmgHiramekarei=CreateTrigger()
trigger ItemsPassive__getdmgKabutowari=CreateTrigger()
trigger ItemsPassive__getdmgBloodstone=CreateTrigger()
trigger ItemsPassive__getdmgBashosen=CreateTrigger()
group ItemsPassive__grANBUTanto=CreateGroup()
group ItemsPassive__grBashosen=CreateGroup()
group ItemsPassive__grHiramekarei=CreateGroup()
group ItemsPassive__grKabutowari=CreateGroup()
group ItemsPassive__grBloodstone=CreateGroup()
boolean ComboNarutoSasukeOne=false
boolean ComboMadaraKyubi=false
trigger JStrack=CreateTrigger()
trigger JSclick=CreateTrigger()
effect array JSeff
boolean array JSfirst
boolean array JSspellOne
boolean array JSspellTwo
boolean array JSspellThree
boolean array JSspellFour
integer array JS_RTN_CurLevel
integer array JS_RTN_PossibleLevel
integer JS_RTN_MaxLevel=6
boolean array JSbijuFuin
integer array JSbijuFuinNumber
boolean array JSbijuBuffFuin
integer array JS_bijuBuff_CurLevel
integer JS_bijuBuff_MaxLevel=4
boolean array JSbijuBuffOne
boolean array JSbijuBuffTwo
boolean array JSbijuBuffThree
boolean array JSbijuBuffFour
boolean array JSbijuBuffFive
boolean array JSbijuBuffSix
boolean array JSbijuBuffSeven
boolean array JSbijuBuffEight
boolean array JSeventOne
boolean array JSeventTwo
boolean array JSeventThree
boolean array JSeventFour
boolean array JSeventFive
boolean array JSeventSix
texttag array JStextSP
texttag array JStextName
texttag array JStextDesc
integer array JSSP
integer DesEmptyID=0x42303449
integer BijuDesEmptyID=0x4230324F
integer BijuBuffDesMarkID=0x42303447
string AttantionTextColored="|cFFFF0303"
integer Asuma_TEKKO=0x41304544
integer Asuma_KAWARIMI=0x41303857
integer Asuma_HAISEKISHOU=0x41303349
integer Asuma_FUJIN=0x41303330
unit Asuma___c=null
player Asuma___p
trigger Asuma___getdmg
integer Chiyo_SOSHUHA=0x41305854
integer Chiyo_CHAKRA_NO_ITO=0x4130534C
integer Chiyo_PAPA_MAMA=0x4130525A
integer Chiyo_CHIKAMATSU=0x41313449
unit Chiyo___c=null
player Chiyo___p
unit Chiyo___KunaiLeft
unit Chiyo___KunaiRight
real Chiyo___puppetRange=0.
real Chiyo___itoRange=1800.
group Chiyo___ItoGroup
integer Chiyo___KunaiNumber
integer Chiyo___ItoNumberCur=0
integer Chiyo___ItoNumberMax=10
integer Danzo_FUTON=0x41305448
integer Danzo_FUINJUTSU=0x41304451
integer Danzo_URA_SHINSHO=0x41313039
integer Danzo_BAKU=0x41304834
integer Danzo_ULT=0x41313150
integer Danzo_SAIBO=0x41305642
integer Danzo_SAIBO_SPELLBOOK=0x41304E58
integer Danzo_SAIBO_REGEN_HP=0x41313655
integer Danzo_SAIBO_REGEN_MP=0x41313654
unit Danzo___c=null
player Danzo___p
group Danzo___GrBladeReg
group Danzo___GrBladeCheck
trigger Danzo___TrgBladeReg
integer Danzo___sharingancur=10
boolean Danzo___uraShinshoCast=false
real Danzo___SaiboX
real Danzo___SaiboY
real Danzo___SaiboValue=0.
texttag Danzo___SaiboText=null
trigger Danzo___TrgSaiboReg
integer Darui_SUIJINHEKI=0x41303850
integer Darui_REIZAA_SAAKASU=0x41303852
integer Darui_ZANBATO=0x41303259
integer Darui_KURO_PANSA=0x41303853
unit Darui___c=null
player Darui___p
group Darui___grKangekiha
boolean Darui___kangekihaCD=false
boolean Darui___kangekihaSoundCD=false
integer Darui___ReizaNumber=0
integer Deidara_KIBAKU_NENDO=0x41303458
integer Deidara_C1_TORI=0x41303746
integer Deidara_C1_KUMO=0x41304E4F
integer Deidara_C1_MUKADE=0x4130554A
integer Deidara_C1_KIBAKU_JIRAI=0x41305649
integer Deidara_C2_DRAGON=0x41304253
integer Deidara_C2_DORAGONSHERU=0x4130425A
integer Deidara_C3=0x4130334A
integer Deidara_C4_KARURA=0x41313046
integer Deidara_C0=0x4130334C
player Deidara___p
unit Deidara___c=null
boolean Deidara___kibakuFirst=true
integer Ei_ERUBO=0x41304C4F
integer Ei_ARMOR=0x41304350
integer Ei_GIROCHIN=0x4130364B
integer Ei_ULT=0x4130444F
unit Ei___c=null
player Ei___p
leaderboard Ei_lb=null
integer Ei_RaitonSpeed=0
integer Ei_RaitonDefense=0
integer Ei_RaitonAttack=0
integer Gaara_SABAKU=0x41303634
integer Gaara_ZETTAI_BOGYO=0x4131344A
integer Gaara_SABAKUHA=0x41304C55
integer Gaara_SABAKU_SOTAISO=0x41303841
unit Gaara___c=null
unit Gaara___sabaku=null
player Gaara___p
trigger Gaara___getdmg
boolean array Gaara___tateLog
group Gaara___grYoroiCheck
group Gaara___grReg
leaderboard Gaara_lb=null
integer Gaara_SunaNoYoroiCur=0
integer Gaara_SunaNoYoroiMax=0
integer Gai_HT_BUFF=0x42303049
integer Gai_ENTRY=0x41313434
integer Gai_GORIKI=0x4131304F
integer Gai_HT=0x41304349
integer Gai_ULT=0x41313356
integer Gai_SEKIZO=0x41304F5A
boolean Gai_SoundOn=false
unit Gai___c=null
player Gai___p
unit Gai___HT_dummy=null
trigger Gai___HT_speedTrg
trigger Gai_sekizo
integer Gai___HT_speed=0
integer Gai_HT_SekizoNumber=0
integer Gengetsu_MIZUDEPPO=0x41305837
integer Gengetsu_OHAMAGURI=0x41305750
integer Gengetsu_SUIKA=0x41313638
integer Gengetsu_JOKEY_BOY=0x41305838
integer Gengetsu_MIZUFUSEN=0x41313235
unit Gengetsu___mizukage=null
player Gengetsu___p
boolean Gengetsu___cooldown_one_log=false
boolean Gengetsu___cooldown_two_log=false
boolean Gengetsu___cooldown_illusion=false
unit Gengetsu___ohamaguri_illusion=null
unit Gengetsu___mizukage_illusion=null
trigger Gengetsu___damageEvent
integer Gengetsu___JB_lifetime=0
real Gengetsu___JB_distance=0.
real Gengetsu___JB_dmg=0.
real Gengetsu___JB_dmg_add=0.
real Gengetsu___JB_size=.8
real Gengetsu___JB_animspeed=1.
boolean Gengetsu___JB_log=false
leaderboard Gengetsu___lb
integer Haku_SENSATSU=0x41303339
integer Haku_SHUNSHIN=0x41303949
integer Haku_HISSATSU=0x41305954
integer Haku_ULT=0x4130384E
integer Haku_DOMU=0x4130575A
real Haku___ultX=0.
real Haku___ultY=0.
boolean Haku___ultOn=false
unit Haku___c=null
player Haku___p
unit Haku___domu=null
trigger Haku___trgDamage
group Haku___grReg
group Haku___grCheck
integer Han_FUNGOKYAKU=0x41305247
integer Han_FUNSUIKEN=0x41304152
integer Han_YOROI=0x41305437
integer Han_TSUNOORI=0x41304C59
unit Han___c=null
player Han___p
group Han___grFunsuikenReg
group Han___grFunsuikenCheck
trigger Han___funsuikenattack
trigger Han___funsuikendmg
integer Han___funsuikenNumber=5
trigger Han___yoroidmg
integer Han___currentDamage=0
integer Han___maxDamage=0
boolean Han___futtonAct=false
integer Hanzo_HAGAMA=0x4130484F
integer Hanzo_SHUNSHIN=0x41304357
integer Hanzo_KATON=0x41313549
integer Hanzo_KUCHIYOSE=0x41313144
integer Hanzo_SEPPUKU=0x41305846
unit Hanzo___c=null
player Hanzo___p
unit Hanzo___ShunshinTarget=null
integer Hanzo___ShunshinNumber=0
group Hanzo___grReg
group Hanzo___DMGGroup
trigger Hanzo___DMG
integer Hashirama_MOKUTON_NO_JUTSU=0x41305A58
integer Hashirama_KOKUANGYO=0x41305641
integer Hashirama_JUKAI_KOTAN=0x41305656
integer Hashirama_SUMMON=0x41313733
integer Hashirama_SENNIN_MODO=0x41303941
integer Hashirama_SHIZEN_ENERUGI=0x41305A51
integer Hashirama_SAISEI_NORYOKU=0x41305337
integer Hashirama_MYOJINMON=0x4131334C
integer Hashirama_HOTEI=0x41305332
integer Hashirama_SHIN_SUSENJU=0x41305330
integer Hashirama_CHOJO_KEBUTSU=0x4130574B
integer Hashirama_MOKUTON_NO_JUTSU_FUMA_CAST_ID=0x6E303443
unit Hashirama_c=null
player Hashirama___p
unit Hashirama___mokujoheki=null
trigger Hashirama___trgMokujoHekiDamage
group Hashirama___grMokujoHekiReg
group Hashirama___grMokujoHekiCheck
real Hashirama___JukaiKotan_x=0.
real Hashirama___JukaiKotan_y=0.
real Hashirama___JukaiKotan_radius=0.
integer Hashirama___MokuBunshinNumber=0
trigger Hashirama___trgMokuBunshinDamage
group Hashirama___grMokuBunshinReg
boolean Hashirama___logGiantAttack
group Hashirama___grDamage
integer Hidan_SANJIN_NO_OGAMA=0x4130554B
integer Hidan_KYOKENBYO=0x41305244
integer Hidan_JASHINKYO=0x41304B53
integer Hidan_JUJUTSU=0x41304449
integer Hidan_INORI=0x41304959
real Hidan___kyokenbyoA
effect Hidan___e=null
integer Hidan_jashinPoint=0
player Hidan_p
unit Hidan_c=null
unit Hidan_prey=null
trigger Hidan_getdmgRitual
real Hidan_ritualX
real Hidan_ritualY
integer Itachi_GOKAKYU=0x41304241
integer Itachi_TSUMABENI=0x41305836
integer Itachi_BUNSHIN=0x4130344A
integer Itachi_IZANAMI=0x41313435
integer Itachi_MANGEKYO=0x41313433
integer Itachi_TSUKUYOMI=0x41303935
integer Itachi_AMATERASU=0x4130574D
integer Itachi_RIBU=0x41305746
integer Itachi_RIBU_CANCEL=0x41304850
integer Itachi_SUSANOO=0x41303256
integer Itachi_YASAKA=0x41304454
integer Itachi_SUSANOO_FULL=0x41303059
integer Itachi_TOTSUKA=0x41304459
integer Itachi_YATA=0x41305731
integer Itachi_RIBU_SLOW=0x4130315A
integer Itachi_SUSANOO_SLOW=0x41303642
integer Itachi_ribuMax=0
unit Itachi___c=null
player Itachi___p
trigger Itachi___bunshingetdmg
unit Itachi___bunshinOne=null
unit Itachi___bunshinTwo=null
unit Itachi___bunshinLast=null
integer Itachi___bunshinNumber=0
boolean Itachi___bunshinOneRemovedLog=false
unit Itachi___amaterasu=null
unit Itachi___amaterasuMS=null
boolean Itachi___amaterasuMoving=false
real Itachi___amaterasuSpeed=0.
real Itachi___amaterasuCurDistance=0.
real Itachi___amaterasuMaxDistance=0.
real Itachi___amaterasuA=0.
real Itachi___amaterasuMaxRange=1500.
boolean Itachi___amaterasuCD=false
boolean Itachi___ribuReg=false
trigger Itachi___ribudmg
trigger Itachi___getdmg
boolean Itachi___susanooFullOn=false
boolean Itachi___totsukaOn=false
integer Jiraiya_RASENGAN=0x41313656
integer Jiraiya_KATON_ENDAN=0x41313657
integer Jiraiya_YOMI_NUMA=0x41305056
integer Jiraiya_HARI_JIZO=0x41313659
integer Jiraiya_GAMAYUDAN=0x41313658
integer Jiraiya_GAMAGAKURE=0x41305055
integer Jiraiya_GAMAGUCHI=0x41304935
integer Jiraiya_GAMAKEN=0x41303830
integer Jiraiya_RYOSEI=0x41305736
integer Jiraiya_ENERUGI=0x41313255
integer Jiraiya_COMBO=0x41305644
integer Jiraiya_GOEMON=0x4131304D
integer Jiraiya_CHOODAMA_RASENGAN=0x4131304C
integer Jiraiya_KEBARI_SENBON=0x41305A59
integer Jiraiya_GENJUTSU=0x41304135
integer Jiraiya_GAMAYUDAN_BUFF=0x42303546
boolean Jiraiya_gamayudan_fired=false
real Jiraiya_gamayudan_damage=50.
boolean Jiraiya_yominuma_fired=false
unit Jiraiya_yominuma=null
real Jiraiya_yominuma_radius=400.
real Jiraiya_yominuma_damage=100.
integer Jiraiya_yominuma_id=0x6E303353
unit Jiraiya___c=null
player Jiraiya___p
group Jiraiya___grReg
trigger Jiraiya___getdmg
boolean Jiraiya___SenmodState=false
integer Jugo_KUSARI=0x41303437
integer Jugo_ISHIKKI=0x41303038
integer Jugo_JUMP=0x41303358
integer Jugo_ULT=0x41303456
unit Jugo___c=null
player Jugo___p
integer Jugo___jumpNumber=0
integer Kabuto_MUKI_TENSEI=0x41305A37
integer Kabuto_KUMO_SOKAI=0x41305A44
integer Kabuto_HAKUGEKI=0x41305A32
integer Kabuto_ULT=0x41313451
unit Kabuto___c=null
player Kabuto___p
integer Kakashi_TSUIGA=0x41305136
integer Kakashi_BUNSHIN=0x41304832
integer Kakashi_KAMUI=0x41305934
integer Kakashi_KAMUI_RAIKIRI=0x41303543
unit Kakashi___c=null
player Kakashi___p
trigger Kakashi___getdmg
boolean Kakashi___bunshinCancel
integer Madara_GOKA_MEKKYAKU=0x4130585A
integer Madara_GOKA_MESSHITSU=0x41303050
integer Madara_HAIJINGAKURE=0x41313533
integer Madara_RYUEN_HOKA=0x41304754
integer Madara_KYUIN=0x41313444
integer Madara_MOKUBUNSHIN=0x4130444D
integer Madara_MOKTON=0x41303838
integer Madara_KAJUKAI=0x41304847
integer Madara_RIBU=0x41313154
integer Madara_RIBU_BUFF=0x42303341
integer Madara_SUSANOO=0x41304848
integer Madara_SUSANOO_SLOW=0x41304F58
integer Madara_YASAKA=0x41303136
integer Madara_TENGAI=0x4130454A
integer Madara_KANSEITAI=0x41305249
integer Madara_SENPO=0x41304B31
integer Madara_RINBO=0x4130514A
integer Madara_RINBO_ID=0x4F303036
integer Madara_CHIBAKU_TENSEI=0x41305738
integer Madara_MUGEN_TSUKUYOMI=0x41305150
integer Madara_GUDODAMA=0x41303735
unit Madara_c=null
player Madara_p
integer Madara_ribuMax=0
boolean Madara_bGudodamaCD=false
trigger Madara_trgRinboDamage
group Madara___grRyuenDamage
boolean Madara___ribuReg=false
integer Madara___number
trigger Madara___ribudmg
trigger Madara___getdmg
group Madara___grRegBunshin
boolean Madara___susanooKanseitai=false
group Madara___grRinboReg
group Madara___grRinboCheck
boolean Madara___bRinboDefenseCD=false
trigger Madara___trgGudodamaDamage
group Madara___grGudodamaReg
group Madara___grGudodamaCheck
boolean Madara___bGudodamaAttackCD=false
boolean Madara___bGudodamaRegenCD=false
real Madara___rlGudodamaTime
boolean Madara___bGudodamaRegenOn=false
integer Mei_KOMO=0x41304254
integer Mei_YOKAI=0x41303655
integer Mei_KIRIGAKURE=0x41304359
integer Mei_SUIRYUDAN=0x41303049
unit Mei___c=null
player Mei___p
integer Minato_RASENGAN=0x41305547
integer Minato_HIRAISHIN=0x41303954
integer Minato_KUCHIYOSE=0x4130445A
integer Minato_ULT=0x41304541
integer Minato_DEATH_GOD=0x41303958
integer Minato_DEATH_GOD_SOUL_BUFF=0x42303245
integer Minato_DEATH_GOD_AFTER=0x41304248
integer Minato_HIRAISHIN_KUNAI_UNIT_ID=0x68303556
integer Minato_HIRAISHIN_KUNAI_FLY_ID=0x68303558
item Minato_hiraishinKunaiArt
boolean Minato_shikifujinOn=false
unit Minato___deathgod=null
unit Minato___c=null
player Minato___p
boolean Minato___ultStart=false
integer Minato___ultNumber=0
trigger Minato___jutsushikiDamageTrig
boolean Minato___jutsushikiCD=false
integer Minato___shikifujinTime=0
integer Mu_MEISAI=0x41305648
integer Mu_KEIJUGAN=0x41313441
integer Mu_KEIJUGAN_BUFF=0x42303143
integer Mu_BUNRETSU=0x41305453
integer Mu_ULT=0x41303039
integer Mu_KANCHI=0x4130565A
trigger Mu___meisaiattack
trigger Mu___meisaiudmg
group Mu___grMeisaiReg
group Mu___grMeisaiCheck
boolean Mu_bunretsuLog=false
integer Nagato_GEDO=0x41303350
integer Nagato_FUTON=0x41305A4C
integer Nagato_KANCHI=0x41313056
integer Nagato_RINNE_TENSEI=0x41303355
integer Nagato_RIKUDO=0x41304136
integer Nagato_RIKUDO_CANCEL=0x41303650
integer Nagato_PAIN_ID_1=0x45303037
integer Nagato_PAIN_ID_2=0x45303042
integer Nagato_PAIN_ID_3=0x45303043
integer Nagato_PAIN_ID_4=0x45303044
integer Nagato_PAIN_ID_5=0x45303045
integer Nagato_PAIN_ID_6=0x45303046
integer Nagato_PAIN_2_KYUIN_SPELL=0x41303654
integer Nagato___PainClickNumber=0
trigger Nagato___PainSelectTrig
boolean Nagato___PainFirst=false
unit array Nagato___PainUnit
unit Nagato___PainClicked=null
texttag array Nagato___PainText
boolean array Nagato___PainActive
boolean Nagato___KuroiboCD=false
unit Nagato___panda=null
trigger Nagato___trgDamage
group Nagato___grReg
integer array Nagato_JutsuActive
boolean Nagato_painClickSound=false
unit Nagato_c=null
player Nagato_p
integer Nagato_PainNumber=0
integer Nagato_PainControlNumber=0
boolean array Nagato_PainExist
integer Nagato_PainSelectedNumberNext=0
real Nagato_value
integer Naruto_KAGE_BUNSHIN=0x41313536
integer Naruto_RASENGAN=0x41303549
integer Naruto_KUCHIYOSE=0x41303957
integer Naruto_SENNIN_MODO=0x41305A47
integer Naruto_KURAMA_MODO=0x4130484B
integer Naruto_KURAMA_MODO_CANCEL=0x41305943
integer Naruto_GUDODAMA=0x41305146
integer Naruto_RIKUDO_KAGE_BUNSHIN=0x41305143
integer Naruto_RIKUDO_SENNIN_MODO=0x4131354A
integer Naruto_RIKUDO_SENNIN_MODO_SPELLBOOK=0x41303151
integer Naruto_SENPO_CHO_BIJU_RASEN_SHURIKEN=0x41303351
integer Naruto_RIKUDO_BIJU_MODO=0x4130504B
integer Naruto_RIKUDO_CHO_ODAMA_RASEN_SHURIKEN=0x41304E55
unit Naruto_NarutoUsual=null
unit Naruto_c=null
player Naruto_p
real Naruto_rasenganDamage=0.
integer Naruto_kuramaModeChakra=0
integer Naruto__bunshinNumber=0
boolean Naruto__tajuKageBunshinOn=false
trigger Naruto__tajukagebunshingetdmg
boolean Naruto__haremOn=false
unit Naruto__haremAvailability=null
boolean Naruto__rasenganLog=false
effect Naruto__rasenganEff
boolean Naruto__senninModoOn=false
integer Naruto__senninModoBunshinEnerugyCur=0
integer Naruto__senninModoBunshinEnerugyMax=2
integer Naruto__senninModoBunshinCur=0
integer Naruto__senninModoBunshinMax=3
integer Naruto__senninModoEnerugy
unit Naruto__senninModoAvailability=null
trigger Naruto__kuramamodeorder
integer Naruto__kuramaModeOrderNumber=0
boolean Naruto__rasenkyuganOn=false
unit Naruto__kuramaShield=null
unit Naruto__kuramaMode=null
boolean Naruto__kuramaModeOn=false
unit Naruto__bijuMode=null
boolean Naruto__bijuModeOn=false
trigger Naruto__trgDamage
group Naruto__grReg
boolean Naruto__GudodamaKageBunshinOn=false
integer Naruto__RikudoSenninModoOrderNumber=0
boolean Naruto__logCastRikudoChoOdamaRasenShuriken=false
effect Naruto_EffGudodama
integer Naruto_IntGudodamaDefenseChance=5
integer Naruto_GUDODAMA_PINTLE_SPELL=0x41305137
integer Naruto_bijuModeChakra=0
unit Naruto_FutonChoOdamaRasenShuriken=null
unit Naruto_BijudamaRasenShuriken=null
integer Neji_JUKEN=0x41303834
integer Neji_KAITEN=0x41303653
integer Neji_BYAKUGAN=0x41305756
integer Neji_HAKKE_ROKUJUYON_SHO=0x41304C33
group Neji__grJukenReg
group Neji__grJuken
unit Neji__c=null
player Neji__p
trigger Neji__jukendmg
real array Neji__timeJuken
real array Neji__timeSlowJuken
integer Obito_MS=0x41305553
integer Obito_UCHIHA_KAENJIN=0x41304955
integer Obito_GOKAKYU=0x41305554
integer Obito_KUSARI=0x41305542
integer Obito_SAIBO=0x4130374C
integer Obito_GUDODAMA=0x41313741
integer Obito_MUSEKI_YOJIN=0x41303750
integer Obito_BIJUDAMA=0x4130384A
integer Obito_NUNOBOKO=0x41303238
integer Obito_SENJUTSU=0x4131354E
integer Obito_SENJUTSU_SPELLBOOK=0x4130334B
boolean array Obito_logKamui
unit Obito_c=null
player Obito_p
trigger Obito_trgGudodamaSphereDamage
trigger Obito_trgRikudoSenjutsuDamage
group Obito__grKaton
group Obito__grKamui
unit Obito__kaenjin=null
boolean Obito__KamuiSelfOn=false
boolean Obito__cdMokton=false
group Obito__grJikukanReg
group Obito__grJikukanCheck
trigger Obito__trgJikukanDamage
trigger Obito__trgUchihaKaenjinDamage
group Obito__grUchihaKaenjinReg
group Obito__grUchihaKaenjinCheck
group Obito__grKusariSave
unit Obito__uGudodamaSphere=null
trigger Obito__trgGudodamaLanceDamage
group Obito__grGudodamaLanceReg
group Obito__grGudodamaLanceCheck
integer Onoki_KAIJUGAN=0x41305153
integer Onoki_KEIJUGAN=0x41304758
integer Onoki_GOREMU=0x41303632
integer Onoki_ULT=0x41304355
integer Onoki_IWA_BUNSHIN=0x41305645
unit Onoki__c=null
player Onoki__p
unit Onoki__goremu=null
trigger Onoki__trgDamage
group Onoki__grReg
group Onoki__grCheck
group Onoki__grAtom
real Onoki__atomA
group Onoki__grRegIwa
trigger Onoki__getdmgIwa
integer Orochimaru_SNAKE=0x41305142
integer Orochimaru_KUSANAGI=0x41303242
integer Orochimaru_RASHOMON=0x41303858
integer Orochimaru_ULT=0x41303855
unit Orochimaru__c=null
player Orochimaru__p
trigger Orochimaru__getdmg
integer Sai_SHISHI=0x41304548
integer Sai_HEBI=0x41313352
integer Sai_TORA=0x41305A49
integer Sai_CHOSHIN_GIGA=0x41303955
integer Sai_TAKA=0x41313554
unit Sai__c=null
player Sai__p
group Sai__grShishi
group Sai__grReg
trigger Sai__getdmg
integer Sakura_OKASHO=0x41303336
integer Sakura_GOCKEN=0x4131334D
integer Sakura_SHOSEN=0x41303137
integer Sakura_BYAKUGO=0x41305A4A
group Sakura__g
unit Sakura__c=null
player Sakura__p
integer Sasori_AIANTERU=0x41305833
integer Sasori_SENBONS=0x41304233
integer Sasori_GANJONA_KESU=0x41303444
integer Sasori_SENBOMB=0x41305834
integer Sasori_SENJUSOBU=0x41305835
integer Sasori_ROPU=0x41305857
integer Sasori_SATETSU_KAIHO=0x41305858
integer Sasori_KAZEKAGE=0x41304259
integer Sasori_KAZEKAGE_IMPROVEMENT=0x52303047
integer Sasori_KAEN_HOSHA_KI=0x41305935
integer Sasori_AKAHIGI=0x41305757
integer Sasori_HOIPPU=0x41303548
integer Sasori_HEART=0x41304D32
unit Sasori_c=null
player Sasori_p
integer Sasori_HIRUKO_DUMMY_ID=0x6E303238
unit Sasori_hirukoDummy=null
group Sasori__grReg
group Sasori__grKazekage
trigger Sasori__getdmg
boolean Sasori__senjusobuLog=false
real Sasori__senjusobuX
real Sasori__senjusobuY
integer Sasori_bodies
leaderboard Sasori_lb=null
boolean array Sasori_form_1
boolean array Sasori_form_2
boolean array Sasori_form_3
integer Sasuke_CHIDORI=0x41304F49
integer Sasuke_KATON=0x41313731
integer Sasuke_SHARINGAN=0x41313732
integer Sasuke_KUCHIYOSE=0x41305544
integer Sasuke_EMS=0x4131354B
integer Sasuke_AMATERASU=0x41304738
integer Sasuke_SUSANOO_RIBU=0x41303332
integer Sasuke_SUSANOO_RIBU_SLOW=0x4130434A
integer Sasuke_SUSANOO_SKELETON=0x41305457
integer Sasuke_SUSANOO_SKELETON_SLOW=0x41304C31
integer Sasuke_SUSANOO_SKELETON_KAI=0x4130384F
integer Sasuke_SUSANOO_FULL=0x41305450
integer Sasuke_SUSANOO_FULL_SLOW=0x41303930
integer Sasuke_SUSANOO_FULL_BOW=0x41304633
integer Sasuke_ENTON_SUSANOO_KAGUTSUCHI=0x41304C41
integer Sasuke_SUSANOO_ARMOR=0x41305454
integer Sasuke_SUSANOO_ARMOR_SLOW=0x41304348
integer Sasuke_SUSANOO_ARMOR_TSURUGI=0x41304B54
integer Sasuke_SUSANOO_ARMOR_YASAKA=0x41305356
integer Sasuke_SUSANOO_KANSEITAI=0x41303932
integer Sasuke_SUSANOO_CHIDORI=0x4130594F
integer Sasuke_RIKUDO_CHIDORI=0x41303937
integer Sasuke_ENTON_KAGUTSUCHI=0x4131335A
integer Sasuke_RINNEGAN=0x41305452
integer Sasuke_RINNEGAN_BUFF=0x42303335
integer Sasuke_RINNEGAN_GENJUTSU=0x41305259
integer Sasuke_RINNEGAN_AMENOTEJIKARA=0x41303156
integer Sasuke_CHIBAKU_TENSEI=0x41305354
integer Sasuke_BIJU_SUSANOO=0x41305352
integer Sasuke_BIJU_SUSANOO_INDRA=0x41304336
integer Sasuke_ribuMax=0
unit Sasuke_c=null
player Sasuke_p
real Sasuke__chidoriDamage
trigger Sasuke__katanadmg
group Sasuke__grReg
group Sasuke__grKatana
leaderboard Sasuke__lb=null
boolean Sasuke__ultStuck=false
integer Sasuke__ultDamage=0
unit Sasuke__kirin
boolean Sasuke__ChidoriOn=false
boolean Sasuke__KirinOn=false
boolean Sasuke__KuchiyoseOn=false
unit Sasuke__amaterasu=null
unit Sasuke__amaterasuEMS=null
boolean Sasuke__amaterasuMoving=false
real Sasuke__amaterasuSpeed=0.
real Sasuke__amaterasuCurDistance=0.
real Sasuke__amaterasuMaxDistance=0.
real Sasuke__amaterasuA=0.
real Sasuke__amaterasuMaxRange=1500.
boolean Sasuke__amaterasuCD=false
boolean Sasuke__ribuReg=false
trigger Sasuke__ribudmg
boolean Sasuke__susanooSkeletonOn=false
boolean Sasuke__susanooFullOn=false
boolean Sasuke__susanooArmorOn=false
boolean Sasuke__susanooKanseitaiOn=false
integer Sasuke__susanooID=0
real Sasuke__rikudoChidoriDamage=0.
integer Sasuke__chibakuTenseiTargets=0
real Sasuke__chibakuTenseiBurn=0.
boolean Sasuke__chibakuTenseiBurnOn=false
integer Sasuke__bijuSusanooChakra=0
boolean Sasuke__logCastIndraNoYa=false
unit Sasuke__bijuSusanooUnit=null
integer Shikamaru_KAGE_MANE=0x4130304B
integer Shikamaru_HIKARIDAMA=0x41303736
integer Shikamaru_KIBAKUFUDA=0x41303741
integer Shikamaru_ULT=0x41303258
unit Shikamaru__c=null
unit Shikamaru__trap=null
player Shikamaru__p
trigger Shikamaru__order
rect Shikamaru__UltRect
group Shikamaru_KibakufudaGroup
integer Shikamaru_KibakufudaNumberCur=0
integer Shikamaru_KibakufudaNumberMax=0
integer Suigetsu_MIZUDEPPO=0x41305032
integer Suigetsu_GOSUIWAN=0x41313635
integer Suigetsu_SUIKA=0x41305048
integer Suigetsu_ULT=0x41305842
unit Suigetsu__c=null
player Suigetsu__p
trigger Suigetsu__attack
trigger Suigetsu__getdmg
group Suigetsu__grSuikaCheck
integer Tobirama_SUIDANHA=0x41305241
integer Tobirama_SUITON=0x4131344D
integer Tobirama_SUISHOHA=0x41304F47
integer Tobirama_KAGEBUNSHIN=0x41305250
unit Tobirama__c=null
player Tobirama__p
integer Tobirama__number=0
integer Tsunade_TSUTEN_KYAKU=0x41304731
integer Tsunade_ENKAKU_CHIYU=0x41313446
integer Tsunade_TAIRYOKU=0x41305456
integer Tsunade_ULT=0x41305A55
unit Tsunade__c=null
player Tsunade__p
trigger Tsunade__attack
trigger Tsunade__getdmg
group Tsunade__grReg
group Tsunade__grStrikes
integer Yamato_DAIJURIN=0x4130424F
integer Yamato_SHIBARI=0x41303139
integer Yamato_SHICHURO=0x41304439
integer Yamato_ULT=0x41304448
player Yamato__p=null
boolean Yamato__logTree=false
integer Zabuza_KIRIGAKURE=0x41305630
integer Zabuza_MIZU_BUNSHIN=0x4130344B
integer Zabuza_KUBIKIRIBOCHO=0x4130414E
integer Zabuza_ULT=0x41305636
integer Zabuza_DEMON=0x4130414B
unit Zabuza__c=null
player Zabuza__p
group Zabuza__grBladeReg
group Zabuza__grBladeCheck
trigger Zabuza__trgBlade
trigger Zabuza__trgKijin
real Zabuza__dmgKijin=0.
integer Zabuza__intBloodML=0
boolean Zabuza__cdKijin=false
boolean Zabuza__logSariento=false
integer Zetsu_KAGERO=0x4130354D
integer Zetsu_TOBI=0x41304E49
integer Zetsu_BUNSHIN=0x4131344F
integer Zetsu_ULT=0x41303636
unit Zetsu__c=null
player Zetsu__p
unit Zetsu_UltKiller=null
rect cj_v666_rect
unit cj_v666_unit
string array s__DebugLog__DebugLog
string array s__2DebugLog__DebugLog
endglobals
function sg__DebugLog__DebugLog_get takes integer i returns string
if(i<8191)then
return s__DebugLog__DebugLog[i]
else
return s__2DebugLog__DebugLog[i-8191]
endif
endfunction
function sg__DebugLog__DebugLog_set takes integer i,string v returns nothing
if(i<8191)then
set s__DebugLog__DebugLog[i]=v
else
set s__2DebugLog__DebugLog[i-8191]=v
endif
endfunction
function UnitSusanooStateDamage takes unit u returns real
local integer state=LoadInteger(HH,GetHandleId(u),0)
local integer maxvalue
local real xx
local real dmg=0.
if GetUnitAbilityLevel(u,Itachi_RIBU_SLOW)>0 then
set maxvalue=Itachi_ribuMax
set xx=.1
elseif GetUnitAbilityLevel(u,Itachi_SUSANOO_SLOW)>0 then
set maxvalue=Itachi_ribuMax
set xx=.05
elseif GetUnitAbilityLevel(u,Madara_RIBU_BUFF)>0 then
set maxvalue=Madara_ribuMax
set xx=.1
elseif GetUnitAbilityLevel(u,Madara_SUSANOO_SLOW)>0 then
set maxvalue=Madara_ribuMax
set xx=.05
elseif GetUnitAbilityLevel(u,Sasuke_SUSANOO_RIBU_SLOW)>0 or GetUnitAbilityLevel(u,Sasuke_SUSANOO_SKELETON_SLOW)>0 then
set maxvalue=Sasuke_ribuMax
set xx=.1
elseif GetUnitAbilityLevel(u,Sasuke_SUSANOO_FULL_SLOW)>0 then
set maxvalue=Sasuke_ribuMax
set xx=.05
endif
set dmg=maxvalue*xx
if dmg>state then
set dmg=state+1.
endif
return dmg
endfunction
function HasUnitSusanooBuff takes unit u returns boolean
local boolean log=false
if GetUnitAbilityLevel(u,Itachi_RIBU_SLOW)>0 or GetUnitAbilityLevel(u,Itachi_SUSANOO_SLOW)>0 or GetUnitAbilityLevel(u,Madara_RIBU_BUFF)>0 or GetUnitAbilityLevel(u,Madara_SUSANOO_SLOW)>0 or GetUnitAbilityLevel(u,Sasuke_SUSANOO_RIBU_SLOW)>0 or GetUnitAbilityLevel(u,Sasuke_SUSANOO_SKELETON_SLOW)>0 or GetUnitAbilityLevel(u,Sasuke_SUSANOO_FULL_SLOW)>0 then
set log=true
endif
return log
endfunction
function UnitRemoveInvisible takes unit u returns nothing
call UnitRemoveAbility(u,0x424F776B)
call UnitRemoveAbility(u,0x42303248)
call UnitRemoveAbility(u,0x42303352)
call UnitRemoveAbility(u,0x42303451)
call UnitRemoveAbility(u,0x42303535)
call UnitRemoveAbility(u,0x42303236)
endfunction
function HasUnitInvisible takes unit u returns boolean
local boolean log=false
if GetUnitAbilityLevel(u,0x424F776B)>0 or GetUnitAbilityLevel(u,0x42303248)>0 or GetUnitAbilityLevel(u,0x42303352)>0 or GetUnitAbilityLevel(u,0x42303451)>0 or GetUnitAbilityLevel(u,0x42303535)>0 or GetUnitAbilityLevel(u,0x42303236)>0 then
set log=true
endif
return log
endfunction
function IsUnitFacingBack takes unit c,unit tu,real degrees returns boolean
local boolean log=false
local real fc=GetUnitFacing(c)
local real ftu=GetUnitFacing(tu)
if fc<0.then
set fc=fc+(360.)
endif
if ftu<0.then
set ftu=ftu+(360.)
endif
if fc<ftu+degrees and fc>ftu-degrees then
set log=true
endif
return log
endfunction
function IsUnitInvulnerable takes unit u returns boolean
local boolean log=false
local real life=GetWidgetLife(u)
call SetWidgetLife(u,life-.001)
if GetWidgetLife(u)==life then
set log=true
else
call SetWidgetLife(u,life)
endif
return log
endfunction
function IsUnitDisabled takes unit u returns boolean
local boolean log=false
if IsUnitPaused(u)then
set log=true
elseif GetUnitAbilityLevel(u,0x42303050)>0 or GetUnitAbilityLevel(u,0x42505345)>0 or GetUnitAbilityLevel(u,0x42303357)>0 or GetUnitAbilityLevel(u,0x42303431)>0 or GetUnitAbilityLevel(u,0x424E7369)>0 or GetUnitAbilityLevel(u,0x424F6878)>0 then
set log=true
endif
return log
endfunction
function IsUnitUnpausedButDisabled takes unit u returns boolean
local boolean log=false
if GetUnitAbilityLevel(u,0x42303050)>0 or GetUnitAbilityLevel(u,0x42505345)>0 or GetUnitAbilityLevel(u,0x42303357)>0 or GetUnitAbilityLevel(u,0x42303431)>0 or GetUnitAbilityLevel(u,0x424E7369)>0 or GetUnitAbilityLevel(u,0x424F6878)>0 then
set log=true
endif
return log
endfunction
function LogAdd takes string s returns nothing
call sg__DebugLog__DebugLog_set(DebugLog__CurrentString,sg__DebugLog__DebugLog_get(DebugLog__CurrentString)+s)
if(StringLength(sg__DebugLog__DebugLog_get(DebugLog__CurrentString))>=DebugLog__StringLimit)then
set DebugLog__CurrentString=DebugLog__CurrentString+1
endif
endfunction
function LogUpdate takes nothing returns nothing
local integer i=0
local integer id
local integer count1=0
local integer count2=0
call PreloadGenClear()
call PreloadGenStart()
loop
exitwhen i>10
set id=GetPlayerId(Player(i))
if IsPlayerAlly(Player(i),Player(5))and Player(i)!=Player(5)then
set count1=count1+gamestat_K[id]
elseif IsPlayerAlly(Player(i),Player(11))then
set count2=count2+gamestat_K[id]
endif
set i=i+1
endloop
set i=0
loop
call Preload("GAMETIME: ["+I2S(gamestat_mbTimeMin)+":"+I2S(gamestat_mbTimeSec)+"]. "+sg__DebugLog__DebugLog_get(i)+"   1)PLAYERS.  SHINOBI RENGOGUN: [["+udg_DebugStr[1]+"]];  AKATSUKI: [["+udg_DebugStr[2]+"]].   2)SCORES: "+I2S(count1)+":"+I2S(count2)+".")
set i=i+1
exitwhen i>DebugLog__CurrentString
endloop
call PreloadGenEnd("C:\\NWHC\\DeBUG.txt")
endfunction
function DebugLog__DebugLogOnTimer takes nothing returns nothing
set DebugLog__Seconds=DebugLog__Seconds+1
if(DebugLog__Seconds>59)then
set DebugLog__Seconds=0
set DebugLog__Minutes=DebugLog__Minutes+1
endif
endfunction
function DebugLog__DebugLogInit takes nothing returns nothing
call TimerStart(CreateTimer(),1.,true,function LogUpdate)
call TimerStart(CreateTimer(),1.,true,function DebugLog__DebugLogOnTimer)
call LogAdd("Last start: 2018.03.03, 22:54:06")
endfunction
function IsUnitNeedClear takes unit u,player p returns boolean
local boolean log=false
if IsUnitEnemy(u,p)and GetWidgetLife(u)>.405 and not IsUnitHidden(u)and not IsUnitInvulnerable(u)and not IsUnitType(u,UNIT_TYPE_UNDEAD)and not IsUnitType(u,UNIT_TYPE_STRUCTURE)then
set log=true
endif
return log
endfunction
function IsUnitNeedNinjutsu takes unit u,player p returns boolean
local boolean log=false
if IsUnitEnemy(u,p)and GetWidgetLife(u)>.405 and not IsUnitHidden(u)and not IsUnitInvulnerable(u)and not IsUnitType(u,UNIT_TYPE_UNDEAD)and not IsUnitType(u,UNIT_TYPE_MAGIC_IMMUNE)and GetUnitAbilityLevel(u,0x41313351)==0 then
set log=true
endif
return log
endfunction
function IsUnitNeedTaijutsu takes unit u,player p returns boolean
local boolean log=false
if IsUnitEnemy(u,p)and GetWidgetLife(u)>.405 and not IsUnitHidden(u)and not IsUnitInvulnerable(u)and not IsUnitType(u,UNIT_TYPE_UNDEAD)and not IsUnitType(u,UNIT_TYPE_STRUCTURE)then
set log=true
endif
return log
endfunction
function IsUnitNeedBiju takes unit u,player p returns boolean
local boolean log=false
if IsUnitEnemy(u,p)and GetWidgetLife(u)>.405 and not IsUnitHidden(u)and not IsUnitInvulnerable(u)and not IsUnitType(u,UNIT_TYPE_UNDEAD)and not IsUnitType(u,UNIT_TYPE_STRUCTURE)then
set log=true
endif
return log
endfunction
function Sound3D takes unit u,string name returns nothing
local sound snd=CreateSound(name,false,true,true,12700,12700,"")
call SetSoundPosition(snd,GetWidgetX(u),GetWidgetY(u),0.)
call SetSoundDistanceCutoff(snd,1500.)
call SetSoundDuration(snd,GetSoundFileDuration(name))
call SetSoundVolume(snd,127)
call StartSound(snd)
call KillSoundWhenDone(snd)
set snd=null
endfunction
function Sound takes string name returns nothing
local sound snd=CreateSound(name,false,false,true,12700,12700,"")
call SetSoundVolume(snd,127)
call StartSound(snd)
call KillSoundWhenDone(snd)
set snd=null
endfunction
function cj_anonym__40 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
set udg_Speech[LoadInteger(Hash,h,0)]=null
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set t=null
endfunction
function HeroesSpeechSelectTimer takes integer id,real time returns nothing
local timer t=CreateTimer()
call SaveInteger(Hash,GetHandleId(t),0,id)
call TimerStart(t,time,false,function cj_anonym__40)
set t=null
endfunction
function HeroSpeechSound takes player p,string name returns nothing
local string s=null
local integer id=GetPlayerId(p)
if GetLocalPlayer()==p then
set s=name
endif
set udg_Speech[id]=CreateSound(s,false,false,true,12700,12700,"")
call SetSoundVolume(udg_Speech[id],127)
call StartSound(udg_Speech[id])
call KillSoundWhenDone(udg_Speech[id])
endfunction
function IsUnitShopOrHelper takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==0x68303657 or i==0x68303744 or i==0x68303436 or i==0x68303353 then
set log=true
endif
return log
endfunction
function IsUnitGakureBuilding takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==0x6E303151 or i==0x68303036 or i==0x68303043 or i==0x68303042 or i==0x68303041 or i==0x68303155 or i==0x68303231 or i==0x68303159 or i==0x68303156 or i==0x68303133 or i==0x6830314C or i==0x6830314B or i==0x68303149 or i==0x68303045 or i==0x68303052 or i==0x6830304D or i==0x6830304A then
set log=true
endif
return log
endfunction
function IsUnitTurels takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==0x68303359 or i==0x68303357 then
set log=true
endif
return log
endfunction
function IsUnitGuard takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==AllianceGuardTopID_1 or i==AllianceGuardTopID_2 or i==AkatsukiGuardTopID_1 or i==AkatsukiGuardTopID_2 or i==AllianceGuardBotID_1 or i==AllianceGuardBotID_2 or i==AkatsukiGuardBotID_1 or i==AkatsukiGuardBotID_2 then
set log=true
endif
return log
endfunction
function IsUnitBarracks takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==0x68303652 or i==0x68303241 or i==0x68303656 or i==0x68303249 then
set log=true
endif
return log
endfunction
function IsUnitBush takes unit u returns boolean
local boolean log=false
if GetUnitTypeId(u)==0x6E303152 then
set log=true
endif
return log
endfunction
function IsUnitWoman takes unit u returns boolean
local integer id=GetUnitTypeId(u)
local boolean log=false
if id==heroes_rawcode[Chiyo]or id==heroes_rawcode[Mei]or id==heroes_rawcode[Sakura]or id==heroes_rawcode[Tsunade]then
set log=true
endif
return log
endfunction
function IsUnitHeroRikudoForm takes unit u returns boolean
local boolean log=false
local integer id=GetUnitTypeId(u)
if id==heroes_rikudo_rawcode[Madara]or id==heroes_rikudo_rawcode[Naruto]or id==heroes_rikudo_rawcode[Obito]or id==heroes_rikudo_rawcode[Sasuke]then
set log=true
endif
return log
endfunction
function IsUnitHeroOnly takes unit u returns boolean
local integer i=1
local integer id=GetUnitTypeId(u)
local boolean log=false
loop
exitwhen i>hero_number or log
if id==heroes_rawcode[i]then
set log=true
endif
set i=i+1
endloop
return log
endfunction
function IsUnitHero takes unit u returns boolean
local integer i=1
local integer id=GetUnitTypeId(u)
local boolean log=false
loop
if id==heroes_rawcode[i]then
set log=true
endif
set i=i+1
exitwhen i>hero_number or log
endloop
if not log then
set i=1
loop
if id==morph_rawcode[i]then
set log=true
endif
set i=i+1
exitwhen i>morph_number or log
endloop
endif
if not log then
set i=1
loop
if id==heroes_rikudo_rawcode[i]then
set log=true
endif
set i=i+1
exitwhen i>hero_number or log
endloop
endif
return log
endfunction
function IsUnitHeroMorph takes unit u returns boolean
local integer i=1
local integer id=GetUnitTypeId(u)
local boolean log=false
loop
exitwhen i>morph_number or log
if id==morph_rawcode[i]then
set log=true
endif
set i=i+1
endloop
return log
endfunction
function IsUnitPuppet takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==0x68303648 or i==0x68303649 or i==0x6830364B or i==0x6830364A or i==0x68303534 or i==0x68303535 then
set log=true
endif
return log
endfunction
function IsUnitPain takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==Nagato_PAIN_ID_1 or i==Nagato_PAIN_ID_2 or i==Nagato_PAIN_ID_3 or i==Nagato_PAIN_ID_4 or i==Nagato_PAIN_ID_5 or i==Nagato_PAIN_ID_6 then
set log=true
endif
return log
endfunction
function IsUnitNC takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==0x68303347 or i==0x68303346 or i==0x68303345 or i==0x68303344 or i==0x68303741 or i==0x68303341 or i==0x68303230 or i==0x68303248 or i==0x68303430 or i==0x68303348 or i==0x68303355 or i==0x68303356 then
set log=true
endif
return log
endfunction
function IsUnitOutpost takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==AllianceKonohaForwardID or i==AllianceIwaForwardID or i==AllianceKiriForwardID or i==AllianceTetsuForwardID or i==AllianceSunaSupportID or i==AllianceKumoSupportID or i==AkatsukiForwardID or i==AkatsukiSupportID then
if LoadBoolean(Hash,GetHandleId(u),1)then
set log=true
endif
endif
return log
endfunction
function IsUnitCreepSpecial takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==AllianceSpecialID or i==AkatsukiSpecialID then
set log=true
endif
return log
endfunction
function IsUnitHealer takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==AllianceHealerID or i==AkatsukiHealerID then
set log=true
endif
return log
endfunction
function IsUnitCreepForward takes unit u returns boolean
local boolean log=false
local integer i=GetUnitTypeId(u)
if i==AllianceKonohaForwardID or i==AllianceIwaForwardID or i==AllianceKiriForwardID or i==AllianceTetsuForwardID or i==AkatsukiForwardID then
set log=true
endif
return log
endfunction
function IsUnitCreepSupport takes unit u returns boolean
local boolean log=false
local integer i=GetUnitTypeId(u)
if i==AllianceSunaSupportID or i==AllianceKumoSupportID or i==AkatsukiSupportID then
set log=true
endif
return log
endfunction
function IsUnitCreep takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==AllianceKonohaForwardID or i==AllianceIwaForwardID or i==AllianceKiriForwardID or i==AllianceTetsuForwardID or i==AllianceSunaSupportID or i==AllianceKumoSupportID or i==AllianceCatapultaID or i==AkatsukiForwardID or i==AkatsukiSupportID or i==AkatsukiCatapultaID then
if not LoadBoolean(Hash,GetHandleId(u),1)and GetUnitAbilityLevel(u,0x4130544F)==0 then
set log=true
endif
endif
return log
endfunction
function IsUnitCreepStart takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==AllianceKonohaForwardID or i==AllianceIwaForwardID or i==AllianceKiriForwardID or i==AllianceTetsuForwardID or i==AllianceSunaSupportID or i==AllianceKumoSupportID or i==AkatsukiForwardID or i==AkatsukiSupportID then
if GetUnitAbilityLevel(u,0x4130544F)>0 then
set log=true
endif
endif
return log
endfunction
function IsUnitBiju takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==0x68303032 or i==0x68303044 or i==0x68303232 or i==0x68303233 or i==0x68303235 or i==0x68303236 or i==0x68303244 or i==0x68303246 or i==0x68303247 or i==morph_rawcode[5]or i==morph_rawcode[6]then
set log=true
endif
return log
endfunction
function IsUnitDummyEffect takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if i==0x6E303042 or i==0x68303351 or i==0x68303058 or i==0x6E303156 or i==0x6E303157 or i==0x6E303158 or i==0x6E303159 or i==0x68303350 then
set log=true
endif
return log
endfunction
function IsUnitWeapon takes unit d,unit u,player p returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if u!=d and IsUnitEnemy(u,p)and i==0x68303050 or i==0x68303833 or i==0x68303342 or i==0x68303832 or i==0x68303343 then
set log=true
endif
return log
endfunction
function IsUnitSummon takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if IsUnitPuppet(u)or i==0x68303144 or i==0x6830324D or i==0x68303349 or i==0x68303254 or i==0x68303039 or i==0x68303835 or i==0x68303252 or i==0x68303031 or i==0x6830334E or i==0x6830334C or i==0x6830334D or i==0x68303051 then
set log=true
endif
return log
endfunction
function IsUnitBig takes unit u returns boolean
local integer i=GetUnitTypeId(u)
local boolean log=false
if IsUnitBiju(u)or i==0x68303336 or i==0x68303335 or i==0x6E303047 or i==0x6830314A or i==0x6830304B or i==0x68303144 or i==0x68303252 or i==0x68303450 or i==0x68303835 or i==0x68303031 or i==0x68303039 or i==0x6830324D or i==0x68303131 or i==0x68303056 then
set log=true
endif
return log
endfunction
function cj_anonym__41 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local string str=LoadStr(Hash,h,0)
local real period=LoadReal(Hash,h,1)
local real time=LoadReal(Hash,h,2)
if time>0.then
if str=="start"then
set Weather_fogH=Weather_fogH-80.
set Weather_fogR=Weather_fogR+3.
set Weather_fogG=Weather_fogG+3.
set Weather_fogB=Weather_fogB+3.
elseif str=="end"then
set Weather_fogH=Weather_fogH+80.
set Weather_fogR=Weather_fogR-3.
set Weather_fogG=Weather_fogG-3.
set Weather_fogB=Weather_fogB-3.
endif
call SetTerrainFogEx(0,Weather_fogH,10000.,0.,Weather_fogR,Weather_fogG,Weather_fogB)
call SaveReal(Hash,h,2,time-period)
else
if str=="end"then
call ResetTerrainFog()
call ResetToGameCamera(0.)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function RainStartEnd takes string str returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=1.
call SaveStr(Hash,h,0,str)
call SaveReal(Hash,h,1,period)
call SaveReal(Hash,h,2,time)
call TimerStart(t,period,true,function cj_anonym__41)
set t=null
endfunction
function cj_anonym__42 takes nothing returns nothing
call RainStartEnd("end")
call EnableWeatherEffect(WeatherEffect[0],false)
call RemoveWeatherEffect(WeatherEffect[0])
set WeatherType=0
call DestroyTimer(GetExpiredTimer())
endfunction
function Rain takes real time returns nothing
set WeatherType=1
set WeatherEffect[0]=AddWeatherEffect(gg_rct_Weather,0x52416C72)
call RainStartEnd("start")
call EnableWeatherEffect(WeatherEffect[0],true)
call TimerStart(CreateTimer(),time,false,function cj_anonym__42)
endfunction
function cj_anonym__43 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local string str=LoadStr(Hash,h,0)
local real period=LoadReal(Hash,h,1)
local real time=LoadReal(Hash,h,2)
if time>0.then
if str=="start"then
set Weather_fogH=Weather_fogH-150.
set Weather_fogG=Weather_fogG+7.
elseif str=="end"then
set Weather_fogH=Weather_fogH+150.
set Weather_fogG=Weather_fogG-7.
endif
call SetTerrainFogEx(0,Weather_fogH,10000.,0.,0.,Weather_fogG,0.)
call SaveReal(Hash,h,2,time-period)
else
if str=="end"then
call ResetTerrainFog()
call ResetToGameCamera(0.)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function AcidRainStartEnd takes string str returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=1.
call SaveStr(Hash,h,0,str)
call SaveReal(Hash,h,1,period)
call SaveReal(Hash,h,2,time)
call TimerStart(t,period,true,function cj_anonym__43)
set t=null
endfunction
function cj_anonym__44 takes nothing returns nothing
call AcidRainStartEnd("end")
call EnableWeatherEffect(WeatherEffect[0],false)
call RemoveWeatherEffect(WeatherEffect[0])
set WeatherType=0
call DestroyTimer(GetExpiredTimer())
endfunction
function AcidRain takes real time returns nothing
set WeatherType=2
set WeatherEffect[0]=AddWeatherEffect(gg_rct_Weather,0x524C6C72)
call AcidRainStartEnd("start")
call EnableWeatherEffect(WeatherEffect[0],true)
call TimerStart(CreateTimer(),time,false,function cj_anonym__44)
endfunction
function cj_anonym__45 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local string str=LoadStr(Hash,h,0)
local real period=LoadReal(Hash,h,1)
local real time=LoadReal(Hash,h,2)
if time>0.then
if str=="start"then
set Weather_fogH=Weather_fogH-150.
set Weather_fogR=Weather_fogR+4.
elseif str=="end"then
set Weather_fogH=Weather_fogH+150.
set Weather_fogR=Weather_fogR-4.
endif
call SetTerrainFogEx(0,Weather_fogH,10000.,0.,Weather_fogR,0.,0.)
call SaveReal(Hash,h,2,time-period)
else
if str=="end"then
call ResetTerrainFog()
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function MeteorRainStartEnd takes string str returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=1.
call SaveStr(Hash,h,0,str)
call SaveReal(Hash,h,1,period)
call SaveReal(Hash,h,2,time)
call TimerStart(t,period,true,function cj_anonym__45)
set t=null
endfunction
function cj_anonym__46 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(Hash,h,0)
local real time=LoadReal(Hash,h,1)
local integer value=LoadInteger(Hash,h,2)
local unit d
if time>0.and WeatherOn then
set d=CreateUnit(Player(14),0x6E303042,GetRandomReal(GetRectMinX(gg_rct_Weather),GetRectMaxX(gg_rct_Weather)),GetRandomReal(GetRectMinY(gg_rct_Weather),GetRectMaxY(gg_rct_Weather)),GetRandomReal(0.,360.))
call SetUnitFlyHeight(d,1000.,0.)
call SetUnitScale(d,GetRandomReal(1.2,1.8),GetRandomReal(1.2,1.8),GetRandomReal(1.2,1.8))
call DestroyEffect(AddSpecialEffectTarget("Units\\Demon\\Infernal\\InfernalBirth.mdl",d,"chest"))
call UnitApplyTimedLife(d,0x42544C46,2.)
call SetUnitFlyHeight(d,0.,GetRandomReal(750.,1000.))
if value<40 then
call SaveInteger(Hash,h,2,value+1)
else
call Sound("Weather Meteor.mp3")
call SaveInteger(Hash,h,2,0)
endif
call SaveReal(Hash,h,1,time-period)
else
call MeteorRainStartEnd("end")
set WeatherType=0
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function MeteorRain takes real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.05
set WeatherType=3
call MeteorRainStartEnd("start")
call SaveReal(Hash,h,0,period)
call SaveReal(Hash,h,1,time)
call SaveInteger(Hash,h,2,0)
call TimerStart(t,period,true,function cj_anonym__46)
set t=null
endfunction
function cj_anonym__47 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(Hash,h,0)
local real time=LoadReal(Hash,h,1)
local integer value=LoadInteger(Hash,h,2)
if time>0.and WeatherOn then
if value<5 then
call SaveInteger(Hash,h,2,value+1)
else
call Sound("Weather Wind.mp3")
call SaveInteger(Hash,h,2,0)
endif
call SaveReal(Hash,h,1,time-period)
else
call EnableWeatherEffect(WeatherEffect[0],false)
call RemoveWeatherEffect(WeatherEffect[0])
set WeatherType=0
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hurriacne takes real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
call Sound("Weather Wind.mp3")
set WeatherType=4
set WeatherEffect[0]=AddWeatherEffect(gg_rct_Weather,0x574E6377)
call EnableWeatherEffect(WeatherEffect[0],true)
call SaveReal(Hash,h,0,period)
call SaveReal(Hash,h,1,time)
call SaveInteger(Hash,h,2,0)
call TimerStart(t,period,true,function cj_anonym__47)
set t=null
endfunction
function cj_anonym__48 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local string str=LoadStr(Hash,h,0)
local real period=LoadReal(Hash,h,1)
local real time=LoadReal(Hash,h,2)
if time>0.then
if str=="start"then
set Weather_fogH=Weather_fogH-300.
set Weather_fogR=Weather_fogR+12.
elseif str=="end"then
set Weather_fogH=Weather_fogH+300.
set Weather_fogR=Weather_fogR-12.
endif
call SetTerrainFogEx(0,Weather_fogH,10000.,0.,Weather_fogR,0.,0.)
call SaveReal(Hash,h,2,time-period)
else
if str=="end"then
call ResetTerrainFog()
call ResetToGameCamera(0.)
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function EarthStrikeStartEnd takes string str returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=1.
call SaveStr(Hash,h,0,str)
call SaveReal(Hash,h,1,period)
call SaveReal(Hash,h,2,time)
call TimerStart(t,period,true,function cj_anonym__48)
set t=null
endfunction
function cj_anonym__49 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(Hash,h,0)
local real time=LoadReal(Hash,h,1)
local integer value=LoadInteger(Hash,h,2)
local unit d
if time>0.and WeatherOn then
set d=CreateUnit(Player(14),0x6E303042,GetRandomReal(GetRectMinX(gg_rct_Weather),GetRectMaxX(gg_rct_Weather)),GetRandomReal(GetRectMinY(gg_rct_Weather),GetRectMaxY(gg_rct_Weather)),GetRandomReal(0.,360.))
call SetUnitScale(d,GetRandomReal(1.5,2.),GetRandomReal(1.5,2.),GetRandomReal(1.7,5.5))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Volcano\\VolcanoMissile.mdl",d,"origin"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl",d,"chest"))
call UnitApplyTimedLife(d,0x42544C46,GetRandomReal(2.,5.))
if value<20 then
call SaveInteger(Hash,h,2,value+1)
else
if GetRandomInt(1,2)==1 then
call Sound("Weather Earthquake.mp3")
else
call Sound("Weather Crust.mp3")
endif
call CameraSetSourceNoise(GetRandomReal(20.,30.),GetRandomReal(4.,8.))
call CameraSetSourceNoise(GetRandomReal(90.,120.),GetRandomReal(20.,30.))
call SaveInteger(Hash,h,2,0)
endif
call SaveReal(Hash,h,1,time-period)
else
call EarthStrikeStartEnd("end")
set WeatherType=0
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function EarthStrike takes real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
set WeatherType=5
call CameraSetTargetNoise(12.,6.)
call EarthStrikeStartEnd("start")
call SaveReal(Hash,h,0,period)
call SaveReal(Hash,h,1,time)
call SaveInteger(Hash,h,2,0)
call TimerStart(t,period,true,function cj_anonym__49)
set t=null
endfunction
function cj_anonym__50 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local string str=LoadStr(Hash,h,0)
local real period=LoadReal(Hash,h,1)
local real time=LoadReal(Hash,h,2)
if time>0.then
if str=="start"then
set Weather_fogH=Weather_fogH-200.
set Weather_fogR=Weather_fogR+8.
set Weather_fogG=Weather_fogG+8.
set Weather_fogB=Weather_fogB+8.
elseif str=="end"then
set Weather_fogH=Weather_fogH+200.
set Weather_fogR=Weather_fogR-8.
set Weather_fogG=Weather_fogG-8.
set Weather_fogB=Weather_fogB-8.
endif
call SetTerrainFogEx(0,Weather_fogH,10000.,0.,Weather_fogR,Weather_fogG,Weather_fogB)
call SaveReal(Hash,h,2,time-period)
else
if str=="end"then
call ResetTerrainFog()
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function FogStartEnd takes string str returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=1.
call SaveStr(Hash,h,0,str)
call SaveReal(Hash,h,1,period)
call SaveReal(Hash,h,2,time)
call TimerStart(t,period,true,function cj_anonym__50)
set t=null
endfunction
function cj_anonym__51 takes nothing returns nothing
call FogStartEnd("end")
call EnableWeatherEffect(WeatherEffect[0],false)
call RemoveWeatherEffect(WeatherEffect[0])
set WeatherType=0
call DestroyTimer(GetExpiredTimer())
endfunction
function Fog takes real time returns nothing
set WeatherType=6
set WeatherEffect[0]=AddWeatherEffect(gg_rct_Weather,0x46447768)
call EnableWeatherEffect(WeatherEffect[0],true)
call FogStartEnd("start")
call TimerStart(CreateTimer(),time,false,function cj_anonym__51)
endfunction
function cj_anonym__52 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local string str=LoadStr(Hash,h,0)
local real period=LoadReal(Hash,h,1)
local real time=LoadReal(Hash,h,2)
if time>0.then
if str=="start"then
set Weather_fogH=Weather_fogH-300.
set Weather_fogB=Weather_fogB+4.
elseif str=="end"then
set Weather_fogH=Weather_fogH+300.
set Weather_fogB=Weather_fogB-4.
endif
call SetTerrainFogEx(0,Weather_fogH,10000.,0.,0.,0.,Weather_fogB)
call SaveReal(Hash,h,2,time-period)
else
if str=="end"then
call ResetTerrainFog()
call ResetToGameCamera(0.)
call CameraSetSmoothingFactor(0.)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function ThunderstormStartEnd takes string str returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=1.
call SaveStr(Hash,h,0,str)
call SaveReal(Hash,h,1,period)
call SaveReal(Hash,h,2,time)
call TimerStart(t,period,true,function cj_anonym__52)
set t=null
endfunction
function cj_anonym__53 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(Hash,h,0)
local real time=LoadReal(Hash,h,1)
if time>0.and WeatherOn then
if GetRandomInt(1,7)==1 then
call Sound("Weather Thunder.mp3")
call CinematicFadeBJ(bj_CINEFADETYPE_FADEOUTIN,GetRandomReal(.09,.12),"ReplaceableTextures\\CameraMasks\\White_mask.blp",100.,100.,100.,0.)
if GetRandomInt(1,3)==1 then
call Sound("Weather Thunder 2.mp3")
call CinematicFadeBJ(bj_CINEFADETYPE_FADEOUTIN,GetRandomReal(.06,.09),"ReplaceableTextures\\CameraMasks\\White_mask.blp",100.,100.,100.,0.)
endif
endif
call SaveReal(Hash,h,1,time-period)
else
call ThunderstormStartEnd("end")
call EnableWeatherEffect(WeatherEffect[0],false)
call RemoveWeatherEffect(WeatherEffect[0])
call EnableWeatherEffect(WeatherEffect[1],false)
call RemoveWeatherEffect(WeatherEffect[1])
set WeatherType=0
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Thunderstorm takes real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
set WeatherType=7
set WeatherEffect[0]=AddWeatherEffect(gg_rct_Weather,0x52416872)
call EnableWeatherEffect(WeatherEffect[0],true)
set WeatherEffect[1]=AddWeatherEffect(gg_rct_Weather,0x574F6377)
call EnableWeatherEffect(WeatherEffect[1],true)
call CameraSetSmoothingFactor(1.5)
call ThunderstormStartEnd("start")
call SaveReal(Hash,h,0,period)
call SaveReal(Hash,h,1,time)
call TimerStart(t,period,true,function cj_anonym__53)
set t=null
endfunction
function WeatherStart takes nothing returns nothing
local integer random=1
local integer randomMax=7
local boolean log=false
set Weather_fogH=2000.
set Weather_fogR=0.
set Weather_fogG=0.
set Weather_fogB=0.
if WeatherBlockedNumber==randomMax then
loop
set WeatherTypeBlock[random]=false
set random=random+1
exitwhen random>randomMax
endloop
endif
loop
set random=GetRandomInt(1,randomMax)
if not WeatherTypeBlock[random]then
set log=true
endif
exitwhen log
endloop
set WeatherBlockedNumber=WeatherBlockedNumber+1
set WeatherTypeBlock[random]=true
if random==1 then
call Rain(GetRandomReal(140.,180.))
elseif random==2 then
call AcidRain(GetRandomReal(80.,120.))
elseif random==3 then
call MeteorRain(GetRandomReal(60.,100.))
elseif random==4 then
call Hurriacne(GetRandomReal(120.,160.))
elseif random==5 then
call EarthStrike(GetRandomReal(40.,80.))
elseif random==6 then
call Fog(GetRandomReal(140.,180.))
elseif random==7 then
call Thunderstorm(GetRandomReal(120.,160.))
endif
endfunction
function GetCurrentVersion takes nothing returns string
return"NWHC: RTN [beta 5.0]"
endfunction
function Test takes string s returns nothing
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,"DEBUG: "+s)
endfunction
function GetPlayerNameColored takes player p returns string
local string r=GetPlayerName(p)
if p==Player(0)then
set r="|CFFFF0303"+r+"|r"
elseif p==Player(1)then
set r="|CFF0042FF"+r+"|r"
elseif p==Player(2)then
set r="|CFF1CE6B9"+r+"|r"
elseif p==Player(3)then
set r="|CFF540081"+r+"|r"
elseif p==Player(4)then
set r="|CFFFFFC00"+r+"|r"
elseif p==Player(5)then
set r="|CFFFE8A0E"+r+"|r"
elseif p==Player(6)then
set r="|CFF20C000"+r+"|r"
elseif p==Player(7)then
set r="|cffff80c0"+r+"|r"
elseif p==Player(8)then
set r="|CFF959697"+r+"|r"
elseif p==Player(9)then
set r="|CFF7FBFF1"+r+"|r"
elseif p==Player(10)then
set r="|CFF106246"+r+"|r"
elseif p==Player(11)then
set r="|CFF492A04"+r+"|r"
else
set r=""
endif
return r
endfunction
function DestroyText takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call DestroyTextTag(LoadTextTagHandle(Hash,h,0))
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function LumberSaveText takes unit u,integer lumber returns nothing
local timer t=CreateTimer()
local string s="+"+I2S(lumber)+" дерева"
local texttag text=CreateTextTag()
call SetTextTagText(text,s,.022)
call SetTextTagPosUnit(text,u,7.)
call SetTextTagColor(text,32,192,0,0)
call SetTextTagVelocity(text,.044375*Cos(3.06),.044375*Sin(3.06))
call SetTextTagPermanent(text,false)
call SetTextTagLifespan(text,2.5)
call SetTextTagFadepoint(text,0.)
call SetTextTagVisibility(text,true)
call SaveTextTagHandle(Hash,GetHandleId(t),0,text)
call TimerStart(t,2.5,false,function DestroyText)
set text=null
set t=null
endfunction
function ExpSaveText takes player p,integer id,string name returns nothing
local timer t=CreateTimer()
local string s="+"+I2S((GetHeroXP(udg_Hero[id])-udg_Exp_XP[id]))+" опыта "+name
local texttag text=CreateTextTag()
set udg_Exp_XP[id]=GetHeroXP(udg_Hero[id])
call SetTextTagText(text,s,.022)
call SetTextTagPosUnit(text,udg_Hero[id],7.)
call SetTextTagColor(text,165,253,0,0)
call SetTextTagVelocity(text,.044375*Cos(1.53),.044375*Sin(1.53))
call SetTextTagPermanent(text,false)
call SetTextTagLifespan(text,2.5)
call SetTextTagFadepoint(text,0.)
call SetTextTagVisibility(text,false)
if GetLocalPlayer()==p then
call SetTextTagVisibility(text,true)
endif
call SaveTextTagHandle(Hash,GetHandleId(t),0,text)
call TimerStart(t,2.5,false,function DestroyText)
set s=null
set text=null
set t=null
endfunction
function GoldSaveText takes unit c,integer gold returns nothing
local timer t=CreateTimer()
local string s="+"+I2S(gold)+" рьё"
local texttag text=CreateTextTag()
call SetTextTagText(text,s,.022)
if GetRandomInt(1,2)==1 then
call SetTextTagPosUnit(text,c,20.)
else
call SetTextTagPosUnit(text,c,80.)
endif
call SetTextTagColor(text,255,204,0,0)
call SetTextTagVelocity(text,.044375*Cos(6.12),.044375*Sin(6.12))
call SetTextTagPermanent(text,false)
call SetTextTagLifespan(text,2.5)
call SetTextTagFadepoint(text,0.)
call SetTextTagVisibility(text,false)
if GetLocalPlayer()==GetOwningPlayer(c)then
call SetTextTagVisibility(text,true)
endif
call SaveTextTagHandle(Hash,GetHandleId(t),0,text)
call TimerStart(t,2.5,false,function DestroyText)
set s=null
set text=null
set t=null
endfunction
function LumberPlus takes unit c,integer wood_step returns nothing
local integer i
local integer max
local integer which=0
call LumberSaveText(c,wood_step)
if IsUnitAlly(c,Player(5))then
set i=0
set max=4
set AllianceWood=AllianceWood+wood_step
set which=AllianceWood
if AllianceWood>=AllianceWoodNeed then
set AllianceCatapultaNumber=AllianceCatapultaNumber+1
set AllianceWoodNeed=AllianceWoodNeed+WoodNeed
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,nameteamOne+" получает катапульту на свои линии!")
endif
elseif IsUnitAlly(c,Player(11))then
set i=6
set max=10
set AkatsukiWood=AkatsukiWood+wood_step
set which=AkatsukiWood
if AkatsukiWood>=AkatsukiWoodNeed then
set AkatsukiCatapultaNumber=AkatsukiCatapultaNumber+1
set AkatsukiWoodNeed=AkatsukiWoodNeed+WoodNeed
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,nameteamTwo+" получает катапульту на свои линии!")
endif
endif
if which!=0 then
loop
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_LUMBER,which)
set i=i+1
exitwhen i>max
endloop
endif
endfunction
function UnitWeaponDestroy takes real x,real y returns nothing
if GetRandomInt(1,2)==1 then
call Sound("Weapon Destroy.mp3")
else
call Sound("Weapon Destroy 2.mp3")
endif
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\FlyingMachine\\FlyingMachineImpact.mdl",x,y))
endfunction
function ShopHelpDestroyEffect takes integer id returns nothing
call DestroyEffect(shopHelpEffect1[id])
call DestroyEffect(shopHelpEffect2[id])
call DestroyEffect(shopHelpEffect3[id])
call DestroyEffect(shopHelpEffect4[id])
call DestroyEffect(shopHelpEffect5[id])
call DestroyEffect(shopHelpEffect6[id])
call DestroyEffect(shopHelpEffect7[id])
call DestroyEffect(shopHelpEffect8[id])
endfunction
function ShopShowHideTables takes integer i,boolean log returns nothing
if i==0x4F303050 and Sasori_lb!=null then
call LeaderboardDisplay(Sasori_lb,log)
endif
endfunction
function ShopOpenExitChecking takes player p,integer id,integer i,boolean log1,boolean log2,boolean log3 returns nothing
local real x
local real y
if log1 then
set x=GetRectCenterX(gg_rct_ShopMove)
set y=GetRectCenterY(gg_rct_ShopMove)
else
set x=udg_Player_StartX[id]
set y=udg_Player_StartY[id]
endif
if log3 then
call SetUnitX(shopUser[id],x)
call SetUnitY(shopUser[id],y)
endif
call ShopShowHideTables(i,log2)
endfunction
function cj_anonym__27 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
if udg_ShopCam[id]and not udg_GameEnd then
if GetLocalPlayer()==p then
call CameraSetupApplyForceDuration(gg_cam_CamShop,true,0.)
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
endif
call ShopOpenExitChecking(p,id,GetUnitTypeId(shopUser[id]),true,false,true)
else
if GetLocalPlayer()==p then
call ClearSelection()
call SelectUnit(shopUser[id],true)
endif
call IssueImmediateOrder(shopUser[id],"stop")
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set t=null
endfunction
function ShopOpen takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(u)
local integer id=GetPlayerId(p)
set shopUser[id]=u
set udg_ShopVision[id]=CreateFogModifierRect(p,FOG_OF_WAR_VISIBLE,gg_rct_Shop,true,false)
set udg_ShopCam[id]=true
if IsPlayerAlly(p,Player(5))then
call SetDoodadAnimationRect(gg_rct_ShopOpenAlliance,0x44303030,"Birth",false)
elseif IsPlayerAlly(p,Player(11))then
call SetDoodadAnimationRect(gg_rct_ShopOpenAkatsuki,0x44303030,"Birth",false)
endif
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportCaster.mdl",GetWidgetX(shopUser[id]),GetWidgetY(shopUser[id])))
call SetUnitInvulnerable(shopUser[id],true)
call SetUnitPathing(shopUser[id],false)
call SetUnitFacing(shopUser[id],180.)
call FogModifierStart(udg_ShopVision[id])
if GetLocalPlayer()==p then
call MultiboardMinimize(gamestat_mb,true)
call ResetToGameCamera(0.)
call SetCameraBounds(GetRectMinX(gg_rct_Shop),GetRectMinY(gg_rct_Shop),GetRectMinX(gg_rct_Shop),GetRectMaxY(gg_rct_Shop),GetRectMaxX(gg_rct_Shop),GetRectMaxY(gg_rct_Shop),GetRectMaxX(gg_rct_Shop),GetRectMinY(gg_rct_Shop))
call CameraSetupApplyForceDuration(gg_cam_CamShop,true,0.)
endif
call IssueImmediateOrder(shopUser[id],"stop")
call ShopOpenExitChecking(p,id,GetUnitTypeId(shopUser[id]),true,false,true)
call SavePlayerHandle(Hash,h,0,p)
call TimerStart(t,.01,true,function cj_anonym__27)
set p=null
set t=null
endfunction
function ShopDestroyEffects takes player p returns nothing
local integer id=GetPlayerId(p)
set udg_ShopCam[id]=false
call DestroyFogModifier(udg_ShopVision[id])
call DestroyTextTag(udg_ShopText1[id])
call DestroyTextTag(udg_ShopText2[id])
call DestroyEffect(shopEffect1[id])
call DestroyEffect(shopEffect2[id])
call DestroyEffect(shopEffect3[id])
call DestroyEffect(shopEffect4[id])
call DestroyEffect(shopEffect5[id])
call DestroyEffect(shopEffect6[id])
call DestroyEffect(shopEffect7[id])
call ShopHelpDestroyEffect(id)
call SetUnitInvulnerable(shopUser[id],false)
call SetUnitPathing(shopUser[id],true)
call ShopOpenExitChecking(p,id,GetUnitTypeId(shopUser[id]),false,true,true)
endfunction
function cj_anonym__28 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call DestroyLightning(LoadLightningHandle(Hash,h,0))
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set t=null
endfunction
function CreateTimerForLightning takes lightning lig,real time returns nothing
local timer t=CreateTimer()
call SaveLightningHandle(Hash,GetHandleId(t),0,lig)
call TimerStart(t,time,false,function cj_anonym__28)
set t=null
endfunction
function cj_anonym__31 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call DestroyEffect(LoadEffectHandle(Hash,h,0))
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function CreateTimedEffect takes string model,unit u,string attachPoint,real x,real y,real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
if u!=null then
call SaveAgentHandle(Hash,h,0,AddSpecialEffectTarget(model,u,attachPoint))
else
call SaveAgentHandle(Hash,h,0,AddSpecialEffect(model,x,y))
endif
call TimerStart(t,time,false,function cj_anonym__31)
set t=null
endfunction
function CreateDummyEffect takes real x,real y,real size,string model,real f returns nothing
local integer id
local real time
local unit u
if SpecialEffectsShow then
if model=="NewDirtEXNofire.mdx"then
set time=3.
set id=0x68303351
elseif model=="IceSparks.mdx"then
set time=3.
set id=0x68303058
elseif model=="shadowclone2.mdx"then
set time=2.
set id=0x6E303233
elseif model=="IceNova.mdx"then
set time=1.5
set id=0x6E303246
elseif model=="Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl"then
set time=1.5
set id=0x6E303156
elseif model=="Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl"then
set time=1.5
set id=0x6E303157
elseif model=="HelGate.mdx"then
set time=2.
set id=0x6E303158
elseif model=="vl_shidori_nagashi.mdx"then
set time=2.
set id=0x6E303159
elseif model=="NatureExplosion.mdx"then
set time=1.
set id=0x6E30315A
elseif model=="Deathmok.mdx"then
set time=2.
set id=0x6E303144
endif
set u=CreateUnit(Player(14),id,x,y,f)
call PauseUnit(u,true)
call SetUnitScale(u,size,size,size)
call SetUnitFlyHeight(u,0.,0.)
call UnitApplyTimedLife(u,0x42544C46,time)
endif
set u=null
endfunction
function cj_anonym__32 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call DestroyEffect(LoadEffectHandle(Hash,h,0))
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function CreateAttachedEffect takes unit u,string model,string attach,real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call SaveAgentHandle(Hash,h,0,AddSpecialEffectTarget(model,u,attach))
call TimerStart(t,time,false,function cj_anonym__32)
set t=null
endfunction
function CreateEffect takes real x,real y,real size,string model,real time returns nothing
local unit u
if SpecialEffectsShow then
set u=CreateUnit(Player(14),0x6E303042,x,y,GetRandomReal(0.,360.))
call PauseUnit(u,true)
call SetUnitScale(u,size,size,size)
call SetUnitFlyHeight(u,0.,0.)
call DestroyEffect(AddSpecialEffectTarget(model,u,"origin"))
call UnitApplyTimedLife(u,0x42544C46,time)
endif
set u=null
endfunction
function KuchiyoseCreateDustEffect takes string str,unit u,real effOneSize,real effTwoSize returns nothing
local player p=GetOwningPlayer(u)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real effOneTime=2.
local real effTwoHeight=25.
local real effTwoTime=1.5
if str=="cast"then
call Sound("Kuchiyose no Jutsu Cast.mp3")
elseif str=="end"then
call Sound("Kuchiyose Poff Destroy.mp3")
endif
call CreateDummyEffect(x,y,effOneSize,"shadowclone2.mdx",0.)
set bj_lastCreatedUnit=CreateUnit(p,0x6E30304D,x,y,GetRandomReal(0.,360.))
call SetUnitFlyHeight(bj_lastCreatedUnit,effTwoHeight,0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,effTwoTime)
call SetUnitScale(bj_lastCreatedUnit,effTwoSize,effTwoSize,effTwoSize)
set p=null
endfunction
function GetHeroMainX takes player p returns real
local real x=GetRectCenterX(gg_rct_MainRect)
if p==Player(0)then
set x=GetRectCenterX(gg_rct_HeroLoc1)
elseif p==Player(1)then
set x=GetRectCenterX(gg_rct_HeroLoc2)
elseif p==Player(2)then
set x=GetRectCenterX(gg_rct_HeroLoc3)
elseif p==Player(3)then
set x=GetRectCenterX(gg_rct_HeroLoc4)
elseif p==Player(6)then
set x=GetRectCenterX(gg_rct_HeroLoc5)
elseif p==Player(7)then
set x=GetRectCenterX(gg_rct_HeroLoc6)
elseif p==Player(8)then
set x=GetRectCenterX(gg_rct_HeroLoc7)
elseif p==Player(9)then
set x=GetRectCenterX(gg_rct_HeroLoc8)
endif
return x
endfunction
function GetHeroMainY takes player p returns real
local real y=GetRectCenterY(gg_rct_MainRect)
if p==Player(0)then
set y=GetRectCenterY(gg_rct_HeroLoc1)
elseif p==Player(1)then
set y=GetRectCenterY(gg_rct_HeroLoc2)
elseif p==Player(2)then
set y=GetRectCenterY(gg_rct_HeroLoc3)
elseif p==Player(3)then
set y=GetRectCenterY(gg_rct_HeroLoc4)
elseif p==Player(6)then
set y=GetRectCenterY(gg_rct_HeroLoc5)
elseif p==Player(7)then
set y=GetRectCenterY(gg_rct_HeroLoc6)
elseif p==Player(8)then
set y=GetRectCenterY(gg_rct_HeroLoc7)
elseif p==Player(9)then
set y=GetRectCenterY(gg_rct_HeroLoc8)
endif
return y
endfunction
function GetHeroMainF takes player p returns real
local real f=0.
if p==Player(0)or p==Player(1)or p==Player(2)or p==Player(3)then
set f=0.
elseif p==Player(6)or p==Player(7)or p==Player(8)or p==Player(9)then
set f=180.
endif
return f
endfunction
function mbiVal takes multiboard mb,integer row,integer col,string ico,string val returns nothing
local multiboarditem mbi=MultiboardGetItem(mb,row,col)
if val!=null then
call MultiboardSetItemValue(mbi,val)
endif
if ico!=null then
call MultiboardSetItemIcon(mbi,ico)
endif
call MultiboardReleaseItem(mbi)
set mbi=null
endfunction
function mbiWidth takes multiboard mb,integer row,integer col,real width returns nothing
local multiboarditem mbi=MultiboardGetItem(mb,row,col)
call MultiboardSetItemWidth(mbi,width)
call MultiboardReleaseItem(mbi)
set mbi=null
endfunction
function mbiStyle takes multiboard mb,integer row,integer col,boolean val,boolean ico returns nothing
local multiboarditem mbi=MultiboardGetItem(mb,row,col)
call MultiboardSetItemStyle(mbi,val,ico)
call MultiboardReleaseItem(mbi)
set mbi=null
endfunction
function MB_Create_Icons takes nothing returns nothing
local integer id=0
local integer i=1
loop
if id!=4 and id!=5 and not udg_VM_Log[id]then
if GetPlayerSlotState(Player(id))==PLAYER_SLOT_STATE_PLAYING then
loop
exitwhen GetUnitTypeId(udg_Hero[id])==heroes_rawcode[i]or GetUnitTypeId(udg_Hero[id])==heroes_rikudo_rawcode[i]or i>hero_number
set i=i+1
endloop
if udg_Hero[id]!=null then
if GetWidgetLife(udg_Hero[id])>.405 then
call mbiVal(gamestat_mb,gamestat_Place[id],0,mb_iconBTN[i],null)
else
call mbiVal(gamestat_mb,gamestat_Place[id],0,mb_iconDISBTN[i],null)
endif
else
call mbiVal(gamestat_mb,gamestat_Place[id],0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp",null)
endif
set i=1
endif
endif
set id=id+1
exitwhen id==10
endloop
endfunction
function RatingGameTextUpdate takes nothing returns string
return"Рейтинг: "
endfunction
function RatingGameGetNominationValue takes nothing returns nothing
local string color=""
local integer value=picksNumberMax
local integer i=0
loop
if i!=4 and i!=5 then
if IsPlayerInForce(Player(i),RatingForce)then
set RatingValue[i]=RatingValue[i]+value
if RatingValue[i]<0 then
set color="|cFFFF0303"
elseif RatingValue[i]==0 then
set color="|cFF959697"
elseif RatingValue[i]>0 then
set color="|cFF20C000+"
endif
set RankNumber[i]=RankNumber[i]+1
call SetTextTagText(RatingText[i],RatingGameTextUpdate()+color+I2S(RatingValue[i])+"|r |cFFFFCC00(+"+I2S(RankNumber[i]*value)+")|r",countDownTextSize/3.33)
endif
endif
set i=i+1
exitwhen i>10
endloop
call ForceClear(RatingForce)
endfunction
function RatingGameGetMainValue takes integer i,integer win returns string
local string color=""
if i<4 then
if win==1 then
set RatingValue[i]=36
set color="|cFF20C000+"
elseif win==2 then
set RatingValue[i]=-36
set color="|cFFFF0303"
endif
elseif i>5 then
if win==1 then
set RatingValue[i]=-36
set color="|cFFFF0303"
elseif win==2 then
set RatingValue[i]=36
set color="|cFF20C000+"
endif
endif
set RankNumber[i]=0
return color+I2S(RatingValue[i])+"|r"
endfunction
function cj_anonym__34 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer win=LoadInteger(Hash,h,0)
local player p
local integer i=0
loop
if i!=4 and i!=5 then
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and udg_Hero[i]!=null then
set RatingText[i]=CreateTextTag()
call SetTextTagText(RatingText[i],RatingGameTextUpdate()+RatingGameGetMainValue(i,win),countDownTextSize/3.33)
call SetTextTagPos(RatingText[i],GetHeroMainX(p),GetHeroMainY(p),heightGameText*13.5)
call SetTextTagVisibility(RatingText[i],true)
endif
endif
set i=i+1
exitwhen i>10
endloop
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function RatingGameStart takes integer win returns nothing
local timer t=CreateTimer()
local real time=6.
call SaveInteger(Hash,GetHandleId(t),0,win)
call TimerStart(t,time,false,function cj_anonym__34)
set t=null
endfunction
function GamesEndGiveRanks takes integer needTime returns nothing
local string s1
local string s2=""
local player p=null
local integer i=0
local integer count=0
local string colorStr1="|cFFFF5000"
local string colorStr2="|cFF0090D4"
local real textTime=5.
local real textOffsetX=.65
local real damagerOld=0.
local real damagerNew=0.
local integer clickerOld=0
local integer clickerNew=0
local real sturdyOld=0.
local real sturdyNew=0.
local real healerOld=0.
local real healerNew=0.
local real marathonerOld=0.
local real marathonerNew=0.
local real nagibatorOld=0.
local real nagibatorNew=0.
local integer executionerOld=0
local integer executionerNew=0
local integer farmilaOld=0
local integer farmilaNew=0
if needTime==59 then
set s1="|cFFFFCC00ИГРА ОКОНЧЕНА!  СЕЙЧАС НАЧНЁТСЯ ЦЕРЕМОНИЯ НАГРАЖДЕНИЯ!|r"
elseif needTime==54 then
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set damagerNew=rankDamager[i]
set p=Player(i)
if damagerNew>damagerOld then
set damagerOld=damagerNew
set s2=GetPlayerNameColored(p)+", "
set count=count+1
call ForceClear(RatingForce)
call ForceAddPlayer(RatingForce,p)
elseif damagerNew==damagerOld and damagerOld>0.then
set damagerOld=damagerNew
set s2=s2+GetPlayerNameColored(p)+", "
set count=count+1
call ForceAddPlayer(RatingForce,p)
endif
endif
set i=i+1
exitwhen i>10
endloop
if count>0 then
set s2=SubString(s2,0,StringLength(s2)-2)
if count==1 then
set s1="\nНанеся "+colorStr1+I2S(R2I(damagerOld))+"|r ед. урона, в номинации "+colorStr2+"ДАМАГЕР|r побеждает "+s2
else
set s1="\nНанеся "+colorStr1+I2S(R2I(damagerOld))+"|r ед. урона, в номинации "+colorStr2+"ДАМАГЕР|r побеждают "+s2
endif
if RatingGameOn then
call RatingGameGetNominationValue()
endif
else
set s1="\nВ номинации "+colorStr2+"ДАМАГЕР|r нет победителей"
endif
elseif needTime==48 then
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set clickerNew=rankClicker[i]
set p=Player(i)
if clickerNew>clickerOld then
set clickerOld=clickerNew
set s2=GetPlayerNameColored(p)+", "
set count=count+1
call ForceClear(RatingForce)
call ForceAddPlayer(RatingForce,p)
elseif clickerNew==clickerOld and clickerOld>0 then
set clickerOld=clickerNew
set s2=s2+GetPlayerNameColored(p)+", "
set count=count+1
call ForceAddPlayer(RatingForce,p)
endif
endif
set i=i+1
exitwhen i>10
endloop
if count>0 then
set s2=SubString(s2,0,StringLength(s2)-2)
if count==1 then
set s1="\nВыполнив "+colorStr1+I2S(clickerOld)+"|r действий, в номинации "+colorStr2+"КЛИКЕР|r побеждает "+s2
else
set s1="\nВыполнив "+colorStr1+I2S(clickerOld)+"|r действий, в номинации "+colorStr2+"КЛИКЕР|r побеждают "+s2
endif
if RatingGameOn then
call RatingGameGetNominationValue()
endif
else
set s1="\nВ номинации "+colorStr2+"КЛИКЕР|r нет победителей"
endif
elseif needTime==42 then
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set sturdyNew=rankSturdy[i]
set p=Player(i)
if sturdyNew>sturdyOld then
set sturdyOld=sturdyNew
set s2=GetPlayerNameColored(p)+", "
set count=count+1
call ForceClear(RatingForce)
call ForceAddPlayer(RatingForce,p)
elseif sturdyNew==sturdyOld and sturdyOld>0.then
set sturdyOld=sturdyNew
set s2=s2+GetPlayerNameColored(p)+", "
set count=count+1
call ForceAddPlayer(RatingForce,p)
endif
endif
set i=i+1
exitwhen i>10
endloop
if count>0 then
set s2=SubString(s2,0,StringLength(s2)-2)
if count==1 then
set s1="\nВпитав "+colorStr1+I2S(R2I(sturdyOld))+"|r ед. урона, в номинации "+colorStr2+"КРЕПЫШ|r побеждает "+s2
else
set s1="\nВпитав "+colorStr1+I2S(R2I(sturdyOld))+"|r ед. урона, в номинации "+colorStr2+"КРЕПЫШ|r побеждают "+s2
endif
if RatingGameOn then
call RatingGameGetNominationValue()
endif
else
set s1="\nВ номинации "+colorStr2+"КРЕПЫШ|r нет победителей"
endif
elseif needTime==36 then
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set healerNew=rankHealer[i]
set p=Player(i)
if healerNew>healerOld then
set healerOld=healerNew
set s2=GetPlayerNameColored(p)+", "
set count=count+1
call ForceClear(RatingForce)
call ForceAddPlayer(RatingForce,p)
elseif healerNew==healerOld and healerOld>0.then
set healerOld=healerNew
set s2=s2+GetPlayerNameColored(p)+", "
set count=count+1
call ForceAddPlayer(RatingForce,p)
endif
endif
set i=i+1
exitwhen i>10
endloop
if count>0 then
set s2=SubString(s2,0,StringLength(s2)-2)
if count==1 then
set s1="\nВосстановив "+colorStr1+I2S(R2I(healerOld))+"|r ед. здоровья, в номинации "+colorStr2+"ЛЕКАРЬ|r побеждает "+s2
else
set s1="\nВосстановив "+colorStr1+I2S(R2I(healerOld))+"|r ед. здоровья, в номинации "+colorStr2+"ЛЕКАРЬ|r побеждают "+s2
endif
if RatingGameOn then
call RatingGameGetNominationValue()
endif
else
set s1="\nВ номинации "+colorStr2+"ЛЕКАРЬ|r нет победителей"
endif
elseif needTime==30 then
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set marathonerNew=rankMarathoner[i]
set p=Player(i)
if marathonerNew>marathonerOld then
set marathonerOld=marathonerNew
set s2=GetPlayerNameColored(p)+", "
set count=count+1
call ForceClear(RatingForce)
call ForceAddPlayer(RatingForce,p)
elseif marathonerNew==marathonerOld and marathonerOld>0.then
set marathonerOld=marathonerNew
set s2=s2+GetPlayerNameColored(p)+", "
set count=count+1
call ForceAddPlayer(RatingForce,p)
endif
endif
set i=i+1
exitwhen i>10
endloop
if count>0 then
set s2=SubString(s2,0,StringLength(s2)-2)
if count==1 then
set s1="\nПреодолев "+colorStr1+I2S(R2I(marathonerOld))+"|r ед. расстояния, в номинации "+colorStr2+"МАРАФОНЕЦ|r побеждает "+s2
else
set s1="\nПреодолев "+colorStr1+I2S(R2I(marathonerOld))+"|r ед. расстояния, в номинации "+colorStr2+"МАРАФОНЕЦ|r побеждают "+s2
endif
if RatingGameOn then
call RatingGameGetNominationValue()
endif
else
set s1="\nВ номинации "+colorStr2+"МАРАФОНЕЦ|r нет победителей"
endif
elseif needTime==24 then
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
if gamestat_D[i]>0 then
set rankNagibator[i]=I2R((gamestat_K[i]+gamestat_A[i])/gamestat_D[i])
else
set rankNagibator[i]=I2R(gamestat_K[i]+gamestat_A[i])
endif
set nagibatorNew=rankNagibator[i]
set p=Player(i)
if nagibatorNew>nagibatorOld then
set nagibatorOld=nagibatorNew
set s2=GetPlayerNameColored(p)+", "
set count=count+1
call ForceClear(RatingForce)
call ForceAddPlayer(RatingForce,p)
elseif nagibatorNew==nagibatorOld and nagibatorOld>0.then
set nagibatorOld=nagibatorNew
set s2=s2+GetPlayerNameColored(p)+", "
set count=count+1
call ForceAddPlayer(RatingForce,p)
endif
endif
set i=i+1
exitwhen i>10
endloop
if count>0 then
set s2=SubString(s2,0,StringLength(s2)-2)
if count==1 then
set s1="\nИмея "+colorStr1+R2S(nagibatorOld)+"|r КДА, в номинации "+colorStr2+"НАГИБАТОР|r побеждает "+s2
else
set s1="\nИмея "+colorStr1+R2S(nagibatorOld)+"|r КДА, в номинации "+colorStr2+"НАГИБАТОР|r побеждают "+s2
endif
if RatingGameOn then
call RatingGameGetNominationValue()
endif
else
set s1="\nВ номинации "+colorStr2+"НАГИБАТОР|r нет победителей"
endif
elseif needTime==18 then
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set rankExecutioner[i]=gamestat_K[i]
set executionerNew=rankExecutioner[i]
set p=Player(i)
if executionerNew>executionerOld then
set executionerOld=executionerNew
set s2=GetPlayerNameColored(p)+", "
set count=count+1
call ForceClear(RatingForce)
call ForceAddPlayer(RatingForce,p)
elseif executionerNew==executionerOld and executionerOld>0 then
set executionerOld=executionerNew
set s2=s2+GetPlayerNameColored(p)+", "
set count=count+1
call ForceAddPlayer(RatingForce,p)
endif
endif
set i=i+1
exitwhen i>10
endloop
if count>0 then
set s2=SubString(s2,0,StringLength(s2)-2)
if count==1 then
set s1="\nСовершив "+colorStr1+I2S(executionerOld)+"|r убийств, в номинации "+colorStr2+"ПАЛАЧ|r побеждает "+s2
else
set s1="\nСовершив "+colorStr1+I2S(executionerOld)+"|r убийств, в номинации "+colorStr2+"ПАЛАЧ|r побеждают "+s2
endif
if RatingGameOn then
call RatingGameGetNominationValue()
endif
else
set s1="\nВ номинации "+colorStr2+"ПАЛАЧ|r нет победителей"
endif
elseif needTime==12 then
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set rankFarmila[i]=gamestat_NW_New[i]
set farmilaNew=rankFarmila[i]
set p=Player(i)
if farmilaNew>farmilaOld then
set farmilaOld=farmilaNew
set s2=GetPlayerNameColored(p)+", "
set count=count+1
call ForceClear(RatingForce)
call ForceAddPlayer(RatingForce,p)
elseif farmilaNew==farmilaOld and farmilaOld>0 then
set farmilaOld=farmilaNew
set s2=s2+GetPlayerNameColored(p)+", "
set count=count+1
call ForceAddPlayer(RatingForce,p)
endif
endif
set i=i+1
exitwhen i>10
endloop
if count>0 then
set s2=SubString(s2,0,StringLength(s2)-2)
if count==1 then
set s1="\nНакопив "+colorStr1+I2S(farmilaOld)+"|r рьё, в номинации "+colorStr2+"ФАРМИЛА|r побеждает "+s2
else
set s1="\nНакопив "+colorStr1+I2S(farmilaOld)+"|r рьё, в номинации "+colorStr2+"ФАРМИЛА|r побеждают "+s2
endif
if RatingGameOn then
call RatingGameGetNominationValue()
endif
else
set s1="\nВ номинации "+colorStr2+"ФАРМИЛА|r нет победителей"
endif
elseif needTime==6 then
set s1="        \n|cFFFFCC00ВСЕМ СПАСИБО ЗА ИГРУ, ЖДЁМ ВАС ВНОВЬ!\nСОХРАНЯЙТЕ РЕПЛЕЙ И ПРИХОДИТЕ НА НАШ ФОРУМ И В СОЦИАЛЬНЫЕ СЕТИ!|r"
endif
call DisplayTimedTextToPlayer(GetLocalPlayer(),textOffsetX,0.,textTime,s1)
set p=null
endfunction
function cj_anonym__35 takes nothing returns nothing
call EndGame(true)
call DestroyTimer(GetExpiredTimer())
endfunction
function Games_End takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer time=LoadInteger(Hash,h,0)
local integer timestat=LoadInteger(Hash,h,1)
if timestat>0 then
if LoadInteger(Hash,h,2)<100 then
call SaveInteger(Hash,h,2,LoadInteger(Hash,h,2)+1)
else
if gamestat_mbTimeSec<10 then
if timestat<10 then
call MultiboardSetTitleText(gamestat_mb,"Результаты: |cFF0090D4"+I2S(0)+I2S(timestat)+"|r // |cFFC6D2FF"+I2S(gamestat_mbTimeMin)+":0"+I2S(gamestat_mbTimeSec)+"|r // |cFFA5FD00"+GetCurrentVersion()+"|r // |cFF9596972018.03.03|r")
else
call MultiboardSetTitleText(gamestat_mb,"Результаты: |cFF0090D4"+I2S(timestat)+"|r // |cFFC6D2FF"+I2S(gamestat_mbTimeMin)+":0"+I2S(gamestat_mbTimeSec)+"|r // |cFFA5FD00"+GetCurrentVersion()+"|r // |cFF9596972018.03.03|r")
endif
else
if timestat<10 then
call MultiboardSetTitleText(gamestat_mb,"Результаты: |cFF0090D4"+I2S(0)+I2S(timestat)+"|r // |cFFC6D2FF"+I2S(gamestat_mbTimeMin)+":"+I2S(gamestat_mbTimeSec)+"|r // |cFFA5FD00"+GetCurrentVersion()+"|r // |cFF9596972018.03.03|r")
else
call MultiboardSetTitleText(gamestat_mb,"Результаты: |cFF0090D4"+I2S(timestat)+"|r // |cFFC6D2FF"+I2S(gamestat_mbTimeMin)+":"+I2S(gamestat_mbTimeSec)+"|r // |cFFA5FD00"+GetCurrentVersion()+"|r // |cFF9596972018.03.03|r")
endif
endif
call SaveInteger(Hash,h,1,timestat-1)
call SaveInteger(Hash,h,2,0)
call GamesEndGiveRanks(timestat)
endif
call CameraSetupApplyForceDuration(gg_cam_CamMain,true,0.)
call SaveInteger(Hash,h,0,time+1)
else
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
if not RatingGameOn then
call EndGame(true)
else
call ClearTextMessages()
call DisplayTimedTextToPlayer(GetLocalPlayer(),.65,0.,15.,"        \n|cFFFFCC00ЧЕРЕЗ 30 СЕКУНД ИГРА ОТКЛЮЧИТСЯ!\nСОХРАНЯЙТЕ СКРИНШОТ С ВАШИМ РЕЙТИНГОМ И ВЫКЛАДЫВАЙТЕ ЕГО В НАШУ ГРУППУ ВК!\nРЕЙТИНГ ИЗМЕНЯЕТСЯ У КАЖДОГО ИГРОКА, КОТОРЫЙ ЗАРЕГЕСТРИРОВАН В БАЗЕ (РЕГИСТРАЦИЯ ДОСТУПНА В ГРУППЕ)|r")
call TimerStart(CreateTimer(),30.,false,function cj_anonym__35)
endif
endif
set t=null
endfunction
function GetScores takes integer cur,integer max returns integer
local integer count=0
local integer id
loop
set id=GetPlayerId(Player(cur))
if GetPlayerSlotState(Player(cur))==PLAYER_SLOT_STATE_PLAYING then
set count=count+gamestat_K[id]
endif
set cur=cur+1
exitwhen cur>max
endloop
return count
endfunction
function MB_CreateStatForPlayer takes player p,integer mblist,integer win returns nothing
local integer i=1
local integer id=GetPlayerId(p)
loop
exitwhen GetUnitTypeId(udg_Hero[id])==heroes_rawcode[i]or GetUnitTypeId(udg_Hero[id])==heroes_rikudo_rawcode[i]
set i=i+1
endloop
call mbiVal(gamestat_mb,0,mblist,mb_iconBTN[i],null)
call mbiStyle(gamestat_mb,0,mblist,false,true)
call mbiWidth(gamestat_mb,0,mblist,.07)
call mbiVal(gamestat_mb,1,mblist,null,GetPlayerNameColored(p))
call mbiStyle(gamestat_mb,1,mblist,true,false)
call mbiWidth(gamestat_mb,1,mblist,.07)
call mbiVal(gamestat_mb,2,mblist,null,null)
call mbiStyle(gamestat_mb,2,mblist,false,false)
call mbiWidth(gamestat_mb,2,mblist,.07)
call mbiVal(gamestat_mb,3,mblist,gamestat_S[id],null)
call mbiStyle(gamestat_mb,3,mblist,false,true)
call mbiWidth(gamestat_mb,3,mblist,.07)
call mbiVal(gamestat_mb,4,mblist,null,"|cFFFFFC01"+I2S(gamestat_NW_New[id])+"|r")
call mbiStyle(gamestat_mb,4,mblist,true,false)
call mbiWidth(gamestat_mb,4,mblist,.07)
call mbiVal(gamestat_mb,5,mblist,null,"|cFFC6D2FF"+I2S(gamestat_L[id])+"|r")
call mbiStyle(gamestat_mb,5,mblist,true,false)
call mbiWidth(gamestat_mb,5,mblist,.07)
call mbiVal(gamestat_mb,6,mblist,null,"|cFFFF5000"+I2S(gamestat_K[id])+"|r")
call mbiStyle(gamestat_mb,6,mblist,true,false)
call mbiWidth(gamestat_mb,6,mblist,.07)
call mbiVal(gamestat_mb,7,mblist,null,"|cFFFF0303"+I2S(gamestat_D[id])+"|r")
call mbiStyle(gamestat_mb,7,mblist,true,false)
call mbiWidth(gamestat_mb,7,mblist,.07)
call mbiVal(gamestat_mb,8,mblist,null,"|cFF959697"+I2S(gamestat_A[id])+"|r")
call mbiStyle(gamestat_mb,8,mblist,true,false)
call mbiWidth(gamestat_mb,8,mblist,.07)
call mbiVal(gamestat_mb,9,mblist,null,"|cFFA5FD00"+I2S(gamestat_LH[id])+"|r / |cFFFCC75D"+I2S(gamestat_LD[id])+"|r")
call mbiStyle(gamestat_mb,9,mblist,true,false)
call mbiWidth(gamestat_mb,9,mblist,.07)
call mbiVal(gamestat_mb,10,mblist,null,"|cFFFE8A0E"+I2S(GetScores(id,id))+"|r")
call mbiStyle(gamestat_mb,10,mblist,true,false)
call mbiWidth(gamestat_mb,10,mblist,.07)
call mbiVal(gamestat_mb,11,mblist,null,null)
call mbiStyle(gamestat_mb,11,mblist,false,false)
call mbiWidth(gamestat_mb,11,mblist,.07)
if p==Player(0)then
call mbiVal(gamestat_mb,12,mblist,null,"|cFF0090D4"+I2S(GetScores(0,5))+"|r:|cFF0090D4"+I2S(GetScores(6,10))+"|r")
if win==1 then
call mbiVal(gamestat_mb,13,mblist,null,nameteamOne)
elseif win==2 then
call mbiVal(gamestat_mb,13,mblist,null,nameteamTwo)
endif
call mbiStyle(gamestat_mb,12,mblist,true,false)
call mbiStyle(gamestat_mb,13,mblist,true,false)
else
call mbiVal(gamestat_mb,12,mblist,null,null)
call mbiStyle(gamestat_mb,12,mblist,false,false)
call mbiVal(gamestat_mb,13,mblist,null,null)
call mbiStyle(gamestat_mb,13,mblist,false,false)
endif
call mbiWidth(gamestat_mb,12,mblist,.07)
call mbiWidth(gamestat_mb,13,mblist,.07)
endfunction
function Victory_Defeat_CreateBoard takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer win=LoadInteger(Hash,h,0)
local timer t1=CreateTimer()
local integer i=0
local integer count=1
local unit tg
local player p
local group g=CreateGroup()
set gamestat_mb=CreateMultiboard()
call SetCameraBounds(GetRectMinX(gg_rct_MainRect),GetRectMinY(gg_rct_MainRect),GetRectMinX(gg_rct_MainRect),GetRectMaxY(gg_rct_MainRect),GetRectMaxX(gg_rct_MainRect),GetRectMaxY(gg_rct_MainRect),GetRectMaxX(gg_rct_MainRect),GetRectMinY(gg_rct_MainRect))
call CameraSetupApplyForceDuration(gg_cam_CamMain,true,0.)
call SaveInteger(Hash,GetHandleId(t1),1,59)
call TimerStart(t1,.01,true,function Games_End)
loop
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and i!=4 and i!=5 then
set count=count+1
endif
set i=i+1
exitwhen i==10
endloop
call MultiboardSetRowCount(gamestat_mb,14)
call MultiboardSetColumnCount(gamestat_mb,count)
if gamestat_mbTimeSec<10 then
call MultiboardSetTitleText(gamestat_mb,"Результаты: |cFF0090D4"+I2S(60)+" // |cFFC6D2FF"+I2S(gamestat_mbTimeMin)+":0"+I2S(gamestat_mbTimeSec)+"|r // |cFFA5FD00"+GetCurrentVersion()+"|r // |cFF9596972018.03.03|r")
else
call MultiboardSetTitleText(gamestat_mb,"Результаты: |cFF0090D4"+I2S(60)+" // |cFFC6D2FF"+I2S(gamestat_mbTimeMin)+":"+I2S(gamestat_mbTimeSec)+"|r // |cFFA5FD00"+GetCurrentVersion()+"|r // |cFF9596972018.03.03|r")
endif
call MultiboardDisplay(gamestat_mb,false)
call mbiVal(gamestat_mb,0,0,null,"|cFF80A8FFИгроки|r")
call mbiStyle(gamestat_mb,0,0,true,false)
call mbiWidth(gamestat_mb,0,0,.081)
call mbiVal(gamestat_mb,1,0,null,null)
call mbiStyle(gamestat_mb,1,0,false,false)
call mbiWidth(gamestat_mb,1,0,.081)
call mbiVal(gamestat_mb,2,0,null,null)
call mbiStyle(gamestat_mb,2,0,false,false)
call mbiWidth(gamestat_mb,2,0,.081)
call mbiVal(gamestat_mb,3,0,null,"|cFF80A8FFРанг|r")
call mbiStyle(gamestat_mb,3,0,true,false)
call mbiWidth(gamestat_mb,3,0,.081)
call mbiVal(gamestat_mb,4,0,null,"|cFF80A8FFНакопления|r")
call mbiStyle(gamestat_mb,4,0,true,false)
call mbiWidth(gamestat_mb,4,0,.081)
call mbiVal(gamestat_mb,5,0,null,"|cFF80A8FFУровень|r")
call mbiStyle(gamestat_mb,5,0,true,false)
call mbiWidth(gamestat_mb,5,0,.081)
call mbiVal(gamestat_mb,6,0,null,"|cFF80A8FFУбито героев|r")
call mbiStyle(gamestat_mb,6,0,true,false)
call mbiWidth(gamestat_mb,6,0,.081)
call mbiVal(gamestat_mb,7,0,null,"|cFF80A8FFПогиб|r")
call mbiStyle(gamestat_mb,7,0,true,false)
call mbiWidth(gamestat_mb,7,0,.081)
call mbiVal(gamestat_mb,8,0,null,"|cFF80A8FFПомощи|r")
call mbiStyle(gamestat_mb,8,0,true,false)
call mbiWidth(gamestat_mb,8,0,.081)
call mbiVal(gamestat_mb,9,0,null,"|cFF80A8FFУбито крипов|r")
call mbiStyle(gamestat_mb,9,0,true,false)
call mbiWidth(gamestat_mb,9,0,.081)
call mbiVal(gamestat_mb,10,0,null,"|cFF80A8FFОчки|r")
call mbiStyle(gamestat_mb,10,0,true,false)
call mbiWidth(gamestat_mb,10,0,.081)
call mbiVal(gamestat_mb,11,0,null,null)
call mbiStyle(gamestat_mb,11,0,false,false)
call mbiWidth(gamestat_mb,11,0,.081)
call mbiVal(gamestat_mb,12,0,null,"|cFF80A8FFСчёт|r")
call mbiStyle(gamestat_mb,12,0,true,false)
call mbiWidth(gamestat_mb,12,0,.081)
call mbiVal(gamestat_mb,13,0,null,"|cFF80A8FFПобедитель|r")
call mbiStyle(gamestat_mb,13,0,true,false)
call mbiWidth(gamestat_mb,13,0,.081)
set i=0
set count=1
loop
if i!=4 and i!=5 then
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and udg_Hero[i]!=null then
call SetUnitPosition(udg_Hero[i],GetHeroMainX(p),GetHeroMainY(p))
call SetUnitFacing(udg_Hero[i],GetHeroMainF(p))
call SetTextTagVisibility(playerNameText[i],true)
call MB_CreateStatForPlayer(p,count,win)
set count=count+1
endif
endif
set i=i+1
exitwhen i>10
endloop
call MultiboardDisplay(gamestat_mb,true)
call MultiboardMinimize(gamestat_mb,false)
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set g=null
set tg=null
set p=null
set t=null
set t1=null
endfunction
function VictoryCreateRectEffect takes rect r,string s returns nothing
local real x=GetRectCenterX(r)
local real y=GetRectCenterY(r)
local real size=3.
local real time=4.
local real angle=0.
local real offset=250.
local real x1
local real y1
call CreateEffect(x,y,size,s,time)
loop
set x1=x+offset*Cos(angle*.0174532)
set y1=y+offset*Sin(angle*.0174532)
call CreateEffect(x1,y1,size/2.,"Boom.mdx",time)
set angle=angle+72.
exitwhen angle>=360.
endloop
endfunction
function Victory_Defeat_Code takes integer win returns nothing
local timer t=CreateTimer()
local unit tg
local integer i=0
local group g=CreateGroup()
if RatingGameOn then
call RatingGameStart(win)
endif
call SaveInteger(Hash,GetHandleId(t),0,win)
call TimerStart(t,gameoverTime,false,function Victory_Defeat_CreateBoard)
set udg_GameEnd=true
call DisableTrigger(gg_trg_Victory)
call DisableTrigger(gg_trg_MB_Frag_Hero)
call DisableTrigger(gg_trg_MB_Frag_Barracks)
call DisableTrigger(gg_trg_MB_Frag_Outpost)
call DisableTrigger(gg_trg_MB_Frag_Others)
call DisableTrigger(gg_trg_Leavers)
call DestroyTextTag(gameText[0])
call DestroyTextTag(gameText[1])
call DestroyTextTag(gameText[2])
call DestroyTextTag(gameText[3])
call RemoveRect(gg_rct_ShopOpenAkatsuki)
call RemoveRect(gg_rct_ShopOpenAlliance)
loop
if i!=4 and i!=5 and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and udg_Hero[i]!=null and GetWidgetLife(udg_Hero[i])<.405 then
call ReviveHero(udg_Hero[i],udg_Player_StartX[i],udg_Player_StartY[i],false)
endif
set i=i+1
exitwhen i==10
endloop
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
call PauseUnit(tg,false)
call SetUnitInvulnerable(tg,true)
call PauseUnit(tg,true)
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call FogEnable(false)
call EnableUserUI(false)
call DestroyMultiboard(gamestat_mb)
if win==1 then
call CameraSetupApply(gg_cam_CamAkatsukiDefeat1,true,true)
call CameraSetupApplyForceDuration(gg_cam_CamAkatsukiDefeat2,true,gameoverTime)
call VictoryCreateRectEffect(gg_rct_AkatsukiDefeatEffect,"Objects\\Spawnmodels\\Undead\\UCancelDeath\\UCancelDeath.mdl")
elseif win==2 then
call CameraSetupApply(gg_cam_CamAllianceDefeat1,true,true)
call CameraSetupApplyForceDuration(gg_cam_CamAllianceDefeat2,true,gameoverTime)
call VictoryCreateRectEffect(gg_rct_AllianceDefeatEffect,"Objects\\Spawnmodels\\Human\\HCancelDeath\\HCancelDeath.mdl")
call SetUnitScale(CreateUnit(Player(11),0x6E303036,GetRectCenterX(gg_rct_AllianceDefeatEffect),GetRectCenterY(gg_rct_AllianceDefeatEffect),0.),20.,20.,20.)
endif
set g=null
set tg=null
set t=null
endfunction
function DuelEnd takes player p1,player p2 returns nothing
local integer idp1=GetPlayerId(p1)
local integer idp2=GetPlayerId(p2)
local integer gold=250
local integer exp=250
local integer i=0
set DuelHeroOn[idp1]=false
set DuelHeroOn[idp2]=false
set DuelIsGoing=false
loop
if DuelVision[i]!=null then
call DestroyFogModifier(DuelVision[i])
endif
set i=i+1
exitwhen i>10
endloop
if GetWidgetLife(udg_Hero[idp1])<.405 then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p2)+" побеждает "+GetPlayerNameColored(p1)+" в |cFFFFCC00дуэли 1х1|r, и получает |cFFFFCC00"+I2S(gold)+"|r рьё!")
call SetPlayerState(p2,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p2,PLAYER_STATE_RESOURCE_GOLD)+gold)
elseif GetWidgetLife(udg_Hero[idp2])<.405 then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p1)+" побеждает "+GetPlayerNameColored(p2)+" в |cFFFFCC00дуэли 1х1|r, и получает |cFFFFCC00"+I2S(gold)+"|r рьё!")
call SetPlayerState(p1,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p1,PLAYER_STATE_RESOURCE_GOLD)+gold)
else
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"|cFFFFCC00Дуэль 1x1|r окончена, у нас |cFFFFCC00ничья|r!")
endif
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"Все участники дуэли получают по |cFFA5FD00"+I2S(exp)+"|r опыта!")
call SetHeroXP(udg_Hero[idp1],GetHeroXP(udg_Hero[idp1])+exp,true)
call SetHeroXP(udg_Hero[idp2],GetHeroXP(udg_Hero[idp2])+exp,true)
call ExpSaveText(p1,idp1,"за дуэль")
call ExpSaveText(p2,idp2,"за дуэль")
call SetUnitPosition(udg_Hero[idp1],udg_Player_StartX[idp1],udg_Player_StartY[idp1])
call SetUnitPosition(udg_Hero[idp2],udg_Player_StartX[idp2],udg_Player_StartY[idp2])
if not JSonlog[idp1]then
if GetLocalPlayer()==p1 then
call ClearSelection()
call SelectUnit(udg_Hero[idp1],true)
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
call PanCameraToTimed(udg_Player_StartX[idp1],udg_Player_StartY[idp1],0.)
endif
endif
if not JSonlog[idp2]then
if GetLocalPlayer()==p2 then
call ClearSelection()
call SelectUnit(udg_Hero[idp2],true)
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
call PanCameraToTimed(udg_Player_StartX[idp2],udg_Player_StartY[idp2],0.)
endif
endif
call ResumeTimer(DuelTimer)
endfunction
function cj_anonym__36 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p1=LoadPlayerHandle(Hash,h,0)
local player p2=LoadPlayerHandle(Hash,h,1)
local real period=LoadReal(Hash,h,2)
local real time=LoadReal(Hash,h,3)
local integer idp1=GetPlayerId(p1)
local integer idp2=GetPlayerId(p2)
if time>0.then
call SaveReal(Hash,h,3,time-period)
if GetWidgetLife(udg_Hero[idp1])<.405 or GetWidgetLife(udg_Hero[idp2])<.405 then
call SaveReal(Hash,h,3,0.)
endif
else
call DuelEnd(p1,p2)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p1=null
set p2=null
set t=null
endfunction
function DuelFight takes player p1,player p2 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=120.
local real period=1.
local integer idp1=GetPlayerId(p1)
local integer idp2=GetPlayerId(p2)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"У дуэлянтов есть |cFFFFCC002 минуты|r на победу!")
call PauseUnit(udg_Hero[idp1],false)
call PauseUnit(udg_Hero[idp2],false)
call SetUnitInvulnerable(udg_Hero[idp1],false)
call SetUnitInvulnerable(udg_Hero[idp2],false)
if GetPlayerController(p1)==MAP_CONTROL_COMPUTER then
call IssueTargetOrder(udg_Hero[idp1],"attack",udg_Hero[idp2])
endif
if GetPlayerController(p2)==MAP_CONTROL_COMPUTER then
call IssueTargetOrder(udg_Hero[idp2],"attack",udg_Hero[idp1])
endif
call SavePlayerHandle(Hash,h,0,p1)
call SavePlayerHandle(Hash,h,1,p2)
call SaveReal(Hash,h,2,period)
call SaveReal(Hash,h,3,time)
call TimerStart(t,period,true,function cj_anonym__36)
set t=null
endfunction
function cj_anonym__37 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p1=LoadPlayerHandle(Hash,h,0)
local player p2=LoadPlayerHandle(Hash,h,1)
local real period=LoadReal(Hash,h,2)
local real time=LoadReal(Hash,h,3)
local integer idp1=GetPlayerId(p1)
local integer idp2=GetPlayerId(p2)
if time>0.then
if not IsUnitPaused(udg_Hero[idp1])then
call PauseUnit(udg_Hero[idp1],true)
endif
if not IsUnitPaused(udg_Hero[idp2])then
call PauseUnit(udg_Hero[idp2],true)
endif
call SaveReal(Hash,h,3,time-period)
else
call DuelFight(p1,p2)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p1=null
set p2=null
set t=null
endfunction
function DuelPrestart takes player p1,player p2 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real start_time=3.
local real period=.1
local player p
local integer i=0
local integer idp1=GetPlayerId(p1)
local integer idp2=GetPlayerId(p2)
set DuelHeroOn[idp1]=true
set DuelHeroOn[idp2]=true
call PauseTimer(DuelTimer)
loop
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER and not udg_VM_Log[i]then
set DuelVision[i]=CreateFogModifierRect(p,FOG_OF_WAR_VISIBLE,gg_rct_Duel,true,false)
call FogModifierStart(DuelVision[i])
endif
set i=i+1
exitwhen i>10
endloop
call DestroyEffect(AddSpecialEffect("Text.mdx",GetRectCenterX(gg_rct_Duel),GetRectCenterY(gg_rct_Duel)))
if udg_ShopCam[idp1]then
set udg_ShopCam[idp1]=false
call ShopDestroyEffects(p1)
endif
if not JSonlog[idp1]then
if GetLocalPlayer()==p1 then
call ClearSelection()
call SelectUnit(udg_Hero[idp1],true)
call SetCameraBounds(GetRectMinX(gg_rct_Duel),GetRectMinY(gg_rct_Duel),GetRectMinX(gg_rct_Duel),GetRectMaxY(gg_rct_Duel),GetRectMaxX(gg_rct_Duel),GetRectMaxY(gg_rct_Duel),GetRectMaxX(gg_rct_Duel),GetRectMinY(gg_rct_Duel))
call ResetToGameCamera(0.)
call PanCameraToTimed(GetRectCenterX(gg_rct_Duel),GetRectCenterY(gg_rct_Duel),0.)
endif
endif
if udg_ShopCam[idp2]then
set udg_ShopCam[idp2]=false
call ShopDestroyEffects(p2)
endif
if not JSonlog[idp2]then
if GetLocalPlayer()==p2 then
call ClearSelection()
call SelectUnit(udg_Hero[idp2],true)
call SetCameraBounds(GetRectMinX(gg_rct_Duel),GetRectMinY(gg_rct_Duel),GetRectMinX(gg_rct_Duel),GetRectMaxY(gg_rct_Duel),GetRectMaxX(gg_rct_Duel),GetRectMaxY(gg_rct_Duel),GetRectMaxX(gg_rct_Duel),GetRectMinY(gg_rct_Duel))
call ResetToGameCamera(0.)
call PanCameraToTimed(GetRectCenterX(gg_rct_Duel),GetRectCenterY(gg_rct_Duel),0.)
endif
endif
call SetWidgetLife(udg_Hero[idp1],GetUnitState(udg_Hero[idp1],UNIT_STATE_MAX_LIFE))
call SetUnitState(udg_Hero[idp1],UNIT_STATE_MANA,GetUnitState(udg_Hero[idp1],UNIT_STATE_MAX_MANA))
call SetUnitPosition(udg_Hero[idp1],GetRectCenterX(gg_rct_DuelAllianceP1),GetRectCenterY(gg_rct_DuelAllianceP1))
call SetUnitFacing(udg_Hero[idp1],0.)
call SetWidgetLife(udg_Hero[idp2],GetUnitState(udg_Hero[idp2],UNIT_STATE_MAX_LIFE))
call SetUnitState(udg_Hero[idp2],UNIT_STATE_MANA,GetUnitState(udg_Hero[idp2],UNIT_STATE_MAX_MANA))
call SetUnitPosition(udg_Hero[idp2],GetRectCenterX(gg_rct_DuelAkatsukiP1),GetRectCenterY(gg_rct_DuelAkatsukiP1))
call SetUnitFacing(udg_Hero[idp2],180.)
call PauseUnit(udg_Hero[idp1],true)
call PauseUnit(udg_Hero[idp2],true)
call SetUnitInvulnerable(udg_Hero[idp1],true)
call SetUnitInvulnerable(udg_Hero[idp2],true)
call SavePlayerHandle(Hash,h,0,p1)
call SavePlayerHandle(Hash,h,1,p2)
call SaveReal(Hash,h,2,period)
call SaveReal(Hash,h,3,start_time)
call TimerStart(t,period,true,function cj_anonym__37)
set t=null
endfunction
function cj_anonym__38 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p1=LoadPlayerHandle(Hash,h,0)
local player p2=LoadPlayerHandle(Hash,h,1)
local integer idp1=GetPlayerId(p1)
local integer idp2=GetPlayerId(p2)
if GetWidgetLife(udg_Hero[idp1])>.405 and GetWidgetLife(udg_Hero[idp2])>.405 then
call DuelPrestart(p1,p2)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p1=null
set p2=null
set t=null
endfunction
function DuelStart takes player p1,player p2 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local integer idp1=GetPlayerId(p1)
local integer idp2=GetPlayerId(p2)
set DuelIsGoing=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,7.,"|cFFFFCC00Дуэль 1х1!|r\n"+GetPlayerNameColored(p1)+" против "+GetPlayerNameColored(p2))
if GetWidgetLife(udg_Hero[idp1])<.405 then
set reviveOnLog[idp1]=true
endif
if GetWidgetLife(udg_Hero[idp2])<.405 then
set reviveOnLog[idp2]=true
endif
call SavePlayerHandle(Hash,h,0,p1)
call SavePlayerHandle(Hash,h,1,p2)
call TimerStart(t,period,true,function cj_anonym__38)
set t=null
endfunction
function DuelChecking takes nothing returns nothing
local integer alliance_number=0
local integer akatsuki_number=0
local integer alliance_current=0
local integer akatsuki_current=0
local integer i=0
local unit hero_duel_1=null
local unit hero_duel_2=null
loop
if i!=4 and i!=5 then
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
if i<4 then
set alliance_number=alliance_number+1
elseif i>5 then
set akatsuki_number=akatsuki_number+1
endif
endif
endif
set i=i+1
exitwhen i>10
endloop
set i=0
loop
if i!=4 and i!=5 then
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
if i<4 and hero_duel_1==null then
set alliance_current=alliance_current+1
if alliance_current<alliance_number then
if GetRandomInt(1,alliance_number)==1 then
set hero_duel_1=udg_Hero[i]
endif
elseif alliance_current==alliance_number then
set hero_duel_1=udg_Hero[i]
endif
elseif i>5 and hero_duel_2==null then
set akatsuki_current=akatsuki_current+1
if akatsuki_current<akatsuki_number then
if GetRandomInt(1,akatsuki_number)==1 then
set hero_duel_2=udg_Hero[i]
endif
elseif akatsuki_current==akatsuki_number then
set hero_duel_2=udg_Hero[i]
endif
endif
endif
endif
set i=i+1
exitwhen i>10 or hero_duel_2!=null
endloop
if hero_duel_1!=null and hero_duel_2!=null then
call DuelStart(GetOwningPlayer(hero_duel_1),GetOwningPlayer(hero_duel_2))
else
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"|cFFFFCC00Дуэль не состоялась!|r")
endif
set hero_duel_1=null
set hero_duel_2=null
endfunction
function cj_anonym__39 takes nothing returns nothing
if not udg_GameEnd then
call DuelChecking()
else
call DestroyTimerDialog(DuelWindow)
call PauseTimer(DuelTimer)
call DestroyTimer(DuelTimer)
endif
endfunction
function DuelInit takes nothing returns nothing
local integer alliance_number=0
local integer akatsuki_number=0
local integer i=0
loop
if i!=4 and i!=5 then
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
if i<4 then
set alliance_number=alliance_number+1
elseif i>5 then
set akatsuki_number=akatsuki_number+1
endif
endif
endif
set i=i+1
exitwhen i>10
endloop
if alliance_number>4 and akatsuki_number>4 then
set DuelIsGoing=false
set DuelOn=true
set DuelPeriod=240.
set DuelTimer=CreateTimer()
set DuelWindow=CreateTimerDialog(DuelTimer)
call TimerDialogDisplay(DuelWindow,true)
call TimerDialogSetTitle(DuelWindow,"Дуэль 1х1:")
call EnableTrigger(gg_trg_D_Command)
call TimerStart(DuelTimer,DuelPeriod,true,function cj_anonym__39)
endif
endfunction
function InitGlobals takes nothing returns nothing
local integer i=0
set i=0
loop
exitwhen(i>1)
set udg_CamT[i]=false
set i=i+1
endloop
set i=0
loop
exitwhen(i>1)
set udg_Exp_XP[i]=0
set i=i+1
endloop
set i=0
loop
exitwhen(i>1)
set udg_ShopCam[i]=false
set i=i+1
endloop
set i=0
loop
exitwhen(i>1)
set udg_Repick_Log[i]=false
set i=i+1
endloop
set i=0
loop
exitwhen(i>1)
set udg_LMB[i]=CreateMultiboard()
set i=i+1
endloop
set udg_GameEnd=false
set i=0
loop
exitwhen(i>1)
set udg_DebugStr[i]=""
set i=i+1
endloop
set i=0
loop
exitwhen(i>1)
set udg_Player_StartX[i]=0
set i=i+1
endloop
set i=0
loop
exitwhen(i>1)
set udg_Player_StartY[i]=0
set i=i+1
endloop
set i=0
loop
exitwhen(i>1)
set udg_VM_Log[i]=false
set i=i+1
endloop
set i=0
loop
exitwhen(i>1)
set udg_CamMod[i]=false
set i=i+1
endloop
endfunction
function InitSounds takes nothing returns nothing
set gg_snd_ArcaneSanctumWhat1=CreateSound("Buildings\\Human\\ArcaneSanctum\\ArcaneSanctumWhat1.wav",false,true,true,10,10,"DefaultEAXON")
call SetSoundParamsFromLabel(gg_snd_ArcaneSanctumWhat1,"ArcaneSanctumWhat")
call SetSoundDuration(gg_snd_ArcaneSanctumWhat1,3553)
set gg_snd_ArrangedTeamInvitation=CreateSound("Sound\\Interface\\ArrangedTeamInvitation.wav",false,false,false,10,10,"")
call SetSoundParamsFromLabel(gg_snd_ArrangedTeamInvitation,"ArrangedTeamInvitation")
call SetSoundDuration(gg_snd_ArrangedTeamInvitation,2914)
set gg_snd_ClanInvitation=CreateSound("Sound\\Interface\\ClanInvitation.wav",false,false,false,10,10,"")
call SetSoundParamsFromLabel(gg_snd_ClanInvitation,"ClanInvitation")
call SetSoundDuration(gg_snd_ClanInvitation,4296)
set gg_snd_GenericWarningHeroFallen1=CreateSound("Sound\\Dialogue\\GenericWarnings\\GenericWarningHeroFallen1.mp3",false,false,false,10,10,"DefaultEAXON")
call SetSoundParamsFromLabel(gg_snd_GenericWarningHeroFallen1,"HeroDiesGeneric")
call SetSoundDuration(gg_snd_GenericWarningHeroFallen1,1071)
call SetSoundChannel(gg_snd_GenericWarningHeroFallen1,0)
set gg_snd_ItemReceived=CreateSound("Sound\\Interface\\ItemReceived.wav",false,false,false,10,10,"")
call SetSoundParamsFromLabel(gg_snd_ItemReceived,"ItemReward")
call SetSoundDuration(gg_snd_ItemReceived,1483)
set gg_snd_LightningBolt=CreateSound("Abilities\\Spells\\Orc\\LightningBolt\\LightningBolt.wav",false,false,false,10,10,"DefaultEAXON")
call SetSoundParamsFromLabel(gg_snd_LightningBolt,"LightningBolt")
call SetSoundDuration(gg_snd_LightningBolt,2136)
call SetSoundChannel(gg_snd_LightningBolt,0)
set gg_snd_ShrineOfAzsharaWhat1=CreateSound("Buildings\\Naga\\ShrineOfAshjara\\ShrineOfAzsharaWhat1.wav",false,true,true,10,10,"DefaultEAXON")
call SetSoundParamsFromLabel(gg_snd_ShrineOfAzsharaWhat1,"ShrineOfAzsharaWhat")
call SetSoundDuration(gg_snd_ShrineOfAzsharaWhat1,3518)
set gg_snd_TheHornOfCenarius=CreateSound("Sound\\Ambient\\DoodadEffects\\TheHornOfCenarius.wav",false,false,false,10,10,"DefaultEAXON")
call SetSoundParamsFromLabel(gg_snd_TheHornOfCenarius,"HornOfCenariusSound")
call SetSoundDuration(gg_snd_TheHornOfCenarius,12121)
call SetSoundChannel(gg_snd_TheHornOfCenarius,0)
set gg_snd_WaterElementalMissile1=CreateSound("Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile1.wav",false,false,false,10,10,"DefaultEAXON")
call SetSoundParamsFromLabel(gg_snd_WaterElementalMissile1,"WaterElementalMissile")
call SetSoundDuration(gg_snd_WaterElementalMissile1,1364)
call SetSoundChannel(gg_snd_WaterElementalMissile1,0)
set gg_snd_QuestNew=CreateSound("Sound\\Interface\\QuestNew.wav",false,false,false,10,10,"")
call SetSoundParamsFromLabel(gg_snd_QuestNew,"QuestNew")
call SetSoundDuration(gg_snd_QuestNew,3750)
set gg_snd_ClanInvitation01=CreateSound("Sound\\Interface\\ClanInvitation.wav",false,false,false,10,10,"")
call SetSoundParamsFromLabel(gg_snd_ClanInvitation01,"ClanInvitation")
call SetSoundDuration(gg_snd_ClanInvitation01,4296)
set gg_snd_ArrangedTeamInvitation01=CreateSound("Sound\\Interface\\ArrangedTeamInvitation.wav",false,false,false,10,10,"")
call SetSoundParamsFromLabel(gg_snd_ArrangedTeamInvitation01,"ArrangedTeamInvitation")
call SetSoundDuration(gg_snd_ArrangedTeamInvitation01,2914)
set gg_snd_BattleNetTick=CreateSound("Sound\\Interface\\BattleNetTick.wav",false,false,false,10,10,"")
call SetSoundParamsFromLabel(gg_snd_BattleNetTick,"ChatroomTimerTick")
call SetSoundDuration(gg_snd_BattleNetTick,476)
endfunction
function CreateAllDestructables takes nothing returns nothing
local destructable d
local trigger t
local real life
set gg_dest_B023_0933=CreateDestructable(0x42303233,6176.0,288.0,180.000,1.000,0)
set gg_dest_B023_0913=CreateDestructable(0x42303233,-7264.0,-6304.0,0.000,1.000,0)
endfunction
function CreateBuildingsForPlayer5 takes nothing returns nothing
local player p=Player(5)
local unit u
local integer unitID
local trigger t
local real life
set gg_unit_h06W_0003=CreateUnit(p,0x68303657,-7936.0,-6208.0,270.000)
set gg_unit_h06R_0013=CreateUnit(p,0x68303652,-5504.0,-6624.0,0.000)
set gg_unit_h02A_0014=CreateUnit(p,0x68303241,-6624.0,-5152.0,92.214)
set gg_unit_h02A_0039=CreateUnit(p,0x68303241,-5504.0,-6112.0,0.000)
set gg_unit_h005_0045=CreateUnit(p,0x68303035,-6528.0,-6144.0,45.000)
set gg_unit_h06R_0049=CreateUnit(p,0x68303652,-7136.0,-5184.0,92.574)
set u=CreateUnit(p,0x68303357,-6848.0,-5760.0,270.000)
set u=CreateUnit(p,0x68303353,-1152.0,3904.0,270.000)
set u=CreateUnit(p,0x68303357,-6080.0,-6336.0,270.000)
set u=null
endfunction
function CreateBuildingsForPlayer11 takes nothing returns nothing
local player p=Player(11)
local unit u
local integer unitID
local trigger t
local real life
set gg_unit_h004_0068=CreateUnit(p,0x68303034,5440.0,128.0,270.000)
set gg_unit_h07D_0070=CreateUnit(p,0x68303744,6784.0,128.0,270.000)
set gg_unit_h06V_0108=CreateUnit(p,0x68303656,6080.0,-896.0,270.000)
set gg_unit_h06V_0110=CreateUnit(p,0x68303656,4480.0,704.0,270.000)
set gg_unit_h02I_0111=CreateUnit(p,0x68303249,5568.0,-896.0,270.000)
set gg_unit_h02I_0113=CreateUnit(p,0x68303249,4480.0,128.0,270.000)
set u=CreateUnit(p,0x68303353,-1152.0,4032.0,270.000)
set u=CreateUnit(p,0x68303359,5120.0,384.0,270.000)
set u=CreateUnit(p,0x68303359,5696.0,-192.0,270.000)
set u=null
endfunction
function CreateNeutralHostileBuildings takes nothing returns nothing
local player p=Player(PLAYER_NEUTRAL_AGGRESSIVE)
local unit u
local integer unitID
local trigger t
local real life
set u=CreateUnit(p,0x68303043,2048.0,-7040.0,270.000)
set u=CreateUnit(p,0x68303036,1088.0,-6208.0,270.000)
set u=CreateUnit(p,0x68303041,960.0,-5888.0,270.000)
set u=CreateUnit(p,0x68303041,1280.0,-6464.0,270.000)
set u=CreateUnit(p,0x68303042,2688.0,-5760.0,270.000)
set u=CreateUnit(p,0x68303045,-6528.0,-1088.0,270.000)
set u=CreateUnit(p,0x6830304A,-5888.0,-2560.0,270.000)
set u=CreateUnit(p,0x68303043,2816.0,-7040.0,270.000)
set u=CreateUnit(p,0x68303042,1216.0,-7040.0,270.000)
set u=CreateUnit(p,0x6830304D,-6400.0,-1472.0,270.000)
set u=CreateUnit(p,0x6830304D,-6144.0,-1280.0,270.000)
set u=CreateUnit(p,0x68303052,-5824.0,-1344.0,270.000)
set u=CreateUnit(p,0x68303133,5056.0,-4352.0,135.000)
set u=CreateUnit(p,0x68303149,4736.0,-3136.0,270.000)
set u=CreateUnit(p,0x6830314B,5248.0,-4032.0,270.000)
set u=CreateUnit(p,0x6830314B,4736.0,-4480.0,270.000)
set u=CreateUnit(p,0x6830314C,4352.0,-3328.0,270.000)
set u=CreateUnit(p,0x68303155,-2496.0,320.0,270.000)
set u=CreateUnit(p,0x68303156,-2688.0,576.0,270.000)
set u=CreateUnit(p,0x68303156,-2368.0,0.0,270.000)
set u=CreateUnit(p,0x68303231,-4096.0,-192.0,270.000)
set u=CreateUnit(p,0x68303159,-4224.0,1088.0,270.000)
set u=CreateUnit(p,0x68303159,-3456.0,1088.0,270.000)
set u=CreateUnit(p,0x68303042,1472.0,-7040.0,270.000)
set u=CreateUnit(p,0x68303231,-3136.0,1088.0,270.000)
set gg_unit_n01Q_0064=CreateUnit(p,0x6E303151,-5888.0,-1664.0,270.000)
set gg_unit_n01Q_0065=CreateUnit(p,0x6E303151,1472.0,-5952.0,270.000)
set gg_unit_n01Q_0066=CreateUnit(p,0x6E303151,4608.0,-4160.0,270.000)
set gg_unit_n01Q_0067=CreateUnit(p,0x6E303151,-2880.0,64.0,270.000)
set u=CreateUnit(p,0x68303042,1728.0,-7040.0,270.000)
set u=CreateUnit(p,0x68303041,2432.0,-7040.0,270.000)
set u=CreateUnit(p,0x68303156,-3840.0,1088.0,270.000)
set u=CreateUnit(p,0x68303231,-2880.0,1088.0,270.000)
set u=CreateUnit(p,0x68303231,-2624.0,1088.0,270.000)
set u=CreateUnit(p,0x68303052,-7232.0,-1344.0,270.000)
set u=CreateUnit(p,0x6830304D,-7872.0,-2112.0,270.000)
set u=CreateUnit(p,0x6830304D,-8128.0,-1792.0,270.000)
set u=CreateUnit(p,0x6830304D,-7936.0,-1152.0,270.000)
set u=CreateUnit(p,0x6830304D,-7104.0,-1728.0,270.000)
set u=CreateUnit(p,0x6830314C,6016.0,-4416.0,270.000)
set u=CreateUnit(p,0x6830314B,5888.0,-4032.0,270.000)
set u=CreateUnit(p,0x6830314B,6592.0,-3584.0,270.000)
set u=CreateUnit(p,0x6830314B,6848.0,-4096.0,270.000)
set u=CreateUnit(p,0x6830314B,6784.0,-4544.0,270.000)
set u=null
endfunction
function CreateNeutralHostile takes nothing returns nothing
local player p=Player(PLAYER_NEUTRAL_AGGRESSIVE)
local unit u
local integer unitID
local trigger t
local real life
set u=CreateUnit(p,0x6E646572,-6548.1,-533.1,3.252)
set u=CreateUnit(p,0x6E726163,-5980.2,-1463.6,154.840)
set u=CreateUnit(p,0x6E726163,-8017.3,-1435.4,8.563)
set u=CreateUnit(p,0x6E303152,-8099.1,-1587.7,156.723)
set u=null
endfunction
function CreateNeutralPassiveBuildings takes nothing returns nothing
local player p=Player(PLAYER_NEUTRAL_PASSIVE)
local unit u
local integer unitID
local trigger t
local real life
set gg_unit_h046_0002=CreateUnit(p,0x68303436,-7488.0,-6144.0,270.000)
call IssueImmediateOrder(gg_unit_h046_0002,"")
set gg_unit_h046_0005=CreateUnit(p,0x68303436,6464.0,192.0,270.000)
set u=CreateUnit(p,0x6E303531,-6528.0,-1088.0,270.000)
set u=CreateUnit(p,0x6E303531,1088.0,-6272.0,270.000)
set u=CreateUnit(p,0x6E303531,5056.0,-4288.0,270.000)
set u=CreateUnit(p,0x6E303531,5056.0,-4352.0,270.000)
set u=CreateUnit(p,0x6E303531,-2496.0,320.0,270.000)
set u=CreateUnit(p,0x6E303531,6528.0,-5376.0,270.000)
set u=CreateUnit(p,0x6E303531,-512.0,-2944.0,270.000)
set u=null
endfunction
function CreateNeutralPassive takes nothing returns nothing
local player p=Player(PLAYER_NEUTRAL_PASSIVE)
local unit u
local integer unitID
local trigger t
local real life
set u=CreateUnit(p,0x6E303152,-6833.7,-4162.1,343.440)
set u=CreateUnit(p,0x6E66726F,6501.1,-6604.8,356.726)
set u=CreateUnit(p,0x6E66726F,6623.1,-6702.2,251.770)
set u=CreateUnit(p,0x6E66726F,6368.0,-6843.4,157.252)
set u=CreateUnit(p,0x6E66726F,6102.0,-6728.0,63.920)
set u=CreateUnit(p,0x6E66726F,6737.1,-6629.3,351.035)
set u=CreateUnit(p,0x6E66726F,6298.7,-6617.5,76.885)
set u=CreateUnit(p,0x6E66726F,6512.3,-6982.1,274.040)
set u=CreateUnit(p,0x6E656368,2245.2,-6975.5,22.203)
set u=CreateUnit(p,0x6E656368,2284.6,-7009.3,58.690)
set u=CreateUnit(p,0x6E656368,2278.0,-7084.0,131.839)
set u=CreateUnit(p,0x6E646572,-6353.4,-540.0,115.052)
set u=CreateUnit(p,0x6E646F67,4653.6,-3317.3,186.371)
set u=CreateUnit(p,0x6E646F67,4589.1,-3364.2,81.200)
set u=CreateUnit(p,0x6E726163,-5548.1,-2523.8,209.729)
set u=CreateUnit(p,0x6E656372,-4252.5,919.7,15.487)
set u=CreateUnit(p,0x6E736865,2580.1,-7034.7,119.094)
set u=CreateUnit(p,0x6E736865,2614.5,-6985.3,168.270)
set u=CreateUnit(p,0x6E303152,-7874.4,-4626.8,80.470)
set u=CreateUnit(p,0x6E303152,5577.3,-5855.5,121.047)
set u=CreateUnit(p,0x6E646F67,-4032.4,-4305.5,320.052)
set u=CreateUnit(p,0x6E646F67,-3015.7,-4555.7,202.730)
set u=CreateUnit(p,0x6E706967,-4526.1,-3644.6,26.581)
set u=CreateUnit(p,0x6E726174,560.9,-4932.3,185.181)
set u=CreateUnit(p,0x6E726174,640.4,-4992.3,0.395)
set u=CreateUnit(p,0x6E726174,472.7,-4997.0,31.524)
set u=CreateUnit(p,0x6E303152,-5473.5,-3912.6,115.000)
set u=CreateUnit(p,0x6E303152,-6768.2,315.3,121.047)
set u=CreateUnit(p,0x6E656372,-4063.7,1194.5,297.667)
set u=CreateUnit(p,0x6E646F67,-1864.2,-1597.4,156.278)
set u=CreateUnit(p,0x6E646F67,-2863.7,-1343.7,117.257)
set u=CreateUnit(p,0x6E706967,-1173.6,-2219.8,288.026)
set u=CreateUnit(p,0x6E646F67,6615.2,-3821.0,319.160)
set u=CreateUnit(p,0x6E303152,-4956.4,-6942.7,115.000)
set u=CreateUnit(p,0x6E303152,-4565.7,-4838.5,136.777)
set u=CreateUnit(p,0x6E303152,-714.4,-5856.9,115.000)
set u=CreateUnit(p,0x6E303152,5432.6,-5020.0,115.000)
set u=CreateUnit(p,0x6E303152,645.5,-6189.9,115.000)
set u=CreateUnit(p,0x6E303152,-2792.7,-4034.4,207.943)
set u=CreateUnit(p,0x6E303152,-3148.3,-1793.9,115.000)
set u=CreateUnit(p,0x6E303152,-2636.2,-6911.6,187.386)
set u=CreateUnit(p,0x6E303152,-1670.2,-2942.7,115.000)
set u=CreateUnit(p,0x6E303152,-1453.2,-1170.1,39.230)
set u=CreateUnit(p,0x6E303152,-6711.2,819.5,115.000)
set u=CreateUnit(p,0x6E303152,-6832.9,-1985.4,115.000)
set u=CreateUnit(p,0x6E303152,-718.3,-4799.9,138.375)
set u=CreateUnit(p,0x6E303152,5568.7,-3817.1,8.139)
set u=CreateUnit(p,0x6E303152,6818.6,-4288.0,164.591)
set u=CreateUnit(p,0x6E303152,-1887.9,-4164.3,153.248)
set u=CreateUnit(p,0x6E303152,-4248.3,-2069.5,335.502)
set u=CreateUnit(p,0x6E303152,-3909.4,-6360.1,131.377)
set u=CreateUnit(p,0x6E303152,-2030.7,374.3,340.005)
set u=CreateUnit(p,0x6E303152,6808.1,-1097.4,115.000)
set u=CreateUnit(p,0x6E303152,4393.0,-1739.9,115.000)
set u=CreateUnit(p,0x6E303152,2430.4,-5021.8,155.590)
set u=CreateUnit(p,0x6E303152,-3749.0,-939.9,115.000)
set u=CreateUnit(p,0x6E303152,-4682.4,-3198.3,44.974)
set u=CreateUnit(p,0x6E303152,1036.9,1155.3,70.147)
set u=null
endfunction
function CreatePlayerBuildings takes nothing returns nothing
call CreateBuildingsForPlayer5()
call CreateBuildingsForPlayer11()
endfunction
function CreatePlayerUnits takes nothing returns nothing
endfunction
function CreateAllUnits takes nothing returns nothing
call CreateNeutralHostileBuildings()
call CreateNeutralPassiveBuildings()
call CreatePlayerBuildings()
call CreateNeutralHostile()
call CreateNeutralPassive()
call CreatePlayerUnits()
endfunction
function CreateRegions takes nothing returns nothing
local weathereffect we
set gg_rct_Akatsuki_Bot_O1=Rect(3392.0,-4512.0,3648.0,-4256.0)
set gg_rct_Akatsuki_Bot_O1_Healer_1=Rect(3264.0,-4256.0,3392.0,-4128.0)
set gg_rct_Akatsuki_Bot_O1_Healer_2=Rect(3648.0,-4256.0,3776.0,-4128.0)
set gg_rct_Akatsuki_Bot_O2=Rect(4544.0,-1440.0,4800.0,-1184.0)
set gg_rct_Akatsuki_Bot_O2_Healer_1=Rect(4640.0,-1088.0,4768.0,-960.0)
set gg_rct_Akatsuki_Bot_O2_Healer_2=Rect(4864.0,-1376.0,4992.0,-1248.0)
set gg_rct_Akatsuki_Head=Rect(5152.0,-224.0,5376.0,0.0)
set gg_rct_Akatsuki_NC_1=Rect(2496.0,672.0,3104.0,1280.0)
set gg_rct_Akatsuki_NC_10=Rect(4416.0,-6048.0,5216.0,-5248.0)
set gg_rct_Akatsuki_NC_2=Rect(1728.0,-1824.0,2336.0,-1184.0)
set gg_rct_Akatsuki_NC_3=Rect(576.0,-1888.0,1216.0,-1280.0)
set gg_rct_Akatsuki_NC_4=Rect(-160.0,-640.0,448.0,-32.0)
set gg_rct_Akatsuki_NC_5=Rect(-864.0,-736.0,-256.0,-128.0)
set gg_rct_Akatsuki_NC_6=Rect(-2048.0,-1792.0,-1472.0,-1216.0)
set gg_rct_Akatsuki_NC_7=Rect(-2144.0,736.0,-1504.0,1376.0)
set gg_rct_Akatsuki_NC_8=Rect(-3424.0,-1824.0,-2848.0,-1280.0)
set gg_rct_Akatsuki_NC_9=Rect(-6720.0,960.0,-6144.0,1536.0)
set gg_rct_Akatsuki_Top_O1=Rect(-5056.0,480.0,-4800.0,736.0)
set gg_rct_Akatsuki_Top_O1_Healer_1=Rect(-5184.0,736.0,-5056.0,864.0)
set gg_rct_Akatsuki_Top_O1_Healer_2=Rect(-4800.0,736.0,-4672.0,864.0)
set gg_rct_Akatsuki_Top_O2=Rect(3744.0,-672.0,4000.0,-416.0)
set gg_rct_Akatsuki_Top_O2_Healer_1=Rect(4064.0,-576.0,4192.0,-448.0)
set gg_rct_Akatsuki_Top_O2_Healer_2=Rect(3808.0,-352.0,3936.0,-224.0)
set gg_rct_AkatsukiBotGuard1=Rect(5088.0,-3072.0,5216.0,-2944.0)
set gg_rct_AkatsukiBotGuard2=Rect(5728.0,-3072.0,5856.0,-2944.0)
set gg_rct_AkatsukiBotGuardBounds=Rect(4960.0,-3424.0,5920.0,-2368.0)
set gg_rct_AkatsukiDefeatEffect=Rect(5152.0,-224.0,5760.0,384.0)
set gg_rct_AkatsukiSasoriHirukoRepair=Rect(5920.0,608.0,6048.0,736.0)
set gg_rct_AkatsukiTopGuard1=Rect(-256.0,320.0,-128.0,448.0)
set gg_rct_AkatsukiTopGuard2=Rect(-256.0,1056.0,-128.0,1184.0)
set gg_rct_AkatsukiTopGuardBounds=Rect(-800.0,224.0,416.0,1248.0)
set gg_rct_Alliance_Bot_O1=Rect(3360.0,-6688.0,3616.0,-6432.0)
set gg_rct_Alliance_Bot_O1_Healer_1=Rect(3232.0,-6816.0,3360.0,-6688.0)
set gg_rct_Alliance_Bot_O1_Healer_2=Rect(3616.0,-6816.0,3744.0,-6688.0)
set gg_rct_Alliance_Bot_O2=Rect(-5184.0,-5440.0,-4928.0,-5184.0)
set gg_rct_Alliance_Bot_O2_Healer_1=Rect(-5376.0,-5408.0,-5248.0,-5280.0)
set gg_rct_Alliance_Bot_O2_Healer_2=Rect(-5152.0,-5632.0,-5024.0,-5504.0)
set gg_rct_Alliance_Head=Rect(-6400.0,-5984.0,-6176.0,-5760.0)
set gg_rct_Alliance_NC_1=Rect(-4352.0,-7072.0,-3744.0,-6432.0)
set gg_rct_Alliance_NC_10=Rect(-6624.0,-512.0,-5696.0,384.0)
set gg_rct_Alliance_NC_2=Rect(-3456.0,-4768.0,-2752.0,-4096.0)
set gg_rct_Alliance_NC_3=Rect(-2560.0,-4640.0,-1920.0,-3968.0)
set gg_rct_Alliance_NC_4=Rect(-1728.0,-5824.0,-1056.0,-5152.0)
set gg_rct_Alliance_NC_5=Rect(-992.0,-5728.0,-320.0,-5056.0)
set gg_rct_Alliance_NC_6=Rect(-128.0,-4768.0,480.0,-4160.0)
set gg_rct_Alliance_NC_7=Rect(160.0,-7264.0,800.0,-6624.0)
set gg_rct_Alliance_NC_8=Rect(1408.0,-4640.0,2016.0,-4032.0)
set gg_rct_Alliance_NC_9=Rect(4992.0,-7360.0,5664.0,-6688.0)
set gg_rct_Alliance_Top_O1=Rect(-4992.0,-1664.0,-4736.0,-1408.0)
set gg_rct_Alliance_Top_O1_Healer_1=Rect(-5120.0,-1792.0,-4992.0,-1664.0)
set gg_rct_Alliance_Top_O1_Healer_2=Rect(-4736.0,-1792.0,-4608.0,-1664.0)
set gg_rct_Alliance_Top_O2=Rect(-5984.0,-4704.0,-5728.0,-4448.0)
set gg_rct_Alliance_Top_O2_Healer_1=Rect(-6176.0,-4672.0,-6048.0,-4544.0)
set gg_rct_Alliance_Top_O2_Healer_2=Rect(-5952.0,-4896.0,-5824.0,-4768.0)
set gg_rct_AllianceBotGuard1=Rect(-1152.0,-6336.0,-1024.0,-6208.0)
set gg_rct_AllianceBotGuard2=Rect(-1152.0,-7072.0,-1024.0,-6944.0)
set gg_rct_AllianceBotGuardBounds=Rect(-1696.0,-7168.0,-480.0,-6112.0)
set gg_rct_AllianceDefeatEffect=Rect(-6848.0,-6400.0,-6176.0,-5760.0)
set gg_rct_AllianceSasoriHirukoRepair=Rect(-7232.0,-6688.0,-7104.0,-6560.0)
set gg_rct_AllianceTopGuard1=Rect(-6304.0,-2944.0,-6176.0,-2816.0)
set gg_rct_AllianceTopGuard2=Rect(-6944.0,-2944.0,-6816.0,-2816.0)
set gg_rct_AllianceTopGuardBounds=Rect(-7040.0,-3488.0,-6080.0,-2432.0)
set gg_rct_Boss=Rect(-896.0,-3488.0,-128.0,-2464.0)
set gg_rct_Creeps_Akatsuki_Bot=Rect(5696.0,-992.0,5952.0,-736.0)
set gg_rct_Creeps_Akatsuki_Down_2=Rect(5056.0,-2080.0,5312.0,-1824.0)
set gg_rct_Creeps_Akatsuki_Down_3=Rect(5344.0,-3136.0,5600.0,-2880.0)
set gg_rct_Creeps_Akatsuki_Down_4=Rect(4000.0,-4128.0,4256.0,-3872.0)
set gg_rct_Creeps_Akatsuki_Top=Rect(4320.0,224.0,4608.0,512.0)
set gg_rct_Creeps_Akatsuki_Up_2=Rect(2176.0,-416.0,2432.0,-160.0)
set gg_rct_Creeps_Akatsuki_Up_3=Rect(-320.0,608.0,-64.0,864.0)
set gg_rct_Creeps_Akatsuki_Up_4=Rect(-2368.0,-672.0,-2112.0,-416.0)
set gg_rct_Creeps_Akatsuki_Up_5=Rect(-4096.0,480.0,-3840.0,736.0)
set gg_rct_Creeps_Alliance_Bot=Rect(-5664.0,-6464.0,-5344.0,-6208.0)
set gg_rct_Creeps_Alliance_Top=Rect(-7040.0,-5312.0,-6720.0,-4992.0)
set gg_rct_Creeps_Down=Rect(3488.0,-5824.0,4160.0,-5152.0)
set gg_rct_Creeps_Konoha_Down_2=Rect(-4064.0,-5696.0,-3808.0,-5440.0)
set gg_rct_Creeps_Konoha_Down_3=Rect(-1216.0,-6784.0,-960.0,-6528.0)
set gg_rct_Creeps_Konoha_Down_4=Rect(640.0,-5472.0,896.0,-5216.0)
set gg_rct_Creeps_Konoha_Down_5=Rect(2272.0,-6688.0,2528.0,-6432.0)
set gg_rct_Creeps_Konoha_Up_2=Rect(-6432.0,-4000.0,-6176.0,-3744.0)
set gg_rct_Creeps_Konoha_Up_3=Rect(-6688.0,-2944.0,-6432.0,-2688.0)
set gg_rct_Creeps_Konoha_Up_4=Rect(-5664.0,-2016.0,-5408.0,-1760.0)
set gg_rct_Creeps_Up=Rect(-5408.0,-768.0,-4832.0,-160.0)
set gg_rct_CreepsAkatsukiSpecialGroup1=Rect(4800.0,-192.0,4960.0,-32.0)
set gg_rct_CreepsAkatsukiSpecialGroup2=Rect(5152.0,-576.0,5312.0,-416.0)
set gg_rct_CreepsAkatsukiSpecialGroup3=Rect(2688.0,-2496.0,2848.0,-2336.0)
set gg_rct_CreepsAkatsukiSpecialGroup4=Rect(-4640.0,-2720.0,-4480.0,-2560.0)
set gg_rct_CreepsAkatsukiSpecialGroup5=Rect(2720.0,-5312.0,2880.0,-5152.0)
set gg_rct_CreepsAkatsukiSpecialGroup6=Rect(-5088.0,-4192.0,-4928.0,-4032.0)
set gg_rct_CreepsAkatsukiSpecialGroup7=Rect(-4448.0,-4800.0,-4288.0,-4640.0)
set gg_rct_CreepsAllianceSpecialGroup1=Rect(-6016.0,-5824.0,-5856.0,-5664.0)
set gg_rct_CreepsAllianceSpecialGroup2=Rect(-6304.0,-5568.0,-6144.0,-5408.0)
set gg_rct_CreepsAllianceSpecialGroup3=Rect(-4352.0,-3552.0,-4192.0,-3392.0)
set gg_rct_CreepsAllianceSpecialGroup4=Rect(3136.0,-3328.0,3296.0,-3168.0)
set gg_rct_CreepsAllianceSpecialGroup5=Rect(-4288.0,-704.0,-4128.0,-544.0)
set gg_rct_CreepsAllianceSpecialGroup6=Rect(3808.0,-1952.0,3968.0,-1792.0)
set gg_rct_CreepsAllianceSpecialGroup7=Rect(3072.0,-1248.0,3232.0,-1088.0)
set gg_rct_Dolina_Effect=Rect(-8608.0,448.0,-7168.0,1600.0)
set we=AddWeatherEffect(gg_rct_Dolina_Effect,0x574E6377)
call EnableWeatherEffect(we,true)
set gg_rct_Duel=Rect(4672.0,2592.0,7072.0,4160.0)
set gg_rct_DuelAkatsukiP1=Rect(6496.0,3360.0,6624.0,3488.0)
set gg_rct_DuelAllianceP1=Rect(5120.0,3360.0,5248.0,3488.0)
set gg_rct_Fog_in_Akatsuki=Rect(3552.0,-1408.0,6912.0,1344.0)
set gg_rct_Gora_Effect=Rect(6688.0,-7328.0,7424.0,-6528.0)
set we=AddWeatherEffect(gg_rct_Gora_Effect,0x4D456473)
call EnableWeatherEffect(we,true)
set gg_rct_HeroJutsu=Rect(-4224.0,3040.0,-2496.0,4064.0)
set gg_rct_HeroJutsuDesc=Rect(-2912.0,3232.0,-2880.0,3264.0)
set gg_rct_HeroJutsuName=Rect(-2912.0,3488.0,-2880.0,3520.0)
set gg_rct_HeroJutsuSP=Rect(-2912.0,3616.0,-2880.0,3648.0)
set gg_rct_HeroLoc1=Rect(-8032.0,3552.0,-7904.0,3680.0)
set gg_rct_HeroLoc2=Rect(-8032.0,3360.0,-7904.0,3488.0)
set gg_rct_HeroLoc3=Rect(-8032.0,3168.0,-7904.0,3296.0)
set gg_rct_HeroLoc4=Rect(-8032.0,2976.0,-7904.0,3104.0)
set gg_rct_HeroLoc5=Rect(-7456.0,3552.0,-7328.0,3680.0)
set gg_rct_HeroLoc6=Rect(-7456.0,3360.0,-7328.0,3488.0)
set gg_rct_HeroLoc7=Rect(-7456.0,3168.0,-7328.0,3296.0)
set gg_rct_HeroLoc8=Rect(-7456.0,2976.0,-7328.0,3104.0)
set gg_rct_HeroPick=Rect(-224.0,3072.0,1408.0,4192.0)
set gg_rct_Iwagakure=Rect(-5952.0,-1728.0,-5824.0,-1600.0)
set gg_rct_Iwagakure_Vision=Rect(-8320.0,-2848.0,-5504.0,-864.0)
set gg_rct_Kamui=Rect(-6016.0,3328.0,-5120.0,4224.0)
set gg_rct_Kirigakure=Rect(4544.0,-4224.0,4672.0,-4096.0)
set gg_rct_Kirigakure_Vision=Rect(4096.0,-4576.0,7008.0,-2720.0)
set gg_rct_Kumogakure=Rect(-2944.0,0.0,-2816.0,128.0)
set gg_rct_Kumogakure_Vision=Rect(-4384.0,-256.0,-2144.0,1504.0)
set gg_rct_LeaderHelpAkatsuki=Rect(6336.0,64.0,6592.0,320.0)
set gg_rct_LeaderHelpAlliance=Rect(-7744.0,-6336.0,-7488.0,-6080.0)
set gg_rct_Light_in_Alliance=Rect(-8256.0,-7264.0,-4864.0,-4320.0)
set gg_rct_MainRect=Rect(-7808.0,3232.0,-7552.0,3488.0)
set gg_rct_ModePick=Rect(1952.0,3072.0,3296.0,4320.0)
set gg_rct_ModePick=Rect(1952.0,3072.0,3296.0,4320.0)
set gg_rct_NeituralUnitRect=Rect(-7744.0,3904.0,-7616.0,4032.0)
set gg_rct_Revive_Akatsuki=Rect(6080.0,64.0,7040.0,1248.0)
set gg_rct_Revive_Alliance=Rect(-8320.0,-7328.0,-7264.0,-6176.0)
set gg_rct_Shop=Rect(-1664.0,2592.0,-512.0,4224.0)
set gg_rct_ShopDis=Rect(-832.0,3552.0,-800.0,3584.0)
set gg_rct_ShopMove=Rect(-704.0,3840.0,-544.0,4000.0)
set gg_rct_ShopName=Rect(-1536.0,3552.0,-1504.0,3584.0)
set gg_rct_ShopOpenAkatsuki=Rect(6592.0,224.0,6912.0,320.0)
set gg_rct_ShopOpenAlliance=Rect(-8096.0,-6400.0,-7776.0,-6304.0)
set gg_rct_StartRect=Rect(-8384.0,2688.0,-7008.0,3904.0)
set gg_rct_Sunagakure=Rect(1408.0,-6016.0,1536.0,-5888.0)
set gg_rct_Sunagakure_Vision=Rect(768.0,-7328.0,3008.0,-5696.0)
set gg_rct_Weather=Rect(-8608.0,-7392.0,7424.0,1696.0)
set gg_rct_Quest=Rect(6880.0,-5504.0,7040.0,-5344.0)
set gg_rct_QuestReward=Rect(6208.0,-5536.0,6368.0,-5376.0)
set we=null
endfunction
function CreateCameras takes nothing returns nothing
set gg_cam_CamAkatsukiDefeat1=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat1,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat1,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat1,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat1,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat1,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat1,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat1,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamAkatsukiDefeat1,5303.1,41.4,0.0)
set gg_cam_CamAkatsukiDefeat2=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat2,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat2,CAMERA_FIELD_ROTATION,45.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat2,CAMERA_FIELD_ANGLE_OF_ATTACK,330.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat2,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat2,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat2,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamAkatsukiDefeat2,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamAkatsukiDefeat2,5079.2,0.2,0.0)
set gg_cam_CamAllianceDefeat1=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamAllianceDefeat1,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat1,CAMERA_FIELD_ROTATION,180.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat1,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat1,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat1,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat1,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat1,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamAllianceDefeat1,-6660.1,-5762.0,0.0)
set gg_cam_CamAllianceDefeat2=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamAllianceDefeat2,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat2,CAMERA_FIELD_ROTATION,225.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat2,CAMERA_FIELD_ANGLE_OF_ATTACK,330.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat2,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat2,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat2,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamAllianceDefeat2,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamAllianceDefeat2,-6495.0,-5551.8,0.0)
set gg_cam_CAMERA=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CAMERA,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CAMERA,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CAMERA,CAMERA_FIELD_ANGLE_OF_ATTACK,270.0,0.0)
call CameraSetupSetField(gg_cam_CAMERA,CAMERA_FIELD_TARGET_DISTANCE,1500.0,0.0)
call CameraSetupSetField(gg_cam_CAMERA,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CAMERA,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CAMERA,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CAMERA,575.0,3715.0,0.0)
set gg_cam_CamMain=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamMain,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamMain,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamMain,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamMain,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamMain,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamMain,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamMain,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamMain,-7700.0,3440.5,0.0)
set gg_cam_CamMod=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamMod,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamMod,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamMod,CAMERA_FIELD_ANGLE_OF_ATTACK,270.0,0.0)
call CameraSetupSetField(gg_cam_CamMod,CAMERA_FIELD_TARGET_DISTANCE,1500.0,0.0)
call CameraSetupSetField(gg_cam_CamMod,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamMod,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamMod,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamMod,2700.0,3930.0,0.0)
set gg_cam_CamShop=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamShop,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamShop,CAMERA_FIELD_ROTATION,180.0,0.0)
call CameraSetupSetField(gg_cam_CamShop,CAMERA_FIELD_ANGLE_OF_ATTACK,270.0,0.0)
call CameraSetupSetField(gg_cam_CamShop,CAMERA_FIELD_TARGET_DISTANCE,1500.0,0.0)
call CameraSetupSetField(gg_cam_CamShop,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamShop,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamShop,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamShop,-1150.0,3368.0,0.0)
set gg_cam_CamTutorial1=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial1,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial1,CAMERA_FIELD_ROTATION,127.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial1,CAMERA_FIELD_ANGLE_OF_ATTACK,340.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial1,CAMERA_FIELD_TARGET_DISTANCE,725.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial1,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial1,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial1,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial1,-7648.9,3574.9,0.0)
set gg_cam_CamTutorial2p1=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial2p1,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p1,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p1,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p1,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p1,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p1,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p1,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial2p1,-7943.8,-6283.0,0.0)
set gg_cam_CamTutorial2p2=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial2p2,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p2,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p2,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p2,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p2,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p2,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial2p2,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial2p2,6642.4,436.6,0.0)
set gg_cam_CamTutorial3p1=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial3p1,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p1,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p1,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p1,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p1,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p1,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p1,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial3p1,-6721.3,-5792.0,0.0)
set gg_cam_CamTutorial3p2=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial3p2,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p2,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p2,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p2,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p2,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p2,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial3p2,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial3p2,5324.3,218.6,0.0)
set gg_cam_CamTutorial4p1=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial4p1,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p1,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p1,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p1,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p1,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p1,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p1,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial4p1,2430.5,-6183.1,0.0)
set gg_cam_CamTutorial4p2=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial4p2,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p2,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p2,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p2,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p2,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p2,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial4p2,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial4p2,-3696.4,84.7,0.0)
set gg_cam_CamTutorial5=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial5,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial5,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial5,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial5,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial5,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial5,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial5,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial5,1477.2,-5977.6,0.0)
set gg_cam_CamTutorial6=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial6,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial6,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial6,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial6,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial6,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial6,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial6,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial6,4586.6,-4135.9,0.0)
set gg_cam_CamTutorial7=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial7,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial7,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial7,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial7,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial7,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial7,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial7,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial7,-5979.8,-1687.3,0.0)
set gg_cam_CamTutorial8=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial8,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial8,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial8,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial8,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial8,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial8,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial8,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial8,-2644.5,-291.5,0.0)
set gg_cam_Kamui=CreateCameraSetup()
call CameraSetupSetField(gg_cam_Kamui,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_Kamui,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_Kamui,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_Kamui,CAMERA_FIELD_TARGET_DISTANCE,1200.0,0.0)
call CameraSetupSetField(gg_cam_Kamui,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_Kamui,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_Kamui,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_Kamui,-5537.0,3832.7,0.0)
set gg_cam_CamTutorial9p1=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial9p1,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p1,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p1,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p1,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p1,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p1,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p1,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial9p1,-7642.0,-6205.9,0.0)
set gg_cam_CamTutorial9p2=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial9p2,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p2,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p2,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p2,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p2,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p2,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial9p2,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial9p2,6367.8,297.0,0.0)
set gg_cam_CamTutorial10=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamTutorial10,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial10,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial10,CAMERA_FIELD_ANGLE_OF_ATTACK,304.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial10,CAMERA_FIELD_TARGET_DISTANCE,1650.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial10,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial10,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamTutorial10,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamTutorial10,-449.2,-2958.4,0.0)
set gg_cam_CamJutsu=CreateCameraSetup()
call CameraSetupSetField(gg_cam_CamJutsu,CAMERA_FIELD_ZOFFSET,0.0,0.0)
call CameraSetupSetField(gg_cam_CamJutsu,CAMERA_FIELD_ROTATION,90.0,0.0)
call CameraSetupSetField(gg_cam_CamJutsu,CAMERA_FIELD_ANGLE_OF_ATTACK,270.0,0.0)
call CameraSetupSetField(gg_cam_CamJutsu,CAMERA_FIELD_TARGET_DISTANCE,1500.0,0.0)
call CameraSetupSetField(gg_cam_CamJutsu,CAMERA_FIELD_ROLL,0.0,0.0)
call CameraSetupSetField(gg_cam_CamJutsu,CAMERA_FIELD_FIELD_OF_VIEW,70.0,0.0)
call CameraSetupSetField(gg_cam_CamJutsu,CAMERA_FIELD_FARZ,5000.0,0.0)
call CameraSetupSetDestPosition(gg_cam_CamJutsu,-3300.0,3520.0,0.0)
endfunction
function TheSpecularRandomGetList takes nothing returns nothing
set hc_list[1]=Asuma
set hc_list[2]=Gai
set hc_list[3]=Jugo
set hc_list[4]=Sasuke
set hc_list[5]=Zabuza
set hc_list[6]=Haku
set hc_list[7]=Minato
set hc_list[8]=Mu
set hc_list[9]=Neji
set hc_list[10]=Tobirama
set hc_list[11]=Hanzo
set hc_list[12]=Kabuto
set hc_list[13]=Obito
set hc_list[14]=Itachi
set hc_list[15]=Mei
set hc_list[16]=Naruto
set hc_list[17]=Jiraya
set hc_list[18]=Kakashi
set hc_list[19]=Madara
set hc_list[20]=Darui
set hc_list[21]=Deidara
set hc_list[22]=Gengetsu
set hc_list[23]=Hidan
set hc_list[24]=Orochimaru
set hc_list[25]=Suigetsu
set hc_list[26]=Danzo
set hc_list[27]=Ei
set hc_list[28]=Han
set hc_list[29]=Gaara
set hc_list[30]=Hashirama
set hc_list[31]=Onoki
set hc_list[32]=Sai
set hc_list[33]=Yamato
set hc_list[34]=Sakura
set hc_list[35]=Tsunade
set hc_list[36]=Nagato
set hc_list[37]=Chiyo
set hc_list[38]=Sasori
set hc_list[39]=Shikamaru
set hc_list[40]=Zetsu
endfunction
function GetFullPriceUpgradedItem takes integer which,integer id returns integer
local integer price=0
if which==KONOHA_JACKET then
if id==KONOHA_JACKET_ID_1 then
set price=500
elseif id==KONOHA_JACKET_ID_2 then
set price=1000
elseif id==KONOHA_JACKET_ID_3 then
set price=1500
elseif id==KONOHA_JACKET_ID_4 then
set price=2000
elseif id==KONOHA_JACKET_ID_5 then
set price=2500
endif
elseif which==NUKENIN_GLOVES then
if id==NUKENIN_GLOVES_ID_1 then
set price=500
elseif id==NUKENIN_GLOVES_ID_2 then
set price=1000
elseif id==NUKENIN_GLOVES_ID_3 then
set price=1500
elseif id==NUKENIN_GLOVES_ID_4 then
set price=2000
elseif id==NUKENIN_GLOVES_ID_5 then
set price=2500
endif
elseif which==WAIST_POUCH then
if id==WAIST_POUCH_ID_1 then
set price=500
elseif id==WAIST_POUCH_ID_2 then
set price=1000
elseif id==WAIST_POUCH_ID_3 then
set price=1500
elseif id==WAIST_POUCH_ID_4 then
set price=2000
elseif id==WAIST_POUCH_ID_5 then
set price=2500
endif
elseif which==HITAIATE then
if id==HITAIATE_ID_1 then
set price=500
elseif id==HITAIATE_ID_2 then
set price=1000
elseif id==HITAIATE_ID_3 then
set price=1500
elseif id==HITAIATE_ID_4 then
set price=2000
elseif id==HITAIATE_ID_5 then
set price=2500
endif
elseif which==ROBBER_MACE then
if id==ROBBER_MACE_ID_1 then
set price=500
elseif id==ROBBER_MACE_ID_2 then
set price=1000
elseif id==ROBBER_MACE_ID_3 then
set price=1500
elseif id==ROBBER_MACE_ID_4 then
set price=2000
elseif id==ROBBER_MACE_ID_5 then
set price=2500
endif
elseif which==SAMURAI_CETTO then
if id==SAMURAI_CETTO_ID_1 then
set price=500
elseif id==SAMURAI_CETTO_ID_2 then
set price=1000
elseif id==SAMURAI_CETTO_ID_3 then
set price=1500
elseif id==SAMURAI_CETTO_ID_4 then
set price=2000
elseif id==SAMURAI_CETTO_ID_5 then
set price=2500
endif
elseif which==YUKIGAKURE_GHOST then
if id==YUKIGAKURE_GHOST_ID_1 then
set price=500
elseif id==YUKIGAKURE_GHOST_ID_2 then
set price=1000
elseif id==YUKIGAKURE_GHOST_ID_3 then
set price=1500
elseif id==YUKIGAKURE_GHOST_ID_4 then
set price=2000
elseif id==YUKIGAKURE_GHOST_ID_5 then
set price=2500
endif
elseif which==BATTLE_CLAW then
if id==BATTLE_CLAW_ID_1 then
set price=500
elseif id==BATTLE_CLAW_ID_2 then
set price=1000
elseif id==BATTLE_CLAW_ID_3 then
set price=1500
elseif id==BATTLE_CLAW_ID_4 then
set price=2000
elseif id==BATTLE_CLAW_ID_5 then
set price=2500
endif
endif
return price
endfunction
function GetFullPriceItem takes item art returns integer
local integer array price
local integer howmuch=0
local integer i=1
local integer id=GetItemTypeId(art)
set price[RAMEN]=100
set price[SAND_WARD]=50
set price[CHAKRA_WARD]=100
set price[HEALING_WARD]=125
set price[GAS_CHECKER]=100
set price[KEMURIDAMA]=100
set price[DAZZLING_GRENADE]=100
set price[SHUKAKU_CHAKRA_SEALED_SCROLL]=50
set price[ISOBU_CHAKRA_SEALED_SCROLL]=50
set price[SON_GOKU_CHAKRA_SEALED_SCROLL]=50
set price[SAIKEN_CHAKRA_SEALED_SCROLL]=50
set price[KURAMA_CHAKRA_SEALED_SCROLL]=50
set price[EDOTENSEI_SCROLL]=200
set price[KUNAI]=250
set price[SHURIKEN]=250
set price[FUMA_SHURIKEN]=500
set price[SENBON]=500
set price[KIBAKU_KUNAI]=500
set price[EIYU_NO_MIZU]=1000
set price[KUCHIYOSE_SCROLL]=500
set price[HI_NO_ISHI]=1000
set price[KATON]=1250
set price[SUITON]=1250
set price[DOTON]=1250
set price[FUTON]=1250
set price[RAITON]=1250
set price[ROSARY_MONK]=1250
set price[HOSHI]=1500
set price[SENNIN_STAFF]=1500
set price[SHINIGAMI_OFFERING]=2000
set price[TENSEIGAN]=2000
set price[BENIHISAGO]=3000
set price[SHODAI_HOKAGE_NO_KUBIKAZARI]=3250
set price[KOKINJO]=3500
set price[KONOHA_JACKET]=GetFullPriceUpgradedItem(KONOHA_JACKET,id)
set price[NUKENIN_GLOVES]=GetFullPriceUpgradedItem(NUKENIN_GLOVES,id)
set price[WAIST_POUCH]=GetFullPriceUpgradedItem(WAIST_POUCH,id)
set price[HITAIATE]=GetFullPriceUpgradedItem(HITAIATE,id)
set price[ROBBER_MACE]=GetFullPriceUpgradedItem(ROBBER_MACE,id)
set price[SAMURAI_CETTO]=GetFullPriceUpgradedItem(SAMURAI_CETTO,id)
set price[YUKIGAKURE_GHOST]=GetFullPriceUpgradedItem(YUKIGAKURE_GHOST,id)
set price[AKATSUKI_HAT]=500
set price[HIRAISHIN_BOOTS]=1200
set price[OMORI]=1250
set price[AKATSUKI_ROBE]=1500
set price[HOGO_TETSU_NO_KUNI]=2165
set price[ANBU_AMMUNITION]=2350
set price[CHAKRA_NO_YOROI]=2400
set price[SHITENSHOIN]=2500
set price[TRAINING_SUIT]=2500
set price[BATTLE_CLAW]=GetFullPriceUpgradedItem(BATTLE_CLAW,id)
set price[SAMURAI_KATANA]=750
set price[LUMBERJACK_AXE]=250
set price[ANBU_TANTO]=1300
set price[KUROSAVA]=1500
set price[BATORUGUROBU]=1700
set price[FURIDO_STAFF]=1700
set price[KIHOU_BLASTER]=1850
set price[SOSHUGA]=1920
set price[BASHOSEN]=2050
set price[KUSANAGI_NO_TSURUGI]=2100
set price[HIRAMEKAREI]=2450
set price[KABUTOWARI]=2450
set price[SHIBUKI]=2750
set price[NUIBARI]=2950
set price[TOBIRAMA_RAIJIN]=3690
set price[SHICHISEIKEN]=3775
set price[NUNOBOKO_NO_KEN]=5500
loop
if id==udg_Items[i]then
set howmuch=price[i]
else
if id==KONOHA_JACKET_ID_2 or id==KONOHA_JACKET_ID_3 or id==KONOHA_JACKET_ID_4 or id==KONOHA_JACKET_ID_5 then
set howmuch=price[KONOHA_JACKET]
elseif id==NUKENIN_GLOVES_ID_2 or id==NUKENIN_GLOVES_ID_3 or id==NUKENIN_GLOVES_ID_4 or id==NUKENIN_GLOVES_ID_5 then
set howmuch=price[NUKENIN_GLOVES]
elseif id==WAIST_POUCH_ID_2 or id==WAIST_POUCH_ID_3 or id==WAIST_POUCH_ID_4 or id==WAIST_POUCH_ID_5 then
set howmuch=price[WAIST_POUCH]
elseif id==HITAIATE_ID_2 or id==HITAIATE_ID_3 or id==HITAIATE_ID_4 or id==HITAIATE_ID_5 then
set howmuch=price[HITAIATE]
elseif id==ROBBER_MACE_ID_2 or id==ROBBER_MACE_ID_3 or id==ROBBER_MACE_ID_4 or id==ROBBER_MACE_ID_5 then
set howmuch=price[ROBBER_MACE]
elseif id==SAMURAI_CETTO_ID_2 or id==SAMURAI_CETTO_ID_3 or id==SAMURAI_CETTO_ID_4 or id==SAMURAI_CETTO_ID_5 then
set howmuch=price[SAMURAI_CETTO]
elseif id==YUKIGAKURE_GHOST_ID_2 or id==YUKIGAKURE_GHOST_ID_3 or id==YUKIGAKURE_GHOST_ID_4 or id==YUKIGAKURE_GHOST_ID_5 then
set howmuch=price[YUKIGAKURE_GHOST]
elseif id==BATTLE_CLAW_ID_2 or id==BATTLE_CLAW_ID_3 or id==BATTLE_CLAW_ID_4 or id==BATTLE_CLAW_ID_5 then
set howmuch=price[BATTLE_CLAW]
endif
endif
set i=i+1
exitwhen i>art_number or howmuch!=0
endloop
if GetItemCharges(art)>1 and id!=KUNAI_ID and id!=SHURIKEN_ID and id!=FUMA_SHURIKEN_ID and id!=SENBON_ID and id!=KIBAKU_KUNAI_ID and id!=EIYU_NO_MIZU_ID then
set howmuch=howmuch*GetItemCharges(art)
endif
return howmuch
endfunction
function MusicStartPlay takes integer typemusic returns nothing
local integer random=1
local integer randomMax=34
local boolean log=false
if typemusic==1 then
call SetMusicVolume(127)
set random=GetRandomInt(1,3)
if random==1 then
call PlayMusic("Hound Dog - Rocks.mp3")
set musicTime=289
elseif random==2 then
call PlayMusic("Nobodyknows+ - Heroes Come Back.mp3")
set musicTime=274
elseif random==3 then
call PlayMusic("BORUTO -NARUTO THE MOVIE- OST (Yasuharu Takanashi)Yasuharu Takanashi - SHINOBI.mp3")
set musicTime=224
endif
elseif typemusic==2 then
if musicBlockedNumber==randomMax then
loop
set musicCompositionBlock[random]=false
set random=random+1
exitwhen random>randomMax
endloop
endif
loop
set random=GetRandomInt(1,randomMax)
if not musicCompositionBlock[random]then
set log=true
endif
exitwhen log
endloop
set musicBlockedNumber=musicBlockedNumber+1
set musicCompositionBlock[random]=true
if random==1 then
call PlayMusic("Dev Parade - Bacchiko.mp3")
set musicTime=89
elseif random==2 then
call PlayMusic("Flow - GO.mp3")
set musicTime=235
elseif random==3 then
call PlayMusic("Flow - Sign.mp3")
set musicTime=231
elseif random==4 then
call PlayMusic("Kyuubi released Uchiha Madara`s theme IMPROVED.mp3")
set musicTime=97
elseif random==5 then
call PlayMusic("Naruto Shippuuden - Theme.mp3")
set musicTime=180
elseif random==6 then
call PlayMusic("Nogizaka46 - Crimson Lotus.mp3")
set musicTime=232
elseif random==7 then
call PlayMusic("OP - 2.mp3")
set musicTime=242
elseif random==8 then
call PlayMusic("OST Naruto Shippuuden - naruto fight.mp3")
set musicTime=93
elseif random==9 then
call PlayMusic("Strong And Strike.mp3")
set musicTime=124
elseif random==10 then
call PlayMusic("Takanashi Yasuharu - Shippuuden.mp3")
set musicTime=123
elseif random==11 then
call PlayMusic("Toshiro Masuda - A Crisis After Another.mp3")
set musicTime=100
elseif random==12 then
call PlayMusic("Toshiro Masuda - Need To Be Strong.mp3")
set musicTime=182
elseif random==13 then
call PlayMusic("Yasuharu Takanashi - Crushing.mp3")
set musicTime=198
elseif random==14 then
call PlayMusic("Yasuharu Takanashi - Hard Battle.mp3")
set musicTime=274
elseif random==15 then
call PlayMusic("Chikayo Fukuda - Naruto VS Sasuke Part 2 Theme.mp3")
set musicTime=273
elseif random==16 then
call PlayMusic("Chikayo Fukuda - The Burning Leaf.mp3")
set musicTime=125
elseif random==17 then
call PlayMusic("Chikayo Fukuda - With the Shinobi World at Stake.mp3")
set musicTime=165
elseif random==18 then
call PlayMusic("HOME MADE KAZOKU - Nagareboshi Shooting Star.mp3")
set musicTime=89
elseif random==19 then
call PlayMusic("BORUTO OST (Yasuharu Takanashi)Yasuharu Takanashi - Clash.mp3")
set musicTime=68
elseif random==20 then
call PlayMusic("BORUTO OST (Yasuharu Takanashi)yaiba - Spin and Burst.mp3")
set musicTime=171
elseif random==21 then
call PlayMusic("Home made kazoku - Freedom (OST Naruto Shippuuden ending 17).mp3")
set musicTime=234
elseif random==22 then
call PlayMusic("Raiko - Alive (OST Naruto ending 4).mp3")
set musicTime=285
elseif random==23 then
call PlayMusic("Yasuharu Takanashi - Flying Light (OST Naruto Shippuuden).mp3")
set musicTime=161
elseif random==24 then
call PlayMusic("BORUTO - Yasuharu Takanashi - Technology.mp3")
set musicTime=38
elseif random==25 then
call PlayMusic("NARUTO ORIGINAL SOUNDTRACK 2 - Orochimaru no Theme.mp3")
set musicTime=133
elseif random==26 then
call PlayMusic("Naruto OST - Obito and Rin.mp3")
set musicTime=167
elseif random==27 then
call PlayMusic("Naruto Shippuden OST 2  - Midaregami.mp3")
set musicTime=138
elseif random==28 then
call PlayMusic("Naruto Shippuuden OST 2  - Kisame.mp3")
set musicTime=158
elseif random==29 then
call PlayMusic("OST Naruto Shippuden - Akatsuki theme 4.mp3")
set musicTime=149
elseif random==30 then
call PlayMusic("OST Naruto shippuuden - Music 15.mp3")
set musicTime=195
elseif random==31 then
call PlayMusic("Toshiro Masuda - Heavy Violence.mp3")
set musicTime=192
elseif random==32 then
call PlayMusic("Takanashi Yasuharu - The Power of Sasuke Uchiha.mp3")
set musicTime=196
elseif random==33 then
call PlayMusic("Yasuharu Takanashi - Kaze to Honoo no Rondo.mp3")
set musicTime=134
elseif random==34 then
call PlayMusic("Yasuharu Takanashi - Shukusei no Megami.mp3")
set musicTime=104
endif
endif
endfunction
function ClickDestroyHeroFilter takes integer hero,integer id returns nothing
if hero==heroes_pick[Asuma]or hero==heroes_pick[Danzo]or hero==heroes_pick[Gaara]or hero==heroes_pick[Chiyo]then
call DestroyEffect(PickFilterEff_1[id])
elseif hero==heroes_pick[Gai]or hero==heroes_pick[Ei]or hero==heroes_pick[Hashirama]or hero==heroes_pick[Sasori]then
call DestroyEffect(PickFilterEff_2[id])
elseif hero==heroes_pick[Jugo]or hero==heroes_pick[Han]or hero==heroes_pick[Nagato]or hero==heroes_pick[Shikamaru]then
call DestroyEffect(PickFilterEff_3[id])
elseif hero==heroes_pick[Sasuke]or hero==heroes_pick[Orochimaru]or hero==heroes_pick[Onoki]or hero==heroes_pick[Zetsu]then
call DestroyEffect(PickFilterEff_4[id])
elseif hero==heroes_pick[Zabuza]or hero==heroes_pick[Suigetsu]or hero==heroes_pick[Sai]then
call DestroyEffect(PickFilterEff_5[id])
elseif hero==heroes_pick[Haku]or hero==heroes_pick[Sakura]then
call DestroyEffect(PickFilterEff_6[id])
elseif hero==heroes_pick[Minato]or hero==heroes_pick[Tsunade]then
call DestroyEffect(PickFilterEff_7[id])
elseif hero==heroes_pick[Mu]or hero==heroes_pick[Yamato]then
call DestroyEffect(PickFilterEff_8[id])
elseif hero==heroes_pick[Neji]then
call DestroyEffect(PickFilterEff_9[id])
elseif hero==heroes_pick[Tobirama]then
call DestroyEffect(PickFilterEff_10[id])
elseif hero==heroes_pick[Hanzo]then
call DestroyEffect(PickFilterEff_11[id])
elseif hero==heroes_pick[Kabuto]then
call DestroyEffect(PickFilterEff_12[id])
elseif hero==heroes_pick[Obito]then
call DestroyEffect(PickFilterEff_13[id])
elseif hero==heroes_pick[Itachi]then
call DestroyEffect(PickFilterEff_14[id])
elseif hero==heroes_pick[Mei]then
call DestroyEffect(PickFilterEff_15[id])
elseif hero==heroes_pick[Naruto]then
call DestroyEffect(PickFilterEff_16[id])
elseif hero==heroes_pick[Jiraya]then
call DestroyEffect(PickFilterEff_17[id])
elseif hero==heroes_pick[Kakashi]then
call DestroyEffect(PickFilterEff_18[id])
elseif hero==heroes_pick[Madara]then
call DestroyEffect(PickFilterEff_19[id])
elseif hero==heroes_pick[Darui]then
call DestroyEffect(PickFilterEff_20[id])
elseif hero==heroes_pick[Deidara]then
call DestroyEffect(PickFilterEff_21[id])
elseif hero==heroes_pick[Gengetsu]then
call DestroyEffect(PickFilterEff_22[id])
elseif hero==heroes_pick[Hidan]then
call DestroyEffect(PickFilterEff_23[id])
endif
endfunction
function cj_anonym__1 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real xold=LoadReal(Hash,h,0)
local real yold=LoadReal(Hash,h,1)
local integer id=LoadInteger(Hash,h,2)
local player p=LoadPlayerHandle(Hash,h,3)
local real xnew=GetWidgetX(udg_Hero[id])
local real ynew=GetWidgetY(udg_Hero[id])
local real curDistance=SquareRoot((xold-xnew)*(xold-xnew)+(yold-ynew)*(yold-ynew))
if not udg_GameEnd then
if not IsUnitIllusion(udg_Hero[id])and GetWidgetLife(udg_Hero[id])>.405 and not IsUnitPaused(udg_Hero[id])then
if curDistance<=900.then
set rankMarathoner[id]=rankMarathoner[id]+curDistance
endif
call SaveReal(Hash,h,0,xnew)
call SaveReal(Hash,h,1,ynew)
endif
else
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set t=null
endfunction
function RankSystemMarathoner takes player p returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer id=GetPlayerId(p)
local real period=1.
call SaveReal(Hash,h,0,GetWidgetX(udg_Hero[id]))
call SaveReal(Hash,h,1,GetWidgetY(udg_Hero[id]))
call SaveInteger(Hash,h,2,id)
call SaveAgentHandle(Hash,h,3,p)
call TimerStart(t,period,true,function cj_anonym__1)
set t=null
endfunction
function HeroStartInitSpell takes nothing returns nothing
local integer i=0
local integer idu
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set idu=GetUnitTypeId(udg_Hero[i])
if idu==heroes_rawcode[Asuma]then
call ExecuteFunc("Asuma_Init")
elseif idu==heroes_rawcode[Chiyo]then
call ExecuteFunc("Chiyo_Init")
elseif idu==heroes_rawcode[Danzo]then
call ExecuteFunc("Danzo_Init")
elseif idu==heroes_rawcode[Darui]then
call ExecuteFunc("Darui_Init")
elseif idu==heroes_rawcode[Deidara]then
call ExecuteFunc("Deidara_Init")
elseif idu==heroes_rawcode[Ei]then
call ExecuteFunc("Ei_Init")
elseif idu==heroes_rawcode[Gaara]then
call ExecuteFunc("Gaara_Init")
elseif idu==heroes_rawcode[Gai]then
call ExecuteFunc("Gai_Init")
elseif idu==heroes_rawcode[Gengetsu]then
call ExecuteFunc("Gengetsu_Init")
elseif idu==heroes_rawcode[Haku]then
call ExecuteFunc("Haku_Init")
elseif idu==heroes_rawcode[Han]then
call ExecuteFunc("Han_Init")
elseif idu==heroes_rawcode[Hanzo]then
call ExecuteFunc("Hanzo_Init")
elseif idu==heroes_rawcode[Hashirama]then
call ExecuteFunc("Hashirama_Init")
elseif idu==heroes_rawcode[Hidan]then
call ExecuteFunc("Hidan_Init")
elseif idu==heroes_rawcode[Itachi]then
call ExecuteFunc("Itachi_Init")
elseif idu==heroes_rawcode[Jiraya]then
call ExecuteFunc("Jiraiya_Init")
elseif idu==heroes_rawcode[Jugo]then
call ExecuteFunc("Jugo_Init")
elseif idu==heroes_rawcode[Kabuto]then
call ExecuteFunc("Kabuto_Init")
elseif idu==heroes_rawcode[Kakashi]then
call ExecuteFunc("Kakashi_Init")
elseif idu==heroes_rawcode[Madara]then
call ExecuteFunc("Madara_Init")
elseif idu==heroes_rawcode[Mei]then
call ExecuteFunc("Mei_Init")
elseif idu==heroes_rawcode[Minato]then
call ExecuteFunc("Minato_Init")
elseif idu==heroes_rawcode[Mu]then
call ExecuteFunc("Mu_Init")
elseif idu==heroes_rawcode[Nagato]then
call ExecuteFunc("Nagato_Init")
elseif idu==heroes_rawcode[Naruto]then
call ExecuteFunc("Naruto_Init")
elseif idu==heroes_rawcode[Neji]then
call ExecuteFunc("Neji_Init")
elseif idu==heroes_rawcode[Obito]then
call ExecuteFunc("Obito_Init")
elseif idu==heroes_rawcode[Onoki]then
call ExecuteFunc("Onoki_Init")
elseif idu==heroes_rawcode[Orochimaru]then
call ExecuteFunc("Orochimaru_Init")
elseif idu==heroes_rawcode[Sai]then
call ExecuteFunc("Sai_Init")
elseif idu==heroes_rawcode[Sakura]then
call ExecuteFunc("Sakura_Init")
elseif idu==heroes_rawcode[Sasori]then
call ExecuteFunc("Sasori_Init")
elseif idu==heroes_rawcode[Sasuke]then
call ExecuteFunc("Sasuke_Init")
elseif idu==heroes_rawcode[Shikamaru]then
call ExecuteFunc("Shikamaru_Init")
elseif idu==heroes_rawcode[Suigetsu]then
call ExecuteFunc("Suigetsu_Init")
elseif idu==heroes_rawcode[Tobirama]then
call ExecuteFunc("Tobirama_Init")
elseif idu==heroes_rawcode[Tsunade]then
call ExecuteFunc("Tsunade_Init")
elseif idu==heroes_rawcode[Yamato]then
call ExecuteFunc("Yamato_Init")
elseif idu==heroes_rawcode[Zabuza]then
call ExecuteFunc("Zabuza_Init")
elseif idu==heroes_rawcode[Zetsu]then
call ExecuteFunc("Zetsu_Init")
endif
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function HeroBlockAnimation takes unit u returns nothing
local integer idu=GetUnitTypeId(u)
if idu==heroes_rawcode[Minato]then
call AddUnitAnimationProperties(u,"Stand alternate",false)
call AddUnitAnimationProperties(u,"Stand Ready alternate",false)
call AddUnitAnimationProperties(u,"Walk alternate",false)
call AddUnitAnimationProperties(u,"death alternate",false)
call AddUnitAnimationProperties(u,"Attack one alternate",false)
call AddUnitAnimationProperties(u,"Attack two alternate",false)
call AddUnitAnimationProperties(u,"Spell channel alternate",false)
call AddUnitAnimationProperties(u,"Spell throw alternate",false)
call AddUnitAnimationProperties(u,"Spell one alternate",false)
call AddUnitAnimationProperties(u,"Spell two alternate",false)
call AddUnitAnimationProperties(u,"Spell three alternate",false)
call AddUnitAnimationProperties(u,"Spell four alternate",false)
call AddUnitAnimationProperties(u,"Spell five alternate",false)
call AddUnitAnimationProperties(u,"Spell six alternate",false)
call AddUnitAnimationProperties(u,"Stand",true)
call AddUnitAnimationProperties(u,"Stand Ready",true)
call AddUnitAnimationProperties(u,"Walk",true)
call AddUnitAnimationProperties(u,"death",true)
call AddUnitAnimationProperties(u,"Attack one",true)
call AddUnitAnimationProperties(u,"Attack two",true)
call AddUnitAnimationProperties(u,"Spell channel",true)
call AddUnitAnimationProperties(u,"Spell throw",true)
call AddUnitAnimationProperties(u,"Spell slam",true)
call AddUnitAnimationProperties(u,"Spell one",true)
call AddUnitAnimationProperties(u,"Spell two",true)
call AddUnitAnimationProperties(u,"Spell three",true)
call AddUnitAnimationProperties(u,"Spell four",true)
call AddUnitAnimationProperties(u,"Spell five",true)
call AddUnitAnimationProperties(u,"Spell six",true)
endif
endfunction
function HeroMoveOnMainAreaAfterPick takes player p,integer idplayer returns nothing
local real x=GetWidgetX(udg_Hero[idplayer])
local real y=GetWidgetY(udg_Hero[idplayer])
local string s=GetPlayerNameColored(p)
local real strLength=(StringLength(s)*10.)/4.
call HeroBlockAnimation(udg_Hero[idplayer])
call PauseUnit(udg_Hero[idplayer],true)
call SetUnitInvulnerable(udg_Hero[idplayer],true)
call TriggerRegisterUnitEvent(gg_trg_RankSystemGetDamage,udg_Hero[idplayer],EVENT_UNIT_DAMAGED)
if GetLocalPlayer()==p then
call MultiboardDisplay(udg_LMB[idplayer],false)
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamMain,true,0.)
call SetCameraBounds(GetRectMinX(gg_rct_MainRect),GetRectMinY(gg_rct_MainRect),GetRectMinX(gg_rct_MainRect),GetRectMaxY(gg_rct_MainRect),GetRectMaxX(gg_rct_MainRect),GetRectMaxY(gg_rct_MainRect),GetRectMaxX(gg_rct_MainRect),GetRectMinY(gg_rct_MainRect))
endif
set picksNumberCur=picksNumberCur+1
set playerNameTextOffsetX[idplayer]=strLength
set playerNameText[idplayer]=CreateTextTag()
call SetTextTagText(playerNameText[idplayer],s,countDownTextSize/4.44)
call SetTextTagPos(playerNameText[idplayer],x-playerNameTextOffsetX[idplayer],y,heightGameText*10.)
call SetTextTagVisibility(playerNameText[idplayer],false)
if IsPlayerAlly(p,Player(5))then
call ForceAddPlayer(playerTextForceOne,p)
if IsPlayerInForce(GetLocalPlayer(),playerTextForceOne)then
call SetTextTagVisibility(playerNameText[idplayer],true)
endif
elseif IsPlayerAlly(p,Player(11))then
call ForceAddPlayer(playerTextForceTwo,p)
if IsPlayerInForce(GetLocalPlayer(),playerTextForceTwo)then
call SetTextTagVisibility(playerNameText[idplayer],true)
endif
endif
endfunction
function IsSpellNeedRange takes real x,real y,real x1,real y1,real range returns boolean
local boolean log=false
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<range then
set log=true
endif
return log
endfunction
function CheckHeroClass takes integer numberHero returns integer
local integer i=0
if numberHero<=23 then
set i=1
elseif numberHero>=24 then
set i=2
elseif numberHero>=29 then
set i=3
elseif numberHero>=37 then
set i=4
endif
return i
endfunction
function IsHeroClassKiller takes unit u returns boolean
local integer i=1
local integer number=0
local integer id=GetUnitTypeId(u)
local boolean log=false
loop
if GetUnitTypeId(u)==heroes_rawcode[hc_list[i]]then
set number=i
endif
set i=i+1
exitwhen i>hero_number or number!=0
endloop
if number<=23 then
set log=true
endif
return log
endfunction
function IsHeroClassFighter takes unit u returns boolean
local integer i=1
local integer number=0
local integer id=GetUnitTypeId(u)
local boolean log=false
loop
if GetUnitTypeId(u)==heroes_rawcode[hc_list[i]]then
set number=i
endif
set i=i+1
exitwhen i>hero_number or number!=0
endloop
if number>=24 and number<=28 then
set log=true
endif
return log
endfunction
function IsHeroClassSupport takes unit u returns boolean
local integer i=1
local integer number=0
local integer id=GetUnitTypeId(u)
local boolean log=false
loop
if GetUnitTypeId(u)==heroes_rawcode[hc_list[i]]then
set number=i
endif
set i=i+1
exitwhen i>hero_number or number!=0
endloop
if number>=29 and number<=36 then
set log=true
endif
return log
endfunction
function IsHeroClassSpecialist takes unit u returns boolean
local integer i=1
local integer number=0
local integer id=GetUnitTypeId(u)
local boolean log=false
loop
if GetUnitTypeId(u)==heroes_rawcode[hc_list[i]]then
set number=i
endif
set i=i+1
exitwhen i>hero_number or number!=0
endloop
if number>=37 then
set log=true
endif
return log
endfunction
function TutorialGetHeroClassDescription takes unit u returns string
local string messageClass
if IsHeroClassKiller(u)then
set messageClass="|cFFFFCC00убийца|r. Такие шиноби причинают боль и страдания противнику!\nУ них высокий урон, но низкая живучесть."
elseif IsHeroClassFighter(u)then
set messageClass="|cFFFFCC00боец|r. Такие шиноби заходят в бой первыми и выходят последним!\nУ них высокая живучесть, но низкий урон."
elseif IsHeroClassSupport(u)then
set messageClass="|cFFFFCC00поддержка|r. Такие шиноби оказывают помощь своей команде!\nУ них уникальные техники, дающие преимущество в бою, но низкая живучесть и урон."
elseif IsHeroClassSpecialist(u)then
set messageClass="|cFFFFCC00специалист|r. Такие шиноби владеют нетрадиционными приёмами ведения войны!\nУ них разносторонние техники, но высокая сложность управления."
endif
return messageClass
endfunction
function NagatoPainNumberChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Nagato_p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFFABA8FF"+I2S(Nagato_PainNumber)+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function GetPainName takes unit u returns string
local integer id=GetUnitTypeId(u)
local string painName=null
if id==Nagato_PAIN_ID_1 then
set painName="Чикушодо"
elseif id==Nagato_PAIN_ID_2 then
set painName="Гакидо"
elseif id==Nagato_PAIN_ID_3 then
set painName="Нингендо"
elseif id==Nagato_PAIN_ID_4 then
set painName="Шурадо"
elseif id==Nagato_PAIN_ID_5 then
set painName="Джигокудо"
elseif id==Nagato_PAIN_ID_6 then
set painName="Тендо"
endif
return painName
endfunction
function KnockBackUnitCreateEffect takes real x,real y,real angle,integer ef returns nothing
if ef==1 then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x,y,GetRandomReal(.8,1.25),"NewDirtEXNofire.mdx",GetRandomReal(0.,360.))
else
call CreateDummyEffect(x,y,GetRandomReal(.8,1.25),"IceSparks.mdx",GetRandomReal(0.,360.))
endif
elseif ef==2 then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl",x,y))
else
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",x,y))
endif
elseif ef==3 then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x,y))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
endif
elseif ef==4 then
set bj_lastCreatedUnit=CreateUnit(Player(14),0x6E303030,x,y,angle+90.)
call SetUnitScale(bj_lastCreatedUnit,GetRandomReal(1.25,1.40),GetRandomReal(1.25,1.40),GetRandomReal(1.25,1.40))
call SetUnitTimeScale(bj_lastCreatedUnit,GetRandomReal(.75,1.25))
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.01)
call DestroyEffect(AddSpecialEffect("Blue Shockwave 2.mdx",x,y))
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x,y,GetRandomReal(.8,1.25),"NewDirtEXNofire.mdx",GetRandomReal(0.,360.))
else
call CreateDummyEffect(x,y,GetRandomReal(.8,1.25),"IceSparks.mdx",GetRandomReal(0.,360.))
endif
elseif ef==5 then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
elseif ef==6 then
call CreateDummyEffect(x,y,GetRandomReal(.8,1.25),"IceSparks.mdx",GetRandomReal(0.,360.))
elseif ef==7 then
set bj_lastCreatedUnit=CreateUnit(Player(14),0x6E303030,x,y,angle+90.)
call SetUnitScale(bj_lastCreatedUnit,GetRandomReal(.9,1.25),GetRandomReal(.9,1.25),GetRandomReal(.9,1.25))
call SetUnitTimeScale(bj_lastCreatedUnit,GetRandomReal(.75,1.25))
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.01)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",x,y))
elseif ef==8 then
set bj_lastCreatedUnit=CreateUnit(Player(14),0x6E303030,x,y,angle+90.)
call SetUnitScale(bj_lastCreatedUnit,GetRandomReal(1.15,1.35),GetRandomReal(1.15,1.35),GetRandomReal(1.15,1.35))
call SetUnitTimeScale(bj_lastCreatedUnit,GetRandomReal(.75,1.25))
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.01)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",x,y))
elseif ef==9 then
set bj_lastCreatedUnit=CreateUnit(Player(14),0x6E303030,x,y,angle+90.)
call SetUnitScale(bj_lastCreatedUnit,GetRandomReal(1.6,1.9),GetRandomReal(1.6,1.9),GetRandomReal(1.6,1.9))
call SetUnitTimeScale(bj_lastCreatedUnit,GetRandomReal(.75,1.25))
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.01)
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x,y,GetRandomReal(.8,1.25),"NewDirtEXNofire.mdx",GetRandomReal(0.,360.))
else
call CreateDummyEffect(x,y,GetRandomReal(.8,1.25),"IceSparks.mdx",GetRandomReal(0.,360.))
endif
elseif ef==10 then
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl",x,y))
endif
endfunction
function IsUnitHaveKnockBackAnimation takes unit u returns boolean
local boolean log=false
if GetUnitTypeId(u)==0x6830334B then
set log=true
endif
return log
endfunction
function Kill_Destructables takes nothing returns nothing
local destructable des=GetEnumDestructable()
local integer id=GetDestructableTypeId(des)
if GetWidgetLife(des)>.405 and id!=0x42303455 and id!=0x59546663 and id!=0x59543438 and id!=0x59543235 and id!=0x59547063 then
call DestroyEffect(LoadEffectHandle(Hash,GetHandleId(des),0))
if id==0x42303232 then
call RemoveUnit(LoadUnitHandle(HH,GetHandleId(des),0))
call FlushChildHashtable(HH,GetHandleId(des))
endif
call FlushChildHashtable(Hash,GetHandleId(des))
call KillDestructable(des)
endif
set des=null
endfunction
function KillDestructablesStart takes real x,real y,real range returns nothing
local rect r=Rect(x-range,y-range,x+range,y+range)
call EnumDestructablesInRect(r,null,function Kill_Destructables)
call RemoveRect(r)
set r=null
endfunction
function KnockBackUnit_Timer takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit knockbacked=LoadUnitHandle(Hash,h,0)
local integer amount=LoadInteger(Hash,h,1)
local integer amountAnimation=LoadInteger(Hash,h,2)
local real portion=LoadReal(Hash,h,3)
local real angle=LoadReal(Hash,h,4)
local integer ef=LoadInteger(Hash,h,5)
local integer efNumber=LoadInteger(Hash,h,7)
local real x=GetWidgetX(knockbacked)
local real y=GetWidgetY(knockbacked)
local real x1=x+portion*Cos(angle*bj_DEGTORAD)
local real y1=y+portion*Sin(angle*bj_DEGTORAD)
if amount>0 then
if not IsTerrainPathable(x1,y1,PATHING_TYPE_WALKABILITY)and GetTerrainCliffLevel(x1,y1)<=GetTerrainCliffLevel(x,y)then
call KillDestructablesStart(x1,y1,100.)
call SetUnitPosition(knockbacked,x1,y1)
else
call SetUnitPosition(knockbacked,x,y)
endif
if amount==amountAnimation and GetWidgetLife(knockbacked)>.405 and IsUnitHaveKnockBackAnimation(knockbacked)then
call SetUnitAnimation(knockbacked,"Stand Alternate 2")
endif
if ef>0 then
if efNumber<2 then
call SaveInteger(Hash,h,7,efNumber+1)
else
if ef==7 then
call SetUnitFacing(knockbacked,GetUnitFacing(knockbacked)+60.)
endif
if SpecialEffectsShow then
call KnockBackUnitCreateEffect(x,y,angle,ef)
endif
call SaveInteger(Hash,h,7,0)
endif
endif
call SaveInteger(Hash,h,1,amount-1)
else
if not LoadBoolean(Hash,h,5)then
call SetUnitPathing(knockbacked,true)
if GetWidgetLife(knockbacked)>.405 and IsUnitHaveKnockBackAnimation(knockbacked)then
call AddUnitAnimationProperties(knockbacked,"Stand",true)
call AddUnitAnimationProperties(knockbacked,"Stand Alternate 1",false)
call AddUnitAnimationProperties(knockbacked,"Stand Alternate 2",false)
endif
else
call RemoveUnit(knockbacked)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set knockbacked=null
set t=null
endfunction
function KnockBackUnitEf takes unit knockbacked,real distance,real time,real degrees,real period,integer ef,boolean b returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer amount=R2I(time/period)
if IsUnitHaveKnockBackAnimation(knockbacked)then
call AddUnitAnimationProperties(knockbacked,"Stand Alternate 1",true)
call AddUnitAnimationProperties(knockbacked,"Stand Alternate 2",true)
call AddUnitAnimationProperties(knockbacked,"Stand",false)
call SetUnitAnimation(knockbacked,"Stand Alternate 1")
endif
call SetUnitPathing(knockbacked,false)
call SaveAgentHandle(Hash,h,0,knockbacked)
call SaveInteger(Hash,h,1,amount)
call SaveInteger(Hash,h,2,amount/3)
call SaveReal(Hash,h,3,distance/amount)
call SaveReal(Hash,h,4,degrees)
call SaveInteger(Hash,h,5,ef)
call SaveBoolean(Hash,h,6,b)
call SaveInteger(Hash,h,7,0)
call TimerStart(t,period,true,function KnockBackUnit_Timer)
set t=null
endfunction
function GetHeal takes real heal,unit c,unit u returns real
local integer id=GetPlayerId(GetOwningPlayer(c))
set rankHealer[id]=rankHealer[id]+heal
return heal
endfunction
function GetNinjutsuOnlyDecreaseDamage takes real dmg,unit u returns real
local integer id=GetPlayerId(GetOwningPlayer(u))
if ninjutsublockNumber[id]>0.then
if dmg>=ninjutsublockNumber[id]then
set dmg=dmg-ninjutsublockNumber[id]
set ninjutsublockNumber[id]=0.
else
set ninjutsublockNumber[id]=ninjutsublockNumber[id]-dmg
set dmg=0.
endif
endif
if GetUnitAbilityLevel(u,0x42303043)>0 and Ei_RaitonDefense>0 then
if Ei_RaitonDefense>=dmg then
set Ei_RaitonDefense=Ei_RaitonDefense-R2I(dmg)
set dmg=0.
else
set dmg=dmg-I2R(Ei_RaitonDefense)
set Ei_RaitonDefense=0
endif
call LeaderboardSetItemValue(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(2)),Ei_RaitonDefense)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\FarseerMissile\\FarseerMissile.mdl",u,"chest"))
endif
if dmg>0.and GetUnitAbilityLevel(u,0x41313336)>0 then
set dmg=dmg*.6
endif
return dmg
endfunction
function MadaraRikudoRinboGetVisionStart takes player p,boolean log returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Madara_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==Madara_RINBO_ID then
if log then
if GetLocalPlayer()==p then
call SetUnitVertexColor(tg,255,255,255,255)
endif
else
if GetLocalPlayer()==p then
call SetUnitVertexColor(tg,255,255,255,0)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function MadaraRikudoRinboGetVisionCheck takes player p,boolean log returns nothing
if Madara_c!=null then
call MadaraRikudoRinboGetVisionStart(p,log)
endif
endfunction
function cj_anonym__2 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer id=LoadInteger(Hash,h,0)
set madaraGunbaiCD[id]=false
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function MadaraGunbaiDamage takes integer id,real dmg,unit c,unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetWidgetX(c)
local real y1=GetWidgetY(c)
local real cooldown=20.
set madaraGunbaiCD[id]=true
if GetUnitTypeId(u)==heroes_rawcode[Madara]or GetUnitTypeId(u)==heroes_rikudo_rawcode[Madara]then
call Sound("ITEM Madara Gunbai.mp3")
call SetUnitAnimation(u,"Spell three")
else
call SetUnitAnimation(u,"Attack")
endif
call UnitDamageTarget(u,c,GetNinjutsuOnlyDecreaseDamage(dmg,c),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call DestroyEffect(AddSpecialEffect("Almagest.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Holy_Fire_Slam2.mdx",x,y))
call DestroyEffect(AddSpecialEffect("IceNova.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Slam.mdx",x,y))
call KnockBackUnitEf(c,600.,.6,57.295*Atan2(y1-y,x1-x),.05,3,false)
call SaveInteger(Hash,h,0,id)
call TimerStart(t,cooldown,false,function cj_anonym__2)
set t=null
endfunction
function IsUnitCanUseMadaraGunbai takes unit c,unit u,integer id,string s returns boolean
local boolean log=false
if GetUnitAbilityLevel(u,0x41304433)>0 and not madaraGunbaiCD[id]and s==NinT then
set log=true
endif
return log
endfunction
function NinjutsuVamp takes real dmg,unit c,unit u returns nothing
local real restore=0.
if GetInventoryIndexOfItemTypeBJ(c,KIHOU_BLASTER_ID)>0 and dmg>0.then
if IsUnitHero(u)then
set restore=.15
else
set restore=.05
endif
call SetWidgetLife(c,GetWidgetLife(c)+dmg*restore)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl",c,"chest"))
endif
if GetUnitAbilityLevel(u,Nagato_PAIN_2_KYUIN_SPELL)>0 then
set restore=1.1
call SetWidgetLife(c,GetWidgetLife(c)+dmg*restore)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl",c,"chest"))
endif
endfunction
function NinjutsuDecreaseConstant takes real dmg,unit c,unit u,integer id returns real
local real restore=0.
if ninjutsublockNumber[id]>0.then
if dmg>=ninjutsublockNumber[id]then
set dmg=dmg-ninjutsublockNumber[id]
set ninjutsublockNumber[id]=0.
else
set ninjutsublockNumber[id]=ninjutsublockNumber[id]-dmg
set dmg=0.
endif
endif
if GetUnitAbilityLevel(u,0x42303043)>0 and Ei_RaitonDefense>0 then
if Ei_RaitonDefense>=dmg then
set Ei_RaitonDefense=Ei_RaitonDefense-R2I(dmg)
set dmg=0.
else
set dmg=dmg-I2R(Ei_RaitonDefense)
set Ei_RaitonDefense=0
endif
call LeaderboardSetItemValue(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(2)),Ei_RaitonDefense)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\FarseerMissile\\FarseerMissile.mdl",u,"chest"))
endif
if dmg>0.and GetUnitAbilityLevel(u,0x41313336)>0 then
set dmg=dmg*.6
endif
return dmg
endfunction
function NinjutsuConstantIncrease takes unit c,unit u returns real
local real ninjutsuConstant=1.
if GetUnitAbilityLevel(c,0x41313343)>0 then
set ninjutsuConstant=ninjutsuConstant+.075*GetUnitAbilityLevel(c,0x41313343)
endif
if GetUnitAbilityLevel(c,0x4130394D)>0 then
set ninjutsuConstant=ninjutsuConstant+.15
endif
if GetUnitAbilityLevel(u,0x41305432)>0 then
set ninjutsuConstant=ninjutsuConstant+.6
endif
if GetUnitAbilityLevel(u,0x41303652)>0 then
set ninjutsuConstant=ninjutsuConstant+.3
endif
return ninjutsuConstant
endfunction
function GetNinjutsuDamage takes real dmg,unit c,unit u,string s returns real
local real ninjutsuConstant=NinjutsuConstantIncrease(c,u)
local integer id=GetPlayerId(GetOwningPlayer(u))
set dmg=dmg*ninjutsuConstant
if IsUnitCanUseMadaraGunbai(c,u,id,s)then
call MadaraGunbaiDamage(id,dmg,c,u)
set dmg=0.
else
if GetUnitTypeId(u)==heroes_rikudo_rawcode[Madara]and not Madara_bGudodamaCD then
call ExecuteFunc("Madara_GudodamaSphereCast")
set dmg=0.
elseif GetUnitAbilityLevel(u,Naruto_GUDODAMA_PINTLE_SPELL)>0 and GetRandomInt(1,Naruto_IntGudodamaDefenseChance)==1 then
call DestroyEffect(AddSpecialEffectTarget("Shadow_Curse.mdx",u,"chest"))
set dmg=0.
endif
if dmg!=0.then
set dmg=NinjutsuDecreaseConstant(dmg,c,u,id)
call NinjutsuVamp(dmg,c,u)
endif
endif
return dmg
endfunction
function GetTaijutsuDamage takes real dmg,unit c,unit u returns real
local real ending=dmg
if GetInventoryIndexOfItemTypeBJ(c,TRAINING_SUIT)>0 then
set ending=ending+.2
endif
if GetUnitAbilityLevel(c,0x41313343)>0 then
set ending=ending+.05*GetUnitAbilityLevel(c,0x41313343)
endif
if GetUnitAbilityLevel(u,0x4230304B)>0 and Gaara_SunaNoYoroiCur>0 then
if Gaara_SunaNoYoroiCur>=ending then
set Gaara_SunaNoYoroiCur=Gaara_SunaNoYoroiCur-R2I(ending)
set ending=0.
else
set ending=ending-I2R(Gaara_SunaNoYoroiCur)
set Gaara_SunaNoYoroiCur=0
endif
call LeaderboardSetItemValue(Gaara_lb,LeaderboardGetPlayerIndex(Gaara_lb,Player(0)),Gaara_SunaNoYoroiCur)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl",u,"chest"))
endif
return ending
endfunction
function FireDestructablesDamageArea takes destructable des,real dmg,group gr returns nothing
local unit tg
call GroupEnumUnitsInRange(gr,GetWidgetX(des),GetWidgetY(des),100.,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
if GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
call UnitDamageTarget(NeituralUnitDestructable,tg,GetNinjutsuDamage(dmg,NeituralUnitDestructable,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(gr,tg)
endloop
set tg=null
endfunction
function cj_anonym__3 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local destructable des=LoadDestructableHandle(Hash,h,0)
local real period=LoadReal(Hash,h,2)
local real time=LoadReal(Hash,h,3)
local real dmg=LoadReal(Hash,h,4)
if time>0.and GetDestructableLife(des)>0.then
call FireDestructablesDamageArea(des,dmg,LoadGroupHandle(Hash,h,5))
call SetDestructableLife(des,GetDestructableLife(des)-dmg)
call SaveReal(Hash,h,3,time-period)
else
if GetDestructableLife(des)<=0.and GetDestructableTypeId(des)==0x42304248 then
call RemoveDestructable(des)
endif
call DestroyEffect(LoadEffectHandle(Hash,h,1))
call DestroyGroup(LoadGroupHandle(Hash,h,5))
call FlushChildHashtable(Hash,GetHandleId(des))
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set des=null
set t=null
endfunction
function FireDestructablesSave takes destructable des returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.25
local real time=8.
local real dmg=25.01*period
call SaveBoolean(Hash,GetHandleId(des),0,true)
call SaveAgentHandle(Hash,h,0,des)
call SaveAgentHandle(Hash,h,1,AddSpecialEffect("Environment\\LargeBuildingFire\\LargeBuildingFire1.mdl",GetWidgetX(des),GetWidgetY(des)))
call SaveReal(Hash,h,2,period)
call SaveReal(Hash,h,3,time)
call SaveReal(Hash,h,4,dmg)
call SaveAgentHandle(Hash,h,5,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__3)
set t=null
endfunction
function FireDestructablesStart takes nothing returns nothing
local destructable des=GetEnumDestructable()
local integer id=GetDestructableTypeId(des)
if GetDestructableLife(des)>0.and not LoadBoolean(Hash,GetHandleId(des),0)then
if GetWidgetLife(des)>.405 and id!=0x42303455 and id!=0x59546663 and id!=0x59543438 and id!=0x59543235 then
call FireDestructablesSave(des)
endif
endif
set des=null
endfunction
function FireDestructablesEnum takes real x,real y,real range returns nothing
local rect r=Rect(x-range,y-range,x+range,y+range)
call EnumDestructablesInRect(r,null,function FireDestructablesStart)
call RemoveRect(r)
set r=null
endfunction
function AILineGiveOrderToMove takes unit u,rect r,integer id returns nothing
if IsUnitCreep(u)then
if not IsUnitHealer(u)and GetUnitAbilityLevel(u,ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL)==0 then
call SaveRectHandle(Hash,GetHandleId(u),0,r)
call IssuePointOrder(u,"attack",GetRectCenterX(r),GetRectCenterY(r))
endif
elseif IsUnitHero(u)then
if GetWidgetLife(u)/GetUnitState(u,UNIT_STATE_MAX_LIFE)>=aiEscapeHP and not ai_retreat_log[id]then
set ai_coord_rect[id]=r
call IssuePointOrder(u,"attack",GetRectCenterX(ai_coord_rect[id]),GetRectCenterY(ai_coord_rect[id]))
endif
endif
endfunction
function GetOutpostOwner takes rect r returns string
local string owner=null
if r==gg_rct_Alliance_Top_O1 then
set owner=AllianceOutpostOwner[2]
elseif r==gg_rct_Alliance_Top_O2 then
set owner=AllianceOutpostOwner[1]
elseif r==gg_rct_Alliance_Bot_O1 then
set owner=AllianceOutpostOwner[4]
elseif r==gg_rct_Alliance_Bot_O2 then
set owner=AllianceOutpostOwner[3]
elseif r==gg_rct_Akatsuki_Top_O1 then
set owner=AkatsukiOutpostOwner[2]
elseif r==gg_rct_Akatsuki_Top_O2 then
set owner=AkatsukiOutpostOwner[1]
elseif r==gg_rct_Akatsuki_Bot_O1 then
set owner=AkatsukiOutpostOwner[4]
elseif r==gg_rct_Akatsuki_Bot_O2 then
set owner=AkatsukiOutpostOwner[3]
endif
return owner
endfunction
function cj_anonym__5 takes nothing returns nothing
set aiAkatsukiGakureMove=false
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__4 takes nothing returns nothing
set aiAllianceGakureMove=false
call DestroyTimer(GetExpiredTimer())
endfunction
function AILineGetNeedRect takes unit u,rect recFinish returns rect
local rect recReturned=recFinish
local rect r=null
local string outpostOwner
if IsUnitCreep(u)then
if GetUnitAbilityLevel(u,ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL)==0 then
if recFinish==gg_rct_Creeps_Alliance_Top then
set r=gg_rct_Alliance_Top_O2
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(11))then
if outpostOwner=="akatsuki"then
if AllianceOutpostCurrent[1]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Konoha_Up_2 then
set r=gg_rct_Alliance_Top_O2
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(5))then
if outpostOwner=="alliance"then
if AllianceOutpostCurrent[1]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Konoha_Up_4 then
set r=gg_rct_Alliance_Top_O1
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(11))then
if outpostOwner=="akatsuki"then
if AllianceOutpostCurrent[2]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Up then
if IsUnitAlly(u,Player(5))then
set r=gg_rct_Alliance_Top_O1
set outpostOwner=GetOutpostOwner(r)
if outpostOwner=="alliance"then
if AllianceOutpostCurrent[2]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
elseif IsUnitAlly(u,Player(11))then
set r=gg_rct_Akatsuki_Top_O1
set outpostOwner=GetOutpostOwner(r)
if outpostOwner=="akatsuki"then
if AkatsukiOutpostCurrent[2]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Akatsuki_Up_5 then
set r=gg_rct_Akatsuki_Top_O1
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(5))then
if outpostOwner=="alliance"then
if AkatsukiOutpostCurrent[2]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Akatsuki_Up_2 then
set r=gg_rct_Akatsuki_Top_O2
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(11))then
if outpostOwner=="akatsuki"then
if AkatsukiOutpostCurrent[1]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Akatsuki_Top then
set r=gg_rct_Akatsuki_Top_O2
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(5))then
if outpostOwner=="alliance"then
if AkatsukiOutpostCurrent[1]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Alliance_Bot then
set r=gg_rct_Alliance_Bot_O2
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(11))then
if outpostOwner=="akatsuki"then
if AllianceOutpostCurrent[3]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Konoha_Down_2 then
set r=gg_rct_Alliance_Bot_O2
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(5))then
if outpostOwner=="alliance"then
if AllianceOutpostCurrent[3]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Konoha_Down_5 then
set r=gg_rct_Alliance_Bot_O1
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(11))then
if outpostOwner=="akatsuki"then
if AllianceOutpostCurrent[4]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Down then
if IsUnitAlly(u,Player(5))then
set r=gg_rct_Alliance_Bot_O1
set outpostOwner=GetOutpostOwner(r)
if outpostOwner=="alliance"then
if AllianceOutpostCurrent[4]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
elseif IsUnitAlly(u,Player(11))then
set r=gg_rct_Akatsuki_Bot_O1
set outpostOwner=GetOutpostOwner(r)
if outpostOwner=="akatsuki"then
if AkatsukiOutpostCurrent[4]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Akatsuki_Down_4 then
set r=gg_rct_Akatsuki_Bot_O1
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(5))then
if outpostOwner=="alliance"then
if AkatsukiOutpostCurrent[4]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Akatsuki_Down_2 then
set r=gg_rct_Akatsuki_Bot_O2
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(11))then
if outpostOwner=="akatsuki"then
if AkatsukiOutpostCurrent[3]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
elseif recFinish==gg_rct_Creeps_Akatsuki_Bot then
set r=gg_rct_Akatsuki_Bot_O2
set outpostOwner=GetOutpostOwner(r)
if IsUnitAlly(u,Player(5))then
if outpostOwner=="alliance"then
if AkatsukiOutpostCurrent[3]<outpostNumber then
set recReturned=r
endif
else
set recReturned=r
endif
endif
endif
endif
elseif IsUnitHero(u)then
if recFinish==gg_rct_Creeps_Up then
if IsUnitAlly(u,Player(5))then
if gakureOwnerIwa!="alliance"then
set recReturned=gg_rct_Iwagakure
endif
elseif IsUnitAlly(u,Player(11))then
if gakureOwnerKumo!="akatsuki"then
set recReturned=gg_rct_Kumogakure
endif
endif
elseif recFinish==gg_rct_Creeps_Konoha_Up_4 then
if IsUnitAlly(u,Player(11))then
if gakureOwnerIwa!="akatsuki"then
set recReturned=gg_rct_Iwagakure
endif
endif
elseif recFinish==gg_rct_Creeps_Akatsuki_Up_5 then
if IsUnitAlly(u,Player(5))then
if gakureOwnerKumo!="alliance"then
set recReturned=gg_rct_Kumogakure
endif
endif
elseif recFinish==gg_rct_Creeps_Down then
if IsUnitAlly(u,Player(5))then
if gakureOwnerSuna!="alliance"then
set recReturned=gg_rct_Sunagakure
endif
elseif IsUnitAlly(u,Player(11))then
if gakureOwnerKiri!="akatsuki"then
set recReturned=gg_rct_Kirigakure
endif
endif
elseif recFinish==gg_rct_Creeps_Akatsuki_Down_4 then
if IsUnitAlly(u,Player(5))then
if gakureOwnerKiri!="alliance"then
set recReturned=gg_rct_Kirigakure
endif
endif
elseif recFinish==gg_rct_Creeps_Konoha_Down_5 then
if IsUnitAlly(u,Player(11))then
if gakureOwnerSuna!="akatsuki"then
set recReturned=gg_rct_Sunagakure
endif
endif
endif
if recReturned!=recFinish then
if not aiAllianceGakureMove and IsUnitAlly(u,Player(5))then
set aiAllianceGakureMove=true
call TimerStart(CreateTimer(),5.,false,function cj_anonym__4)
elseif not aiAkatsukiGakureMove and IsUnitAlly(u,Player(11))then
set aiAkatsukiGakureMove=true
call TimerStart(CreateTimer(),5.,false,function cj_anonym__5)
else
set recReturned=recFinish
endif
endif
endif
set r=null
set cj_v666_rect=recReturned
set recReturned=null
return cj_v666_rect
endfunction
function GakureCaptureChecking takes rect r,unit u returns boolean
local boolean log=false
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
if GetWidgetLife(u)>.405 and GetRectMinX(r)<=x and x<=GetRectMaxX(r)and GetRectMinY(r)<=y and y<=GetRectMaxY(r)then
set log=true
endif
return log
endfunction
function GakureNameCheckingRect takes rect r returns string
local string s=null
if r==gg_rct_Sunagakure then
set s=gakureNameSuna
elseif r==gg_rct_Iwagakure then
set s=gakureNameIwa
elseif r==gg_rct_Kirigakure then
set s=gakureNameKiri
elseif r==gg_rct_Kumogakure then
set s=gakureNameKumo
endif
return s
endfunction
function GakureOwnerCheckingRect takes rect r returns string
local string s=null
if r==gg_rct_Sunagakure then
set s=gakureOwnerSuna
elseif r==gg_rct_Iwagakure then
set s=gakureOwnerIwa
elseif r==gg_rct_Kirigakure then
set s=gakureOwnerKiri
elseif r==gg_rct_Kumogakure then
set s=gakureOwnerKumo
endif
return s
endfunction
function cj_anonym__6 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer number=LoadInteger(Hash,h,0)
set gakureCaptureBanLog[number]=false
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function GakureCaptureSuccess takes rect r,string nameteam,integer number returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local group g=CreateGroup()
local unit tg
local player newplayer
local string oldOwner=GakureOwnerCheckingRect(r)
set gakureCaptureBanLog[number]=true
if nameteam==nameteamOne then
if r==gg_rct_Sunagakure then
set gakureOwnerSuna="alliance"
elseif r==gg_rct_Iwagakure then
set gakureOwnerIwa="alliance"
elseif r==gg_rct_Kirigakure then
set gakureOwnerKiri="alliance"
elseif r==gg_rct_Kumogakure then
set gakureOwnerKumo="alliance"
endif
set newplayer=Player(5)
if gakureAllianceNumber<5 then
set gakureAllianceNumber=gakureAllianceNumber+1
endif
if oldOwner=="akatsuki"and gakureAkatsukiNumber>1 then
set gakureAkatsukiNumber=gakureAkatsukiNumber-1
endif
elseif nameteam==nameteamTwo then
if r==gg_rct_Sunagakure then
set gakureOwnerSuna="akatsuki"
elseif r==gg_rct_Iwagakure then
set gakureOwnerIwa="akatsuki"
elseif r==gg_rct_Kirigakure then
set gakureOwnerKiri="akatsuki"
elseif r==gg_rct_Kumogakure then
set gakureOwnerKumo="akatsuki"
endif
set newplayer=Player(11)
if gakureAkatsukiNumber<5 then
set gakureAkatsukiNumber=gakureAkatsukiNumber+1
endif
if oldOwner=="alliance"and gakureAllianceNumber>1 then
set gakureAllianceNumber=gakureAllianceNumber-1
endif
endif
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitGakureBuilding(tg)then
if r==gg_rct_Sunagakure and IsUnitInGroup(tg,gakureSunaBuildings)then
call SetUnitOwner(tg,newplayer,true)
elseif r==gg_rct_Iwagakure and IsUnitInGroup(tg,gakureIwaBuildings)then
call SetUnitOwner(tg,newplayer,true)
elseif r==gg_rct_Kirigakure and IsUnitInGroup(tg,gakureKiriBuildings)then
call SetUnitOwner(tg,newplayer,true)
elseif r==gg_rct_Kumogakure and IsUnitInGroup(tg,gakureKumoBuildings)then
call SetUnitOwner(tg,newplayer,true)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if r==gg_rct_Sunagakure then
call SetUnitOwner(gg_unit_n01Q_0065,newplayer,true)
elseif r==gg_rct_Iwagakure then
call SetUnitOwner(gg_unit_n01Q_0064,newplayer,true)
elseif r==gg_rct_Kirigakure then
call SetUnitOwner(gg_unit_n01Q_0066,newplayer,true)
elseif r==gg_rct_Kumogakure then
call SetUnitOwner(gg_unit_n01Q_0067,newplayer,true)
endif
call SaveInteger(Hash,h,0,number)
call TimerStart(t,gakureCaptureBanTime,false,function cj_anonym__6)
set newplayer=null
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__7 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer i=0
local player p
loop
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER and not udg_VM_Log[i]then
call DestroyFogModifier(LoadFogModifierHandle(Hash,h,i))
endif
set i=i+1
exitwhen i>10
endloop
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
endfunction
function GakureVision takes rect r returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local real time=5.
local player p
loop
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER and not udg_VM_Log[i]then
set bj_lastCreatedFogModifier=CreateFogModifierRect(p,FOG_OF_WAR_VISIBLE,r,true,false)
call FogModifierStart(bj_lastCreatedFogModifier)
call SaveFogModifierHandle(Hash,h,i,bj_lastCreatedFogModifier)
endif
set i=i+1
exitwhen i>10
endloop
call TimerStart(t,time,false,function cj_anonym__7)
set p=null
set t=null
endfunction
function GakureOverAI takes unit u,rect r returns nothing
local rect newrect=null
if r==gg_rct_Sunagakure then
set newrect=gg_rct_Creeps_Down
elseif r==gg_rct_Iwagakure then
set newrect=gg_rct_Creeps_Up
elseif r==gg_rct_Kirigakure then
set newrect=gg_rct_Creeps_Down
elseif r==gg_rct_Kumogakure then
set newrect=gg_rct_Creeps_Up
endif
call AILineGiveOrderToMove(u,newrect,GetPlayerId(GetOwningPlayer(u)))
set newrect=null
endfunction
function cj_anonym__8 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local rect r=LoadRectHandle(Hash,h,1)
local texttag text=LoadTextTagHandle(Hash,h,2)
local integer time=LoadInteger(Hash,h,3)
local string name=LoadStr(Hash,h,4)
local integer number=LoadInteger(Hash,h,5)
if time>1 and GakureCaptureChecking(r,u)then
set time=time-1
if time==14 then
call IssueImmediateOrder(u,"holdposition")
endif
call SetTextTagText(text,I2S(time),.0276)
call SaveInteger(Hash,h,3,time)
else
if time==1 and GakureCaptureChecking(r,u)then
if IsUnitAlly(u,Player(5))then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,gakureTextCaptureShow,nameteamOne+" захватили "+name+"!\nИх шиноби авангарда и поддержки стали сильнее!\n"+nameteamTwo+" могут попробовать отвоевать деревню через |cFFFFCC00"+I2S(R2I(gakureCaptureBanTime))+"|r секунд!")
call GakureCaptureSuccess(r,nameteamOne,number)
elseif IsUnitAlly(u,Player(11))then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,gakureTextCaptureShow,nameteamTwo+" захватили "+name+"!\nИх шиноби авангарда и поддержки стали сильнее!\n"+nameteamOne+" могут попробовать отвоевать деревню через |cFFFFCC00"+I2S(R2I(gakureCaptureBanTime))+"|r секунд!")
call GakureCaptureSuccess(r,nameteamTwo,number)
endif
if name==gakureNameSuna then
call GakureVision(gg_rct_Sunagakure_Vision)
elseif name==gakureNameIwa then
call GakureVision(gg_rct_Iwagakure_Vision)
elseif name==gakureNameKumo then
call GakureVision(gg_rct_Kumogakure_Vision)
elseif name==gakureNameKiri then
call GakureVision(gg_rct_Kirigakure_Vision)
endif
else
if IsUnitAlly(u,Player(5))then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,gakureTextCaptureShow,nameteamOne+" не смогли захватить "+name+"!")
elseif IsUnitAlly(u,Player(11))then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,gakureTextCaptureShow,nameteamTwo+" не смогли захватить "+name+"!")
endif
endif
call DestroyTextTag(text)
set gakureCaptureLog[number]=false
if GetPlayerController(GetOwningPlayer(u))==MAP_CONTROL_COMPUTER then
call GakureOverAI(u,r)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set name=null
set text=null
set r=null
set u=null
set t=null
endfunction
function GakureEnter takes unit u,rect r,integer number returns nothing
local timer t
local integer h
local real x=GetRectCenterX(r)
local real y=GetRectCenterY(r)
local integer time=gakureNeedTime
local boolean log=false
local texttag text
local string name=GakureNameCheckingRect(r)
local string owner=GakureOwnerCheckingRect(r)
if not gakureCaptureLog[number]and not gakureCaptureBanLog[number]then
if IsUnitAlly(u,Player(5))then
if owner=="akatsuki"then
set log=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,gakureTextShow,nameteamOne+" начинают захватывать у "+nameteamTwo+" "+name+"!")
elseif owner=="neitural"then
set log=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,gakureTextShow,nameteamOne+" начинают захватывать "+name+"!")
endif
elseif IsUnitAlly(u,Player(11))then
if owner=="alliance"then
set log=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,gakureTextShow,nameteamTwo+" начинают захватывать у "+nameteamOne+" "+name+"!")
elseif owner=="neitural"then
set log=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,gakureTextShow,nameteamTwo+" начинают захватывать "+name+"!")
endif
endif
if GetPlayerController(GetOwningPlayer(u))==MAP_CONTROL_COMPUTER then
call IssuePointOrder(u,"move",x,y)
endif
if log then
set gakureCaptureLog[number]=true
set t=CreateTimer()
set h=GetHandleId(t)
set text=CreateTextTag()
call SetTextTagText(text,I2S(time),.0276)
call SetTextTagPos(text,x,y,gakureTextHeight)
call SetTextTagColor(text,255,204,0,0)
call SetTextTagVisibility(text,true)
call SaveAgentHandle(Hash,h,0,u)
call SaveAgentHandle(Hash,h,1,r)
call SaveTextTagHandle(Hash,h,2,text)
call SaveInteger(Hash,h,3,time)
call SaveStr(Hash,h,4,name)
call SaveInteger(Hash,h,5,number)
call TimerStart(t,1.,true,function cj_anonym__8)
endif
elseif gakureCaptureLog[number]then
call DisplayTimedTextToPlayer(GetOwningPlayer(u),0.,0.,gakureTextCaptureShow,"Деревня уже захватывается "+name+"!")
elseif not gakureCaptureBanLog[number]then
call DisplayTimedTextToPlayer(GetOwningPlayer(u),0.,0.,gakureTextCaptureShow,"Не окончен интервал на захват "+name+"!")
endif
set owner=null
set name=null
set text=null
set t=null
endfunction
function cj_anonym__9 takes nothing returns nothing
if not udg_GameEnd and BossImprovementNumber<10 then
set BossImprovementTime=BossImprovementTime-1
if BossImprovementTime==0.then
if GetWidgetLife(Boss[BossImprovementNumber])>.405 and BossImprovementNumber!=9 then
call RemoveUnit(Boss[BossImprovementNumber])
endif
set BossImprovementNumber=BossImprovementNumber+1
set BossImprovementTime=360.
if BossImprovementNumber==1 then
set BossID=0x68303032
set BossName="|cFFFF5000ICHIBI|r"
set BossItemID=0x49303146
set BossItemName="|cFFFF5000ICHIBI NO CHAKRA|r"
elseif BossImprovementNumber==2 then
set BossID=0x68303044
set BossName="|cFFFF5000NIBI|r"
set BossItemID=0x49303036
set BossItemName="|cFFFF5000NIBI NO CHAKRA|r"
elseif BossImprovementNumber==3 then
set BossID=0x68303232
set BossName="|cFFFF5000SANBI|r"
set BossItemID=0x49303038
set BossItemName="|cFFFF5000SANBI NO CHAKRA|r"
elseif BossImprovementNumber==4 then
set BossID=0x68303233
set BossName="|cFFFF5000YONBI|r"
set BossItemID=0x49303039
set BossItemName="|cFFFF5000YONBI NO CHAKRA|r"
elseif BossImprovementNumber==5 then
set BossID=0x68303235
set BossName="|cFFFF5000GOBI|r"
set BossItemID=0x49303041
set BossItemName="|cFFFF5000GOBI NO CHAKRA|r"
elseif BossImprovementNumber==6 then
set BossID=0x68303236
set BossName="|cFFFF5000ROKUBI|r"
set BossItemID=0x49303042
set BossItemName="|cFFFF5000ROKUBI NO CHAKRA|r"
elseif BossImprovementNumber==7 then
set BossID=0x68303244
set BossName="|cFFFF5000NANABI|r"
set BossItemID=0x49303044
set BossItemName="|cFFFF5000NANABI NO CHAKRA|r"
elseif BossImprovementNumber==8 then
set BossID=0x68303246
set BossName="|cFFFF5000HACHIBI|r"
set BossItemID=0x49303045
set BossItemName="|cFFFF5000HACHIBI NO CHAKRA|r"
elseif BossImprovementNumber==9 then
set BossID=0x68303247
set BossName="|cFFFF5000KYUBI|r"
set BossItemID=0x49303047
set BossItemName="|cFFFF5000KYUBI NO CHAKRA|r"
elseif BossImprovementNumber==10 then
set BossImprovementTime=1.
endif
if BossImprovementNumber<10 then
call SetPlayerState(GetLocalPlayer(),PLAYER_STATE_RESOURCE_FOOD_USED,BossImprovementNumber)
call PingMinimapEx(GetRectCenterX(gg_rct_Boss),GetRectCenterY(gg_rct_Boss),20.,255,255,255,true)
set Boss[BossImprovementNumber]=CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),BossID,GetRectCenterX(gg_rct_Boss),GetRectCenterY(gg_rct_Boss),270.)
call SaveBoolean(Hash,GetHandleId(Boss[BossImprovementNumber]),0,true)
call SaveBoolean(Hash,GetHandleId(Boss[BossImprovementNumber]),1,false)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"\nПоявился новый хвостатый зверь! Приручите "+BossName+" себе, чтобы получить преимущество в войне!\nТот, кто одолеет зверя, получит немыслимую силу! Каждый может сделать это один раз!")
endif
endif
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function BossStart takes nothing returns nothing
set BossImprovementTime=120.
call PingMinimapEx(GetRectCenterX(gg_rct_Boss),GetRectCenterY(gg_rct_Boss),20.,255,255,255,true)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"\nХвостатые звери жаждут сражения! Они будут поочерёдно появляться на |cFFFFCC006|r минут!\nПервый зверь появится через |cFFFFCC002|r минуты!")
call TimerStart(CreateTimer(),1.,true,function cj_anonym__9)
endfunction
function cj_anonym__12 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
call UnitRemoveAbility(u,LoadInteger(Hash,h,1))
if LoadInteger(Hash,h,2)!=0 then
call UnitRemoveAbility(u,LoadInteger(Hash,h,2))
endif
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function cj_anonym__11 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local real time=LoadReal(Hash,h,3)
if time>0.and GetWidgetLife(u)>.405 then
call SaveReal(Hash,h,3,time-.025)
else
call UnitRemoveAbility(u,LoadInteger(Hash,h,1))
if LoadInteger(Hash,h,2)!=0 then
call UnitRemoveAbility(u,LoadInteger(Hash,h,2))
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function UnitTempSpell takes unit u,integer rawcode,integer rawbuff,real time,integer level,boolean cheking returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call UnitAddAbility(u,rawcode)
if level!=0 then
call SetUnitAbilityLevel(u,rawcode,level)
endif
call SaveAgentHandle(Hash,h,0,u)
call SaveInteger(Hash,h,1,rawcode)
if rawbuff!=0 then
call SaveInteger(Hash,h,2,rawbuff)
endif
if cheking then
call SaveReal(Hash,h,3,time)
call TimerStart(t,.025,true,function cj_anonym__11)
else
call TimerStart(t,time,false,function cj_anonym__12)
endif
set t=null
endfunction
function cj_anonym__13 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local integer alphaStep=LoadInteger(Hash,h,1)
local integer alpha=LoadInteger(Hash,h,2)
if alpha>alphaStep then
call SetUnitVertexColor(u,255,255,255,alpha)
call SaveInteger(Hash,h,2,alpha-alphaStep)
else
call RemoveUnit(u)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function RemoveUnitAlpha takes unit u,integer alphaStep,real period returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alpha=255-alphaStep
call SaveAgentHandle(Hash,h,0,u)
call SaveInteger(Hash,h,1,alphaStep)
call SaveInteger(Hash,h,2,alpha)
call TimerStart(t,period,true,function cj_anonym__13)
set t=null
endfunction
function cj_anonym__14 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local real time=LoadReal(Hash,h,2)
if time>0.and GetWidgetLife(u)>.405 then
if not IsUnitPaused(u)then
call PauseUnit(u,true)
endif
call SaveReal(Hash,h,2,time-.1)
else
call PauseUnit(u,false)
call DestroyEffect(LoadEffectHandle(Hash,h,1))
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function GetStun takes unit u,real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call PauseUnit(u,true)
call SaveAgentHandle(Hash,h,0,u)
call SaveAgentHandle(Hash,h,1,AddSpecialEffectTarget("Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl",u,"overhead"))
call SaveReal(Hash,h,2,time)
call TimerStart(t,.1,true,function cj_anonym__14)
set t=null
endfunction
function SetUnitTypeFlying takes unit u returns nothing
call UnitAddAbility(u,0x41304942)
call UnitRemoveAbility(u,0x41304942)
endfunction
function GetMorphOver takes unit caster,unit morph,player p returns nothing
local integer i=0
local real x=GetWidgetX(morph)
local real y=GetWidgetY(morph)
local real f=GetUnitFacing(morph)
local real hp=GetWidgetLife(morph)
local real mp=GetUnitState(morph,UNIT_STATE_MANA)
if udg_ShopCam[GetPlayerId(p)]then
set shopUser[GetPlayerId(p)]=caster
endif
set udg_Hero[GetPlayerId(p)]=caster
call SetUnitPathing(morph,false)
call SetUnitPosition(caster,x,y)
call SetUnitFacing(caster,f)
call SuspendHeroXP(caster,false)
call PauseUnit(caster,false)
call SetUnitInvulnerable(caster,false)
call SetUnitPathing(caster,true)
call ShowUnit(caster,true)
call SetHeroXP(morph,GetHeroXP(caster),false)
loop
exitwhen i>5
call UnitAddItem(caster,UnitItemInSlot(morph,i))
set i=i+1
endloop
if GetLocalPlayer()==p then
call ClearSelection()
call SelectUnit(caster,true)
endif
if morph==Hidan_prey then
set Hidan_prey=caster
endif
call SetUnitState(caster,UNIT_STATE_MANA,mp)
call SetWidgetLife(caster,hp)
call RemoveUnit(morph)
endfunction
function GetMorph takes unit caster,player p,integer id,real x,real y,real f,real newhp,real newmp returns unit
local integer i=0
local real hp=GetWidgetLife(caster)
local real mp=GetUnitState(caster,UNIT_STATE_MANA)
local unit morph
call SuspendHeroXP(caster,true)
call PauseUnit(caster,true)
call SetUnitInvulnerable(caster,true)
call SetUnitPathing(caster,false)
call ShowUnit(caster,false)
set morph=CreateUnit(p,id,x,y,f)
set udg_Hero[GetPlayerId(p)]=morph
call SetHeroXP(morph,GetHeroXP(caster),false)
loop
exitwhen i>5
call UnitAddItem(morph,UnitItemInSlot(caster,i))
set i=i+1
endloop
call SetUnitState(morph,UNIT_STATE_MANA,mp+newmp)
call SetWidgetLife(morph,hp+newhp)
if GetLocalPlayer()==GetOwningPlayer(morph)then
call ClearSelection()
call SelectUnit(morph,true)
endif
if caster==Hidan_prey then
set Hidan_prey=morph
endif
set cj_v666_unit=morph
set morph=null
return cj_v666_unit
endfunction
function GetAssisters takes player p returns force
return frAssistersAdd[GetPlayerId(p)]
endfunction
function HeroesMoveText takes nothing returns nothing
local integer i=0
if TextShowOn then
loop
if i!=5 and playerNameText[i]!=null and GetWidgetLife(udg_Hero[i])>.405 then
if GetUnitAbilityLevel(udg_Hero[i],Mu_KEIJUGAN_BUFF)==0 then
call SetTextTagPos(playerNameText[i],GetWidgetX(udg_Hero[i])-playerNameTextOffsetX[i],GetWidgetY(udg_Hero[i]),heightGameText*10.)
else
call SetTextTagPos(playerNameText[i],GetWidgetX(udg_Hero[i])-playerNameTextOffsetX[i],GetWidgetY(udg_Hero[i]),heightGameText*10.+500.)
endif
endif
set i=i+1
exitwhen i>10
endloop
endif
endfunction
function HeroesCheckLocation takes nothing returns nothing
local integer i=0
local player p
local real x
local real y
if not udg_GameEnd then
loop
exitwhen i>10
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetWidgetLife(udg_Hero[i])>.405 and not IsUnitHidden(udg_Hero[i])then
set x=GetWidgetX(udg_Hero[i])
set y=GetWidgetY(udg_Hero[i])
if not preparationOn then
if RectContainsCoords(gg_rct_Weather,x,y)or RectContainsCoords(gg_rct_Shop,x,y)or RectContainsCoords(gg_rct_Kamui,x,y)or RectContainsCoords(gg_rct_StartRect,x,y)then
set hero_x[i]=x
set hero_y[i]=y
elseif RectContainsCoords(gg_rct_Duel,x,y)then
if DuelHeroOn[i]then
set hero_x[i]=x
set hero_y[i]=y
else
call SetUnitX(udg_Hero[i],hero_x[i])
call SetUnitY(udg_Hero[i],hero_y[i])
call DisplayTimedTextToPlayer(p,0.,0.,2.5,"|cFFFFCC00Ваш герой не может переместиться в эту позицию.|r")
endif
else
call SetUnitX(udg_Hero[i],hero_x[i])
call SetUnitY(udg_Hero[i],hero_y[i])
call DisplayTimedTextToPlayer(p,0.,0.,2.5,"|cFFFFCC00Ваш герой не может переместиться в эту позицию.|r")
endif
else
if GetPlayerController(p)==MAP_CONTROL_USER then
if RectContainsCoords(gg_rct_Shop,x,y)or RectContainsCoords(gg_rct_Revive_Alliance,x,y)or RectContainsCoords(gg_rct_Revive_Akatsuki,x,y)then
set hero_x[i]=x
set hero_y[i]=y
else
call SetUnitX(udg_Hero[i],hero_x[i])
call SetUnitY(udg_Hero[i],hero_y[i])
call DisplayTimedTextToPlayer(p,0.,0.,2.5,"|cFFFFCC00Ваш герой не может переместиться в эту позицию во время этапа подготовки.|r")
endif
endif
endif
endif
set i=i+1
endloop
endif
set p=null
endfunction
function GetCasterAndTargetLocation takes unit c,unit tu returns boolean
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local boolean log=false
if RectContainsCoords(gg_rct_Weather,x,y)and RectContainsCoords(gg_rct_Weather,x1,y1)then
set log=true
endif
return log
endfunction
function GetUnitLocationClanBase takes unit u returns boolean
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local boolean log
local rect r
if IsPlayerAlly(GetOwningPlayer(u),Player(5))then
set r=gg_rct_Light_in_Alliance
elseif IsPlayerAlly(GetOwningPlayer(u),Player(11))then
set r=gg_rct_Fog_in_Akatsuki
endif
if GetRectMinX(r)<=x and x<=GetRectMaxX(r)and GetRectMinY(r)<=y and y<=GetRectMaxY(r)then
set log=true
else
set log=false
endif
set r=null
return log
endfunction
function QuestExecute takes nothing returns nothing
local real x=0.
local real y=0.
local string name
local integer id
local integer i=GetPlayerId(QuestPlayer)
if IsPlayerAlly(QuestPlayer,Player(5))then
set name=nameteamOne
set x=GetRectCenterX(gg_rct_Alliance_Head)
set y=GetRectCenterY(gg_rct_Alliance_Head)
elseif IsPlayerAlly(QuestPlayer,Player(11))then
set name=nameteamTwo
set x=GetRectCenterX(gg_rct_Akatsuki_Head)
set y=GetRectCenterY(gg_rct_Akatsuki_Head)
endif
set QuestIsExecuted=true
if QuestNumber==1 then
set id=CHAKRA_NO_MI_ID
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,GetPlayerNameColored(QuestPlayer)+" выполнил миссию и "+name+" может забрать в награду |cFFFFCC00Плод Чакры|r - цветущий раз в 1000 лет фрукт, дающий носителю возможность исцелять раненых, в |cFFFFCC00лаборатории Орочимару|r!")
elseif QuestNumber==2 then
set id=MADARA_GUNBAI_ID
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,GetPlayerNameColored(QuestPlayer)+" выполнил миссию и "+name+" может забрать в награду |cFFFFCC00Гунбай Мадары|r - уникальный артефакт Учиха, повышающий выживаемость любого шиноби, в |cFFFFCC00лаборатории Орочимару|r!")
elseif QuestNumber==3 then
set id=RYUJIN_ID
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,GetPlayerNameColored(QuestPlayer)+" выполнил миссию и "+name+" может забрать в награду |cFFFFCC00Рьюджин|r - величественный меч, сокрушающий врагов одним ударом, в |cFFFFCC00лаборатории Орочимару|r!")
endif
call PingMinimapEx(x,y,10.,255,255,255,true)
call CreateItem(id,x,y)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"\nСледующая миссия будет доступна после окончания таймера!")
set QuestPlayer=null
set QuestValue=0
call TimerDialogSetTimeColor(QuestWindow,32,192,0,255)
call DestroyLeaderboard(QuestProgressBoard)
endfunction
function QuestFail takes nothing returns nothing
local real x=0.
local real y=0.
local string enemy_name
local integer id
if IsPlayerAlly(QuestPlayer,Player(5))then
set enemy_name=nameteamTwo
set x=GetRectCenterX(gg_rct_Akatsuki_Head)
set y=GetRectCenterY(gg_rct_Akatsuki_Head)
elseif IsPlayerAlly(QuestPlayer,Player(11))then
set enemy_name=nameteamOne
set x=GetRectCenterX(gg_rct_Alliance_Head)
set y=GetRectCenterY(gg_rct_Alliance_Head)
endif
if QuestNumber==1 then
set id=CHAKRA_NO_MI_ID
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,GetPlayerNameColored(QuestPlayer)+" провалил миссию и "+enemy_name+" получают в награду |cFFFFCC00Плод Чакры|r - цветущий раз в 1000 лет фрукт, дающий носителю возможность исцелять раненых!")
elseif QuestNumber==2 then
set id=MADARA_GUNBAI_ID
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,GetPlayerNameColored(QuestPlayer)+" провалил миссию и "+enemy_name+" получают в награду |cFFFFCC00Гунбай Мадары|r - уникальный артефакт Учиха, повышающий выживаемость любого шиноби!")
elseif QuestNumber==3 then
set id=RYUJIN_ID
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,GetPlayerNameColored(QuestPlayer)+" провалил миссию и "+enemy_name+" получают в награду |cFFFFCC00Рьюджин|r - величественный меч, сокрушающий врагов одним ударом!")
endif
call CreateItem(id,x,y)
call PingMinimapEx(x,y,10.,255,255,255,true)
set QuestPlayer=null
set QuestValue=0
call TimerDialogSetTimeColor(QuestWindow,255,3,3,255)
call DestroyLeaderboard(QuestProgressBoard)
endfunction
function ResourceTimer takes nothing returns nothing
local integer i=0
local player p
if not udg_GameEnd then
loop
exitwhen i>10
set p=Player(i)
if i!=5 and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and not udg_VM_Log[GetPlayerId(p)]then
if IsPlayerAlly(p,Player(5))then
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+(gakureAllianceNumber*gakureConstXX))
call SetHeroXP(udg_Hero[i],GetHeroXP(udg_Hero[i])+(gakureAllianceNumber*gakureConstXX),false)
elseif IsPlayerAlly(p,Player(11))then
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+(gakureAkatsukiNumber*gakureConstXX))
call SetHeroXP(udg_Hero[i],GetHeroXP(udg_Hero[i])+(gakureAkatsukiNumber*gakureConstXX),false)
endif
if udg_Exp_XP[i]<GetHeroXP(udg_Hero[i])then
call ExpSaveText(p,i,"за деревни")
endif
if GetPlayerController(p)==MAP_CONTROL_COMPUTER then
call LumberPlus(udg_Hero[i],5)
endif
endif
set i=i+1
endloop
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
set p=null
endfunction
function DistanceBetweenCoords takes real x,real y,real xx,real yy returns real
local real dx=xx-x
local real dy=yy-y
return SquareRoot(dx*dx+dy*dy)
endfunction
function Destructables takes nothing returns nothing
call RemoveDestructable(GetEnumDestructable())
endfunction
function cj_anonym__18 takes nothing returns nothing
if not udg_GameEnd then
if SpecialEffectsShow then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,20.,"Если у Вас тормозит игра, попросите хоста ввести |cFFFFCC00-ses off|r для отключения большинства спецэффектов у способностей! Так же можно отключить погоду с помощью |cFFFFCC00-w off|r! И можно убрать отображение текста над героями с помощью |cFFFFCC00-ts off|r!")
endif
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__17 takes nothing returns nothing
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"|cFFFFCC00Обучение|r выключено!")
call DisableTrigger(gg_trg_Tutorial_Command)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__16 takes nothing returns nothing
if not wtfModOn and not RatingGameOn then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Вы можете написать команду |cFFFFCC00-wtf|r в любое время игры, это |cFFFF0303ФАН-МОД|r, который даёт |cFFFFCC0050 000 рьё|r и |cFFFFCC0010-ый уровень|r всем персонажам!")
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function TurnOnSomeTriggers takes nothing returns nothing
call SetPlayerTechResearched(Player(5),0x52303034,1)
call SetPlayerTechResearched(Player(11),0x52303034,1)
call EnableTrigger(gg_trg_SES_Command)
call EnableTrigger(gg_trg_W_Command)
call EnableTrigger(gg_trg_TS_Command)
call EnableTrigger(gg_trg_MO_Command)
call EnableTrigger(gg_trg_Tutorial_Command)
if botlog then
call EnableTrigger(gg_trg_AI_Remove_Command)
endif
if not RatingGameOn then
call EnableTrigger(gg_trg_WTF_Mod)
endif
call TriggerExecute(gg_trg_Neiturals)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,20.,"\n\nДЛЯ |cFFFFCC00ОБУЧЕНИЯ|r ВВЕДИТЕ |cFFFF5000-tutorial|r В ТЕЧЕНИЕ 2 МИНУТ. ПОДРОБНЕЕ О МОДАХ, КОМБО И ПР. В РАЗДЕЛЕ |cFFFF5000ИНФО|r")
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,25.,"ДЛЯ ВЫРАЖЕНИЯ ЭМОЦИЙ НАЖМИТЕ |cFFFF5000СТРЕЛКУ ВВЕРХ|r НА КЛАВИАТУРЕ")
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,"\n|cFFFF0303ЧТОБЫ ОТКРЫТЬ ТЕХНИКИ, НАЖМИТЕ КЛАВИШУ ESC|r")
if TestV then
call EnableTrigger(gg_trg_Average)
call EnableTrigger(gg_trg_Refresh)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,"\nВ тестовой версии доступна команда -r, которая регенерирует чакру, сбрасывает перезарядку на способности и команду -revive. А иногда не сбрасывает :)")
endif
call TimerStart(CreateTimer(),30.,false,function cj_anonym__16)
call TimerStart(CreateTimer(),120.,false,function cj_anonym__17)
call TimerStart(CreateTimer(),720.,true,function cj_anonym__18)
endfunction
function CommandRepickOff takes nothing returns nothing
local integer i=0
local player p
loop
exitwhen i>10
set p=Player(i)
if i!=5 and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and not udg_VM_Log[GetPlayerId(p)]then
if IsPlayerAlly(p,Player(5))then
if p!=Player(4)then
set udg_DebugStr[1]=udg_DebugStr[1]+GetPlayerName(p)+", "
else
set udg_DebugStr[1]=udg_DebugStr[1]+GetPlayerName(p)+"."
endif
elseif IsPlayerAlly(p,Player(11))then
if p!=Player(10)then
set udg_DebugStr[2]=udg_DebugStr[2]+GetPlayerName(p)+", "
else
set udg_DebugStr[2]=udg_DebugStr[2]+GetPlayerName(p)+"."
endif
endif
endif
set i=i+1
endloop
call EnumDestructablesInRect(gg_rct_HeroPick,null,function Destructables)
call EnumDestructablesInRect(gg_rct_ModePick,null,function Destructables)
call DisableTrigger(gg_trg_Repick_Command)
call FlushChildHashtable(Hash,GetHandleId(gg_trg_Click))
call HeroStartInitSpell()
set p=null
endfunction
function KuchiyoseEffectRemove_Timer takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call DestroyEffect(LoadEffectHandle(Hash,h,1))
call RemoveUnit(LoadUnitHandle(Hash,h,0))
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set t=null
endfunction
function KuchiyoseEffect takes real x,real y,real size returns nothing
local timer t=CreateTimer()
local unit d=CreateUnit(Player(14),0x6E303032,x,y,GetRandomReal(0.,360.))
call PauseUnit(d,true)
call SetUnitScale(d,size,size,size)
call SetUnitFlyHeight(d,0.,0.)
call SaveAgentHandle(Hash,GetHandleId(t),0,d)
call SaveAgentHandle(Hash,GetHandleId(t),1,AddSpecialEffectTarget("Kuchiyose.mdx",d,"origin"))
call TimerStart(t,.65,false,function KuchiyoseEffectRemove_Timer)
set d=null
set t=null
endfunction
function RecastSkills takes unit c,integer rawcode,integer level,real manacost returns nothing
call IssueImmediateOrder(c,"stop")
call UnitRemoveAbility(c,rawcode)
call UnitAddAbility(c,rawcode)
call SetUnitAbilityLevel(c,rawcode,level)
call SetUnitState(c,UNIT_STATE_MANA,GetUnitState(c,UNIT_STATE_MANA)+manacost)
endfunction
function IsItemUpgraded takes item art returns string
local string str=null
local integer id=GetItemTypeId(art)
if id==KONOHA_JACKET_ID_1 or id==KONOHA_JACKET_ID_2 or id==KONOHA_JACKET_ID_3 or id==KONOHA_JACKET_ID_4 then
set str="Жилет Конохи"
elseif id==NUKENIN_GLOVES_ID_1 or id==NUKENIN_GLOVES_ID_2 or id==NUKENIN_GLOVES_ID_3 or id==NUKENIN_GLOVES_ID_4 then
set str="Перчатки нукенина"
elseif id==WAIST_POUCH_ID_1 or id==WAIST_POUCH_ID_2 or id==WAIST_POUCH_ID_3 or id==WAIST_POUCH_ID_4 then
set str="Сумка"
elseif id==HITAIATE_ID_1 or id==HITAIATE_ID_2 or id==HITAIATE_ID_3 or id==HITAIATE_ID_4 then
set str="Повязка шиноби"
elseif id==ROBBER_MACE_ID_1 or id==ROBBER_MACE_ID_2 or id==ROBBER_MACE_ID_3 or id==ROBBER_MACE_ID_4 then
set str="Булава грабителя"
elseif id==SAMURAI_CETTO_ID_1 or id==SAMURAI_CETTO_ID_2 or id==SAMURAI_CETTO_ID_3 or id==SAMURAI_CETTO_ID_4 then
set str="Вакидзаси самурая"
elseif id==YUKIGAKURE_GHOST_ID_1 or id==YUKIGAKURE_GHOST_ID_2 or id==YUKIGAKURE_GHOST_ID_3 or id==YUKIGAKURE_GHOST_ID_4 then
set str="Душа Страны снега"
elseif id==BATTLE_CLAW_ID_1 or id==BATTLE_CLAW_ID_2 or id==BATTLE_CLAW_ID_3 or id==BATTLE_CLAW_ID_4 then
set str="Боевой коготь"
endif
return str
endfunction
function IsItemUnsold takes item art returns boolean
local boolean log=false
local integer id=GetItemTypeId(art)
if id==CHAKRA_NO_MI_ID or id==MADARA_GUNBAI_ID or id==RYUJIN_ID or id==ITEM_HIRAISHIN_KUNAI_ID or id==ICHIBI_NO_CHAKRA_ID or id==NIBI_NO_CHAKRA_ID or id==SANBI_NO_CHAKRA_ID or id==YONBI_NO_CHAKRA_ID or id==GOBI_NO_CHAKRA_ID or id==ROKUBI_NO_CHAKRA_ID or id==NANABI_NO_CHAKRA_ID or id==HACHIBI_NO_CHAKRA_ID or id==KYUBI_NO_CHAKRA_ID then
set log=true
endif
return log
endfunction
function GetItemMaxCharge takes item art returns integer
local integer id=GetItemTypeId(art)
local integer maxCharge=1
if id==GAS_CHECKER_ID then
set maxCharge=2
elseif id==KEMURIDAMA_ID then
set maxCharge=2
elseif id==DAZZLING_GRENADE_ID then
set maxCharge=2
endif
return maxCharge
endfunction
function GetItemNeedCharge takes item art returns nothing
local integer id=GetItemTypeId(art)
local integer needCharge=0
local integer curCharge=GetItemCharges(art)
if id==KUNAI_ID then
set needCharge=10
elseif id==SHURIKEN_ID then
set needCharge=10
elseif id==FUMA_SHURIKEN_ID then
set needCharge=5
elseif id==SENBON_ID then
set needCharge=5
elseif id==KIBAKU_KUNAI_ID then
set needCharge=5
elseif id==EIYU_NO_MIZU_ID then
set needCharge=5
elseif id==ITEM_HIRAISHIN_KUNAI_ID then
set needCharge=10
endif
if curCharge<needCharge then
call SetItemCharges(art,needCharge)
endif
endfunction
function IsItemChargedUpdated takes item art returns boolean
local integer id=GetItemTypeId(art)
local boolean log=false
if id==KUNAI_ID or id==SHURIKEN_ID or id==FUMA_SHURIKEN_ID or id==SENBON_ID or id==KIBAKU_KUNAI_ID or id==EIYU_NO_MIZU_ID or id==ITEM_HIRAISHIN_KUNAI_ID then
set log=true
endif
return log
endfunction
function IsItemCharged takes integer items returns boolean
local boolean log=false
if items==RAMEN_ID or items==SAND_WARD_ID or items==CHAKRA_WARD_ID or items==HEALING_WARD_ID or items==GAS_CHECKER_ID or items==KEMURIDAMA_ID or items==DAZZLING_GRENADE_ID or items==SHUKAKU_CHAKRA_SEALED_SCROLL_ID or items==ISOBU_CHAKRA_SEALED_SCROLL_ID or items==SON_GOKU_CHAKRA_SEALED_SCROLL_ID or items==SAIKEN_CHAKRA_SEALED_SCROLL_ID or items==KURAMA_CHAKRA_SEALED_SCROLL_ID or items==EDOTENSEI_SCROLL_ID then
set log=true
endif
return log
endfunction
function IsItemBijuChakra takes integer id returns boolean
local boolean log=false
if id==0x49303146 or id==0x49303036 or id==0x49303038 or id==0x49303039 or id==0x49303041 or id==0x49303042 or id==0x49303044 or id==0x49303045 or id==0x49303047 then
set log=true
endif
return log
endfunction
function IsItemRuins takes integer id returns boolean
local boolean log=false
if id==0x49303437 or id==0x49303441 or id==0x49303434 or id==0x49303436 or id==0x49303438 or id==0x49303439 then
set log=true
endif
return log
endfunction
function IsItemQuest takes integer id returns boolean
local boolean log=false
if id==CHAKRA_NO_MI_ID or id==MADARA_GUNBAI_ID or id==RYUJIN_ID then
set log=true
endif
return log
endfunction
function HeroChargeUpdateItem takes unit u returns nothing
local integer i=0
local item art
loop
set art=UnitItemInSlot(u,i)
if IsItemChargedUpdated(art)then
call GetItemNeedCharge(art)
endif
set i=i+1
exitwhen i>5
endloop
set art=null
endfunction
function AIGetRandomRect takes unit c returns rect
local player p=GetOwningPlayer(c)
local integer i=GetRandomInt(1,2)
local boolean log=false
local rect r=null
if IsPlayerAlly(p,Player(5))then
if i==1 and TopLine then
set r=gg_rct_Creeps_Alliance_Top
set log=true
elseif i==2 and BotLine then
set r=gg_rct_Creeps_Alliance_Bot
set log=true
endif
if not log then
if TopLine then
set r=gg_rct_Creeps_Alliance_Top
set log=true
elseif BotLine then
set r=gg_rct_Creeps_Alliance_Bot
set log=true
endif
endif
elseif IsPlayerAlly(p,Player(11))then
if i==1 and TopLine then
set r=gg_rct_Creeps_Akatsuki_Top
set log=true
elseif i==2 and BotLine then
set r=gg_rct_Creeps_Akatsuki_Bot
set log=true
endif
if not log then
if TopLine then
set r=gg_rct_Creeps_Akatsuki_Top
set log=true
elseif BotLine then
set r=gg_rct_Creeps_Akatsuki_Bot
set log=true
endif
endif
endif
set cj_v666_rect=r
set r=null
return cj_v666_rect
endfunction
function cj_anonym__19 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
call UnitRemoveAbility(udg_Hero[id],0x41313143)
set ai_retreat_log[id]=false
call AILineGiveOrderToMove(udg_Hero[id],AIGetRandomRect(udg_Hero[id]),id)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function HeroEnteranReviveRect takes unit c returns nothing
local timer t
call HeroChargeUpdateItem(c)
if GetPlayerController(GetOwningPlayer(c))==MAP_CONTROL_COMPUTER then
set t=CreateTimer()
call SavePlayerHandle(Hash,GetHandleId(t),0,GetOwningPlayer(c))
call TimerStart(t,2.,false,function cj_anonym__19)
endif
set t=null
endfunction
function JiraiyaSwampDamage takes group g,unit u,real x,real y,real radius,real dmg returns nothing
local player p=GetOwningPlayer(u)
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,p)then
call UnitDamageTarget(u,tg,GetNinjutsuDamage(dmg,u,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call FireDestructablesEnum(x,y,radius/2.)
set tg=null
endfunction
function cj_anonym__20 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
if Jiraiya_yominuma!=null then
call JiraiyaSwampDamage(LoadGroupHandle(HH,h,2),LoadUnitHandle(HH,h,0),LoadReal(HH,h,3),LoadReal(HH,h,4),LoadReal(HH,h,5),LoadReal(HH,h,6))
else
set Jiraiya_yominuma_fired=false
call DestroyGroup(LoadGroupHandle(HH,h,2))
call KillUnit(LoadUnitHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
call PauseTimer(t)
endif
set t=null
endfunction
function JiraiyaSwampStartFire takes unit u,real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real dmg=Jiraiya_yominuma_damage*period
local real radius=Jiraiya_yominuma_radius*2.
set Jiraiya_yominuma_fired=true
call Sound("Jiraiya Doton Yomi Numa Fired.mp3")
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,CreateUnit(GetOwningPlayer(u),Jiraiya_yominuma_id,x,y,0.))
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveReal(HH,h,3,x)
call SaveReal(HH,h,4,y)
call SaveReal(HH,h,5,radius)
call SaveReal(HH,h,6,dmg)
call TimerStart(t,period,true,function cj_anonym__20)
set t=null
endfunction
function JiraiyaSetFireSwamp takes unit u,real x,real y returns nothing
local real x1=GetWidgetX(Jiraiya_yominuma)
local real y1=GetWidgetY(Jiraiya_yominuma)
if Jiraiya_yominuma!=null and SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<Jiraiya_yominuma_radius and not Jiraiya_yominuma_fired then
call JiraiyaSwampStartFire(u,x1,y1)
endif
endfunction
function cj_anonym__21 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
if GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(tu,Jiraiya_GAMAYUDAN_BUFF)>0 then
call UnitDamageTarget(u,tu,GetNinjutsuDamage(LoadReal(HH,h,3),u,tu,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
else
call DestroyEffect(LoadEffectHandle(HH,h,2))
set Jiraiya_gamayudan_fired=false
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
call PauseTimer(t)
endif
set tu=null
set u=null
set t=null
endfunction
function JiraiyaOilStartFire takes unit u,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real dmg=Jiraiya_gamayudan_damage*period
set Jiraiya_gamayudan_fired=true
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,tu)
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("KatonGoukaMekkyaku2.mdl",tu,"chest"))
call SaveReal(HH,h,3,dmg)
call TimerStart(t,period,true,function cj_anonym__21)
set t=null
endfunction
function JiraiyaSetFireOil takes unit u,unit tu returns nothing
if GetUnitAbilityLevel(tu,Jiraiya_GAMAYUDAN_BUFF)>0 and not Jiraiya_gamayudan_fired then
call JiraiyaOilStartFire(u,tu)
endif
endfunction
function SasoriGetNewForm takes player p,unit u,real x,real y returns nothing
local real f=GetUnitFacing(u)
local integer idp=GetPlayerId(p)
local integer idu=GetUnitTypeId(u)
local integer idNew
local integer exp=GetHeroXP(u)
local integer i=0
if idu==heroes_rawcode[Sasori]then
set idNew=morph_rawcode[2]
call mbiVal(gamestat_mb,gamestat_Place[idp],0,"BTNSasori V1.blp",null)
if IsPlayerAlly(p,Player(5))then
set Sasori_hirukoDummy=CreateUnit(p,Sasori_HIRUKO_DUMMY_ID,GetRectCenterX(gg_rct_AllianceSasoriHirukoRepair),GetRectCenterY(gg_rct_AllianceSasoriHirukoRepair),90.)
elseif IsPlayerAlly(p,Player(11))then
set Sasori_hirukoDummy=CreateUnit(p,Sasori_HIRUKO_DUMMY_ID,GetRectCenterX(gg_rct_AkatsukiSasoriHirukoRepair),GetRectCenterY(gg_rct_AkatsukiSasoriHirukoRepair),270.)
endif
call SetUnitTimeScale(Sasori_hirukoDummy,0.)
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(Sasori_hirukoDummy),GetWidgetY(Sasori_hirukoDummy)))
elseif idu==morph_rawcode[2]then
set idNew=morph_rawcode[3]
if Sasori_lb!=null then
call LeaderboardDisplay(Sasori_lb,true)
endif
call mbiVal(gamestat_mb,gamestat_Place[idp],0,"BTNSasori V3.blp",null)
elseif idu==morph_rawcode[3]then
set idNew=heroes_rawcode[Sasori]
call LeaderboardDisplay(Sasori_lb,false)
call mbiVal(gamestat_mb,gamestat_Place[idp],0,"BTNSasori V2.blp",null)
endif
if GetWidgetLife(u)<.405 then
call ReviveHero(u,x,y,false)
endif
call ShowUnit(u,false)
call PauseUnit(u,true)
call SetUnitInvulnerable(u,true)
set Sasori_c=CreateUnit(p,idNew,x,y,f)
set Sasori_p=GetOwningPlayer(Sasori_c)
set udg_Hero[idp]=Sasori_c
call SetHeroXP(Sasori_c,exp,false)
loop
exitwhen i>5
if GetItemTypeId(UnitItemInSlot(u,i))!=null then
call UnitAddItem(Sasori_c,UnitItemInSlot(u,i))
endif
set i=i+1
endloop
if idNew==heroes_rawcode[Sasori]then
if Sasori_form_1[1]then
call UnitAddAbility(Sasori_c,Sasori_AIANTERU)
endif
if Sasori_form_1[2]then
call UnitAddAbility(Sasori_c,Sasori_SENBONS)
endif
if Sasori_form_1[3]then
call UnitAddAbility(Sasori_c,Sasori_GANJONA_KESU)
endif
if Sasori_form_1[4]then
call UnitAddAbility(Sasori_c,Sasori_SENBOMB)
endif
elseif idNew==morph_rawcode[2]then
if Sasori_form_2[1]then
call UnitAddAbility(Sasori_c,Sasori_SENJUSOBU)
endif
if Sasori_form_2[2]then
call UnitAddAbility(Sasori_c,Sasori_ROPU)
endif
if Sasori_form_2[3]then
call UnitAddAbility(Sasori_c,Sasori_SATETSU_KAIHO)
endif
if Sasori_form_2[4]then
call UnitAddAbility(Sasori_c,Sasori_KAZEKAGE)
call SetPlayerTechResearched(Sasori_p,Sasori_KAZEKAGE_IMPROVEMENT,1)
endif
elseif idNew==morph_rawcode[3]then
if Sasori_form_3[1]then
call UnitAddAbility(Sasori_c,Sasori_KAEN_HOSHA_KI)
endif
if Sasori_form_3[2]then
call UnitAddAbility(Sasori_c,Sasori_AKAHIGI)
endif
if Sasori_form_3[3]then
call UnitAddAbility(Sasori_c,Sasori_HOIPPU)
endif
if Sasori_form_3[4]then
call UnitAddAbility(Sasori_c,Sasori_HEART)
endif
endif
if GetLocalPlayer()==Sasori_p then
call ClearSelection()
call SelectUnit(Sasori_c,true)
endif
call SetUnitFlyHeight(Sasori_c,GetUnitDefaultFlyHeight(Sasori_c),0.)
call RemoveUnit(u)
endfunction
function HidanJashinkyoChangeText takes nothing returns nothing
local integer idp=GetPlayerId(Hidan_p)
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFFFE8A0E"+I2S(Hidan_jashinPoint)+"|r]",countDownTextSize/4.44)
endfunction
function cj_anonym__22 takes nothing returns nothing
call SetWidgetLife(Hidan_c,I2R(Hidan_jashinPoint))
set Hidan_jashinPoint=Hidan_jashinPoint-R2I(GetWidgetLife(Hidan_c))
if Hidan_jashinPoint<2 then
set Hidan_jashinPoint=0
endif
call HidanJashinkyoChangeText()
call SetUnitInvulnerable(Hidan_c,false)
call PauseUnit(Hidan_c,false)
if not IsTriggerEnabled(Hidan_getdmgRitual)then
call SetUnitAnimation(Hidan_c,"Stand Ready")
else
call SetUnitAnimation(Hidan_c,"Stand Ready alternate")
endif
if GetLocalPlayer()==GetOwningPlayer(Hidan_c)then
call ClearSelection()
call SelectUnit(Hidan_c,true)
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function HidanJashinkyoRevive takes real x,real y returns nothing
local real timeRevive=5.
call Sound("Hidan Jashinkyo Revive.mp3")
call ReviveHero(Hidan_c,x,y,false)
call SetWidgetLife(Hidan_c,1.)
call SetUnitInvulnerable(Hidan_c,true)
call PauseUnit(Hidan_c,true)
if not IsTriggerEnabled(Hidan_getdmgRitual)then
call SetUnitAnimation(Hidan_c,"Death")
else
call SetUnitAnimation(Hidan_c,"Death alternate")
endif
call TimerStart(CreateTimer(),timeRevive,false,function cj_anonym__22)
endfunction
function HidanJashinkyoPlus takes unit tu,boolean log returns nothing
if IsUnitHero(tu)then
if log then
set Hidan_jashinPoint=Hidan_jashinPoint+500
else
set Hidan_jashinPoint=Hidan_jashinPoint+100
endif
else
set Hidan_jashinPoint=Hidan_jashinPoint+10
endif
call HidanJashinkyoChangeText()
endfunction
function BijudamaAct takes unit c,unit d,real dmg,real radius returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real effDegree=0.
local real effDegreeStep=72.
local real effSizeOne
local real effSizeTwo
local real effOffset=radius/2.
local group g=CreateGroup()
local unit tg
if radius<=200.then
set effSizeOne=.75
set effSizeTwo=1.5
elseif radius>200.and radius<=300.then
set effSizeOne=1.
set effSizeTwo=1.75
elseif radius>300.and radius<=400.then
set effSizeOne=1.25
set effSizeTwo=2.
elseif radius>400.and radius<=500.then
set effSizeOne=1.5
set effSizeTwo=2.25
elseif radius>500.then
set effSizeOne=2.
set effSizeTwo=2.5
endif
call Sound("Bijudama Explosion.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedBiju(tg,p)then
if not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitOutpost(tg)then
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg,c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
elseif IsUnitOutpost(tg)or IsUnitBig(tg)then
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg/2.,c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
elseif IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
call SetWidgetLife(tg,GetWidgetLife(tg)-dmg/2.)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call KillDestructablesStart(x,y,radius)
call CreateEffect(x,y,effSizeOne,"NuclearExplosion.mdx",15.)
call DestroyEffect(AddSpecialEffect("SuperBigExplosion.mdx",x,y))
loop
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+effOffset*Cos(effDegree*bj_DEGTORAD),y+effOffset*Sin(effDegree*bj_DEGTORAD)))
set effDegree=effDegree+effDegreeStep
exitwhen effDegree==360.
endloop
call RemoveUnit(d)
set tg=null
set g=null
set p=null
set t=null
endfunction
function GetAssistersAfterKill takes player pk,player pu,integer gold returns nothing
local string s="\n|cFFFFCC00Ассистент(ы)|r: "
local force f=GetAssisters(pu)
local integer i=0
local integer count=1
loop
exitwhen i>10 or count==4
if IsPlayerInForce(Player(i),f)and Player(i)!=pk and Player(i)!=pu then
set s=s+GetPlayerNameColored(Player(i))+", "
set gamestat_A[i]=gamestat_A[i]+1
call mbiVal(gamestat_mb,gamestat_Place[i],6,null,"|cFF959697"+I2S(gamestat_A[i])+"|r")
set count=count+1
endif
set i=i+1
endloop
set i=0
loop
exitwhen i>10
if IsPlayerInForce(Player(i),f)and Player(i)!=pk and Player(i)!=pu then
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD)+(gold/count))
endif
set i=i+1
endloop
if count>1 then
set s=SubString(s,0,StringLength(s)-2)+"."
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,6.,s+"\nВсе ассистенты получают по |cFFFFCC00"+I2S(gold/count)+"|r рьё!|r")
endif
set s=null
set f=null
endfunction
function GetCountExpFor takes unit killer,unit whathero,unit target returns integer
local integer lvl
local integer i=0
if IsUnitHero(target)then
set lvl=GetUnitLevel(target)*400
elseif IsUnitCreep(target)or IsUnitOutpost(target)or IsUnitCreepSpecial(target)or IsUnitCreepStart(target)then
if IsUnitCreepForward(target)then
if IsUnitAlly(target,Player(5))then
if GetUnitTypeId(target)!=AllianceTetsuForwardID then
set i=30
else
set i=50
endif
elseif IsUnitAlly(target,Player(11))then
set i=30
endif
elseif IsUnitCreepSupport(target)then
if IsUnitAlly(target,Player(5))then
set i=30
elseif IsUnitAlly(target,Player(11))then
set i=40
endif
else
set i=20
endif
elseif IsUnitNC(target)then
set i=LoadInteger(Hash,GetHandleId(target),0)
call FlushChildHashtable(Hash,GetHandleId(target))
elseif IsUnitPuppet(target)then
set i=80
endif
if killer!=whathero then
set i=i/4
endif
return i
endfunction
function GetExpHeroes takes unit killer,unit dying,player p returns nothing
local integer count=0
local integer i=0
local real x
local real y
local real x1=GetWidgetX(dying)
local real y1=GetWidgetY(dying)
loop
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and i!=4 and i!=5 then
if IsPlayerEnemy(p,Player(i))and GetWidgetLife(udg_Hero[i])>.405 then
set x=GetWidgetX(udg_Hero[i])
set y=GetWidgetY(udg_Hero[i])
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=900.then
call AddHeroXP(udg_Hero[i],GetCountExpFor(killer,udg_Hero[i],dying),true)
if udg_Exp_XP[i]<GetHeroXP(udg_Hero[i])then
if not IsUnitHero(dying)then
call ExpSaveText(Player(i),i,"за убийство")
else
call ExpSaveText(Player(i),i,"за убийство героя")
endif
endif
set count=count+1
endif
endif
endif
set i=i+1
exitwhen i>10 or count==4
endloop
endfunction
function GetStrickValue takes player pu,integer id returns integer
local integer value=0
if gamestat_StrickNumber[id]==2 then
set value=50
elseif gamestat_StrickNumber[id]==3 then
set value=100
elseif gamestat_StrickNumber[id]==4 then
set value=150
elseif gamestat_StrickNumber[id]==5 then
set value=200
elseif gamestat_StrickNumber[id]==6 then
set value=250
elseif gamestat_StrickNumber[id]==7 then
set value=300
elseif gamestat_StrickNumber[id]==8 then
set value=450
elseif gamestat_StrickNumber[id]==9 then
set value=600
elseif gamestat_StrickNumber[id]>=10 then
set value=750
endif
return value
endfunction
function GetMoney takes unit u,unit k,player pk,player pu,string somekillsText,string streakText returns nothing
local integer gold=GetPlayerState(pk,PLAYER_STATE_RESOURCE_GOLD)
local integer idu=GetPlayerId(pu)
local integer idk=GetPlayerId(pk)
local integer lvl=GetHeroLevel(u)
local integer count=(100+lvl*50)+GetStrickValue(pu,idu)
local integer i=GetRandomInt(1,3)
local string getstreakText=""
local string s=""
if gamestat_StrickNumber[idu]>0 then
if gamestat_StrickNumber[idu]==3 then
set getstreakText="совершившего |cFF20C000Серию убийств|r "
elseif gamestat_StrickNumber[idu]==4 then
set getstreakText="|cFF540081Господствующего|r "
elseif gamestat_StrickNumber[idu]==5 then
set getstreakText="совершившего |cFFDE3C8AМега-убийство|r "
elseif gamestat_StrickNumber[idu]==6 then
set getstreakText="|cFFFE8A0EНеудержимого!|r "
elseif gamestat_StrickNumber[idu]==7 then
set getstreakText="|cFF65A100Свирепствующего|r "
elseif gamestat_StrickNumber[idu]==8 then
set getstreakText="совершившего |cFFE55BB0Зверское убийство!!!|r "
elseif gamestat_StrickNumber[idu]==9 then
set getstreakText="|cFFFF5000БОГОПОДОБНОГО!|r "
elseif gamestat_StrickNumber[idu]>=10 then
set getstreakText="|cFFFF0303За гранью БОГОПОДОБИЯ!|r "
endif
set gamestat_S[idu]="UI\\Widgets\\Console\\Human\\human-inventory-slotfiller.blp"
call mbiVal(gamestat_mb,gamestat_Place[idu],1,gamestat_S[idu],null)
set gamestat_StrickNumber[idu]=0
endif
if i==1 then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,GetPlayerNameColored(pk)+" убил "+getstreakText+"героя игрока "+GetPlayerNameColored(pu)+"|r и получает |cFFFFCC00"+I2S(count)+"|r рьё!|r")
elseif i==2 then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,GetPlayerNameColored(pk)+" прихлопнул "+getstreakText+"героя игрока "+GetPlayerNameColored(pu)+"|r, |cFFFFCC00+"+I2S(count)+"|r рьё!|r")
elseif i==3 then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,GetPlayerNameColored(pk)+" распотрашил "+getstreakText+"героя игрока "+GetPlayerNameColored(pu)+"|r и получает за это |cFFFFCC00"+I2S(count)+"|r рьё!|r")
endif
if streakText==""and somekillsText!=""then
if gamestat_KillsNumber[idk]==2 then
set somekillsText=" совершает двойное убийство!"
elseif gamestat_KillsNumber[idk]==3 then
set somekillsText=" совершает |cFFFE8A0EТРОЙНОЕ|r убийство!!"
elseif gamestat_KillsNumber[idk]==4 then
set somekillsText=" убивает |cFFABA8FFЧЕТВЕРЫХ!|r"
elseif gamestat_KillsNumber[idk]==5 then
set somekillsText=" |cFFFF0303БУЙСТВУЕТ!!!!|r"
endif
set s=somekillsText
elseif streakText!=""and somekillsText!=""then
set s=streakText+somekillsText
elseif streakText!=""and somekillsText==""then
set s=streakText
endif
if s!=""then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,8.,GetPlayerNameColored(pk)+s)
endif
call SetPlayerState(pk,PLAYER_STATE_RESOURCE_GOLD,gold+count)
if IsTriggerEnabled(gg_trg_Assists_Reg)then
call GetAssistersAfterKill(pk,pu,count)
endif
set getstreakText=null
set s=null
endfunction
function cj_anonym__23 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local integer time=LoadInteger(Hash,h,1)
local real x=LoadReal(Hash,h,2)
local real y=LoadReal(Hash,h,3)
local boolean nagatoLog=LoadBoolean(Hash,h,4)
local player p=GetOwningPlayer(u)
local integer idp=GetPlayerId(p)
local integer idu=GetUnitTypeId(u)
local integer i
if time>0 and not udg_GameEnd and not reviveOnLog[idp]and u!=null then
call SaveInteger(Hash,h,1,time-1)
if GetPlayerController(p)==MAP_CONTROL_COMPUTER and GetRandomInt(1,20)==1 and GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)>40*GetHeroLevel(u)then
call SaveInteger(Hash,h,1,0)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-40*GetHeroLevel(u))
endif
call mbiVal(gamestat_mb,gamestat_Place[idp],2,null,"|cFFFCC75D-   "+I2S(time)+"   -|r")
else
if u!=null then
if IsPlayerAlly(p,Player(5))then
call ForceAddPlayer(playerTextForceOne,p)
if IsPlayerInForce(GetLocalPlayer(),playerTextForceOne)then
call SetTextTagVisibility(playerNameText[idp],true)
endif
elseif IsPlayerAlly(p,Player(11))then
call ForceAddPlayer(playerTextForceTwo,p)
if IsPlayerInForce(GetLocalPlayer(),playerTextForceTwo)then
call SetTextTagVisibility(playerNameText[idp],true)
endif
endif
set reviveOnLog[idp]=false
if not udg_GameEnd then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
call mbiVal(gamestat_mb,gamestat_Place[idp],2,null,"|cFFFCC75D- Жив -|r")
else
call mbiVal(gamestat_mb,gamestat_Place[idp],2,null,"|cFFFCC75D- Покинул игру -|r")
endif
endif
if not IsUnitHeroMorph(u)then
set i=1
loop
exitwhen idu==heroes_rawcode[i]or idu==heroes_rikudo_rawcode[i]
set i=i+1
endloop
call mbiVal(gamestat_mb,gamestat_Place[idp],0,mb_iconBTN[i],null)
endif
if nagatoLog then
call Sound("Nagato Gedo Rinne Tensei no Jutsu Restore.mp3")
call ReviveHero(u,x,y,true)
call SetWidgetLife(u,GetUnitState(u,UNIT_STATE_MAX_LIFE)*Nagato_value)
call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MAX_MANA)*Nagato_value)
call UnitRemoveAbility(u,0x41305855)
call UnitRemoveAbility(u,0x42303336)
else
if idu!=morph_rawcode[3]then
call ReviveHero(u,udg_Player_StartX[idp],udg_Player_StartY[idp],true)
call SetWidgetLife(u,GetUnitState(u,UNIT_STATE_MAX_LIFE))
call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MAX_MANA))
else
if Sasori_hirukoDummy!=null then
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(Sasori_hirukoDummy),GetWidgetY(Sasori_hirukoDummy)))
call RemoveUnit(Sasori_hirukoDummy)
set Sasori_hirukoDummy=null
endif
call SasoriGetNewForm(p,u,udg_Player_StartX[idp],udg_Player_StartY[idp])
set u=null
endif
endif
if u!=null then
if GetPlayerController(p)==MAP_CONTROL_COMPUTER then
call HeroEnteranReviveRect(u)
endif
if GetLocalPlayer()==p then
call ClearSelection()
call SelectUnit(u,true)
endif
call SetUnitFlyHeight(u,GetUnitDefaultFlyHeight(u),0.)
call SetUnitVertexColor(u,255,255,255,255)
endif
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set u=null
set t=null
endfunction
function MBDeathHero takes integer idu,unit u,real x,real y,boolean log returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player pu=GetOwningPlayer(u)
local integer id=GetUnitTypeId(u)
local integer i=1
local integer lvlHero=GetHeroLevel(u)
local integer time=lvlHero*5+10
local boolean nagatoLog=false
if GetUnitAbilityLevel(u,Minato_DEATH_GOD)>0 and Minato_shikifujinOn then
set time=time*2
set Minato_shikifujinOn=false
elseif GetUnitAbilityLevel(u,0x41305855)>0 then
set time=4
set nagatoLog=true
else
if not log then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(pu)+" погиб.|r")
endif
call StartSound(gg_snd_GenericWarningHeroFallen1)
set gamestat_D[idu]=gamestat_D[idu]+1
call mbiVal(gamestat_mb,gamestat_Place[idu],5,null,"|cFFFF0303"+I2S(gamestat_D[idu])+"|r")
endif
if not IsUnitHeroMorph(u)then
loop
exitwhen id==heroes_rawcode[i]or id==heroes_rikudo_rawcode[i]
set i=i+1
endloop
call mbiVal(gamestat_mb,gamestat_Place[idu],0,mb_iconDISBTN[i],null)
else
if id==morph_rawcode[3]then
call mbiVal(gamestat_mb,gamestat_Place[idu],0,"ReplaceableTextures\\CommandButtonsDisabled\\DISBTNSasori V3.blp",null)
endif
endif
if IsPlayerAlly(pu,Player(5))then
call ForceAddPlayer(playerTextForceOne,pu)
if IsPlayerInForce(GetLocalPlayer(),playerTextForceOne)then
call SetTextTagVisibility(playerNameText[idu],false)
endif
elseif IsPlayerAlly(pu,Player(11))then
call ForceAddPlayer(playerTextForceTwo,pu)
if IsPlayerInForce(GetLocalPlayer(),playerTextForceTwo)then
call SetTextTagVisibility(playerNameText[idu],false)
endif
endif
call SaveAgentHandle(Hash,h,0,u)
call SaveInteger(Hash,h,1,time)
call SaveReal(Hash,h,2,x)
call SaveReal(Hash,h,3,y)
call SaveBoolean(Hash,h,4,nagatoLog)
call TimerStart(t,1.,true,function cj_anonym__23)
set pu=null
set t=null
endfunction
function cj_anonym__24 takes nothing returns nothing
local timer t=GetExpiredTimer()
set gamestat_KillsNumber[LoadInteger(Hash,GetHandleId(t),0)]=0
call FlushChildHashtable(Hash,GetHandleId(t))
call DestroyTimer(t)
set t=null
endfunction
function CountKillsNull takes integer id returns nothing
local timer t=CreateTimer()
call SaveInteger(Hash,GetHandleId(t),0,id)
call TimerStart(t,15.,false,function cj_anonym__24)
set t=null
endfunction
function MBFragHero takes integer idu,unit c,unit k,player pc,player pk,real x,real y,boolean morph returns nothing
local player pl=GetLocalPlayer()
local integer idk
local string somekillsText=""
local string streakText=""
if not morph then
if k!=null then
call MBDeathHero(idu,c,x,y,true)
else
call MBDeathHero(idu,c,x,y,false)
endif
endif
if k!=null and GetUnitAbilityLevel(c,0x41305855)==0 then
if GetUnitAbilityLevel(c,0x4130434D)>0 then
set k=Hidan_c
endif
if pk==Player(5)or pk==Player(11)or pk==Player(PLAYER_NEUTRAL_AGGRESSIVE)then
if PlayerKillerAfterCreeps==null then
if pk==Player(5)then
call DisplayTimedTextToPlayer(pl,0.,0.,8.,GetPlayerNameColored(pc)+" был убит силами "+nameteamOne)
elseif pk==Player(11)then
call DisplayTimedTextToPlayer(pl,0.,0.,8.,GetPlayerNameColored(pc)+" был убит силами "+nameteamTwo)
elseif pk==Player(PLAYER_NEUTRAL_AGGRESSIVE)then
call DisplayTimedTextToPlayer(pl,0.,0.,8.,GetPlayerNameColored(pc)+" был убит нейтральными силами.|r")
endif
else
if IsPlayerEnemy(PlayerKillerAfterCreeps,pc)then
set pk=PlayerKillerAfterCreeps
set PlayerKillerAfterCreeps=null
endif
endif
endif
if IsUnitEnemy(k,pc)and pk!=pc and pk==Player(0)or pk==Player(1)or pk==Player(2)or pk==Player(3)or pk==Player(6)or pk==Player(7)or pk==Player(8)or pk==Player(9)then
set idk=GetPlayerId(pk)
if GetUnitTypeId(k)==0x4F303132 then
if GetRandomInt(1,2)==1 then
call Sound("Juugo Laughter.mp3")
else
call Sound("Juugo Laughter 2.mp3")
endif
endif
if gamestat_FB==1 then
call SetPlayerState(pk,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(pk,PLAYER_STATE_RESOURCE_GOLD)+250)
call Sound("First Blood.mp3")
call DisplayTimedTextToPlayer(pl,0.,0.,8.,GetPlayerNameColored(pk)+" проливает |cFFFF5000первую кровь|r и получает |cFFFFCC00250|r рьё!|r")
set gamestat_FB=2
endif
set gamestat_K[idk]=gamestat_K[idk]+1
call mbiVal(gamestat_mb,gamestat_Place[idk],4,null,"|cFFFF5000"+I2S(gamestat_K[idk])+"|r")
set gamestat_KillsNumber[idk]=gamestat_KillsNumber[idk]+1
if gamestat_KillsNumber[idk]>1 then
if gamestat_KillsNumber[idk]==2 then
set somekillsText="\nприкончив двоих подряд!"
call Sound("Kills 2 Double Kill.mp3")
elseif gamestat_KillsNumber[idk]==3 then
set somekillsText="\nприкончив |cFFFE8A0EТРОИХ|r!!"
call Sound("Kills 3 Tripple Kill.mp3")
elseif gamestat_KillsNumber[idk]==4 then
set somekillsText="\nсовершая |cFFABA8FFЧЕТЫРЕ убийства подряд!|r"
call Sound("Kills 4 Ultra Kill.mp3")
elseif gamestat_KillsNumber[idk]==5 then
set somekillsText="\n|cFFFF0303БУЙСТВО!!!!|r"
call Sound("Kills 5 Rampage.mp3")
endif
elseif gamestat_KillsNumber[idk]==1 then
call CountKillsNull(idk)
endif
set gamestat_StrickNumber[idk]=gamestat_StrickNumber[idk]+1
if gamestat_StrickNumber[idk]==3 then
set gamestat_S[idk]="OTHER Streak 1\\Icon.blp"
set streakText=" совершает |cFF20C000Серию убийств|r"
call Sound("Streak 3 Killing Spree.mp3")
elseif gamestat_StrickNumber[idk]==4 then
set gamestat_S[idk]="OTHER Streak 2\\Icon.blp"
set streakText=" |cFF540081Господствует|r"
call Sound("Streak 4 Dominating.mp3")
elseif gamestat_StrickNumber[idk]==5 then
set gamestat_S[idk]="OTHER Streak 3\\Icon.blp"
set streakText=" совершил |cFFDE3C8AМега-убийство|r"
call Sound("Streak 5 Mega Kill.mp3")
elseif gamestat_StrickNumber[idk]==6 then
set gamestat_S[idk]="OTHER Streak 4\\Icon.blp"
set streakText=" |cFFFE8A0EНеудержим!|r"
call Sound("Streak 6 Unstoppable.mp3")
elseif gamestat_StrickNumber[idk]==7 then
set gamestat_S[idk]="OTHER Streak 5\\Icon.blp"
set streakText=" |cFF65A100Свирепствует|r"
call Sound("Streak 7 Wicked Sick.mp3")
elseif gamestat_StrickNumber[idk]==8 then
set gamestat_S[idk]="OTHER Streak 6\\Icon.blp"
set streakText=" только что совершил |cFFE55BB0Зверское убийство!!!|r"
call Sound("Streak 8 Monster Kill.mp3")
elseif gamestat_StrickNumber[idk]==9 then
set gamestat_S[idk]="OTHER Streak 7\\Icon.blp"
set streakText=" |cFFFF5000БОГОПОДОБЕН!|r"
call Sound("Streak 9 GodLike.mp3")
elseif gamestat_StrickNumber[idk]>=10 then
set gamestat_S[idk]="OTHER Streak 8\\Icon.blp"
set streakText=" находится |cFFFF0303За гранью БОГОПОДОБИЯ!|r"
call Sound("Streak 10 Holyshit.mp3")
endif
call mbiVal(gamestat_mb,gamestat_Place[idk],1,gamestat_S[idk],null)
call GetMoney(c,k,pk,pc,somekillsText,streakText)
endif
endif
set pl=null
endfunction
function GetTrackableX takes trackable tr returns real
return LoadReal(Hash,GetHandleId(tr),0)
endfunction
function GetTrackableY takes trackable tr returns real
return LoadReal(Hash,GetHandleId(tr),1)
endfunction
function GetTrackableOwner takes trackable tr returns player
return LoadPlayerHandle(Hash,GetHandleId(tr),2)
endfunction
function GetTrackableRawcode takes trackable tr returns integer
return LoadInteger(Hash,GetHandleId(tr),3)
endfunction
function NewTrackable takes string path,real x,real y,player owner,integer rawcode returns trackable
local trackable tr
local integer h
if GetLocalPlayer()!=owner then
set path=""
endif
set tr=CreateTrackable(path,x,y,0.)
set h=GetHandleId(tr)
call SaveReal(Hash,h,0,x)
call SaveReal(Hash,h,1,y)
call SavePlayerHandle(Hash,h,2,owner)
call SaveInteger(Hash,h,3,rawcode)
return tr
endfunction
function CreateTrack takes string path,real x,real y,integer herot,trigger track,trigger click returns nothing
local trackable tr
local integer i=0
local player p
loop
exitwhen i>10
if i!=5 then
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER and not udg_VM_Log[i]then
set tr=NewTrackable(path,x,y,p,herot)
call TriggerRegisterTrackableTrackEvent(track,tr)
call TriggerRegisterTrackableHitEvent(click,tr)
endif
endif
set i=i+1
endloop
set tr=null
set p=null
endfunction
function CreateTrackForHost takes string path,real x,real y,integer herot,trigger track,trigger click returns nothing
local trackable tr=NewTrackable(path,x,y,udg_Host,herot)
call TriggerRegisterTrackableTrackEvent(track,tr)
call TriggerRegisterTrackableHitEvent(click,tr)
set tr=null
endfunction
function CreateTrackOnce takes string path,real x,real y,player p,integer herot,trigger track,trigger click returns nothing
local trackable tr=NewTrackable(path,x,y,p,herot)
call TriggerRegisterTrackableTrackEvent(track,tr)
call TriggerRegisterTrackableHitEvent(click,tr)
set tr=null
endfunction
function cj_anonym__25 takes nothing returns nothing
local integer i=1
local integer playernumber=0
local player pl=GetLocalPlayer()
local destructable des
call RemoveDestructable(PickRandom)
call RemoveDestructable(PickFilterKiller)
call RemoveDestructable(PickFilterFighter)
call RemoveDestructable(PickFilterSupport)
call RemoveDestructable(PickFilterCancel)
call DestroyTextTag(captainTextTime)
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,"|cFFFFCC00Капитаны забанили и выбрали героев для своих команд.\nТеперь каждый игрок должен выбрать одного из выбранных его капитаном героев.|r")
set heroes_pick[0]=0
loop
if LoadInteger(Hash,heroes_pick[i],27)==0 then
call SaveBoolean(Hash,heroes_pick[i],0,false)
set des=LoadDestructableHandle(Hash,heroes_pick[i],1)
call CreateDestructable(0x42303449,GetWidgetX(des),GetWidgetY(des),0,1.,0)
call RemoveDestructable(des)
set playernumber=0
loop
if playernumber!=5 and not udg_VM_Log[playernumber]and GetPlayerSlotState(Player(playernumber))==PLAYER_SLOT_STATE_PLAYING then
call RemoveDestructable(LoadDestructableHandle(Hash,playernumber,0))
call DestroyEffect(LoadEffectHandle(Hash,playernumber,1))
endif
set playernumber=playernumber+1
exitwhen playernumber>10
endloop
set heroes_pick[i]=0
elseif LoadInteger(Hash,heroes_pick[i],27)==1 then
set heroes_pick[i]=0
endif
set i=i+1
exitwhen i>hero_number
endloop
loop
call SaveBoolean(Hash,heroBlockedRawcode[captainHeroBlockedRawcode],0,true)
call RemoveDestructable(destructableBlockedEmptyRawcode[captainHeroBlockedRawcode])
call ShowDestructable(destructableBlockedIconRawcode[captainHeroBlockedRawcode],true)
set captainHeroBlockedRawcode=captainHeroBlockedRawcode-1
exitwhen captainHeroBlockedRawcode==0
endloop
set i=0
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
call DestroyEffect(PickFilterEff_1[i])
call DestroyEffect(PickFilterEff_2[i])
call DestroyEffect(PickFilterEff_3[i])
call DestroyEffect(PickFilterEff_4[i])
call DestroyEffect(PickFilterEff_5[i])
call DestroyEffect(PickFilterEff_6[i])
call DestroyEffect(PickFilterEff_7[i])
call DestroyEffect(PickFilterEff_8[i])
call DestroyEffect(PickFilterEff_9[i])
call DestroyEffect(PickFilterEff_10[i])
call DestroyEffect(PickFilterEff_11[i])
call DestroyEffect(PickFilterEff_12[i])
call DestroyEffect(PickFilterEff_13[i])
call DestroyEffect(PickFilterEff_14[i])
call DestroyEffect(PickFilterEff_15[i])
call DestroyEffect(PickFilterEff_16[i])
call DestroyEffect(PickFilterEff_17[i])
call DestroyEffect(PickFilterEff_18[i])
call DestroyEffect(PickFilterEff_19[i])
call DestroyEffect(PickFilterEff_20[i])
call DestroyEffect(PickFilterEff_21[i])
call DestroyEffect(PickFilterEff_22[i])
call DestroyEffect(PickFilterEff_23[i])
set playerCanPick[i]=true
endif
set i=i+1
exitwhen i>10
endloop
set captainModeEnd=true
set captainMode=false
call DestroyTimer(GetExpiredTimer())
set des=null
set pl=null
endfunction
function CaptainsModeEnd takes nothing returns nothing
set playerCanPick[GetPlayerId(captainAlliance)]=false
set playerCanPick[GetPlayerId(captainAkatsuki)]=false
call TimerStart(CreateTimer(),1.,false,function cj_anonym__25)
endfunction
function CapatinModeNextStage takes destructable desIconHero,integer idDes,real x,real y,integer heroRawcode,player p returns nothing
local integer h=GetHandleId(gg_trg_Click)
local string s="BTNselection.mdx"
local player pl=GetLocalPlayer()
local destructable desIconEmpty
if captainState=="бан"then
call RemoveDestructable(desIconHero)
call CreateDestructable(0x42303449,x,y,0,1.,0)
call SaveInteger(Hash,heroRawcode,27,1)
if p==captainAlliance then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAllianceHeroBanNumber+9)
set x=GetWidgetX(desIconEmpty)
set y=GetWidgetY(desIconEmpty)
call RemoveDestructable(desIconEmpty)
call CreateDestructable(idDes,x,y,0,1.,0)
set captainAllianceHeroBanNumber=captainAllianceHeroBanNumber+1
if captainPhaseCur==1 or captainPhaseCur==5 or captainPhaseCur==9 or captainPhaseCur==13 then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAkatsukiHeroBanNumber+13)
set captainState="бан"
elseif captainPhaseCur==2 or captainPhaseCur==6 or captainPhaseCur==10 or captainPhaseCur==14 then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAkatsukiHeroPickNumber+5)
set captainState="пик"
endif
set playerCanPick[GetPlayerId(captainAlliance)]=false
set playerCanPick[GetPlayerId(captainAkatsuki)]=true
elseif p==captainAkatsuki then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAkatsukiHeroBanNumber+13)
set x=GetWidgetX(desIconEmpty)
set y=GetWidgetY(desIconEmpty)
call RemoveDestructable(desIconEmpty)
call CreateDestructable(idDes,x,y,0,1.,0)
set captainAkatsukiHeroBanNumber=captainAkatsukiHeroBanNumber+1
if captainPhaseCur==1 or captainPhaseCur==5 or captainPhaseCur==9 or captainPhaseCur==13 then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAllianceHeroBanNumber+9)
set captainState="бан"
elseif captainPhaseCur==2 or captainPhaseCur==6 or captainPhaseCur==10 or captainPhaseCur==14 then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAllianceHeroPickNumber+1)
set captainState="пик"
endif
set playerCanPick[GetPlayerId(captainAlliance)]=true
set playerCanPick[GetPlayerId(captainAkatsuki)]=false
endif
elseif captainState=="пик"then
call ShowDestructable(desIconHero,false)
set captainHeroBlockedRawcode=captainHeroBlockedRawcode+1
set heroBlockedRawcode[captainHeroBlockedRawcode]=heroRawcode
set destructableBlockedIconRawcode[captainHeroBlockedRawcode]=desIconHero
set destructableBlockedEmptyRawcode[captainHeroBlockedRawcode]=CreateDestructable(0x42303449,x,y,0,1.,0)
call SaveInteger(Hash,heroRawcode,27,2)
call SaveAgentHandle(Hash,heroRawcode,28,p)
if p==captainAlliance then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAllianceHeroPickNumber+1)
set x=GetWidgetX(desIconEmpty)
set y=GetWidgetY(desIconEmpty)
call RemoveDestructable(desIconEmpty)
call CreateDestructable(idDes,x,y,0,1.,0)
set captainAllianceHeroPickNumber=captainAllianceHeroPickNumber+1
if captainPhaseCur==3 or captainPhaseCur==7 or captainPhaseCur==11 or captainPhaseCur==15 then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAkatsukiHeroPickNumber+5)
set captainState="пик"
elseif captainPhaseCur==4 or captainPhaseCur==8 or captainPhaseCur==12 or captainPhaseCur==16 then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAkatsukiHeroBanNumber+13)
set captainState="бан"
endif
set playerCanPick[GetPlayerId(captainAlliance)]=false
set playerCanPick[GetPlayerId(captainAkatsuki)]=true
elseif p==captainAkatsuki then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAkatsukiHeroPickNumber+5)
set x=GetWidgetX(desIconEmpty)
set y=GetWidgetY(desIconEmpty)
call RemoveDestructable(desIconEmpty)
call CreateDestructable(idDes,x,y,0,1.,0)
set captainAkatsukiHeroPickNumber=captainAkatsukiHeroPickNumber+1
if captainPhaseCur==3 or captainPhaseCur==7 or captainPhaseCur==11 or captainPhaseCur==15 then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAllianceHeroPickNumber+1)
set captainState="пик"
elseif captainPhaseCur==4 or captainPhaseCur==8 or captainPhaseCur==12 or captainPhaseCur==16 then
set desIconEmpty=LoadDestructableHandle(Hash,h,captainAllianceHeroBanNumber+9)
set captainState="бан"
endif
set playerCanPick[GetPlayerId(captainAlliance)]=true
set playerCanPick[GetPlayerId(captainAkatsuki)]=false
endif
endif
set captainPhaseCur=captainPhaseCur+1
call DestroyEffect(captainEffectPick)
if captainPhaseCur<=captainPhaseMax then
set x=GetWidgetX(desIconEmpty)
set y=GetWidgetY(desIconEmpty)
set captainEffectPick=AddSpecialEffect(s,x,y)
if playerCanPick[GetPlayerId(captainAlliance)]then
if captainState=="бан"then
set captainTimeToChoice=30
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,"Теперь "+GetPlayerNameColored(captainAlliance)+" |cFFFFCC00банит|r героя.")
call SetTextTagPos(captainTextTime,captainTextOffsetX,3823.-captainModeOffsetText,heightGameText)
elseif captainState=="пик"then
set captainTimeToChoice=40
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,"Теперь "+GetPlayerNameColored(captainAlliance)+" |cFFFFCC00выбирает|r героя.")
call SetTextTagPos(captainTextTime,captainTextOffsetX,4015.-captainModeOffsetText,heightGameText)
endif
call SetTextTagColor(captainTextTime,254,138,14,0)
elseif playerCanPick[GetPlayerId(captainAkatsuki)]then
if captainState=="бан"then
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,"Теперь "+GetPlayerNameColored(captainAkatsuki)+" |cFFFFCC00банит|r героя.")
set captainTimeToChoice=30
call SetTextTagPos(captainTextTime,captainTextOffsetX,3759.-captainModeOffsetText,heightGameText)
elseif captainState=="пик"then
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,"Теперь "+GetPlayerNameColored(captainAkatsuki)+" |cFFFFCC00выбирает|r героя.")
set captainTimeToChoice=40
call SetTextTagPos(captainTextTime,captainTextOffsetX,3951.-captainModeOffsetText,heightGameText)
endif
call SetTextTagColor(captainTextTime,78,42,4,0)
endif
call SetTextTagText(captainTextTime,I2S(captainTimeToChoice),.02)
else
call CaptainsModeEnd()
endif
set desIconEmpty=null
set pl=null
set s=null
endfunction
function ClickCreateIcons takes destructable des,player p,integer heroRawcode returns nothing
local integer idDes=GetDestructableTypeId(des)
local integer id=GetPlayerId(p)
local integer i=0
local real x=GetWidgetX(des)
local real y=GetWidgetY(des)
loop
if i!=id and i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and LoadDestructableHandle(Hash,i,0)==LoadDestructableHandle(Hash,id,0)then
call RemoveDestructable(LoadDestructableHandle(Hash,i,0))
call DestroyEffect(LoadEffectHandle(Hash,i,1))
endif
set i=i+1
exitwhen i>10
endloop
call SaveBoolean(Hash,heroRawcode,0,false)
call RemoveDestructable(LoadDestructableHandle(Hash,id,0))
call DestroyEffect(LoadEffectHandle(Hash,id,1))
if captainMode then
call CapatinModeNextStage(des,idDes,x,y,heroRawcode,p)
else
call RemoveDestructable(des)
if x!=0.and y!=0.then
call CreateDestructable(0x42303449,x,y,0,1.,0)
endif
endif
endfunction
function CaptainsModeGetRandomHero takes player p returns nothing
local integer random=0
local integer numberhero=0
loop
set random=GetRandomInt(1,hero_number)
set numberhero=hc_list[random]
exitwhen LoadInteger(Hash,heroes_pick[numberhero],27)==0
endloop
call ClickCreateIcons(LoadDestructableHandle(Hash,heroes_pick[numberhero],1),p,heroes_pick[numberhero])
endfunction
function GetRandomHeroOfClass takes integer i returns integer
local integer randomMin=1
local integer randomMax=hero_number
local integer random=0
local integer numberhero=0
local integer iterationCur=0
local integer iterationMax=15
local integer iterationRandom=0
if i==1 then
set randomMin=1
set randomMax=23
elseif i==2 then
set randomMin=24
set randomMax=28
elseif i==3 then
set randomMin=29
set randomMax=36
elseif i==4 then
set randomMin=37
set randomMax=40
endif
loop
if iterationCur<iterationMax then
set iterationCur=iterationCur+1
else
if i==1 then
set i=GetRandomInt(2,4)
elseif i==2 then
set iterationRandom=GetRandomInt(1,3)
if iterationRandom==1 then
set i=1
elseif iterationRandom==2 then
set i=3
elseif iterationRandom==3 then
set i=4
endif
elseif i==3 then
set iterationRandom=GetRandomInt(1,3)
if iterationRandom==1 then
set i=1
elseif iterationRandom==2 then
set i=2
elseif iterationRandom==3 then
set i=4
endif
elseif i==4 then
set i=GetRandomInt(1,3)
endif
if i==1 then
set randomMin=1
set randomMax=23
elseif i==2 then
set randomMin=24
set randomMax=28
elseif i==3 then
set randomMin=29
set randomMax=36
elseif i==4 then
set randomMin=37
set randomMax=40
endif
set iterationCur=0
set insurancePick=true
endif
set random=GetRandomInt(randomMin,randomMax)
set numberhero=hc_list[random]
exitwhen heroes_pick[numberhero]!=0
endloop
return numberhero
endfunction
function SpecularRandomGetHero takes nothing returns integer
local integer i=0
local boolean log=false
local integer numberHero=0
local integer iterationCur=0
local integer iterationMax=15
loop
set i=GetRandomInt(1,4)
if i==1 and not hc_killer_log then
set hc_killer_log=true
set hc_killer_current=hc_killer_current+1
set log=true
elseif i==2 and not hc_fighter_log then
set hc_fighter_log=true
set hc_fighter_current=hc_fighter_current+1
set log=true
elseif i==3 and not hc_support_log then
set hc_support_log=true
set hc_support_current=hc_support_current+1
set log=true
elseif i==4 and not hc_specialist_log then
set hc_specialist_log=true
set hc_specialist_current=hc_specialist_current+1
set log=true
endif
if not log and iterationCur>iterationMax then
if i==1 then
set hc_killer_log=true
set hc_killer_current=hc_killer_current+1
set log=true
elseif i==2 then
set hc_fighter_log=true
set hc_fighter_current=hc_fighter_current+1
set log=true
elseif i==3 then
set hc_support_log=true
set hc_support_current=hc_support_current+1
set log=true
elseif i==4 then
set hc_specialist_log=true
set hc_specialist_current=hc_specialist_current+1
set log=true
endif
endif
set iterationCur=iterationCur+1
exitwhen log==true
endloop
set numberHero=GetRandomHeroOfClass(i)
if insurancePick then
if i==1 then
set hc_killer_log=false
set hc_killer_current=hc_killer_current-1
elseif i==2 then
set hc_fighter_log=false
set hc_fighter_current=hc_fighter_current-1
elseif i==3 then
set hc_support_log=false
set hc_support_current=hc_support_current-1
elseif i==4 then
set hc_specialist_log=false
set hc_specialist_current=hc_specialist_current-1
endif
if CheckHeroClass(numberHero)==1 and not hc_killer_log then
set hc_killer_log=true
set hc_killer_current=hc_killer_current+1
elseif CheckHeroClass(numberHero)==2 and not hc_fighter_log then
set hc_fighter_log=true
set hc_fighter_current=hc_fighter_current+1
elseif CheckHeroClass(numberHero)==3 and not hc_support_log then
set hc_support_log=true
set hc_support_current=hc_support_current+1
elseif CheckHeroClass(numberHero)==4 and not hc_specialist_log then
set hc_specialist_log=true
set hc_specialist_current=hc_specialist_current+1
endif
endif
return numberHero
endfunction
function SpecularRandomGetHeroForAkatsuki takes nothing returns integer
local integer i=0
if hc_killer_current>0 then
set hc_killer_current=hc_killer_current-1
set i=1
elseif hc_fighter_current>0 then
set hc_fighter_current=hc_fighter_current-1
set i=2
elseif hc_support_current>0 then
set hc_support_current=hc_support_current-1
set i=3
elseif hc_specialist_current>0 then
set hc_specialist_current=hc_specialist_current-1
set i=4
endif
if i>0 then
set i=GetRandomHeroOfClass(i)
else
set i=SpecularRandomGetHero()
endif
return i
endfunction
function cj_anonym__26 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer index=LoadInteger(Hash,h,0)
local integer indexmax=LoadInteger(Hash,h,1)
local integer i=0
local integer final=0
local boolean log=false
local boolean captainLog=false
local player p
if index<indexmax then
loop
set p=Player(i)
if i!=5 and not pickOne[i]and pickTwo[i]and udg_Hero[i]==null then
if i<5 then
if GetPlayerController(p)==MAP_CONTROL_COMPUTER and captainModeEnd then
loop
set final=SpecularRandomGetHero()
if IsPlayerAlly(p,LoadPlayerHandle(Hash,heroes_pick[final],28))then
set captainLog=true
endif
exitwhen captainLog==true
endloop
set captainLog=false
else
set final=SpecularRandomGetHero()
endif
set udg_Hero[i]=CreateUnit(p,heroes_pick[final],GetHeroMainX(p),GetHeroMainY(p),GetHeroMainF(p))
call HeroMoveOnMainAreaAfterPick(p,i)
elseif i>5 then
if GetPlayerController(p)==MAP_CONTROL_COMPUTER and captainModeEnd then
loop
set final=SpecularRandomGetHeroForAkatsuki()
if IsPlayerAlly(p,LoadPlayerHandle(Hash,heroes_pick[final],28))then
set captainLog=true
endif
exitwhen captainLog==true
endloop
set captainLog=false
else
set final=SpecularRandomGetHeroForAkatsuki()
endif
set udg_Hero[i]=CreateUnit(p,heroes_pick[final],GetHeroMainX(p),GetHeroMainY(p),GetHeroMainF(p))
call HeroMoveOnMainAreaAfterPick(p,i)
endif
if GetPlayerController(p)==MAP_CONTROL_USER then
set udg_Repick_Log[i]=true
endif
set heroes_pick[final]=0
set final=0
set pickOne[i]=true
set log=true
endif
set i=i+1
exitwhen i>10 or log==true
endloop
call SaveInteger(Hash,h,0,index+1)
else
call TriggerExecute(gg_trg_Multiboard)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
endif
set p=null
set t=null
endfunction
function CreateHeroes takes nothing returns nothing
local timer t=CreateTimer()
local integer i=0
local integer indexmax=0
loop
if i!=5 and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and not udg_VM_Log[i]then
set indexmax=indexmax+1
set pickOne[i]=false
set pickTwo[i]=true
endif
set i=i+1
exitwhen i>10
endloop
call SaveInteger(Hash,GetHandleId(t),0,0)
call SaveInteger(Hash,GetHandleId(t),1,indexmax)
call TimerStart(t,.25,true,function cj_anonym__26)
set t=null
endfunction
function HeroPickEnd takes player p,integer id,integer herot,integer h,integer htr returns nothing
local integer i=0
if GetLocalPlayer()==p then
call PanCameraToTimed(GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),0.)
call ClearSelection()
call SelectUnit(udg_Hero[id],true)
endif
call DestroyEffect(PickFilterEff_1[id])
call DestroyEffect(PickFilterEff_2[id])
call DestroyEffect(PickFilterEff_3[id])
call DestroyEffect(PickFilterEff_4[id])
call DestroyEffect(PickFilterEff_5[id])
call DestroyEffect(PickFilterEff_6[id])
call DestroyEffect(PickFilterEff_7[id])
call DestroyEffect(PickFilterEff_8[id])
call DestroyEffect(PickFilterEff_9[id])
call DestroyEffect(PickFilterEff_10[id])
call DestroyEffect(PickFilterEff_11[id])
call DestroyEffect(PickFilterEff_12[id])
call DestroyEffect(PickFilterEff_13[id])
call DestroyEffect(PickFilterEff_14[id])
call DestroyEffect(PickFilterEff_15[id])
call DestroyEffect(PickFilterEff_16[id])
call DestroyEffect(PickFilterEff_17[id])
call DestroyEffect(PickFilterEff_18[id])
call DestroyEffect(PickFilterEff_19[id])
call DestroyEffect(PickFilterEff_20[id])
call DestroyEffect(PickFilterEff_21[id])
call DestroyEffect(PickFilterEff_22[id])
call DestroyEffect(PickFilterEff_23[id])
loop
exitwhen heroes_pick[i]==GetUnitTypeId(udg_Hero[id])
set i=i+1
endloop
if IsHeroClassKiller(udg_Hero[id])then
if hc_killer_current==0 then
set hc_killer_current=hc_killer_current+1
endif
set hc_killer_log=true
elseif IsHeroClassFighter(udg_Hero[id])then
if hc_fighter_current==0 then
set hc_fighter_current=hc_fighter_current+1
endif
set hc_fighter_log=true
elseif IsHeroClassSupport(udg_Hero[id])then
if hc_support_current==0 then
set hc_support_current=hc_support_current+1
endif
set hc_support_log=true
elseif IsHeroClassSpecialist(udg_Hero[id])then
if hc_specialist_current==0 then
set hc_specialist_current=hc_specialist_current+1
endif
set hc_specialist_log=true
endif
set heroes_pick[i]=0
set playerCanPick[id]=false
set player_AI=player_AI+1
if player_AI==player_Human then
call DestroyTextTag(gameText[10])
call DestroyTextTag(gameText[11])
call FlushChildHashtable(Hash,herot)
if htr!=0 then
call FlushChildHashtable(Hash,htr)
endif
if botlog then
call CreateHeroes()
else
call TriggerExecute(gg_trg_Multiboard)
endif
endif
endfunction
function InitGameSettingsDestroyNeedEffects takes integer d1,integer d2,integer d3,integer d4,integer d5,integer d6,integer d7,integer d8 returns nothing
if d1!=0 and gs_eff[d1]!=null then
call DestroyEffect(gs_eff[d1])
set gs_eff[d1]=null
endif
if d2!=0 and gs_eff[d2]!=null then
call DestroyEffect(gs_eff[d2])
set gs_eff[d2]=null
endif
if d3!=0 and gs_eff[d3]!=null then
call DestroyEffect(gs_eff[d3])
set gs_eff[d3]=null
endif
if d4!=0 and gs_eff[d4]!=null then
call DestroyEffect(gs_eff[d4])
set gs_eff[d4]=null
endif
if d5!=0 and gs_eff[d5]!=null then
call DestroyEffect(gs_eff[d5])
set gs_eff[d5]=null
endif
if d6!=0 and gs_eff[d6]!=null then
call DestroyEffect(gs_eff[d6])
set gs_eff[d6]=null
endif
if d7!=0 and gs_eff[d7]!=null then
call DestroyEffect(gs_eff[d7])
set gs_eff[d7]=null
endif
if d8!=0 and gs_eff[d8]!=null then
call DestroyEffect(gs_eff[d8])
set gs_eff[d8]=null
endif
endfunction
function InitGameSettingsCreateNeedEffects takes integer c1,integer c2,integer c3,integer c4,integer c5,integer c6,integer c7,integer c8 returns nothing
local string s="BTNselection.mdx"
if c1!=0 then
set gs_eff[c1]=AddSpecialEffect(s,GetWidgetX(gs_des[c1]),GetWidgetY(gs_des[c1]))
endif
if c2!=0 then
set gs_eff[c2]=AddSpecialEffect(s,GetWidgetX(gs_des[c2]),GetWidgetY(gs_des[c2]))
endif
if c3!=0 then
set gs_eff[c3]=AddSpecialEffect(s,GetWidgetX(gs_des[c3]),GetWidgetY(gs_des[c3]))
endif
if c4!=0 then
set gs_eff[c4]=AddSpecialEffect(s,GetWidgetX(gs_des[c4]),GetWidgetY(gs_des[c4]))
endif
if c5!=0 then
set gs_eff[c5]=AddSpecialEffect(s,GetWidgetX(gs_des[c5]),GetWidgetY(gs_des[c5]))
endif
if c6!=0 then
set gs_eff[c6]=AddSpecialEffect(s,GetWidgetX(gs_des[c6]),GetWidgetY(gs_des[c6]))
endif
if c7!=0 then
set gs_eff[c7]=AddSpecialEffect(s,GetWidgetX(gs_des[c7]),GetWidgetY(gs_des[c7]))
endif
if c8!=0 then
set gs_eff[c8]=AddSpecialEffect(s,GetWidgetX(gs_des[c8]),GetWidgetY(gs_des[c8]))
endif
endfunction
function CreepsConditionsUp1 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp1 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Alliance_Head,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_1 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_1=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_1)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_1,gg_rct_Creeps_Alliance_Top)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_1,Condition(function CreepsConditionsUp1))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_1,function CreepsActionsUp1)
endfunction
function CreepsConditionsUp2 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp2 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Up_3,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Alliance_Top),id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_2 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_2=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_2)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_2,gg_rct_Creeps_Konoha_Up_2)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_2,Condition(function CreepsConditionsUp2))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_2,function CreepsActionsUp2)
endfunction
function CreepsConditionsUp3 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp3 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Up_4,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Up_2,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_3 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_3=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_3)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_3,gg_rct_Creeps_Konoha_Up_3)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_3,Condition(function CreepsConditionsUp3))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_3,function CreepsActionsUp3)
endfunction
function CreepsConditionsUp4 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp4 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Up),id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Up_3,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_4 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_4=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_4)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_4,gg_rct_Creeps_Konoha_Up_4)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_4,Condition(function CreepsConditionsUp4))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_4,function CreepsActionsUp4)
endfunction
function CreepsConditionsUp5 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp5 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
call UnitRemoveAbility(u,0x41305A48)
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Akatsuki_Up_5),id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Konoha_Up_4),id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_5 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_5=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_5)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_5,gg_rct_Creeps_Up)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_5,Condition(function CreepsConditionsUp5))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_5,function CreepsActionsUp5)
endfunction
function CreepsConditionsUp6 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp6 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Up_4,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Up),id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_6 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_6=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_6)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_6,gg_rct_Creeps_Akatsuki_Up_5)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_6,Condition(function CreepsConditionsUp6))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_6,function CreepsActionsUp6)
endfunction
function CreepsConditionsUp7 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp7 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Up_3,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Up_5,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_7 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_7=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_7)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_7,gg_rct_Creeps_Akatsuki_Up_4)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_7,Condition(function CreepsConditionsUp7))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_7,function CreepsActionsUp7)
endfunction
function CreepsConditionsUp8 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp8 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Up_2,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Up_4,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_8 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_8=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_8)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_8,gg_rct_Creeps_Akatsuki_Up_3)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_8,Condition(function CreepsConditionsUp8))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_8,function CreepsActionsUp8)
endfunction
function CreepsConditionsUp9 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp9 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Akatsuki_Top),id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Up_3,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_9 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_9=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_9)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_9,gg_rct_Creeps_Akatsuki_Up_2)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_9,Condition(function CreepsConditionsUp9))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_9,function CreepsActionsUp9)
endfunction
function CreepsConditionsUp10 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsUp10 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Akatsuki_Head,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Up_Imp_10 takes nothing returns nothing
set gg_trg_Creeps_Up_Imp_10=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Up_Imp_10)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Up_Imp_10,gg_rct_Creeps_Akatsuki_Top)
call TriggerAddCondition(gg_trg_Creeps_Up_Imp_10,Condition(function CreepsConditionsUp10))
call TriggerAddAction(gg_trg_Creeps_Up_Imp_10,function CreepsActionsUp10)
endfunction
function CreepsConditionsDown1 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown1 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Alliance_Head,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_1 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_1=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_1)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_1,gg_rct_Creeps_Alliance_Bot)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_1,Condition(function CreepsConditionsDown1))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_1,function CreepsActionsDown1)
endfunction
function CreepsConditionsDown2 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown2 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Down_3,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Alliance_Bot),id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_2 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_2=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_2)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_2,gg_rct_Creeps_Konoha_Down_2)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_2,Condition(function CreepsConditionsDown2))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_2,function CreepsActionsDown2)
endfunction
function CreepsConditionsDown3 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown3 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Down_4,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Down_2,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_3 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_3=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_3)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_3,gg_rct_Creeps_Konoha_Down_3)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_3,Condition(function CreepsConditionsDown3))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_3,function CreepsActionsDown3)
endfunction
function CreepsConditionsDown4 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown4 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Down_5,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Down_3,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_4 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_4=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_4)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_4,gg_rct_Creeps_Konoha_Down_4)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_4,Condition(function CreepsConditionsDown4))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_4,function CreepsActionsDown4)
endfunction
function CreepsConditionsDown5 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown5 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Down),id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Down_4,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_5 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_5=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_5)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_5,gg_rct_Creeps_Konoha_Down_5)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_5,Condition(function CreepsConditionsDown5))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_5,function CreepsActionsDown5)
endfunction
function CreepsConditionsDown6 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown6 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
call UnitRemoveAbility(u,0x41305A48)
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Akatsuki_Down_4),id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Konoha_Down_5),id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_6 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_6=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_6)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_6,gg_rct_Creeps_Down)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_6,Condition(function CreepsConditionsDown6))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_6,function CreepsActionsDown6)
endfunction
function CreepsConditionsDown7 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown7 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Down_3,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Down),id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_7 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_7=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_7)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_7,gg_rct_Creeps_Akatsuki_Down_4)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_7,Condition(function CreepsConditionsDown7))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_7,function CreepsActionsDown7)
endfunction
function CreepsConditionsDown8 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown8 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Down_2,id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Down_4,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_8 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_8=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_8)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_8,gg_rct_Creeps_Akatsuki_Down_3)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_8,Condition(function CreepsConditionsDown8))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_8,function CreepsActionsDown8)
endfunction
function CreepsConditionsDown9 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown9 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,AILineGetNeedRect(u,gg_rct_Creeps_Akatsuki_Bot),id)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Down_3,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_9 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_9=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_9)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_9,gg_rct_Creeps_Akatsuki_Down_2)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_9,Condition(function CreepsConditionsDown9))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_9,function CreepsActionsDown9)
endfunction
function CreepsConditionsDown10 takes nothing returns boolean
return GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and IsUnitCreep(GetTriggerUnit())or IsUnitHero(GetTriggerUnit())
endfunction
function CreepsActionsDown10 takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Akatsuki_Head,id)
endif
set u=null
endfunction
function InitTrig_Creeps_Down_Imp_10 takes nothing returns nothing
set gg_trg_Creeps_Down_Imp_10=CreateTrigger()
call DisableTrigger(gg_trg_Creeps_Down_Imp_10)
call TriggerRegisterEnterRectSimple(gg_trg_Creeps_Down_Imp_10,gg_rct_Creeps_Akatsuki_Bot)
call TriggerAddCondition(gg_trg_Creeps_Down_Imp_10,Condition(function CreepsConditionsDown10))
call TriggerAddAction(gg_trg_Creeps_Down_Imp_10,function CreepsActionsDown10)
endfunction
function GiveRTNAbility takes unit u returns nothing
local integer idp=GetPlayerId(GetOwningPlayer(u))
local integer randomAI=GetRandomInt(1,4)
if not wtfModOn then
set JS_RTN_CurLevel[idp]=JS_RTN_CurLevel[idp]+1
if randomAI==1 then
if GetUnitAbilityLevel(u,0x4130495A)==0 then
call UnitAddAbility(u,0x4130495A)
else
call SetUnitAbilityLevel(u,0x41313630,GetUnitAbilityLevel(u,0x41313630)+1)
call SetUnitAbilityLevel(u,0x41305541,GetUnitAbilityLevel(u,0x41305541)+1)
endif
elseif randomAI==2 then
if GetUnitAbilityLevel(u,0x41304D53)==0 then
call UnitAddAbility(u,0x41304D53)
else
call SetUnitAbilityLevel(u,0x41313556,GetUnitAbilityLevel(u,0x41313556)+1)
endif
elseif randomAI==3 then
if GetUnitAbilityLevel(u,0x41305634)==0 then
call UnitAddAbility(u,0x41305634)
else
call SetUnitAbilityLevel(u,0x41304735,GetUnitAbilityLevel(u,0x41304735)+1)
endif
elseif randomAI==4 then
if GetUnitAbilityLevel(u,0x4130354B)==0 then
call UnitAddAbility(u,0x4130354B)
else
call SetUnitAbilityLevel(u,0x41313343,GetUnitAbilityLevel(u,0x41313343)+1)
endif
endif
else
loop
set randomAI=GetRandomInt(1,4)
if randomAI==1 then
if GetUnitAbilityLevel(u,0x4130495A)==0 then
call UnitAddAbility(u,0x4130495A)
else
call SetUnitAbilityLevel(u,0x41313630,GetUnitAbilityLevel(u,0x41313630)+1)
call SetUnitAbilityLevel(u,0x41305541,GetUnitAbilityLevel(u,0x41305541)+1)
endif
elseif randomAI==2 then
if GetUnitAbilityLevel(u,0x41304D53)==0 then
call UnitAddAbility(u,0x41304D53)
else
call SetUnitAbilityLevel(u,0x41313556,GetUnitAbilityLevel(u,0x41313556)+1)
endif
elseif randomAI==3 then
if GetUnitAbilityLevel(u,0x41305634)==0 then
call UnitAddAbility(u,0x41305634)
else
call SetUnitAbilityLevel(u,0x41304735,GetUnitAbilityLevel(u,0x41304735)+1)
endif
elseif randomAI==4 then
if GetUnitAbilityLevel(u,0x4130354B)==0 then
call UnitAddAbility(u,0x4130354B)
else
call SetUnitAbilityLevel(u,0x41313343,GetUnitAbilityLevel(u,0x41313343)+1)
endif
endif
set JS_RTN_CurLevel[idp]=JS_RTN_CurLevel[idp]+1
exitwhen JS_RTN_CurLevel[idp]==JS_RTN_MaxLevel
endloop
endif
endfunction
function GetAINewAbility takes unit c,integer i,integer lvl returns nothing
local integer random
if lvl<5 then
if i==heroes_rawcode[Asuma]then
if lvl==2 then
call UnitAddAbility(c,Asuma_TEKKO)
call UnitAddAbility(c,Asuma_KAWARIMI)
elseif lvl==3 then
call UnitAddAbility(c,Asuma_HAISEKISHOU)
elseif lvl==4 then
call UnitAddAbility(c,Asuma_FUJIN)
endif
elseif i==heroes_rawcode[Chiyo]then
if lvl==2 then
call UnitAddAbility(c,Chiyo_SOSHUHA)
call UnitAddAbility(c,Chiyo_CHAKRA_NO_ITO)
elseif lvl==3 then
call UnitAddAbility(c,Chiyo_PAPA_MAMA)
elseif lvl==4 then
call UnitAddAbility(c,Chiyo_CHIKAMATSU)
endif
elseif i==heroes_rawcode[Danzo]then
if lvl==2 then
call UnitAddAbility(c,Danzo_FUTON)
call UnitAddAbility(c,Danzo_FUINJUTSU)
elseif lvl==3 then
call UnitAddAbility(c,Danzo_BAKU)
elseif lvl==4 then
call UnitAddAbility(c,Danzo_ULT)
endif
elseif i==heroes_rawcode[Darui]then
if lvl==2 then
call UnitAddAbility(c,Darui_SUIJINHEKI)
call UnitAddAbility(c,Darui_REIZAA_SAAKASU)
elseif lvl==3 then
call UnitAddAbility(c,Darui_ZANBATO)
elseif lvl==4 then
call UnitAddAbility(c,Darui_KURO_PANSA)
endif
elseif i==heroes_rawcode[Ei]then
if lvl==2 then
call UnitAddAbility(c,Ei_ERUBO)
call UnitAddAbility(c,Ei_ARMOR)
elseif lvl==3 then
call UnitAddAbility(c,Ei_GIROCHIN)
elseif lvl==4 then
call UnitAddAbility(c,Ei_ULT)
endif
elseif i==heroes_rawcode[Gaara]then
if lvl==2 then
call UnitAddAbility(c,Gaara_SABAKU)
call UnitAddAbility(c,Gaara_ZETTAI_BOGYO)
elseif lvl==3 then
call UnitAddAbility(c,Gaara_SABAKUHA)
elseif lvl==4 then
call UnitAddAbility(c,Gaara_SABAKU_SOTAISO)
endif
elseif i==heroes_rawcode[Gai]then
if lvl==2 then
call UnitAddAbility(c,Gai_ENTRY)
call UnitAddAbility(c,Gai_GORIKI)
elseif lvl==3 then
call UnitAddAbility(c,Gai_HT)
elseif lvl==4 then
call UnitAddAbility(c,Gai_ULT)
endif
elseif i==heroes_rawcode[Gengetsu]then
if lvl==2 then
call UnitAddAbility(c,Gengetsu_MIZUDEPPO)
call UnitAddAbility(c,Gengetsu_OHAMAGURI)
elseif lvl==3 then
call UnitAddAbility(c,Gengetsu_MIZUFUSEN)
elseif lvl==4 then
call UnitAddAbility(c,Gengetsu_JOKEY_BOY)
endif
elseif i==heroes_rawcode[Haku]then
if lvl==2 then
call UnitAddAbility(c,Haku_SENSATSU)
call UnitAddAbility(c,Haku_SHUNSHIN)
elseif lvl==3 then
call UnitAddAbility(c,Haku_HISSATSU)
elseif lvl==4 then
call UnitAddAbility(c,Haku_ULT)
endif
elseif i==heroes_rawcode[Han]then
if lvl==2 then
call UnitAddAbility(c,Han_FUNGOKYAKU)
call UnitAddAbility(c,Han_FUNSUIKEN)
elseif lvl==3 then
call UnitAddAbility(c,Han_YOROI)
elseif lvl==4 then
call UnitAddAbility(c,Han_TSUNOORI)
endif
elseif i==heroes_rawcode[Hanzo]then
if lvl==2 then
call UnitAddAbility(c,Hanzo_HAGAMA)
call UnitAddAbility(c,Hanzo_SHUNSHIN)
elseif lvl==3 then
call UnitAddAbility(c,Hanzo_KATON)
elseif lvl==4 then
call UnitAddAbility(c,Hanzo_KUCHIYOSE)
endif
elseif i==heroes_rawcode[Hashirama]then
if lvl==2 then
call UnitAddAbility(c,Hashirama_MOKUTON_NO_JUTSU)
call UnitAddAbility(c,Hashirama_KOKUANGYO)
elseif lvl==3 then
call UnitAddAbility(c,Hashirama_JUKAI_KOTAN)
elseif lvl==4 then
call UnitAddAbility(c,Hashirama_SUMMON)
endif
elseif i==heroes_rawcode[Hidan]then
if lvl==2 then
call UnitAddAbility(c,Hidan_SANJIN_NO_OGAMA)
call UnitAddAbility(c,Hidan_KYOKENBYO)
elseif lvl==3 then
call UnitAddAbility(c,Hidan_JASHINKYO)
elseif lvl==4 then
call UnitAddAbility(c,Hidan_JUJUTSU)
endif
elseif i==heroes_rawcode[Itachi]then
if lvl==2 then
call UnitAddAbility(c,Itachi_TSUKUYOMI)
call UnitAddAbility(c,Itachi_BUNSHIN)
elseif lvl==3 then
call UnitAddAbility(c,Itachi_GOKAKYU)
elseif lvl==4 then
call UnitAddAbility(c,Itachi_IZANAMI)
endif
elseif i==heroes_rawcode[Jiraya]then
set random=GetRandomInt(1,2)
if lvl==2 then
if random==1 then
call UnitAddAbility(c,Jiraiya_RASENGAN)
elseif random==2 then
call UnitAddAbility(c,Jiraiya_GAMAYUDAN)
endif
if random==1 then
call UnitAddAbility(c,Jiraiya_KATON_ENDAN)
elseif random==2 then
call UnitAddAbility(c,Jiraiya_GAMAGAKURE)
endif
elseif lvl==3 then
if random==1 then
call UnitAddAbility(c,Jiraiya_YOMI_NUMA)
elseif random==2 then
call UnitAddAbility(c,Jiraiya_GAMAGUCHI)
endif
elseif lvl==4 then
if random==1 then
call UnitAddAbility(c,Jiraiya_HARI_JIZO)
elseif random==2 then
call UnitAddAbility(c,Jiraiya_GAMAKEN)
endif
endif
elseif i==heroes_rawcode[Jugo]then
if lvl==2 then
call UnitAddAbility(c,Jugo_KUSARI)
call UnitAddAbility(c,Jugo_ISHIKKI)
elseif lvl==3 then
call UnitAddAbility(c,Jugo_JUMP)
elseif lvl==4 then
call UnitAddAbility(c,Jugo_ULT)
endif
elseif i==heroes_rawcode[Kabuto]then
if lvl==2 then
call UnitAddAbility(c,Kabuto_MUKI_TENSEI)
call UnitAddAbility(c,Kabuto_KUMO_SOKAI)
elseif lvl==3 then
call UnitAddAbility(c,Kabuto_HAKUGEKI)
elseif lvl==4 then
call UnitAddAbility(c,Kabuto_ULT)
endif
elseif i==heroes_rawcode[Kakashi]then
if lvl==2 then
call UnitAddAbility(c,Kakashi_TSUIGA)
call UnitAddAbility(c,Kakashi_BUNSHIN)
elseif lvl==3 then
call UnitAddAbility(c,Kakashi_KAMUI)
elseif lvl==4 then
call UnitAddAbility(c,Kakashi_KAMUI_RAIKIRI)
endif
elseif i==heroes_rawcode[Madara]then
set random=GetRandomInt(1,2)
if lvl==2 then
if random==1 then
call UnitAddAbility(c,Madara_GOKA_MEKKYAKU)
elseif random==2 then
call UnitAddAbility(c,Madara_KYUIN)
endif
if random==1 then
call UnitAddAbility(c,Madara_GOKA_MESSHITSU)
elseif random==2 then
call UnitAddAbility(c,Madara_MOKUBUNSHIN)
endif
elseif lvl==3 then
if random==1 then
call UnitAddAbility(c,Madara_HAIJINGAKURE)
elseif random==2 then
call UnitAddAbility(c,Madara_MOKTON)
endif
elseif lvl==4 then
if random==1 then
call UnitAddAbility(c,Madara_RYUEN_HOKA)
elseif random==2 then
call UnitAddAbility(c,Madara_KAJUKAI)
endif
endif
elseif i==heroes_rawcode[Mei]then
if lvl==2 then
call UnitAddAbility(c,Mei_KOMO)
call UnitAddAbility(c,Mei_YOKAI)
elseif lvl==3 then
call UnitAddAbility(c,Mei_KIRIGAKURE)
elseif lvl==4 then
call UnitAddAbility(c,Mei_SUIRYUDAN)
endif
elseif i==heroes_rawcode[Minato]then
if lvl==2 then
call UnitAddAbility(c,Minato_RASENGAN)
call UnitAddAbility(c,Minato_HIRAISHIN)
elseif lvl==3 then
call UnitAddAbility(c,Minato_KUCHIYOSE)
elseif lvl==4 then
call UnitAddAbility(c,Minato_ULT)
endif
elseif i==heroes_rawcode[Mu]then
if lvl==2 then
call UnitAddAbility(c,Mu_MEISAI)
call UnitAddAbility(c,Mu_KEIJUGAN)
elseif lvl==3 then
call UnitAddAbility(c,Mu_BUNRETSU)
elseif lvl==4 then
call UnitAddAbility(c,Mu_ULT)
endif
elseif i==heroes_rawcode[Nagato]then
if lvl==2 then
call UnitAddAbility(c,Nagato_GEDO)
call UnitAddAbility(c,Nagato_FUTON)
elseif lvl==3 then
call UnitAddAbility(c,Nagato_KANCHI)
elseif lvl==4 then
call UnitAddAbility(c,Nagato_RINNE_TENSEI)
endif
elseif i==heroes_rawcode[Naruto]then
if lvl==2 then
call UnitAddAbility(c,Naruto_KAGE_BUNSHIN)
call UnitAddAbility(c,Naruto_RASENGAN)
elseif lvl==3 then
call UnitAddAbility(c,Naruto_KUCHIYOSE)
elseif lvl==4 then
call UnitAddAbility(c,Naruto_SENNIN_MODO)
endif
elseif i==heroes_rawcode[Neji]then
if lvl==2 then
call UnitAddAbility(c,Neji_JUKEN)
call UnitAddAbility(c,Neji_KAITEN)
elseif lvl==3 then
call UnitAddAbility(c,Neji_BYAKUGAN)
elseif lvl==4 then
call UnitAddAbility(c,Neji_HAKKE_ROKUJUYON_SHO)
endif
elseif i==heroes_rawcode[Obito]then
if lvl==2 then
call UnitAddAbility(c,Obito_MS)
call UnitAddAbility(c,Obito_UCHIHA_KAENJIN)
elseif lvl==3 then
call UnitAddAbility(c,Obito_GOKAKYU)
elseif lvl==4 then
call UnitAddAbility(c,Obito_KUSARI)
endif
elseif i==heroes_rawcode[Onoki]then
if lvl==2 then
call UnitAddAbility(c,Onoki_KAIJUGAN)
call UnitAddAbility(c,Onoki_KEIJUGAN)
elseif lvl==3 then
call UnitAddAbility(c,Onoki_GOREMU)
elseif lvl==4 then
call UnitAddAbility(c,Onoki_ULT)
endif
elseif i==heroes_rawcode[Orochimaru]then
if lvl==2 then
call UnitAddAbility(c,Orochimaru_SNAKE)
call UnitAddAbility(c,Orochimaru_KUSANAGI)
elseif lvl==3 then
call UnitAddAbility(c,Orochimaru_RASHOMON)
elseif lvl==4 then
call UnitAddAbility(c,Orochimaru_ULT)
endif
elseif i==heroes_rawcode[Sai]then
if lvl==2 then
call UnitAddAbility(c,Sai_SHISHI)
call UnitAddAbility(c,Sai_HEBI)
elseif lvl==3 then
call UnitAddAbility(c,Sai_TORA)
elseif lvl==4 then
call UnitAddAbility(c,Sai_CHOSHIN_GIGA)
endif
elseif i==heroes_rawcode[Sakura]then
if lvl==2 then
call UnitAddAbility(c,Sakura_OKASHO)
call UnitAddAbility(c,Sakura_GOCKEN)
elseif lvl==3 then
call UnitAddAbility(c,Sakura_SHOSEN)
elseif lvl==4 then
call UnitAddAbility(c,Sakura_BYAKUGO)
endif
elseif i==heroes_rawcode[Sasori]then
if lvl==2 then
call UnitAddAbility(c,Sasori_AIANTERU)
call UnitAddAbility(c,Sasori_SENBONS)
elseif lvl==3 then
call UnitAddAbility(c,Sasori_GANJONA_KESU)
elseif lvl==4 then
call UnitAddAbility(c,Sasori_SENBOMB)
endif
elseif i==heroes_rawcode[Sasuke]then
if lvl==2 then
call UnitAddAbility(c,Sasuke_CHIDORI)
call UnitAddAbility(c,Sasuke_KATON)
elseif lvl==3 then
call UnitAddAbility(c,Sasuke_SHARINGAN)
elseif lvl==4 then
call UnitAddAbility(c,Sasuke_KUCHIYOSE)
endif
elseif i==heroes_rawcode[Shikamaru]then
if lvl==2 then
call UnitAddAbility(c,Shikamaru_KAGE_MANE)
call UnitAddAbility(c,Shikamaru_HIKARIDAMA)
elseif lvl==3 then
call UnitAddAbility(c,Shikamaru_KIBAKUFUDA)
elseif lvl==4 then
call UnitAddAbility(c,Shikamaru_ULT)
endif
elseif i==heroes_rawcode[Suigetsu]then
if lvl==2 then
call UnitAddAbility(c,Suigetsu_MIZUDEPPO)
call UnitAddAbility(c,Suigetsu_GOSUIWAN)
elseif lvl==3 then
call UnitAddAbility(c,Suigetsu_SUIKA)
elseif lvl==4 then
call UnitAddAbility(c,Suigetsu_ULT)
endif
elseif i==heroes_rawcode[Tobirama]then
if lvl==2 then
call UnitAddAbility(c,Tobirama_SUIDANHA)
call UnitAddAbility(c,Tobirama_SUITON)
elseif lvl==3 then
call UnitAddAbility(c,Tobirama_SUISHOHA)
elseif lvl==4 then
call UnitAddAbility(c,Tobirama_KAGEBUNSHIN)
endif
elseif i==heroes_rawcode[Tsunade]then
if lvl==2 then
call UnitAddAbility(c,Tsunade_TSUTEN_KYAKU)
call UnitAddAbility(c,Tsunade_ENKAKU_CHIYU)
elseif lvl==3 then
call UnitAddAbility(c,Tsunade_TAIRYOKU)
elseif lvl==4 then
call UnitAddAbility(c,Tsunade_ULT)
endif
elseif i==heroes_rawcode[Yamato]then
if lvl==2 then
call UnitAddAbility(c,Yamato_DAIJURIN)
call UnitAddAbility(c,Yamato_SHIBARI)
elseif lvl==3 then
call UnitAddAbility(c,Yamato_SHICHURO)
elseif lvl==4 then
call UnitAddAbility(c,Yamato_ULT)
endif
elseif i==heroes_rawcode[Zabuza]then
if lvl==2 then
call UnitAddAbility(c,Zabuza_KIRIGAKURE)
call UnitAddAbility(c,Zabuza_MIZU_BUNSHIN)
elseif lvl==3 then
call UnitAddAbility(c,Zabuza_KUBIKIRIBOCHO)
elseif lvl==4 then
call UnitAddAbility(c,Zabuza_ULT)
endif
elseif i==heroes_rawcode[Zetsu]then
if lvl==2 then
call UnitAddAbility(c,Zetsu_KAGERO)
call UnitAddAbility(c,Zetsu_TOBI)
elseif lvl==3 then
call UnitAddAbility(c,Zetsu_BUNSHIN)
elseif lvl==4 then
call UnitAddAbility(c,Zetsu_ULT)
endif
endif
elseif lvl==10 and wtfModOn then
if i==heroes_rawcode[Asuma]then
call UnitAddAbility(c,Asuma_TEKKO)
call UnitAddAbility(c,Asuma_KAWARIMI)
call UnitAddAbility(c,Asuma_HAISEKISHOU)
call UnitAddAbility(c,Asuma_FUJIN)
elseif i==heroes_rawcode[Chiyo]then
call UnitAddAbility(c,Chiyo_SOSHUHA)
call UnitAddAbility(c,Chiyo_CHAKRA_NO_ITO)
call UnitAddAbility(c,Chiyo_PAPA_MAMA)
call UnitAddAbility(c,Chiyo_CHIKAMATSU)
elseif i==heroes_rawcode[Danzo]then
call UnitAddAbility(c,Danzo_FUTON)
call UnitAddAbility(c,Danzo_FUINJUTSU)
call UnitAddAbility(c,Danzo_BAKU)
call UnitAddAbility(c,Danzo_ULT)
elseif i==heroes_rawcode[Darui]then
call UnitAddAbility(c,Darui_SUIJINHEKI)
call UnitAddAbility(c,Darui_REIZAA_SAAKASU)
call UnitAddAbility(c,Darui_ZANBATO)
call UnitAddAbility(c,Darui_KURO_PANSA)
elseif i==heroes_rawcode[Ei]then
call UnitAddAbility(c,Ei_ERUBO)
call UnitAddAbility(c,Ei_ARMOR)
call UnitAddAbility(c,Ei_GIROCHIN)
call UnitAddAbility(c,Ei_ULT)
elseif i==heroes_rawcode[Gaara]then
call UnitAddAbility(c,Gaara_SABAKU)
call UnitAddAbility(c,Gaara_ZETTAI_BOGYO)
call UnitAddAbility(c,Gaara_SABAKUHA)
call UnitAddAbility(c,Gaara_SABAKU_SOTAISO)
elseif i==heroes_rawcode[Gai]then
call UnitAddAbility(c,Gai_ENTRY)
call UnitAddAbility(c,Gai_GORIKI)
call UnitAddAbility(c,Gai_HT)
call UnitAddAbility(c,Gai_ULT)
elseif i==heroes_rawcode[Gengetsu]then
call UnitAddAbility(c,Gengetsu_MIZUDEPPO)
call UnitAddAbility(c,Gengetsu_OHAMAGURI)
call UnitAddAbility(c,Gengetsu_MIZUFUSEN)
call UnitAddAbility(c,Gengetsu_JOKEY_BOY)
elseif i==heroes_rawcode[Haku]then
call UnitAddAbility(c,Haku_SENSATSU)
call UnitAddAbility(c,Haku_SHUNSHIN)
call UnitAddAbility(c,Haku_HISSATSU)
call UnitAddAbility(c,Haku_ULT)
elseif i==heroes_rawcode[Han]then
call UnitAddAbility(c,Han_FUNGOKYAKU)
call UnitAddAbility(c,Han_FUNSUIKEN)
call UnitAddAbility(c,Han_YOROI)
call UnitAddAbility(c,Han_TSUNOORI)
elseif i==heroes_rawcode[Hanzo]then
call UnitAddAbility(c,Hanzo_HAGAMA)
call UnitAddAbility(c,Hanzo_SHUNSHIN)
call UnitAddAbility(c,Hanzo_KATON)
call UnitAddAbility(c,Hanzo_KUCHIYOSE)
elseif i==heroes_rawcode[Hashirama]then
call UnitAddAbility(c,Hashirama_MOKUTON_NO_JUTSU)
call UnitAddAbility(c,Hashirama_KOKUANGYO)
call UnitAddAbility(c,Hashirama_JUKAI_KOTAN)
call UnitAddAbility(c,Hashirama_SUMMON)
elseif i==heroes_rawcode[Hidan]then
call UnitAddAbility(c,Hidan_SANJIN_NO_OGAMA)
call UnitAddAbility(c,Hidan_KYOKENBYO)
call UnitAddAbility(c,Hidan_JASHINKYO)
call UnitAddAbility(c,Hidan_JUJUTSU)
elseif i==heroes_rawcode[Itachi]then
call UnitAddAbility(c,Itachi_TSUKUYOMI)
call UnitAddAbility(c,Itachi_BUNSHIN)
call UnitAddAbility(c,Itachi_GOKAKYU)
call UnitAddAbility(c,Itachi_IZANAMI)
elseif i==heroes_rawcode[Jiraya]then
set random=GetRandomInt(1,2)
if random==1 then
call UnitAddAbility(c,Jiraiya_RASENGAN)
elseif random==2 then
call UnitAddAbility(c,Jiraiya_GAMAYUDAN)
endif
if random==1 then
call UnitAddAbility(c,Jiraiya_KATON_ENDAN)
elseif random==2 then
call UnitAddAbility(c,Jiraiya_GAMAGAKURE)
endif
if random==1 then
call UnitAddAbility(c,Jiraiya_YOMI_NUMA)
elseif random==2 then
call UnitAddAbility(c,Jiraiya_GAMAGUCHI)
endif
if random==1 then
call UnitAddAbility(c,Jiraiya_HARI_JIZO)
elseif random==2 then
call UnitAddAbility(c,Jiraiya_GAMAKEN)
endif
elseif i==heroes_rawcode[Jugo]then
call UnitAddAbility(c,Jugo_KUSARI)
call UnitAddAbility(c,Jugo_ISHIKKI)
call UnitAddAbility(c,Jugo_JUMP)
call UnitAddAbility(c,Jugo_ULT)
elseif i==heroes_rawcode[Kabuto]then
call UnitAddAbility(c,Kabuto_MUKI_TENSEI)
call UnitAddAbility(c,Kabuto_KUMO_SOKAI)
call UnitAddAbility(c,Kabuto_HAKUGEKI)
call UnitAddAbility(c,Kabuto_ULT)
elseif i==heroes_rawcode[Kakashi]then
call UnitAddAbility(c,Kakashi_TSUIGA)
call UnitAddAbility(c,Kakashi_BUNSHIN)
call UnitAddAbility(c,Kakashi_KAMUI)
call UnitAddAbility(c,Kakashi_KAMUI_RAIKIRI)
elseif i==heroes_rawcode[Madara]then
set random=GetRandomInt(1,2)
if random==1 then
call UnitAddAbility(c,Madara_GOKA_MEKKYAKU)
elseif random==2 then
call UnitAddAbility(c,Madara_KYUIN)
endif
if random==1 then
call UnitAddAbility(c,Madara_GOKA_MESSHITSU)
elseif random==2 then
call UnitAddAbility(c,Madara_MOKUBUNSHIN)
endif
if random==1 then
call UnitAddAbility(c,Madara_HAIJINGAKURE)
elseif random==2 then
call UnitAddAbility(c,Madara_MOKTON)
endif
if random==1 then
call UnitAddAbility(c,Madara_RYUEN_HOKA)
elseif random==2 then
call UnitAddAbility(c,Madara_KAJUKAI)
endif
elseif i==heroes_rawcode[Mei]then
call UnitAddAbility(c,Mei_KOMO)
call UnitAddAbility(c,Mei_YOKAI)
call UnitAddAbility(c,Mei_KIRIGAKURE)
call UnitAddAbility(c,Mei_SUIRYUDAN)
elseif i==heroes_rawcode[Minato]then
call UnitAddAbility(c,Minato_RASENGAN)
call UnitAddAbility(c,Minato_HIRAISHIN)
call UnitAddAbility(c,Minato_KUCHIYOSE)
call UnitAddAbility(c,Minato_ULT)
elseif i==heroes_rawcode[Mu]then
call UnitAddAbility(c,Mu_MEISAI)
call UnitAddAbility(c,Mu_KEIJUGAN)
call UnitAddAbility(c,Mu_BUNRETSU)
call UnitAddAbility(c,Mu_ULT)
elseif i==heroes_rawcode[Nagato]then
call UnitAddAbility(c,Nagato_GEDO)
call UnitAddAbility(c,Nagato_FUTON)
call UnitAddAbility(c,Nagato_KANCHI)
call UnitAddAbility(c,Nagato_RINNE_TENSEI)
elseif i==heroes_rawcode[Naruto]then
call UnitAddAbility(c,Naruto_KAGE_BUNSHIN)
call UnitAddAbility(c,Naruto_RASENGAN)
call UnitAddAbility(c,Naruto_KUCHIYOSE)
call UnitAddAbility(c,Naruto_SENNIN_MODO)
elseif i==heroes_rawcode[Neji]then
call UnitAddAbility(c,Neji_JUKEN)
call UnitAddAbility(c,Neji_KAITEN)
call UnitAddAbility(c,Neji_BYAKUGAN)
call UnitAddAbility(c,Neji_HAKKE_ROKUJUYON_SHO)
elseif i==heroes_rawcode[Obito]then
call UnitAddAbility(c,Obito_MS)
call UnitAddAbility(c,Obito_UCHIHA_KAENJIN)
call UnitAddAbility(c,Obito_GOKAKYU)
call UnitAddAbility(c,Obito_KUSARI)
elseif i==heroes_rawcode[Onoki]then
call UnitAddAbility(c,Onoki_KAIJUGAN)
call UnitAddAbility(c,Onoki_KEIJUGAN)
call UnitAddAbility(c,Onoki_GOREMU)
call UnitAddAbility(c,Onoki_ULT)
elseif i==heroes_rawcode[Orochimaru]then
call UnitAddAbility(c,Orochimaru_SNAKE)
call UnitAddAbility(c,Orochimaru_KUSANAGI)
call UnitAddAbility(c,Orochimaru_RASHOMON)
call UnitAddAbility(c,Orochimaru_ULT)
elseif i==heroes_rawcode[Sai]then
call UnitAddAbility(c,Sai_SHISHI)
call UnitAddAbility(c,Sai_HEBI)
call UnitAddAbility(c,Sai_TORA)
call UnitAddAbility(c,Sai_CHOSHIN_GIGA)
elseif i==heroes_rawcode[Sakura]then
call UnitAddAbility(c,Sakura_OKASHO)
call UnitAddAbility(c,Sakura_GOCKEN)
call UnitAddAbility(c,Sakura_SHOSEN)
call UnitAddAbility(c,Sakura_BYAKUGO)
elseif i==heroes_rawcode[Sasori]then
call UnitAddAbility(c,Sasori_AIANTERU)
call UnitAddAbility(c,Sasori_SENBONS)
call UnitAddAbility(c,Sasori_GANJONA_KESU)
call UnitAddAbility(c,Sasori_SENBOMB)
elseif i==heroes_rawcode[Sasuke]then
call UnitAddAbility(c,Sasuke_CHIDORI)
call UnitAddAbility(c,Sasuke_KATON)
call UnitAddAbility(c,Sasuke_SHARINGAN)
call UnitAddAbility(c,Sasuke_KUCHIYOSE)
elseif i==heroes_rawcode[Shikamaru]then
call UnitAddAbility(c,Shikamaru_KAGE_MANE)
call UnitAddAbility(c,Shikamaru_HIKARIDAMA)
call UnitAddAbility(c,Shikamaru_KIBAKUFUDA)
call UnitAddAbility(c,Shikamaru_ULT)
elseif i==heroes_rawcode[Suigetsu]then
call UnitAddAbility(c,Suigetsu_MIZUDEPPO)
call UnitAddAbility(c,Suigetsu_GOSUIWAN)
call UnitAddAbility(c,Suigetsu_SUIKA)
call UnitAddAbility(c,Suigetsu_ULT)
elseif i==heroes_rawcode[Tobirama]then
call UnitAddAbility(c,Tobirama_SUIDANHA)
call UnitAddAbility(c,Tobirama_SUITON)
call UnitAddAbility(c,Tobirama_SUISHOHA)
call UnitAddAbility(c,Tobirama_KAGEBUNSHIN)
elseif i==heroes_rawcode[Tsunade]then
call UnitAddAbility(c,Tsunade_TSUTEN_KYAKU)
call UnitAddAbility(c,Tsunade_ENKAKU_CHIYU)
call UnitAddAbility(c,Tsunade_TAIRYOKU)
call UnitAddAbility(c,Tsunade_ULT)
elseif i==heroes_rawcode[Yamato]then
call UnitAddAbility(c,Yamato_DAIJURIN)
call UnitAddAbility(c,Yamato_SHIBARI)
call UnitAddAbility(c,Yamato_SHICHURO)
call UnitAddAbility(c,Yamato_ULT)
elseif i==heroes_rawcode[Zabuza]then
call UnitAddAbility(c,Zabuza_KIRIGAKURE)
call UnitAddAbility(c,Zabuza_MIZU_BUNSHIN)
call UnitAddAbility(c,Zabuza_KUBIKIRIBOCHO)
call UnitAddAbility(c,Zabuza_ULT)
elseif i==heroes_rawcode[Zetsu]then
call UnitAddAbility(c,Zetsu_KAGERO)
call UnitAddAbility(c,Zetsu_TOBI)
call UnitAddAbility(c,Zetsu_BUNSHIN)
call UnitAddAbility(c,Zetsu_ULT)
endif
endif
if lvl>=5 then
if i!=heroes_rawcode[Danzo]and i!=heroes_rawcode[Gai]and i!=heroes_rawcode[Gengetsu]and i!=heroes_rawcode[Haku]and i!=heroes_rawcode[Hanzo]and i!=heroes_rawcode[Hidan]and i!=heroes_rawcode[Itachi]and i!=heroes_rawcode[Madara]and i!=heroes_rawcode[Minato]and i!=heroes_rawcode[Mu]and i!=heroes_rawcode[Nagato]and i!=heroes_rawcode[Naruto]and i!=morph_rawcode[4]and i!=heroes_rawcode[Onoki]and i!=heroes_rawcode[Sai]and i!=heroes_rawcode[Sasori]and i!=heroes_rawcode[Zabuza]then
call GiveRTNAbility(c)
endif
endif
endfunction
function GetUpLevelActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local player p=GetOwningPlayer(c)
local integer i=GetUnitTypeId(c)
local integer lvl=GetHeroLevel(c)
local integer idp=GetPlayerId(p)
if IsUnitHero(c)then
call DestroyEffect(AddSpecialEffectTarget("newlevelup.mdx",c,"overhead"))
set gamestat_L[idp]=lvl
call mbiVal(gamestat_mb,gamestat_Place[idp],3,null,"|cFFC6D2FF"+I2S(gamestat_L[idp])+"|r")
if IsPlayerAlly(p,Player(5))then
set CEGSstepAlliance=lvl
elseif IsPlayerAlly(p,Player(11))then
set CEGSstepAkatsuki=lvl
endif
if ImprovementAlliance<CEGSstepAlliance then
set ImprovementAlliance=ImprovementAlliance+1
call SetPlayerTechResearched(Player(11),0x52303034,ImprovementAlliance)
endif
if ImprovementAkatsuki<CEGSstepAkatsuki then
set ImprovementAkatsuki=ImprovementAkatsuki+1
call SetPlayerTechResearched(Player(5),0x52303034,ImprovementAkatsuki)
endif
if lvl>=5 then
if lvl==10 then
set JS_RTN_PossibleLevel[idp]=JS_RTN_MaxLevel-JS_RTN_CurLevel[idp]
else
set JS_RTN_PossibleLevel[idp]=JS_RTN_PossibleLevel[idp]+1
endif
if i==heroes_rawcode[Danzo]then
if GetUnitAbilityLevel(c,Danzo_SAIBO)==0 then
call UnitAddAbility(c,Danzo_SAIBO)
call UnitAddAbility(c,Danzo_SAIBO_SPELLBOOK)
if lvl==10 then
call SetUnitAbilityLevel(c,Danzo_SAIBO,10)
call SetUnitAbilityLevel(c,Danzo_SAIBO_REGEN_HP,6)
call SetUnitAbilityLevel(c,Danzo_SAIBO_REGEN_MP,6)
endif
else
call SetUnitAbilityLevel(c,Danzo_SAIBO,lvl-4)
call SetUnitAbilityLevel(c,Danzo_SAIBO_REGEN_HP,lvl-4)
call SetUnitAbilityLevel(c,Danzo_SAIBO_REGEN_MP,lvl-4)
endif
elseif i==heroes_rawcode[Gai]then
if GetUnitAbilityLevel(c,Gai_SEKIZO)==0 then
call UnitAddAbility(c,Gai_SEKIZO)
if lvl==10 then
call SetUnitAbilityLevel(c,Gai_SEKIZO,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Gai_SEKIZO,lvl-4)
endif
if GetUnitAbilityLevel(c,Gai_HT_BUFF)>0 and Gai_HT_SekizoNumber==0 then
set Gai_HT_SekizoNumber=5
call EnableTrigger(Gai_sekizo)
endif
elseif i==heroes_rawcode[Gengetsu]then
if GetUnitAbilityLevel(c,Gengetsu_MIZUFUSEN)==0 then
call UnitAddAbility(c,Gengetsu_MIZUFUSEN)
if lvl==10 then
call SetUnitAbilityLevel(c,Gengetsu_MIZUFUSEN,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Gengetsu_MIZUFUSEN,lvl-4)
endif
elseif i==heroes_rawcode[Haku]then
if GetUnitAbilityLevel(c,Haku_DOMU)==0 then
call UnitAddAbility(c,Haku_DOMU)
if lvl==10 then
call SetUnitAbilityLevel(c,Haku_DOMU,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Haku_DOMU,lvl-4)
endif
elseif i==heroes_rawcode[Hanzo]then
if GetUnitAbilityLevel(c,Hanzo_SEPPUKU)==0 then
call UnitAddAbility(c,Hanzo_SEPPUKU)
if lvl==10 then
call SetUnitAbilityLevel(c,Hanzo_SEPPUKU,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Hanzo_SEPPUKU,lvl-4)
endif
elseif i==heroes_rawcode[Hashirama]then
if GetUnitAbilityLevel(c,Hashirama_SENNIN_MODO)==0 then
call UnitAddAbility(c,Hashirama_SENNIN_MODO)
endif
elseif i==heroes_rawcode[Hidan]then
if GetUnitAbilityLevel(c,Hidan_INORI)==0 then
call UnitAddAbility(c,Hidan_INORI)
if lvl==10 then
call SetUnitAbilityLevel(c,Hidan_INORI,lvl-4)
endif
call ExecuteFunc("Hidan_AddAbility_Inori")
else
call SetUnitAbilityLevel(c,Hidan_INORI,lvl-4)
endif
elseif i==heroes_rawcode[Itachi]then
if GetUnitAbilityLevel(c,Itachi_MANGEKYO)==0 then
call UnitAddAbility(c,Itachi_MANGEKYO)
endif
elseif i==heroes_rawcode[Jiraya]then
if GetUnitAbilityLevel(c,Jiraiya_RYOSEI)==0 then
call UnitAddAbility(c,Jiraiya_RYOSEI)
endif
elseif i==heroes_rawcode[Madara]then
if GetUnitAbilityLevel(c,Madara_RIBU)==0 then
call UnitAddAbility(c,Madara_RIBU)
if lvl==10 then
call SetUnitAbilityLevel(c,Madara_RIBU,2)
endif
else
call SetUnitAbilityLevel(c,Madara_RIBU,2)
endif
elseif i==heroes_rawcode[Minato]then
if GetUnitAbilityLevel(c,Minato_DEATH_GOD)==0 then
call UnitAddAbility(c,Minato_DEATH_GOD)
if lvl==10 then
call SetUnitAbilityLevel(c,Minato_DEATH_GOD,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Minato_DEATH_GOD,lvl-4)
endif
elseif i==heroes_rawcode[Mu]then
if GetUnitAbilityLevel(c,Mu_KANCHI)==0 then
call UnitAddAbility(c,Mu_KANCHI)
if lvl==10 then
call SetUnitAbilityLevel(c,Mu_KANCHI,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Mu_KANCHI,lvl-4)
endif
elseif i==heroes_rawcode[Nagato]then
if GetUnitAbilityLevel(c,Nagato_RIKUDO)==0 then
call UnitAddAbility(c,Nagato_RIKUDO)
if lvl==10 then
call SetUnitAbilityLevel(c,Nagato_RIKUDO,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Nagato_RIKUDO,lvl-4)
endif
elseif i==heroes_rawcode[Naruto]then
if GetUnitAbilityLevel(c,Naruto_KURAMA_MODO)==0 then
call UnitAddAbility(c,Naruto_KURAMA_MODO)
call ExecuteFunc("Naruto_AddAbility_KuramaModo")
endif
elseif i==heroes_rawcode[Obito]then
if GetUnitAbilityLevel(c,Obito_SAIBO)==0 then
call UnitAddAbility(c,Obito_SAIBO)
if lvl==10 then
call SetUnitAbilityLevel(c,Obito_SAIBO,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Obito_SAIBO,lvl-4)
endif
elseif i==heroes_rawcode[Onoki]then
if GetUnitAbilityLevel(c,Onoki_IWA_BUNSHIN)==0 then
call UnitAddAbility(c,Onoki_IWA_BUNSHIN)
if lvl==10 then
call SetUnitAbilityLevel(c,Onoki_IWA_BUNSHIN,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Onoki_IWA_BUNSHIN,lvl-4)
endif
elseif i==heroes_rawcode[Sai]then
if GetUnitAbilityLevel(c,Sai_TAKA)==0 then
call UnitAddAbility(c,Sai_TAKA)
if lvl==10 then
call SetUnitAbilityLevel(c,Sai_TAKA,lvl-4)
endif
else
call SetUnitAbilityLevel(c,Sai_TAKA,lvl-4)
endif
elseif i==heroes_rawcode[Sasuke]then
if GetUnitAbilityLevel(c,Sasuke_EMS)==0 then
call UnitAddAbility(c,Sasuke_EMS)
endif
elseif i==heroes_rawcode[Zabuza]then
if GetUnitAbilityLevel(c,Zabuza_DEMON)==0 then
call UnitAddAbility(c,Zabuza_DEMON)
if lvl==10 then
call SetUnitAbilityLevel(c,Zabuza_DEMON,lvl-4)
endif
call ExecuteFunc("Zabuza_AddAbility_Demon")
else
call SetUnitAbilityLevel(c,Zabuza_DEMON,lvl-4)
endif
endif
endif
endif
if GetPlayerController(p)==MAP_CONTROL_COMPUTER and lvl>1 then
call GetAINewAbility(c,i,lvl)
endif
set p=null
set c=null
endfunction
function InitTrig_GetUpLevel takes nothing returns nothing
set gg_trg_GetUpLevel=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_GetUpLevel,EVENT_PLAYER_HERO_LEVEL)
call TriggerAddAction(gg_trg_GetUpLevel,function GetUpLevelActions)
endfunction
function AICraftItems__AICraftItemsConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and GetPlayerController(GetOwningPlayer(GetTriggerUnit()))==MAP_CONTROL_COMPUTER and GetWidgetLife(GetTriggerUnit())>.405
endfunction
function AICraftItems__AIAddNewItemLast takes unit c,player p,integer gold,integer price,integer art1,integer art2,integer art3,real x,real y returns nothing
if gold>=price and GetInventoryIndexOfItemTypeBJ(c,art1)>0 and GetInventoryIndexOfItemTypeBJ(c,art2)>0 and GetInventoryIndexOfItemTypeBJ(c,art3)==0 then
call RemoveItem(GetItemOfTypeFromUnitBJ(c,art2))
call UnitAddItem(c,CreateItem(art3,x,y))
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,gold-price)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Transmute\\PileofGold.mdl",x,y))
endif
endfunction
function AICraftItems__AIAddNewItemFirst takes unit c,player p,integer gold,integer price,integer art1,integer art2,real x,real y returns nothing
if gold>=price and GetInventoryIndexOfItemTypeBJ(c,art1)==0 and GetInventoryIndexOfItemTypeBJ(c,art2)==0 then
call UnitAddItem(c,CreateItem(art2,x,y))
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,gold-price)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Transmute\\PileofGold.mdl",x,y))
endif
endfunction
function AICraftItems__AIAddNewItem takes unit c,player p,integer gold,integer price,integer art1,integer art2,real x,real y returns nothing
if gold>=price and GetInventoryIndexOfItemTypeBJ(c,art1)>0 and GetInventoryIndexOfItemTypeBJ(c,art2)==0 then
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,gold-price)
call UnitAddItem(c,CreateItem(art2,x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Transmute\\PileofGold.mdl",x,y))
endif
endfunction
function AICraftItems__AICraftItemsActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local player p=GetOwningPlayer(c)
local integer pid=GetPlayerId(p)
local integer id=GetUnitTypeId(udg_Hero[pid])
local item art
if id==heroes_rawcode[Asuma]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,FUMA_SHURIKEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2750,FUMA_SHURIKEN_ID,SHIBUKI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,SHIBUKI_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1920,CHAKRA_NO_YOROI_ID,SOSHUGA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1700,SOSHUGA_ID,FURIDO_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2950,FURIDO_STAFF_ID,NUIBARI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-500,NUIBARI_ID,FUMA_SHURIKEN_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Chiyo]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,KOKINJO_ID,KUCHIYOSE_SCROLL_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,KUCHIYOSE_SCROLL_ID,HOSHI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3250,HOSHI_ID,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,FUTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,FUTON_ID,RAITON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,RAITON_ID,KOKINJO_ID,x,y)
elseif id==heroes_rawcode[Danzo]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),250,SHITENSHOIN_ID,SHURIKEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,SHURIKEN_ID,EIYU_NO_MIZU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,EIYU_NO_MIZU_ID,HOGO_TETSU_NO_KUNI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,HOGO_TETSU_NO_KUNI_ID,FUTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,FUTON_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,CHAKRA_NO_YOROI_ID,SHITENSHOIN_ID,x,y)
elseif id==heroes_rawcode[Darui]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),250,HIRAISHIN_BOOTS_ID,KUNAI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,KUNAI_ID,KUROSAVA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,KUROSAVA_ID,HOSHI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,HOSHI_ID,SHINIGAMI_OFFERING_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,SHINIGAMI_OFFERING_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,BENIHISAGO_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-250,KOKINJO_ID,KUNAI_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Deidara]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,KIBAKU_KUNAI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,KIBAKU_KUNAI_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,SENNIN_STAFF_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,KIHOU_BLASTER_ID,SHINIGAMI_OFFERING_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,SHINIGAMI_OFFERING_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,BENIHISAGO_ID,SHITENSHOIN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000-500,SHITENSHOIN_ID,KIBAKU_KUNAI_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Ei]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,FUMA_SHURIKEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,FUMA_SHURIKEN_ID,OMORI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,OMORI_ID,RAITON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,RAITON_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,CHAKRA_NO_YOROI_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,BENIHISAGO_ID,SHITENSHOIN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-500,SHITENSHOIN_ID,FUMA_SHURIKEN_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Gaara]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,KUCHIYOSE_SCROLL_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KUCHIYOSE_SCROLL_ID,DOTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,DOTON_ID,FUTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,FUTON_ID,TENSEIGAN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,TENSEIGAN_ID,AKATSUKI_ROBE_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,AKATSUKI_ROBE_ID,SHITENSHOIN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3250-500,SHITENSHOIN_ID,KUCHIYOSE_SCROLL_ID,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,x,y)
elseif id==heroes_rawcode[Gai]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HIRAISHIN_BOOTS_ID,TRAINING_SUIT_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,TRAINING_SUIT_ID,OMORI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,OMORI_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2950,CHAKRA_NO_YOROI_ID,NUIBARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3900,NUIBARI_ID,NUNOBOKO_NO_KEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,NUNOBOKO_NO_KEN_ID,KABUTOWARI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000-1000/2,KABUTOWARI_ID,TRAINING_SUIT_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Gengetsu]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HOSHI_ID,EIYU_NO_MIZU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,EIYU_NO_MIZU_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KIHOU_BLASTER_ID,ROSARY_MONK_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,ROSARY_MONK_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,SENNIN_STAFF_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,KOKINJO_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000-1000,BENIHISAGO_ID,EIYU_NO_MIZU_ID,HOSHI_ID,x,y)
elseif id==heroes_rawcode[Haku]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HIRAISHIN_BOOTS_ID,NUKENIN_GLOVES_ID_2,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1920,NUKENIN_GLOVES_ID_2,SOSHUGA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2950,SOSHUGA_ID,NUIBARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,NUIBARI_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,KUSANAGI_NO_TSURUGI_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,CHAKRA_NO_YOROI_ID,KABUTOWARI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-1000,KABUTOWARI,NUKENIN_GLOVES_ID_2,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Han]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,NUNOBOKO_NO_KEN_ID,KONOHA_JACKET_ID_2,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,KONOHA_JACKET_ID_2,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,BENIHISAGO_ID,OMORI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,OMORI_ID,SHITENSHOIN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3250,SHITENSHOIN_ID,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3900,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,NUNOBOKO_NO_KEN_ID,x,y)
elseif id==heroes_rawcode[Hanzo]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,FUMA_SHURIKEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,FUMA_SHURIKEN_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2950,CHAKRA_NO_YOROI_ID,NUIBARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,NUIBARI_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3900,KUSANAGI_NO_TSURUGI,NUNOBOKO_NO_KEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,NUNOBOKO_NO_KEN_ID,KABUTOWARI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-500,KABUTOWARI_ID,FUMA_SHURIKEN_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Hashirama]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,TENSEIGAN_ID,KUCHIYOSE_SCROLL_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KUCHIYOSE_SCROLL_ID,SUITON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,SUITON_ID,DOTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,DOTON_ID,AKATSUKI_ROBE_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,AKATSUKI_ROBE_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,SENNIN_STAFF_ID,TENSEIGAN_ID,x,y)
elseif id==heroes_rawcode[Hidan]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HIRAISHIN_BOOTS_ID,WAIST_POUCH_ID_2,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,WAIST_POUCH_ID_2,HOGO_TETSU_NO_KUNI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,HOGO_TETSU_NO_KUNI_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,BENIHISAGO_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,CHAKRA_NO_YOROI_ID,SHITENSHOIN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3900,SHITENSHOIN_ID,NUNOBOKO_NO_KEN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-1000,NUNOBOKO_NO_KEN_ID,WAIST_POUCH_ID_2,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Itachi]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),250,HIRAISHIN_BOOTS_ID,KUNAI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KUNAI_ID,ANBU_AMMUNITION_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,ANBU_AMMUNITION_ID,KUROSAVA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,KUROSAVA_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,SENNIN_STAFF_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3690,KOKINJO_ID,TOBIRAMA_RAIJIN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-250,TOBIRAMA_RAIJIN_ID,KUNAI_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Jiraya]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HIRAISHIN_BOOTS_ID,EIYU_NO_MIZU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,EIYU_NO_MIZU_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,KIHOU_BLASTER_ID,SHINIGAMI_OFFERING_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1700,SHINIGAMI_OFFERING_ID,FURIDO_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,FURIDO_STAFF_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,BENIHISAGO_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-1000,KOKINJO_ID,EIYU_NO_MIZU_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Jugo]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,BATORUGUROBU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2950,BATORUGUROBU_ID,NUIBARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3775,NUIBARI_ID,SHICHISEIKEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,SHICHISEIKEN_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,CHAKRA_NO_YOROI_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2750,KUSANAGI_NO_TSURUGI_ID,SHIBUKI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-500,SHIBUKI_ID,BATORUGUROBU_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Kabuto]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,KOKINJO_ID,EIYU_NO_MIZU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,EIYU_NO_MIZU_ID,SHINIGAMI_OFFERING_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,SHINIGAMI_OFFERING_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,BENIHISAGO_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,SENNIN_STAFF_ID,KUROSAVA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,KUROSAVA_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500-1000,KIHOU_BLASTER_ID,EIYU_NO_MIZU_ID,KOKINJO_ID,x,y)
elseif id==heroes_rawcode[Kakashi]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),250,HIRAISHIN_BOOTS_ID,KUNAI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,KUNAI_ID,KUROSAVA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,KUROSAVA_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,KUSANAGI_NO_TSURUGI_ID,KABUTOWARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,KABUTOWARI_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3690,KOKINJO_ID,TOBIRAMA_RAIJIN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-250,TOBIRAMA_RAIJIN_ID,KUNAI_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Madara]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,KATON_ID,EIYU_NO_MIZU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,EIYU_NO_MIZU_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,KIHOU_BLASTER_ID,SHINIGAMI_OFFERING_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,SHINIGAMI_OFFERING_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,BENIHISAGO_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KOKINJO_ID,KATON_ID,x,y)
elseif id==heroes_rawcode[Mei]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,SHITENSHOIN_ID,KIBAKU_KUNAI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KIBAKU_KUNAI_ID,SUITON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,SUITON_ID,SHINIGAMI_OFFERING_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,SHINIGAMI_OFFERING_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,KIHOU_BLASTER_ID,TENSEIGAN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,TENSEIGAN_ID,KOKINJO_ID,x,y)
elseif id==heroes_rawcode[Minato]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,SENBON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3690,SENBON_ID,TOBIRAMA_RAIJIN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2950,TOBIRAMA_RAIJIN_ID,NUIBARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,NUIBARI_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1920,CHAKRA_NO_YOROI_ID,SOSHUGA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3690,SOSHUGA_ID,TOBIRAMA_RAIJIN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-500,TOBIRAMA_RAIJIN_ID,SENBON_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Mu]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,BATORUGUROBU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,BATORUGUROBU_ID,ANBU_AMMUNITION_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,ANBU_AMMUNITION_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,KUSANAGI_NO_TSURUGI_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,KIHOU_BLASTER_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3690,KOKINJO_ID,TOBIRAMA_RAIJIN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-500,TOBIRAMA_RAIJIN_ID,BATORUGUROBU_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Nagato]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,KOKINJO_ID,EIYU_NO_MIZU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,EIYU_NO_MIZU_ID,TENSEIGAN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,TENSEIGAN_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,SENNIN_STAFF_ID,AKATSUKI_ROBE_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,AKATSUKI_ROBE_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,BENIHISAGO_ID,KOKINJO_ID,x,y)
elseif id==heroes_rawcode[Naruto]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HOGO_TETSU_NO_KUNI_ID,FUMA_SHURIKEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,FUMA_SHURIKEN_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,CHAKRA_NO_YOROI_ID,FUTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2950,FUTON_ID,NUIBARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200,NUIBARI_ID,HIRAISHIN_BOOTS_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2165,HIRAISHIN_BOOTS_ID,HOGO_TETSU_NO_KUNI_ID,x,y)
elseif id==heroes_rawcode[Neji]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HIRAISHIN_BOOTS_ID,NUKENIN_GLOVES_ID_2,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1920,NUKENIN_GLOVES_ID_2,SOSHUGA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,SOSHUGA_ID,KUROSAVA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2050,KUROSAVA_ID,BASHOSEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,BASHOSEN_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,KUSANAGI_NO_TSURUGI_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-500,CHAKRA_NO_YOROI_ID,BATORUGUROBU_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Obito]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,KOKINJO_ID,EIYU_NO_MIZU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,EIYU_NO_MIZU_ID,KATON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KATON_ID,AKATSUKI_ROBE_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,AKATSUKI_ROBE_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,KIHOU_BLASTER_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,BENIHISAGO_ID,KOKINJO_ID,x,y)
elseif id==heroes_rawcode[Onoki]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,TENSEIGAN_ID,EIYU_NO_MIZU_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,EIYU_NO_MIZU_ID,DOTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,DOTON_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,SENNIN_STAFF_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,BENIHISAGO_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,KOKINJO_ID,TENSEIGAN_ID,x,y)
elseif id==heroes_rawcode[Orochimaru]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,KONOHA_JACKET_ID_2,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,KONOHA_JACKET_ID_2,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,BENIHISAGO_ID,HOGO_TETSU_NO_KUNI,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,HOGO_TETSU_NO_KUNI,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,CHAKRA_NO_YOROI_ID,SHITENSHOIN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3250,SHITENSHOIN_ID,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,x,y)
elseif id==heroes_rawcode[Sai]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,KOKINJO_ID,KUCHIYOSE_SCROLL_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,KUCHIYOSE_SCROLL_ID,HOSHI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,HOSHI_ID,AKATSUKI_ROBE_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,AKATSUKI_ROBE_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,SENNIN_STAFF_ID,HI_NO_ISHI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,HI_NO_ISHI_ID,KOKINJO_ID,x,y)
elseif id==heroes_rawcode[Sakura]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,KOKINJO_ID,HI_NO_ISHI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HI_NO_ISHI_ID,KUCHIYOSE_SCROLL_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,KUCHIYOSE_SCROLL_ID,TENSEIGAN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,TENSEIGAN_ID,ROSARY_MONK_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,ROSARY_MONK_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,SENNIN_STAFF_ID,KOKINJO_ID,x,y)
elseif id==heroes_rawcode[Sasori]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HIRAISHIN_BOOTS_ID,WAIST_POUCH_ID_2,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,WAIST_POUCH_ID_2,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1700,CHAKRA_NO_YOROI_ID,FURIDO_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,FURIDO_STAFF_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,KUSANAGI_NO_TSURUGI_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,BENIHISAGO_ID,SHITENSHOIN_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-1000,SHITENSHOIN_ID,WAIST_POUCH_ID_2,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Sasuke]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),250,HIRAISHIN_BOOTS_ID,KUNAI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1920,KUNAI_ID,SOSHUGA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2450,SOSHUGA_ID,HIRAMEKAREI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,HIRAMEKAREI_ID,KUROSAVA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,KUROSAVA_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,CHAKRA_NO_YOROI_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-250,KUSANAGI_NO_TSURUGI_ID,KUNAI_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Shikamaru]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,KIBAKU_KUNAI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KIBAKU_KUNAI_ID,ANBU_AMMUNITION_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,ANBU_AMMUNITION_ID,OMORI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,OMORI_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,SENNIN_STAFF_ID,SHINIGAMI_OFFERING_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200,SHINIGAMI_OFFERING_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Suigetsu]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HIRAISHIN_BOOTS_ID,KONOHA_JACKET_ID_2,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1920,KONOHA_JACKET_ID_2,SOSHUGA_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2450,SOSHUGA_ID,HIRAMEKAREI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2450,HIRAMEKAREI_ID,KABUTOWARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,KABUTOWARI_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3250,CHAKRA_NO_YOROI_ID,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-1000,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,KONOHA_JACKET_ID_2,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Tobirama]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1000,HIRAISHIN_BOOTS_ID,TRAINING_SUIT_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,TRAINING_SUIT_ID,SUITON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,SUITON_ID,KABUTOWARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,KABUTOWARI_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3690,KUSANAGI_NO_TSURUGI_ID,TOBIRAMA_RAIJIN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200,TOBIRAMA_RAIJIN_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Tsunade]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,SHITENSHOIN_ID,KUCHIYOSE_SCROLL_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2000,KUCHIYOSE_SCROLL_ID,TENSEIGAN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,TENSEIGAN_ID,RAITON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3250,RAITON_ID,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,KOKINJO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3900,KOKINJO_ID,NUNOBOKO_NO_KEN_ID,x,y)
elseif id==heroes_rawcode[Yamato]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,KOKINJO_ID,KIBAKU_KUNAI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KIBAKU_KUNAI_ID,ANBU_AMMUNITION_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,ANBU_AMMUNITION_ID,SUITON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,SUITON_ID,DOTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1500,DOTON_ID,SENNIN_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500,SENNIN_STAFF_ID,KOKINJO_ID,x,y)
elseif id==heroes_rawcode[Zabuza]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,HIRAISHIN_BOOTS_ID,FUMA_SHURIKEN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2450,FUMA_SHURIKEN_ID,HIRAMEKAREI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3000,HIRAMEKAREI_ID,BENIHISAGO_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2100,BENIHISAGO_ID,KUSANAGI_NO_TSURUGI_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1700,KUSANAGI_NO_TSURUGI_ID,FURIDO_STAFF_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),2400,FURIDO_STAFF_ID,CHAKRA_NO_YOROI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1200-500,CHAKRA_NO_YOROI_ID,FUMA_SHURIKEN_ID,HIRAISHIN_BOOTS_ID,x,y)
elseif id==heroes_rawcode[Zetsu]then
call AICraftItems__AIAddNewItemFirst(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),500,KOKINJO_ID,KUCHIYOSE_SCROLL_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),20000,KUCHIYOSE_SCROLL_ID,TENSEIGAN_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1850,TENSEIGAN_ID,KIHOU_BLASTER_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,KIHOU_BLASTER_ID,DOTON_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),1250,DOTON_ID,ANBU_AMMUNITION_ID,x,y)
call AICraftItems__AIAddNewItem(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3250,ANBU_AMMUNITION_ID,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,x,y)
call AICraftItems__AIAddNewItemLast(c,p,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD),3500-500,SHODAI_HOKAGE_NO_KUBIKAZARI_ID,KUCHIYOSE_SCROLL_ID,KOKINJO_ID,x,y)
endif
set art=null
set c=null
set p=null
endfunction
function AICraftItems_Init takes nothing returns nothing
local trigger trig=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig,gg_rct_Revive_Alliance)
call TriggerRegisterEnterRectSimple(trig,gg_rct_Revive_Akatsuki)
call TriggerAddCondition(trig,Condition(function AICraftItems__AICraftItemsConditions))
call TriggerAddAction(trig,function AICraftItems__AICraftItemsActions)
set trig=null
endfunction
function AIInRects__GetBadHeroState takes unit c,player p,integer art returns unit
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real radius=600.
local group g=CreateGroup()
local unit tg
local unit tu=null
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or tu!=null
if IsUnitAlly(tg,p)and IsUnitHero(tg)and GetWidgetLife(tg)>.405 then
if art==AKATSUKI_ROBE_ID then
if GetWidgetLife(tg)<GetUnitState(tg,UNIT_STATE_MAX_LIFE)*.3 then
set tu=tg
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=null
set g=null
set cj_v666_unit=tu
set tu=null
return cj_v666_unit
endfunction
function AIInRects__IsStateAllyBad takes unit c,player p,integer art returns boolean
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real radius=600.
local group g=CreateGroup()
local unit tg
local boolean log=false
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitAlly(tg,p)and IsUnitHero(tg)and GetWidgetLife(tg)>.405 then
if art==CHAKRA_NO_MI_ID then
if GetWidgetLife(tg)<GetUnitState(tg,UNIT_STATE_MAX_LIFE)-375.and GetUnitState(tg,UNIT_STATE_MANA)<GetUnitState(tg,UNIT_STATE_MAX_MANA)-195.then
set log=true
endif
elseif art==SHITENSHOIN_ID then
if GetWidgetLife(tg)<GetUnitState(tg,UNIT_STATE_MAX_LIFE)*.5 then
set log=true
endif
elseif art==SHODAI_HOKAGE_NO_KUBIKAZARI_ID then
if GetWidgetLife(tg)<GetUnitState(tg,UNIT_STATE_MAX_LIFE)*.65 then
set log=true
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=null
set g=null
return log
endfunction
function AIInRects__HasAnAITheItem takes unit c,integer iditem returns boolean
local integer i=0
local boolean log=false
loop
exitwhen i>5 or log==true
if iditem==GetItemTypeId(UnitItemInSlot(c,i))then
set log=true
endif
set i=i+1
endloop
return log
endfunction
function cj_anonym__54 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
set AIInRects__ai_item_cd_log[LoadInteger(Hash,h,0)]=false
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function AIInRects__SetAIUnitCastItems takes player p,unit c,unit tu returns nothing
local integer id=GetPlayerId(p)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local timer t
local boolean log=false
local unit ally
local integer randomA=1
local integer randomB=0
local integer i=0
loop
exitwhen i>5
if UnitItemInSlot(c,i)!=null then
set randomB=randomB+1
endif
set i=i+1
endloop
if randomB>0 then
if not log and AIInRects__HasAnAITheItem(c,KUNAI_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemPoint(c,GetItemOfTypeFromUnitBJ(c,KUNAI_ID),x1,y1)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,SHURIKEN_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemPoint(c,GetItemOfTypeFromUnitBJ(c,SHURIKEN_ID),x1,y1)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,FUMA_SHURIKEN_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemPoint(c,GetItemOfTypeFromUnitBJ(c,FUMA_SHURIKEN_ID),x1,y1)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,SENBON_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,SENBON_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,KIBAKU_KUNAI_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemPoint(c,GetItemOfTypeFromUnitBJ(c,KIBAKU_KUNAI_ID),x1,y1)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,KUCHIYOSE_SCROLL_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,KUCHIYOSE_SCROLL_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,EIYU_NO_MIZU_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,EIYU_NO_MIZU_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,HI_NO_ISHI_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,HI_NO_ISHI_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,ROSARY_MONK_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,ROSARY_MONK_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,HOSHI_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,HOSHI_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,SENNIN_STAFF_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,SENNIN_STAFF_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,SHINIGAMI_OFFERING_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemPoint(c,GetItemOfTypeFromUnitBJ(c,SHINIGAMI_OFFERING_ID),x1,y1)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,TENSEIGAN_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,TENSEIGAN_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,CHAKRA_NO_MI_ID)then
if GetRandomInt(randomA,randomB)==1 and AIInRects__IsStateAllyBad(c,p,CHAKRA_NO_MI_ID)then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,CHAKRA_NO_MI_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,BENIHISAGO_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,BENIHISAGO_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,SHODAI_HOKAGE_NO_KUBIKAZARI_ID)then
if GetRandomInt(randomA,randomB)==1 and AIInRects__IsStateAllyBad(c,p,SHODAI_HOKAGE_NO_KUBIKAZARI_ID)then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,SHODAI_HOKAGE_NO_KUBIKAZARI_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,KOKINJO_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,KOKINJO_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,AKATSUKI_ROBE_ID)then
set ally=AIInRects__GetBadHeroState(c,p,AKATSUKI_ROBE_ID)
if GetRandomInt(randomA,randomB)==1 and ally!=null then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,AKATSUKI_ROBE_ID),ally)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,ANBU_AMMUNITION_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,ANBU_AMMUNITION_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,OMORI_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,OMORI_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,HOGO_TETSU_NO_KUNI_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,HOGO_TETSU_NO_KUNI_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,CHAKRA_NO_YOROI_ID)then
if GetRandomInt(randomA,randomB)==1 and GetWidgetLife(c)<GetUnitState(c,UNIT_STATE_MAX_LIFE)*AIInRects__aiNeedHP_ChakraPanoply then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,CHAKRA_NO_YOROI_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,SHITENSHOIN_ID)then
if GetRandomInt(randomA,randomB)==1 and AIInRects__IsStateAllyBad(c,p,SHITENSHOIN_ID)then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,SHITENSHOIN_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,BATORUGUROBU_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,BATORUGUROBU_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,KUROSAVA_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemPoint(c,GetItemOfTypeFromUnitBJ(c,KUROSAVA_ID),x1,y1)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,FURIDO_STAFF_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,FURIDO_STAFF_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,KIHOU_BLASTER_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,KIHOU_BLASTER_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,HIRAMEKAREI_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItem(c,GetItemOfTypeFromUnitBJ(c,HIRAMEKAREI_ID))
set log=true
else
set randomB=randomB-1
endif
endif
if not log and AIInRects__HasAnAITheItem(c,TOBIRAMA_RAIJIN_ID)then
if GetRandomInt(randomA,randomB)==1 then
call UnitUseItemTarget(c,GetItemOfTypeFromUnitBJ(c,TOBIRAMA_RAIJIN_ID),tu)
set log=true
else
set randomB=randomB-1
endif
endif
endif
if log then
set t=CreateTimer()
set AIInRects__ai_item_cd_log[id]=true
call SaveInteger(Hash,GetHandleId(t),0,id)
call TimerStart(t,AIInRects__ai_item_cd,false,function cj_anonym__54)
endif
set ally=null
set t=null
endfunction
function AIInRects__SetAIUnitCastSpells takes unit c,unit tu returns nothing
local integer i=GetUnitTypeId(c)
local integer random
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
if i==heroes_rawcode[Asuma]then
set random=GetRandomInt(1,4)
if random==1 then
call IssueTargetOrder(c,"battleroar",c)
elseif random==2 then
call IssueImmediateOrder(c,"windwalk")
elseif random==3 then
call IssueImmediateOrder(c,"breathoffire")
elseif random==4 then
call IssuePointOrder(c,"shockwave",x1,y1)
endif
elseif i==heroes_rawcode[Chiyo]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==2 then
call IssueImmediateOrder(c,"stomp")
elseif random==3 then
call IssueImmediateOrder(c,"Locustswarm")
endif
elseif i==heroes_rawcode[Danzo]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"breathoffire",x1,y1)
elseif random==2 then
call IssueImmediateOrder(c,"stomp")
elseif random==3 then
call IssueImmediateOrder(c,"summonwareagle")
endif
elseif i==heroes_rawcode[Darui]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"clusterrockets",x1,y1)
elseif random==2 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==3 then
call IssuePointOrder(c,"breathoffire",x1,y1)
endif
elseif i==heroes_rawcode[Deidara]then
if GetRandomInt(1,2)==1 then
set random=GetRandomInt(1,4)
if random==1 then
call IssueImmediateOrder(c,"taunt")
elseif random==2 then
call IssuePointOrder(c,"breathoffire",x1,y1)
elseif random==3 then
call IssueTargetOrder(c,"battleroar",c)
elseif random==4 then
call IssueImmediateOrder(c,"berserk")
endif
else
set random=GetRandomInt(1,4)
if random==1 then
call IssueImmediateOrder(c,"breathoffire")
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==3 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
elseif random==4 then
call IssueImmediateOrder(c,"stomp")
endif
endif
elseif i==heroes_rawcode[Ei]then
set random=GetRandomInt(1,4)
if random==1 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==2 then
call IssueImmediateOrder(c,"stomp")
elseif random==3 then
if GetUnitState(c,UNIT_STATE_MANA)>GetUnitState(c,UNIT_STATE_MAX_MANA)*.75 and GetUnitAbilityLevel(c,0x42303043)==0 then
call IssueImmediateOrder(c,"immolation")
else
if GetUnitState(c,UNIT_STATE_MANA)<GetUnitState(c,UNIT_STATE_MAX_MANA)*.35 and GetUnitAbilityLevel(c,0x42303043)>0 then
call IssueImmediateOrder(c,"unimmolation")
endif
endif
elseif random==4 then
call IssueTargetOrder(c,"acidbomb",tu)
endif
elseif i==heroes_rawcode[Gaara]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==2 then
if GetUnitState(c,UNIT_STATE_MANA)>GetUnitState(c,UNIT_STATE_MAX_MANA)*.75 and GetUnitAbilityLevel(c,0x4230304B)==0 then
call IssueImmediateOrder(c,"immolation")
else
if GetUnitState(c,UNIT_STATE_MANA)<GetUnitState(c,UNIT_STATE_MAX_MANA)*.35 and GetUnitAbilityLevel(c,0x4230304B)>0 then
call IssueImmediateOrder(c,"unimmolation")
endif
endif
elseif random==3 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
elseif random==4 then
call IssuePointOrder(c,"breathoffire",x1,y1)
endif
elseif i==heroes_rawcode[Gai]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueImmediateOrder(c,"berserk")
elseif random==2 then
call IssueImmediateOrder(c,"battleroar")
elseif random==3 then
call IssueTargetOrder(c,"healingwave",tu)
endif
elseif i==heroes_rawcode[Gengetsu]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==2 then
call IssueImmediateOrder(c,"stomp")
elseif random==3 then
call IssueImmediateOrder(c,"taunt")
endif
elseif i==heroes_rawcode[Haku]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==2 then
call IssuePointOrder(c,"blink",x1,y1)
elseif random==3 then
call IssueImmediateOrder(c,"taunt")
elseif random==4 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
endif
elseif i==heroes_rawcode[Han]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==2 then
call IssueImmediateOrder(c,"waterelemental")
elseif random==3 then
call IssueTargetOrder(c,"healingwave",tu)
endif
elseif i==heroes_rawcode[Hanzo]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"curse",x1,y1)
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==2 then
call IssueTargetOrder(c,"acidbomb",tu)
elseif random==4 then
call IssueImmediateOrder(c,"waterelemental")
endif
elseif i==heroes_rawcode[Hashirama]then
set random=GetRandomInt(1,4)
if random==1 then
call IssuePointOrder(c,"breathoffire",x1,y1)
elseif random==2 then
call IssueImmediateOrder(c,"stomp")
elseif random==3 then
call IssueImmediateOrder(c,"waterelemental")
elseif random==4 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
endif
elseif i==heroes_rawcode[Hidan]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
elseif random==2 then
call IssueImmediateOrder(c,"avatar")
elseif random==3 then
call IssueImmediateOrder(c,"clusterrockets")
endif
elseif i==heroes_rawcode[Jiraya]then
set random=GetRandomInt(1,4)
if random==1 then
call IssuePointOrder(c,"clusterrockets",x1,y1)
elseif random==2 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==3 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
elseif random==4 then
call IssuePointOrder(c,"breathoffire",x1,y1)
endif
elseif i==heroes_rawcode[Jugo]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueImmediateOrder(c,"berserk")
elseif random==2 then
call IssuePointOrder(c,"windwalk",x1,y1)
elseif random==3 then
call IssueTargetOrder(c,"chainlightning",tu)
endif
elseif i==heroes_rawcode[Itachi]then
set random=GetRandomInt(1,4)
if random==1 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==2 then
call IssuePointOrder(c,"blink",x1,y1)
elseif random==3 then
call IssuePointOrder(c,"breathoffire",x1,y1)
elseif random==4 then
call IssueTargetOrder(c,"banish",tu)
endif
elseif i==heroes_rawcode[Kabuto]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"blizzard",x1,y1)
elseif random==2 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
elseif random==3 then
call IssuePointOrder(c,"immolation",x1,y1)
endif
elseif i==heroes_rawcode[Kakashi]then
set random=GetRandomInt(1,4)
if random==1 then
call IssueTargetOrder(c,"thunderbolt",tu)
elseif random==2 then
call IssuePointOrder(c,"blink",x1,y1)
elseif random==3 then
call IssueImmediateOrder(c,"taunt")
elseif random==4 then
call IssueTargetOrder(c,"chainlightning",tu)
endif
elseif i==heroes_rawcode[Madara]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==2 then
call IssuePointOrder(c,"breathoffire",x1,y1)
elseif random==3 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
endif
elseif i==heroes_rawcode[Mei]then
set random=GetRandomInt(1,4)
if random==1 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==2 then
call IssuePointOrder(c,"flamestrike",x1,y1)
elseif random==3 then
call IssueImmediateOrder(c,"thunderclap")
elseif random==4 then
call IssueImmediateOrder(c,"chainlightning")
endif
elseif i==heroes_rawcode[Minato]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueImmediateOrder(c,"berserk")
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==3 then
call IssuePointOrder(c,"healingwave",x1,y1)
endif
elseif i==heroes_rawcode[Mu]then
set random=GetRandomInt(1,3)
if random==1 then
if GetUnitState(c,UNIT_STATE_MANA)>GetUnitState(c,UNIT_STATE_MAX_MANA)*.75 and GetUnitAbilityLevel(c,0x42303143)==0 then
call IssueImmediateOrder(c,"immolation")
else
if GetUnitState(c,UNIT_STATE_MANA)<GetUnitState(c,UNIT_STATE_MAX_MANA)*.35 and GetUnitAbilityLevel(c,0x42303143)>0 then
call IssueImmediateOrder(c,"unimmolation")
endif
endif
elseif random==2 then
call IssueImmediateOrder(c,"windwalk")
elseif random==3 then
call IssueTargetOrder(c,"chainlightning",tu)
endif
elseif i==heroes_rawcode[Nagato]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==2 then
if GetUnitState(c,UNIT_STATE_MANA)>GetUnitState(c,UNIT_STATE_MAX_MANA)*.75 and GetUnitAbilityLevel(c,0x42303334)==0 then
call IssueImmediateOrder(c,"immolation")
else
if GetUnitState(c,UNIT_STATE_MANA)<GetUnitState(c,UNIT_STATE_MAX_MANA)*.15 and GetUnitAbilityLevel(c,0x42303334)>0 then
call IssueImmediateOrder(c,"unimmolation")
endif
endif
elseif random==3 then
if GetWidgetLife(c)<GetUnitState(c,UNIT_STATE_MAX_LIFE)*.25 then
call IssueImmediateOrder(c,"charm")
endif
endif
elseif i==heroes_rawcode[Naruto]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueImmediateOrder(c,"waterelemental")
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==3 then
call IssueTargetOrder(c,"cripple",tu)
endif
elseif i==heroes_rawcode[Neji]then
set random=GetRandomInt(1,2)
if random==1 then
call IssueTargetOrder(c,"battleroar",c)
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
endif
elseif i==heroes_rawcode[Obito]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"shockwave",x1,y1)
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==3 then
call IssuePointOrder(c,"breathoffire",x1,y1)
endif
elseif i==heroes_rawcode[Onoki]then
set random=GetRandomInt(1,4)
if random==1 then
call IssuePointOrder(c,"purge",x1,y1)
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==3 then
call IssuePointOrder(c,"heal",x1,y1)
elseif random==4 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
endif
elseif i==heroes_rawcode[Orochimaru]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
elseif random==2 then
call IssueImmediateOrder(c,"stomp")
elseif random==3 then
call IssueImmediateOrder(c,"taunt")
endif
elseif i==heroes_rawcode[Sai]then
set random=GetRandomInt(1,4)
if random==1 then
call IssueTargetOrder(c,"acidbomb",tu)
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==3 then
call IssueTargetOrder(c,"cripple",tu)
elseif random==4 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
endif
elseif i==heroes_rawcode[Sakura]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueImmediateOrder(c,"stomp")
elseif random==2 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==3 then
call IssueImmediateOrder(c,"submerge")
endif
elseif i==heroes_rawcode[Sasori]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueTargetOrder(c,"chainlightning",tu)
elseif random==2 then
call IssueImmediateOrder(c,"berserk")
elseif random==3 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
endif
elseif i==heroes_rawcode[Sasuke]then
set random=GetRandomInt(1,4)
if random==1 then
call IssueImmediateOrder(c,"berserk")
elseif random==2 then
call IssueImmediateOrder(c,"taunt")
elseif random==3 then
call IssueImmediateOrder(c,"thunderclap")
endif
set random=GetRandomInt(1,4)
if random==1 then
call IssuePointOrder(c,"breathoffire",x1,y1)
elseif random==2 then
call IssueTargetOrder(c,"thunderbolt",tu)
elseif random==3 then
call IssuePointOrder(c,"blink",x1,y1)
elseif random==4 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
endif
elseif i==heroes_rawcode[Shikamaru]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==2 then
call IssuePointOrder(c,"breathoffire",x1,y1)
elseif random==3 then
call IssuePointOrder(c,"clusterrockets",x1,y1)
endif
elseif i==heroes_rawcode[Suigetsu]then
set random=GetRandomInt(1,3)
if random==1 then
call IssueImmediateOrder(c,"battleroar")
elseif random==2 then
call IssueImmediateOrder(c,"berserk")
elseif random==3 then
call IssueImmediateOrder(c,"metamrphosis")
endif
elseif i==heroes_rawcode[Tobirama]then
set random=GetRandomInt(1,3)
if random==1 then
if GetUnitState(c,UNIT_STATE_MANA)>GetUnitState(c,UNIT_STATE_MAX_MANA)*.75 and GetUnitAbilityLevel(c,0x42303152)==0 then
call IssueImmediateOrder(c,"immolation")
else
if GetUnitState(c,UNIT_STATE_MANA)<GetUnitState(c,UNIT_STATE_MAX_MANA)*.35 and GetUnitAbilityLevel(c,0x42303152)>0 then
call IssueImmediateOrder(c,"unimmolation")
endif
endif
elseif random==2 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==3 then
call IssueImmediateOrder(c,"waterelemental")
endif
elseif i==heroes_rawcode[Tsunade]then
set random=GetRandomInt(1,4)
if random==1 then
call IssueImmediateOrder(c,"stomp")
elseif random==2 then
if GetUnitState(c,UNIT_STATE_MANA)>GetUnitState(c,UNIT_STATE_MAX_MANA)*.75 and GetUnitAbilityLevel(c,0x42303130)==0 then
call IssueImmediateOrder(c,"immolation")
else
if GetUnitState(c,UNIT_STATE_MANA)<GetUnitState(c,UNIT_STATE_MAX_MANA)*.35 and GetUnitAbilityLevel(c,0x42303130)>0 then
call IssueImmediateOrder(c,"unimmolation")
endif
endif
elseif random==3 then
call IssueImmediateOrder(c,"berserk")
elseif random==4 then
call IssueImmediateOrder(c,"battleroar")
endif
elseif i==heroes_rawcode[Yamato]then
set random=GetRandomInt(1,3)
if random==1 then
call IssuePointOrder(c,"carrionswarm",x1,y1)
elseif random==2 then
call IssuePointOrder(c,"breathoffire",x1,y1)
elseif random==3 then
call IssuePointOrder(c,"clusterrockets",x1,y1)
endif
elseif i==heroes_rawcode[Zabuza]then
set random=GetRandomInt(1,4)
if random==1 then
call IssueImmediateOrder(c,"stomp")
elseif random==2 then
call IssueImmediateOrder(c,"windwalk")
elseif random==3 then
call IssueImmediateOrder(c,"berserk")
elseif random==4 then
call IssuePointOrder(c,"breathoffrost",x1,y1)
endif
elseif i==heroes_rawcode[Zetsu]then
set random=GetRandomInt(1,2)
if random==1 then
call IssueTargetOrder(c,"chainlightning",c)
elseif random==2 then
call IssueImmediateOrder(c,"taunt")
endif
endif
endfunction
function cj_anonym__55 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call UnitRemoveAbility(LoadUnitHandle(Hash,h,0),0x41313143)
set ai_retreat_log[LoadInteger(Hash,h,1)]=false
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function AIInRects__AIRetreat takes unit c,player p,real x,real y,real ai_escape_distance returns nothing
local integer id=GetPlayerId(p)
local real x1=GetRectCenterX(gg_rct_Revive_Alliance)
local real y1=GetRectCenterY(gg_rct_Revive_Alliance)
local real x2=GetRectCenterX(gg_rct_Revive_Akatsuki)
local real y2=GetRectCenterY(gg_rct_Revive_Akatsuki)
local real a1=bj_RADTODEG*Atan2(y1-y,x1-x)
local real a2=bj_RADTODEG*Atan2(y2-y,x2-x)
local real time=ai_escape_distance/GetUnitMoveSpeed(c)
local timer t=CreateTimer()
set ai_retreat_log[id]=true
call UnitAddAbility(c,0x41313143)
if IsUnitAlly(c,Player(5))then
call IssuePointOrder(c,"move",x+ai_escape_distance*Cos(a1*bj_DEGTORAD),y+ai_escape_distance*Sin(a1*bj_DEGTORAD))
elseif IsUnitAlly(c,Player(11))then
call IssuePointOrder(c,"move",x+ai_escape_distance*Cos(a2*bj_DEGTORAD),y+ai_escape_distance*Sin(a2*bj_DEGTORAD))
endif
call SaveAgentHandle(Hash,GetHandleId(t),0,c)
call SaveInteger(Hash,GetHandleId(t),1,id)
call TimerStart(t,time,false,function cj_anonym__55)
set t=null
endfunction
function cj_anonym__56 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
set ai_coordmove_cd_log[LoadInteger(Hash,h,0)]=false
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function AIInRects__AIRunToCoords takes unit c,player p returns nothing
local timer t=CreateTimer()
local integer id=GetPlayerId(p)
call IssuePointOrder(c,"attack",GetRectCenterX(ai_coord_rect[id]),GetRectCenterY(ai_coord_rect[id]))
set ai_coordmove_cd_log[id]=true
call SaveInteger(Hash,GetHandleId(t),0,id)
call TimerStart(t,AIInRects__ai_coordmove_cd,false,function cj_anonym__56)
set t=null
endfunction
function AIInRects__GetCreepAverageNeedDamageToDeath takes unit u,player pu returns real
local real value=0.
if IsPlayerAlly(pu,Player(11))then
if CEGSstepAlliance==1 then
set value=60.
elseif CEGSstepAlliance==2 then
set value=65.
elseif CEGSstepAlliance==3 then
set value=70.
elseif CEGSstepAlliance==4 then
set value=75.
elseif CEGSstepAlliance==5 then
set value=80.
elseif CEGSstepAlliance==6 then
set value=85.
elseif CEGSstepAlliance==7 then
set value=90.
elseif CEGSstepAlliance==8 then
set value=95.
elseif CEGSstepAlliance==9 then
set value=100.
elseif CEGSstepAlliance==10 then
set value=105.
endif
elseif IsPlayerAlly(pu,Player(5))then
if CEGSstepAkatsuki==1 then
set value=60.
elseif CEGSstepAkatsuki==2 then
set value=65.
elseif CEGSstepAkatsuki==3 then
set value=70.
elseif CEGSstepAkatsuki==4 then
set value=75.
elseif CEGSstepAkatsuki==5 then
set value=80.
elseif CEGSstepAkatsuki==6 then
set value=85.
elseif CEGSstepAkatsuki==7 then
set value=90.
elseif CEGSstepAkatsuki==8 then
set value=95.
elseif CEGSstepAkatsuki==9 then
set value=100.
elseif CEGSstepAkatsuki==10 then
set value=105.
endif
endif
return value
endfunction
function AIInRects__AIinPlayableAreaContinue takes unit c,real x,real y returns nothing
local player p=GetOwningPlayer(c)
local real lifeenemy1=5000.
local real lifeenemy2=1270.
local real dist=GetUnitMoveSpeed(c)*1.5
local integer ally=0
local integer enemy=0
local integer randomattack
local unit tg
local unit tu1=null
local unit tu2=null
local unit tu3=null
local unit tower=null
call GroupEnumUnitsInRange(AIInRects__g2,x,y,AIInRects__ai_general_range,null)
loop
set tg=FirstOfGroup(AIInRects__g2)
exitwhen tg==null
if GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
if IsUnitAlly(tg,p)then
if DistanceBetweenCoords(x,y,GetWidgetX(tg),GetWidgetY(tg))<dist then
set ally=ally+1
if IsUnitCreep(tg)and GetWidgetLife(tg)<GetUnitState(tg,UNIT_STATE_MAX_LIFE)*.5 and tg!=c then
set tu1=tg
set dist=DistanceBetweenCoords(x,y,GetWidgetX(tg),GetWidgetY(tg))
endif
endif
elseif IsUnitEnemy(tg,p)then
if IsUnitVisible(tg,p)then
set enemy=enemy+1
if IsUnitHero(tg)then
if GetWidgetLife(tg)<lifeenemy1 then
set tu3=tg
set lifeenemy1=GetWidgetLife(tg)
endif
elseif IsUnitCreep(tg)and GetWidgetLife(tg)<AIInRects__GetCreepAverageNeedDamageToDeath(tg,GetOwningPlayer(tg))and GetWidgetLife(tg)<lifeenemy2 then
set tu2=tg
set lifeenemy2=GetWidgetLife(tg)
elseif IsUnitOutpost(tg)and tower==null then
set tower=tg
endif
endif
endif
endif
call GroupRemoveUnit(AIInRects__g2,tg)
endloop
if tu3==null then
if tu2==null then
if tu1==null then
if not ai_coordmove_cd_log[GetPlayerId(p)]then
call AIInRects__AIRunToCoords(c,p)
endif
else
call IssueTargetOrder(c,"attack",tu1)
endif
else
if ally>=enemy and GetWidgetLife(c)>GetUnitState(c,UNIT_STATE_MAX_LIFE)*.45 then
call IssueTargetOrder(c,"attack",tu2)
else
if not ai_retreat_log[GetPlayerId(p)]then
call AIInRects__AIRetreat(c,p,x,y,GetRandomReal(100.,500.))
endif
endif
endif
else
if tower==null then
if ally>=enemy and GetWidgetLife(c)>GetUnitState(c,UNIT_STATE_MAX_LIFE)*.45 then
if not AIInRects__ai_item_cd_log[GetPlayerId(p)]then
set randomattack=GetRandomInt(1,3)
else
set randomattack=GetRandomInt(1,2)
endif
if randomattack==1 then
call AIInRects__SetAIUnitCastSpells(c,tu3)
elseif randomattack==2 then
call IssueTargetOrder(c,"attack",tu3)
elseif randomattack==3 then
call AIInRects__SetAIUnitCastItems(p,c,tu3)
endif
else
if tu2==null then
if tu1==null then
if not ai_retreat_log[GetPlayerId(p)]then
call AIInRects__AIRetreat(c,p,x,y,GetRandomReal(100.,500.))
endif
else
call IssueTargetOrder(c,"attack",tu1)
endif
else
call IssueTargetOrder(c,"attack",tu2)
endif
endif
else
call IssueTargetOrder(c,"attack",tower)
endif
endif
set p=null
set tg=null
set tu1=null
set tu2=null
set tu3=null
set tower=null
endfunction
function AIInRects__AIinRectsActions takes nothing returns nothing
local real x
local real y
local integer i=0
local player p
loop
if i!=4 and i!=5 then
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_COMPUTER then
if not IsUnitHidden(udg_Hero[i])and not IsUnitPaused(udg_Hero[i])and GetWidgetLife(udg_Hero[i])>.405 and GetUnitAbilityLevel(udg_Hero[i],0x41313143)==0 then
if GetWidgetLife(udg_Hero[i])/GetUnitState(udg_Hero[i],UNIT_STATE_MAX_LIFE)>aiEscapeHP then
set x=GetWidgetX(udg_Hero[i])
set y=GetWidgetY(udg_Hero[i])
if not GetUnitLocationClanBase(udg_Hero[i])and RectContainsCoords(gg_rct_Weather,x,y)then
call AIInRects__AIinPlayableAreaContinue(udg_Hero[i],x,y)
else
if GetUnitLocationClanBase(udg_Hero[i])and not ai_coordmove_cd_log[i]then
call AIInRects__AIRunToCoords(udg_Hero[i],p)
endif
endif
else
if not ai_retreat_log[i]then
call AIInRects__AIRetreat(udg_Hero[i],p,x,y,GetRandomReal(1000.,2000.))
endif
endif
endif
endif
endif
set i=i+1
exitwhen i==10
endloop
endfunction
function AIInRects_Init takes nothing returns nothing
local trigger trig=CreateTrigger()
call TriggerRegisterTimerEvent(trig,.25,true)
call TriggerAddAction(trig,function AIInRects__AIinRectsActions)
set trig=null
endfunction
function AIStart_Init takes nothing returns nothing
call AIInRects_Init()
call AICraftItems_Init()
endfunction
function CreepsSpecialImpCastSpellConditions takes nothing returns boolean
return IsUnitCreepSpecial(GetTriggerUnit())
endfunction
function cj_anonym__57 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call KillUnit(LoadUnitHandle(Hash,h,0))
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function CreepsSpecialKill takes unit u,rect r returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real randomOffset=GetRandomReal(1.,200.)
local real randomDegree=GetRandomReal(1.,360.)
call IssuePointOrder(u,"carrionswarm",GetRectCenterX(r)+randomOffset*Cos(randomDegree*bj_DEGTORAD),GetRectCenterY(r)+randomOffset*Sin(randomDegree*bj_DEGTORAD))
call SaveBoolean(Hash,GetHandleId(u),1,true)
call SaveAgentHandle(Hash,h,0,u)
call TimerStart(t,5.,false,function cj_anonym__57)
set t=null
endfunction
function cj_anonym__58 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local rect r=LoadRectHandle(Hash,h,1)
local real period=LoadReal(Hash,h,2)
local real time=LoadReal(Hash,h,3)
if GetWidgetLife(u)>.405 and time>0.and not LoadBoolean(Hash,GetHandleId(u),1)then
call CreepsSpecialKill(u,r)
call SaveReal(Hash,h,3,time-period)
else
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set r=null
set u=null
set t=null
endfunction
function CreepsSpecialCastSpellAfter takes unit u,rect r1,rect r2 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
local real time=5.
local real randomOffset=GetRandomReal(10.,50.)
local real randomDegree=GetRandomReal(1.,360.)
call IssuePointOrder(u,"move",GetRectCenterX(r2)+randomOffset*Cos(randomDegree*bj_DEGTORAD),GetRectCenterY(r2)+randomOffset*Sin(randomDegree*bj_DEGTORAD))
call SaveAgentHandle(Hash,h,0,u)
call SaveRectHandle(Hash,h,1,r1)
call SaveReal(Hash,h,2,period)
call SaveReal(Hash,h,3,time)
call TimerStart(t,period,true,function cj_anonym__58)
set t=null
endfunction
function IsDistanceCreepsSpecialCorrectToCast takes unit u,rect r returns boolean
local boolean log=false
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetRectCenterX(r)
local real y1=GetRectCenterY(r)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<=150.then
set log=true
endif
return log
endfunction
function CreepsSpecialImpCastSpellActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local player p=GetOwningPlayer(u)
local rect r1=null
local rect r2=null
if p==Player(5)then
if IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAllianceSpecialGroup1)then
set r1=gg_rct_Alliance_Bot_O2
set r2=gg_rct_CreepsAllianceSpecialGroup1
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAllianceSpecialGroup2)then
set r1=gg_rct_Alliance_Top_O2
set r2=gg_rct_CreepsAllianceSpecialGroup2
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAkatsukiSpecialGroup5)then
set r1=gg_rct_Alliance_Bot_O1
set r2=gg_rct_CreepsAkatsukiSpecialGroup5
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAkatsukiSpecialGroup4)then
set r1=gg_rct_Alliance_Top_O1
set r2=gg_rct_CreepsAkatsukiSpecialGroup4
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAllianceSpecialGroup4)then
set r1=gg_rct_Akatsuki_Bot_O1
set r2=gg_rct_CreepsAllianceSpecialGroup4
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAllianceSpecialGroup5)then
set r1=gg_rct_Akatsuki_Top_O1
set r2=gg_rct_CreepsAllianceSpecialGroup5
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAllianceSpecialGroup6)then
set r1=gg_rct_Akatsuki_Bot_O2
set r2=gg_rct_CreepsAllianceSpecialGroup6
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAllianceSpecialGroup7)then
set r1=gg_rct_Akatsuki_Top_O2
set r2=gg_rct_CreepsAllianceSpecialGroup7
endif
elseif p==Player(11)then
if IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAkatsukiSpecialGroup1)then
set r1=gg_rct_Akatsuki_Top_O2
set r2=gg_rct_CreepsAkatsukiSpecialGroup1
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAkatsukiSpecialGroup2)then
set r1=gg_rct_Akatsuki_Bot_O2
set r2=gg_rct_CreepsAkatsukiSpecialGroup2
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAllianceSpecialGroup5)then
set r1=gg_rct_Akatsuki_Top_O1
set r2=gg_rct_CreepsAllianceSpecialGroup5
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAllianceSpecialGroup4)then
set r1=gg_rct_Akatsuki_Bot_O1
set r2=gg_rct_CreepsAllianceSpecialGroup4
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAkatsukiSpecialGroup4)then
set r1=gg_rct_Alliance_Top_O1
set r2=gg_rct_CreepsAkatsukiSpecialGroup4
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAkatsukiSpecialGroup5)then
set r1=gg_rct_Alliance_Bot_O1
set r2=gg_rct_CreepsAkatsukiSpecialGroup5
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAkatsukiSpecialGroup6)then
set r1=gg_rct_Alliance_Top_O2
set r2=gg_rct_CreepsAkatsukiSpecialGroup6
elseif IsDistanceCreepsSpecialCorrectToCast(u,gg_rct_CreepsAkatsukiSpecialGroup7)then
set r1=gg_rct_Alliance_Bot_O2
set r2=gg_rct_CreepsAkatsukiSpecialGroup7
endif
endif
if r1!=null and r2==LoadRectHandle(Hash,GetHandleId(u),0)then
call CreepsSpecialCastSpellAfter(u,r1,r2)
endif
set r1=null
set r2=null
set p=null
set u=null
endfunction
function InitTrig_CreepsSpecialImpCastSpell takes nothing returns nothing
local trigger trig=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup1)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup2)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup4)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup5)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup4)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup5)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup6)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup7)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup1)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup2)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup4)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup5)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup4)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup5)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup6)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup7)
call TriggerAddCondition(trig,Condition(function CreepsSpecialImpCastSpellConditions))
call TriggerAddAction(trig,function CreepsSpecialImpCastSpellActions)
set trig=null
endfunction
function CreepsSpecialImpConditions takes nothing returns boolean
return IsUnitCreepSpecial(GetTriggerUnit())
endfunction
function IsDistanceCreepsSpecialCorrect takes unit u,rect r returns boolean
local boolean log=false
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetRectCenterX(r)
local real y1=GetRectCenterY(r)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<=300.then
set log=true
endif
return log
endfunction
function CreepsSpecialImpActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local player p=GetOwningPlayer(u)
local rect r=null
if p==Player(5)and IsDistanceCreepsSpecialCorrect(u,gg_rct_CreepsAllianceSpecialGroup3)then
if GetOutpostOwner(gg_rct_Alliance_Bot_O1)=="akatsuki"then
set r=gg_rct_CreepsAkatsukiSpecialGroup5
elseif GetOutpostOwner(gg_rct_Alliance_Top_O1)=="akatsuki"then
set r=gg_rct_CreepsAkatsukiSpecialGroup4
elseif GetOutpostOwner(gg_rct_Akatsuki_Bot_O1)=="akatsuki"then
set r=gg_rct_CreepsAllianceSpecialGroup4
elseif GetOutpostOwner(gg_rct_Akatsuki_Top_O1)=="akatsuki"then
set r=gg_rct_CreepsAllianceSpecialGroup5
elseif GetOutpostOwner(gg_rct_Akatsuki_Bot_O2)=="akatsuki"then
set r=gg_rct_CreepsAllianceSpecialGroup6
elseif GetOutpostOwner(gg_rct_Akatsuki_Top_O2)=="akatsuki"then
set r=gg_rct_CreepsAllianceSpecialGroup7
endif
elseif p==Player(11)and IsDistanceCreepsSpecialCorrect(u,gg_rct_CreepsAkatsukiSpecialGroup3)then
if GetOutpostOwner(gg_rct_Akatsuki_Top_O1)=="alliance"then
set r=gg_rct_CreepsAllianceSpecialGroup5
elseif GetOutpostOwner(gg_rct_Akatsuki_Bot_O1)=="alliance"then
set r=gg_rct_CreepsAllianceSpecialGroup4
elseif GetOutpostOwner(gg_rct_Alliance_Top_O1)=="alliance"then
set r=gg_rct_CreepsAkatsukiSpecialGroup4
elseif GetOutpostOwner(gg_rct_Alliance_Bot_O1)=="alliance"then
set r=gg_rct_CreepsAkatsukiSpecialGroup5
elseif GetOutpostOwner(gg_rct_Alliance_Top_O2)=="alliance"then
set r=gg_rct_CreepsAkatsukiSpecialGroup6
elseif GetOutpostOwner(gg_rct_Alliance_Bot_O2)=="alliance"then
set r=gg_rct_CreepsAkatsukiSpecialGroup7
endif
endif
if r!=null then
call SaveRectHandle(Hash,GetHandleId(u),0,r)
call IssuePointOrder(u,"move",GetRectCenterX(r),GetRectCenterY(r))
endif
set r=null
set p=null
set u=null
endfunction
function InitTrig_CreepsSpecialImp takes nothing returns nothing
local trigger trig=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAllianceSpecialGroup3)
call TriggerRegisterEnterRectSimple(trig,gg_rct_CreepsAkatsukiSpecialGroup3)
call TriggerAddCondition(trig,Condition(function CreepsSpecialImpConditions))
call TriggerAddAction(trig,function CreepsSpecialImpActions)
set trig=null
endfunction
function cj_anonym__59 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,0)
local real dmg=LoadReal(Hash,h,1)
local real radius=LoadReal(Hash,h,2)
local unit c=LoadUnitHandle(Hash,h,3)
local player p=LoadPlayerHandle(Hash,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,p)then
call UnitDamageTarget(c,tg,GetTaijutsuDamage(dmg,c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call CreateEffect(x,y,GetRandomReal(1.1,1.25),"NewDirtEXNofire.mdx",8.)
call CreateEffect(x,y,1.35,"Boom.mdx",1.)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+150.*Cos(1.224),y+150.*Sin(1.224)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+150.*Cos(2.448),y+150.*Sin(2.448)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+150.*Cos(3.672),y+150.*Sin(3.672)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+150.*Cos(4.896),y+150.*Sin(4.896)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+150.*Cos(6.12),y+150.*Sin(6.12)))
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set g=null
set tg=null
set c=null
set d=null
set p=null
set t=null
endfunction
function CreepsJutsu__KibakuKunaiBabah takes unit c,real x,real y,real radius returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local real time=1.2
local real dmg=350.
call SaveAgentHandle(Hash,h,0,CreateUnit(p,0x68303151,x,y,0.))
call SaveReal(Hash,h,1,dmg)
call SaveReal(Hash,h,2,radius)
call SaveAgentHandle(Hash,h,3,c)
call SaveAgentHandle(Hash,h,4,p)
call TimerStart(t,time,false,function cj_anonym__59)
set p=null
set t=null
endfunction
function cj_anonym__60 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local integer amount=LoadInteger(Hash,h,2)
local real offset=LoadReal(Hash,h,3)
local boolean crashLog=LoadBoolean(Hash,h,4)
local group g=LoadGroupHandle(Hash,h,5)
local real radius=LoadReal(Hash,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and amount>0 and not crashLog then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or crashLog
if IsUnitWeapon(d,tg,GetOwningPlayer(c))then
call RemoveUnit(tg)
call UnitWeaponDestroy(x,y)
call SaveBoolean(Hash,h,4,true)
set crashLog=true
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveInteger(Hash,h,2,amount-1)
else
call RemoveUnit(d)
call DestroyGroup(g)
if not crashLog then
call CreepsJutsu__KibakuKunaiBabah(c,x,y,radius)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set c=null
set d=null
set t=null
endfunction
function CreepsJutsu__KibakuKunaiCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(c)
local real yHero=GetWidgetY(c)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real speed=600.
local real period=.025
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real radius=300.
local boolean crashLog=false
local integer amount=R2I(distance/offset)
local unit d=CreateUnit(GetOwningPlayer(c),0x68303343,x,y,a)
call SaveBoolean(Hash,GetHandleId(c),2,true)
call IssueImmediateOrder(c,"holdposition")
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call Sound3D(c,"ITEM Kibaku Kunai Throw.mp3")
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveInteger(Hash,h,2,amount)
call SaveReal(Hash,h,3,offset)
call SaveBoolean(Hash,h,4,crashLog)
call SaveAgentHandle(Hash,h,5,CreateGroup())
call SaveReal(Hash,h,6,radius)
call TimerStart(t,period,true,function cj_anonym__60)
set d=null
set t=null
endfunction
function cj_anonym__61 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local player p=LoadPlayerHandle(Hash,h,2)
local group g1=LoadGroupHandle(Hash,h,3)
local group g2=LoadGroupHandle(Hash,h,4)
local real offset=LoadReal(Hash,h,5)
local real rangeMax=LoadReal(Hash,h,6)
local real rangeCur=LoadReal(Hash,h,7)
local real radius=LoadReal(Hash,h,8)
local real dmg=LoadReal(Hash,h,9)
local real timeDebuff=LoadReal(Hash,h,10)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null or rangeCur==rangeMax
if IsUnitNeedClear(tg,p)and not IsUnitInGroup(tg,g2)then
if GetUnitAbilityLevel(tg,0x41304F4F)==0 then
call UnitTempSpell(tg,0x41304F4F,0x42303139,timeDebuff,0,false)
endif
call GroupAddUnit(g2,tg)
call UnitDamageTarget(c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodFootman.mdl",tg,"chest"))
elseif IsUnitWeapon(d,tg,p)then
call RemoveUnit(tg)
call UnitWeaponDestroy(x,y)
set rangeCur=rangeMax
endif
call GroupRemoveUnit(g1,tg)
endloop
call SaveReal(Hash,h,7,rangeCur+offset)
else
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set g1=null
set g2=null
set d=null
set c=null
set tg=null
set t=null
endfunction
function CreepsJutsu__FumaShurikenCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(c)
local real yHero=GetWidgetY(c)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local player p=GetOwningPlayer(c)
local real dmg=75.
local real speed=600.
local real period=.025
local real offset=speed*period
local real radius=125.
local real rangeMax=600.
local real rangeCur=0.
local real timeDebuff=2.
local unit d=CreateUnit(p,0x68303342,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveAgentHandle(Hash,h,2,p)
call SaveAgentHandle(Hash,h,3,CreateGroup())
call SaveAgentHandle(Hash,h,4,CreateGroup())
call SaveReal(Hash,h,5,offset)
call SaveReal(Hash,h,6,rangeMax)
call SaveReal(Hash,h,7,rangeCur)
call SaveReal(Hash,h,8,radius)
call SaveReal(Hash,h,9,dmg)
call SaveReal(Hash,h,10,timeDebuff)
call TimerStart(t,period,true,function cj_anonym__61)
set p=null
set t=null
set d=null
endfunction
function cj_anonym__63 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit tu=LoadUnitHandle(Hash,h,1)
local real HP=LoadReal(Hash,h,2)
local real MP=LoadReal(Hash,h,3)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(c)>.405 and not IsUnitUnpausedButDisabled(c)and GetWidgetLife(tu)>.405 and distance<=150.and GetUnitAbilityLevel(tu,0x42303357)>0 and GetUnitState(tu,UNIT_STATE_MANA)>0.then
call SetUnitFacing(c,bj_RADTODEG*Atan2(y1-y,x1-x))
if GetUnitState(tu,UNIT_STATE_MANA)>=MP then
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)-MP)
else
call SetUnitState(tu,UNIT_STATE_MANA,0.)
endif
if GetWidgetLife(tu)>=HP then
call SetWidgetLife(c,GetWidgetLife(c)+HP)
else
call SetWidgetLife(c,GetWidgetLife(c)+GetWidgetLife(tu))
endif
call UnitDamageTarget(c,tu,HP,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
else
call SetUnitTimeScale(tu,1.)
if GetWidgetLife(c)>.405 then
call SetUnitPathing(c,true)
call PauseUnit(c,false)
call SetUnitAnimation(c,"Stand ready")
else
call SetUnitAnimation(c,"Death")
endif
if GetWidgetLife(tu)>.405 then
call UnitRemoveAbility(tu,0x42303357)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set c=null
set tu=null
set t=null
endfunction
function cj_anonym__62 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit tu=LoadUnitHandle(Hash,h,1)
local real period=.1
local real HP=25.*period
local real MP=10.*period
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real offset=50.
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SetUnitPathing(c,false)
call SetUnitPosition(c,x1+offset*Cos(a*bj_DEGTORAD),y1+offset*Sin(a*bj_DEGTORAD))
call PauseUnit(c,true)
call SetUnitAnimation(c,"Spell")
call SetUnitTimeScale(tu,0.)
call SaveAgentHandle(Hash,h1,0,c)
call SaveAgentHandle(Hash,h1,1,tu)
call SaveReal(Hash,h1,2,HP)
call SaveReal(Hash,h1,3,MP)
call TimerStart(t1,period,true,function cj_anonym__63)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set c=null
set tu=null
set t=null
set t1=null
endfunction
function CreepsJutsu__ChakraKyushuCast takes unit c,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,tu)
call TimerStart(t,.15,false,function cj_anonym__62)
set t=null
endfunction
function CreepsJutsu__IssenDamage takes unit c,real x,real y returns boolean
local player p=GetOwningPlayer(c)
local boolean log=false
local real dmg=45.
local real radius=125.
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or log
if IsUnitNeedNinjutsu(tg,p)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg,c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
set log=true
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set p=null
set tg=null
return log
endfunction
function cj_anonym__64 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d1=LoadUnitHandle(Hash,h,0)
local unit d2=LoadUnitHandle(Hash,h,1)
local real a=LoadReal(Hash,h,2)
local real offset=LoadReal(Hash,h,3)
local real range=LoadReal(Hash,h,4)
local real x=GetWidgetX(d1)
local real y=GetWidgetY(d1)
local boolean logDamaged=CreepsJutsu__IssenDamage(LoadUnitHandle(Hash,h,5),x,y)
if range>0.and not logDamaged then
call SetUnitPosition(d1,x+offset*Cos(a),y+offset*Sin(a))
call SetUnitPosition(d2,x+offset*Cos(a),y+offset*Sin(a))
call SaveReal(Hash,h,4,range-offset)
else
call RemoveUnit(d1)
call RemoveUnit(d2)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d1=null
set d2=null
set t=null
endfunction
function CreepsJutsu__IssenCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1100.
local real period=.025
local real offset=speed*period
local real range=800.
local player p=GetOwningPlayer(c)
call Sound3D(c,"CREEP Issen.mp3")
call SaveAgentHandle(Hash,h,0,CreateUnit(p,0x6E303249,x,y,a))
call SaveAgentHandle(Hash,h,1,CreateUnit(p,0x6E303248,x,y,a))
call SaveReal(Hash,h,2,a*bj_DEGTORAD)
call SaveReal(Hash,h,3,offset)
call SaveReal(Hash,h,4,range)
call SaveAgentHandle(Hash,h,5,c)
call TimerStart(t,period,true,function cj_anonym__64)
set p=null
set t=null
endfunction
function cj_anonym__65 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local real a=LoadReal(Hash,h,2)
local real radius=LoadReal(Hash,h,3)
local real dmg=LoadReal(Hash,h,4)
local real range=LoadReal(Hash,h,5)
local real offset=LoadReal(Hash,h,6)
local group grDamaged=LoadGroupHandle(Hash,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local unit tg
local player p=GetOwningPlayer(c)
if range>0.then
if SpecialEffectsShow then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x,y))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
endif
endif
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,p)and not IsUnitInGroup(tg,grDamaged)then
call GroupAddUnit(grDamaged,tg)
if GetUnitAbilityLevel(tg,0x41304B35)==0 then
call UnitTempSpell(tg,0x41304B35,0x42303356,4.,0,false)
endif
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg,c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call SaveReal(Hash,h,5,range-offset)
else
call GroupClear(grDamaged)
call DestroyGroup(grDamaged)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grDamaged=null
set c=null
set p=null
set tg=null
set d=null
set t=null
endfunction
function CreepsJutsu__FutonCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real radius=300.
local real dmg=30.
local real range=800.
local real speed=1200.
local real offset=speed*period
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(c),0x6E30324C,x,y,a+90.)
call Sound3D(c,"CREEP Futon Kiryu Ranbu.mp3")
call SetUnitPathing(bj_lastCreatedUnit,false)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,bj_lastCreatedUnit)
call SaveReal(Hash,h,2,a)
call SaveReal(Hash,h,3,radius)
call SaveReal(Hash,h,4,dmg)
call SaveReal(Hash,h,5,range)
call SaveReal(Hash,h,6,offset)
call SaveAgentHandle(Hash,h,7,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__65)
set t=null
endfunction
function CreepsJutsu__RaitonCast takes unit c,real x1,real y1 returns nothing
local player p=GetOwningPlayer(c)
local real radius=400.
local unit tg
call Sound3D(c,"CREEP Raiton Raigen Raikochu.mp3")
call UnitApplyTimedLife(CreateUnit(p,0x6E30324B,x1,y1,GetRandomReal(0.,360.)),0x42544C46,2.)
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,p)then
set bj_lastCreatedUnit=CreateUnit(p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41303533)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
set p=null
endfunction
function CreepsJutsu__DotonRemoveBlock takes integer ht,integer max returns nothing
local integer i=0
local destructable des
loop
set des=LoadDestructableHandle(Hash,ht,i)
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("Deathmok.mdx",GetWidgetX(des),GetWidgetY(des)))
endif
call RemoveDestructable(des)
set i=i+1
exitwhen i==max
endloop
set des=null
endfunction
function CreepsJutsu__DotonCreateBlock takes real x,real y,integer ht,integer max returns nothing
local integer i=0
local real radius=400.
local real startOffset=radius/2.
local real degree=0.
local real degreeStep=360./max
local real x1
local real y1
loop
set x1=x+startOffset*Cos(degree*bj_DEGTORAD)
set y1=y+startOffset*Sin(degree*bj_DEGTORAD)
call SaveDestructableHandle(Hash,ht,i,CreateDestructable(0x42304243,x1,y1,degree,.8,0))
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("Deathmok.mdx",x1,y1))
endif
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
endfunction
function cj_anonym__66 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call CreepsJutsu__DotonRemoveBlock(h,LoadInteger(Hash,h,-1))
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function CreepsJutsu__DotonCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer max=12
local real time=4.
call Sound3D(c,"CREEP Doton Daichidokaku.mp3")
call CreepsJutsu__DotonCreateBlock(x1,y1,h,max)
call SaveInteger(Hash,h,-1,max)
call TimerStart(t,time,false,function cj_anonym__66)
set t=null
endfunction
function cj_anonym__67 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local group grDamaged=LoadGroupHandle(Hash,h,2)
local real radius=LoadReal(Hash,h,3)
local real dmg=LoadReal(Hash,h,4)
local real range=LoadReal(Hash,h,5)
local real offset=LoadReal(Hash,h,6)
local real a=LoadReal(Hash,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=x-(radius/2.5)*Cos(a*bj_DEGTORAD)
local real y1=y-(radius/2.5)*Sin(a*bj_DEGTORAD)
local unit tg
local player p=GetOwningPlayer(c)
if range>0.then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,p)then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",tg,"chest"))
call SetUnitPosition(tg,GetWidgetX(tg)+offset*Cos(a*bj_DEGTORAD),GetWidgetY(tg)+offset*Sin(a*bj_DEGTORAD))
if not IsUnitInGroup(tg,grDamaged)then
call GroupAddUnit(grDamaged,tg)
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg,c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call SaveReal(Hash,h,5,range-offset)
else
call GroupClear(grDamaged)
call DestroyGroup(grDamaged)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grDamaged=null
set c=null
set p=null
set tg=null
set d=null
set t=null
endfunction
function CreepsJutsu__SuitonCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real radius=200.
local real dmg=25.
local real range=600.
local real speed=900.
local real offset=speed*period
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(c),0x6E30324A,x,y,a)
call Sound3D(c,"CREEP Suiton Suidan no Jutsu.mp3")
call SetUnitPathing(bj_lastCreatedUnit,false)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,bj_lastCreatedUnit)
call SaveAgentHandle(Hash,h,2,CreateGroup())
call SaveReal(Hash,h,3,radius)
call SaveReal(Hash,h,4,dmg)
call SaveReal(Hash,h,5,range)
call SaveReal(Hash,h,6,offset)
call SaveReal(Hash,h,7,a)
call TimerStart(t,period,true,function cj_anonym__67)
set t=null
endfunction
function cj_anonym__68 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real dmg=LoadReal(Hash,h,1)
local real radius=LoadReal(Hash,h,2)
local real x1=LoadReal(Hash,h,3)
local real y1=LoadReal(Hash,h,4)
local real period=LoadReal(Hash,h,5)
local real time=LoadReal(Hash,h,6)
local unit c=LoadUnitHandle(Hash,h,7)
local unit tg
local player p=GetOwningPlayer(c)
if GetWidgetLife(c)>.405 and not IsUnitUnpausedButDisabled(c)and time>0.then
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,p)then
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg,c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call SaveReal(Hash,h,6,time-period)
else
call KillUnit(LoadUnitHandle(Hash,h,0))
if GetWidgetLife(c)>.405 then
call PauseUnit(c,false)
call SetUnitAnimation(c,"Spell channel")
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set c=null
set tg=null
set t=null
endfunction
function CreepsJutsu__KatonCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real range=450.
local real time=3.
local real period=.1
local real dmg=40.*period
local real radius=300.
set x1=x+range*Cos(a*bj_DEGTORAD)
set y1=y+range*Sin(a*bj_DEGTORAD)
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(c),0x6E303247,x,y,a)
call Sound3D(c,"CREEP Katon Goen no Jutsu.mp3")
call SetUnitTimeScale(bj_lastCreatedUnit,.4)
call PauseUnit(c,true)
call SetUnitAnimation(c,"Spell two")
call SaveAgentHandle(Hash,h,0,bj_lastCreatedUnit)
call SaveReal(Hash,h,1,dmg)
call SaveReal(Hash,h,2,radius)
call SaveReal(Hash,h,3,x1)
call SaveReal(Hash,h,4,y1)
call SaveReal(Hash,h,5,period)
call SaveReal(Hash,h,6,time)
call SaveAgentHandle(Hash,h,7,c)
call TimerStart(t,period,true,function cj_anonym__68)
set t=null
endfunction
function CreepsJutsu__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==0x41304733 or i==0x41305555 or i==0x41303753 or i==0x41303244 or i==0x41305131 or i==0x4130344E or i==0x41305A4E or i==0x41303441 or i==0x41304844
endfunction
function cj_anonym__70 takes nothing returns nothing
set creepsJutsuCD[2]=false
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__69 takes nothing returns nothing
set creepsJutsuCD[1]=false
call DestroyTimer(GetExpiredTimer())
endfunction
function CreepsJutsu__SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
local integer what=0
if IsUnitAlly(GetTriggerUnit(),Player(5))then
if not creepsJutsuCD[1]then
if i==0x41304733 then
call CreepsJutsu__KatonCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41305555 then
call CreepsJutsu__SuitonCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41303753 then
call CreepsJutsu__DotonCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41303244 then
call CreepsJutsu__RaitonCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41305131 then
call CreepsJutsu__FutonCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==0x4130344E then
call CreepsJutsu__IssenCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
endif
set what=1
endif
elseif IsUnitAlly(GetTriggerUnit(),Player(11))then
if not creepsJutsuCD[2]then
if i==0x41305A4E then
if IsUnitHero(GetSpellTargetUnit())then
if GetRandomInt(1,3)==1 then
call CreepsJutsu__ChakraKyushuCast(GetTriggerUnit(),GetSpellTargetUnit())
set what=2
else
call UnitRemoveAbility(GetSpellTargetUnit(),0x42303357)
endif
else
call CreepsJutsu__ChakraKyushuCast(GetTriggerUnit(),GetSpellTargetUnit())
set what=2
endif
elseif i==0x41303441 then
call CreepsJutsu__FumaShurikenCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
set what=2
endif
endif
endif
if what>0 then
if what==1 then
set creepsJutsuCD[1]=true
call TimerStart(CreateTimer(),10.,false,function cj_anonym__69)
elseif what==2 then
set creepsJutsuCD[2]=true
call TimerStart(CreateTimer(),10.,false,function cj_anonym__70)
endif
else
if i==0x41304844 then
call CreepsJutsu__KibakuKunaiCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
else
call IssueImmediateOrder(GetTriggerUnit(),"stop")
call RecastSkills(GetTriggerUnit(),i,1,75.)
endif
endif
endfunction
function CreepsJutsu__Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function CreepsJutsu__SpellsConditions))
call TriggerAddAction(spells,function CreepsJutsu__SpellsActions)
set spells=null
endfunction
function CreepsSpecialAIChecking takes unit u returns nothing
local integer hu=GetHandleId(u)
local rect r=LoadRectHandle(Hash,hu,0)
local boolean castOn=LoadBoolean(Hash,hu,1)
if not castOn then
call IssuePointOrder(u,"move",GetRectCenterX(r),GetRectCenterY(r))
endif
set r=null
endfunction
function CreepsAIChecking takes unit u returns nothing
local unit tu=null
local unit tg
local player p=GetOwningPlayer(u)
local real life=9999.
local integer enemy=0
local group g1=CreateGroup()
local group g2=null
local integer hu
local rect r
call GroupEnumUnitsInRange(g1,GetWidgetX(u),GetWidgetY(u),OrderRange,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitEnemy(tg,p)and GetWidgetLife(tg)>.405 then
set enemy=enemy+1
if g2==null then
set g2=CreateGroup()
endif
call GroupAddUnit(g2,tg)
endif
call GroupRemoveUnit(g1,tg)
endloop
if enemy>0 then
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
if IsUnitEnemy(tg,p)and IsUnitCreep(tg)and GetWidgetLife(tg)<life and GetWidgetLife(tg)<GetUnitState(tg,UNIT_STATE_MAX_LIFE)then
set life=GetWidgetLife(tg)
set tu=tg
endif
call GroupRemoveUnit(g2,tg)
endloop
if tu!=null then
call IssueTargetOrder(u,"attack",tu)
endif
call DestroyGroup(g2)
endif
if tu==null then
set hu=GetHandleId(u)
set r=LoadRectHandle(Hash,hu,0)
call IssuePointOrder(u,"attack",GetRectCenterX(r),GetRectCenterY(r))
endif
set r=null
set g1=null
set g2=null
set p=null
set tu=null
set tg=null
endfunction
function CreepsAI takes nothing returns nothing
local unit tg
loop
set tg=FirstOfGroup(grCreepsAI)
exitwhen tg==null
call CreepsAIChecking(tg)
call GroupRemoveUnit(grCreepsAI,tg)
endloop
call GroupAddGroup(grCreeps,grCreepsAI)
if GetFloatGameState(GAME_STATE_TIME_OF_DAY)>17.59 or GetFloatGameState(GAME_STATE_TIME_OF_DAY)<5.59 then
loop
set tg=FirstOfGroup(grCreepsSpecialAI)
exitwhen tg==null
call CreepsSpecialAIChecking(tg)
call GroupRemoveUnit(grCreepsSpecialAI,tg)
endloop
call GroupAddGroup(grCreepsSpecial,grCreepsSpecialAI)
endif
set tg=null
endfunction
function CanUseSpawnSpecial takes nothing returns boolean
local boolean log=false
if GetFloatGameState(GAME_STATE_TIME_OF_DAY)>17.59 or GetFloatGameState(GAME_STATE_TIME_OF_DAY)<5.59 then
set log=true
call SetTimeOfDayScale(2.)
else
call SetTimeOfDayScale(1.)
endif
return log
endfunction
function SpawnSpecialGetNeedRect takes player p returns rect
local rect r=null
if p==Player(5)then
if GetOutpostOwner(gg_rct_Alliance_Bot_O2)=="akatsuki"then
set r=gg_rct_CreepsAllianceSpecialGroup1
elseif GetOutpostOwner(gg_rct_Alliance_Top_O2)=="akatsuki"then
set r=gg_rct_CreepsAllianceSpecialGroup2
else
set r=gg_rct_CreepsAllianceSpecialGroup3
endif
elseif p==Player(11)then
if GetOutpostOwner(gg_rct_Akatsuki_Top_O2)=="alliance"then
set r=gg_rct_CreepsAkatsukiSpecialGroup1
elseif GetOutpostOwner(gg_rct_Akatsuki_Bot_O2)=="alliance"then
set r=gg_rct_CreepsAkatsukiSpecialGroup2
else
set r=gg_rct_CreepsAkatsukiSpecialGroup3
endif
endif
set cj_v666_rect=r
set r=null
return cj_v666_rect
endfunction
function SpawnSpecial takes nothing returns nothing
local unit u
local player p=Player(5)
local real x=GetRectCenterX(gg_rct_Alliance_Head)
local real y=GetRectCenterY(gg_rct_Alliance_Head)
local real lifeTime=30.
local real degree=45.
local integer id=AllianceSpecialID
local integer i=4
local rect recFinish=SpawnSpecialGetNeedRect(p)
local real randomOffset
local real randomDegree
loop
set randomOffset=GetRandomReal(50.,150.)
set randomDegree=GetRandomReal(1.,360.)
set u=CreateUnit(p,id,x+randomOffset*Cos(randomDegree*bj_DEGTORAD),y+randomOffset*Sin(randomDegree*bj_DEGTORAD),degree)
call GroupAddUnit(grCreepsSpecial,u)
call GroupAddUnit(grCreepsSpecialAI,u)
call UnitApplyTimedLife(u,0x42544C46,lifeTime)
call IssueImmediateOrder(u,"windwalk")
call SaveRectHandle(Hash,GetHandleId(u),0,recFinish)
call SaveBoolean(Hash,GetHandleId(u),1,false)
call IssuePointOrder(u,"move",GetRectCenterX(recFinish),GetRectCenterY(recFinish))
set i=i-1
exitwhen i==0
endloop
set p=Player(11)
set x=GetRectCenterX(gg_rct_Akatsuki_Head)
set y=GetRectCenterY(gg_rct_Akatsuki_Head)
set degree=225.
set i=4
set id=AkatsukiSpecialID
set recFinish=SpawnSpecialGetNeedRect(p)
loop
set randomOffset=GetRandomReal(50.,150.)
set randomDegree=GetRandomReal(1.,360.)
set u=CreateUnit(p,id,x+randomOffset*Cos(randomDegree*bj_DEGTORAD),y+randomOffset*Sin(randomDegree*bj_DEGTORAD),degree)
call GroupAddUnit(grCreepsSpecial,u)
call GroupAddUnit(grCreepsSpecialAI,u)
call UnitApplyTimedLife(u,0x42544C46,lifeTime)
call IssueImmediateOrder(u,"windwalk")
call SaveRectHandle(Hash,GetHandleId(u),0,recFinish)
call SaveBoolean(Hash,GetHandleId(u),1,false)
call IssuePointOrder(u,"move",GetRectCenterX(recFinish),GetRectCenterY(recFinish))
set i=i-1
exitwhen i==0
endloop
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,"|cFFFF5000Спецотряд отправлен!|r")
set recFinish=null
set p=null
set u=null
endfunction
function CreepMove takes player p,integer ID,real degree,rect recStart,rect recFinish,boolean catapulta returns nothing
local real x=GetRectCenterX(recStart)
local real y=GetRectCenterY(recStart)
local real x1
local real y1
local boolean speedUpLog=false
local unit u=CreateUnit(p,ID,x,y,degree)
set recFinish=AILineGetNeedRect(u,recFinish)
set x1=GetRectCenterX(recFinish)
set y1=GetRectCenterY(recFinish)
if TopLine and recStart==gg_rct_Creeps_Akatsuki_Top then
set speedUpLog=true
endif
if BotLine and recStart==gg_rct_Creeps_Alliance_Bot then
set speedUpLog=true
endif
if not catapulta then
if p==Player(5)and gakureAllianceNumber>1 then
call UnitAddAbility(u,0x41313458)
call UnitAddAbility(u,0x41304F4B)
call UnitAddAbility(u,0x41304632)
call UnitAddAbility(u,0x41304B58)
call SetUnitAbilityLevel(u,0x41313458,gakureAllianceNumber-1)
call SetUnitAbilityLevel(u,0x41304F4B,gakureAllianceNumber-1)
call SetUnitAbilityLevel(u,0x41304632,gakureAllianceNumber-1)
call SetUnitAbilityLevel(u,0x41304B58,gakureAllianceNumber-1)
elseif p==Player(11)and gakureAkatsukiNumber>1 then
call UnitAddAbility(u,0x41313458)
call UnitAddAbility(u,0x41304F4B)
call UnitAddAbility(u,0x41304632)
call UnitAddAbility(u,0x41304B58)
call SetUnitAbilityLevel(u,0x41313458,gakureAkatsukiNumber-1)
call SetUnitAbilityLevel(u,0x41304F4B,gakureAkatsukiNumber-1)
call SetUnitAbilityLevel(u,0x41304632,gakureAkatsukiNumber-1)
call SetUnitAbilityLevel(u,0x41304B58,gakureAkatsukiNumber-1)
endif
endif
call SaveRectHandle(Hash,GetHandleId(u),0,recFinish)
call SaveBoolean(Hash,GetHandleId(u),1,false)
if speedUpLog then
call UnitAddAbility(u,0x41305A48)
endif
call IssuePointOrder(u,"attack",x1,y1)
call GroupAddUnit(grCreeps,u)
call GroupAddUnit(grCreepsAI,u)
set u=null
endfunction
function CreepsSpawnGetStartRect takes rect rectStart,string typeCreep returns rect
local rect rectEnd=rectStart
if typeCreep=="forward"then
if rectStart==gg_rct_Creeps_Alliance_Top and AllianceForwardTopDestroy then
set rectEnd=gg_rct_Alliance_Head
elseif rectStart==gg_rct_Creeps_Akatsuki_Top and AkatuskiForwardTopDestroy then
set rectEnd=gg_rct_Akatsuki_Head
elseif rectStart==gg_rct_Creeps_Alliance_Bot and AllianceForwardBotDestroy then
set rectEnd=gg_rct_Alliance_Head
elseif rectStart==gg_rct_Creeps_Akatsuki_Bot and AkatuskiForwardBotDestroy then
set rectEnd=gg_rct_Akatsuki_Head
endif
elseif typeCreep=="mage"then
if rectStart==gg_rct_Creeps_Alliance_Top and AllianceSupportTopDestroy then
set rectEnd=gg_rct_Alliance_Head
elseif rectStart==gg_rct_Creeps_Akatsuki_Top and AkatuskiSupportTopDestroy then
set rectEnd=gg_rct_Akatsuki_Head
elseif rectStart==gg_rct_Creeps_Alliance_Bot and AllianceSupportBotDestroy then
set rectEnd=gg_rct_Alliance_Head
elseif rectStart==gg_rct_Creeps_Akatsuki_Bot and AkatuskiSupportBotDestroy then
set rectEnd=gg_rct_Akatsuki_Head
endif
elseif typeCreep=="catapulta"then
if rectStart==gg_rct_Creeps_Alliance_Top or rectStart==gg_rct_Creeps_Alliance_Bot then
set rectEnd=gg_rct_Alliance_Head
elseif rectStart==gg_rct_Creeps_Akatsuki_Top or rectStart==gg_rct_Creeps_Akatsuki_Bot then
set rectEnd=gg_rct_Akatsuki_Head
endif
endif
set cj_v666_rect=rectEnd
set rectEnd=null
return cj_v666_rect
endfunction
function CreepsSpawn takes nothing returns nothing
local integer i=0
if not CanUseSpawnSpecial()then
loop
exitwhen i==ForwardNumber
if TopLine then
if i==0 then
call CreepMove(Player(5),AllianceTetsuForwardID,180.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Top,"forward"),gg_rct_Creeps_Konoha_Up_2,false)
elseif i==1 then
call CreepMove(Player(5),AllianceKonohaForwardID,180.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Top,"forward"),gg_rct_Creeps_Konoha_Up_2,false)
elseif i==2 then
call CreepMove(Player(5),AllianceIwaForwardID,180.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Top,"forward"),gg_rct_Creeps_Konoha_Up_2,false)
elseif i==3 then
call CreepMove(Player(5),AllianceKiriForwardID,180.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Top,"forward"),gg_rct_Creeps_Konoha_Up_2,false)
endif
call CreepMove(Player(11),AkatsukiForwardID,270.,CreepsSpawnGetStartRect(gg_rct_Creeps_Akatsuki_Top,"forward"),gg_rct_Creeps_Akatsuki_Up_2,false)
endif
if BotLine then
if i==0 then
call CreepMove(Player(5),AllianceTetsuForwardID,90.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Bot,"forward"),gg_rct_Creeps_Konoha_Down_2,false)
elseif i==1 then
call CreepMove(Player(5),AllianceKonohaForwardID,90.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Bot,"forward"),gg_rct_Creeps_Konoha_Down_2,false)
elseif i==2 then
call CreepMove(Player(5),AllianceIwaForwardID,90.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Bot,"forward"),gg_rct_Creeps_Konoha_Down_2,false)
elseif i==3 then
call CreepMove(Player(5),AllianceKiriForwardID,90.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Bot,"forward"),gg_rct_Creeps_Konoha_Down_2,false)
endif
call CreepMove(Player(11),AkatsukiForwardID,0.,CreepsSpawnGetStartRect(gg_rct_Creeps_Akatsuki_Bot,"forward"),gg_rct_Creeps_Akatsuki_Down_2,false)
endif
set i=i+1
endloop
set i=0
loop
exitwhen i==SupportNumber
if TopLine then
if i==0 then
call CreepMove(Player(5),AllianceSunaSupportID,180.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Top,"mage"),gg_rct_Creeps_Konoha_Up_2,false)
elseif i==1 then
call CreepMove(Player(5),AllianceKumoSupportID,180.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Top,"mage"),gg_rct_Creeps_Konoha_Up_2,false)
endif
call CreepMove(Player(11),AkatsukiSupportID,270.,CreepsSpawnGetStartRect(gg_rct_Creeps_Akatsuki_Top,"mage"),gg_rct_Creeps_Akatsuki_Up_2,false)
endif
if BotLine then
if i==0 then
call CreepMove(Player(5),AllianceSunaSupportID,90.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Bot,"mage"),gg_rct_Creeps_Konoha_Down_2,false)
elseif i==1 then
call CreepMove(Player(5),AllianceKumoSupportID,90.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Bot,"mage"),gg_rct_Creeps_Konoha_Down_2,false)
endif
call CreepMove(Player(11),AkatsukiSupportID,0.,CreepsSpawnGetStartRect(gg_rct_Creeps_Akatsuki_Bot,"mage"),gg_rct_Creeps_Akatsuki_Down_2,false)
endif
set i=i+1
endloop
if TopLine then
if AllianceCatapultaNumber>0 then
if AllianceCatapultaOn then
set i=0
loop
call CreepMove(Player(5),AllianceCatapultaID,180.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Top,"catapulta"),gg_rct_Creeps_Konoha_Up_2,true)
set i=i+1
exitwhen i==AllianceCatapultaNumber
endloop
endif
endif
if AkatsukiCatapultaNumber>0 then
if AkatsukiCatapultaOn then
set i=0
loop
call CreepMove(Player(11),AkatsukiCatapultaID,270.,CreepsSpawnGetStartRect(gg_rct_Creeps_Akatsuki_Top,"catapulta"),gg_rct_Creeps_Akatsuki_Up_2,true)
set i=i+1
exitwhen i==AkatsukiCatapultaNumber
endloop
endif
endif
endif
if BotLine then
if AllianceCatapultaNumber>0 then
if AllianceCatapultaOn then
set i=0
loop
call CreepMove(Player(5),AllianceCatapultaID,90.,CreepsSpawnGetStartRect(gg_rct_Creeps_Alliance_Bot,"catapulta"),gg_rct_Creeps_Konoha_Down_2,true)
set i=i+1
exitwhen i==AllianceCatapultaNumber
endloop
endif
endif
if AkatsukiCatapultaNumber>0 then
if AkatsukiCatapultaOn then
set i=0
loop
call CreepMove(Player(11),AkatsukiCatapultaID,0.,CreepsSpawnGetStartRect(gg_rct_Creeps_Akatsuki_Bot,"catapulta"),gg_rct_Creeps_Akatsuki_Down_2,true)
set i=i+1
exitwhen i==AkatsukiCatapultaNumber
endloop
endif
endif
endif
if AllianceCatapultaOn then
set AllianceCatapultaOn=false
else
set AllianceCatapultaOn=true
endif
if AkatsukiCatapultaOn then
set AkatsukiCatapultaOn=false
else
set AkatsukiCatapultaOn=true
endif
else
call SpawnSpecial()
endif
endfunction
function OutpostsHealersSpawn takes nothing returns nothing
local player p
local unit u
if TopLine then
set p=Player(5)
set u=CreateUnit(p,AllianceHealerID,GetRectCenterX(gg_rct_Creeps_Alliance_Top),GetRectCenterY(gg_rct_Creeps_Alliance_Top),0.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Alliance_Top_O1_Healer_1)
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Alliance_Top_O1_Healer_1),GetRectCenterY(gg_rct_Alliance_Top_O1_Healer_1))
set u=CreateUnit(p,AllianceHealerID,GetRectCenterX(gg_rct_Creeps_Alliance_Top),GetRectCenterY(gg_rct_Creeps_Alliance_Top),0.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Alliance_Top_O1_Healer_2)
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Alliance_Top_O1_Healer_2),GetRectCenterY(gg_rct_Alliance_Top_O1_Healer_2))
set p=Player(11)
set u=CreateUnit(p,AkatsukiHealerID,GetRectCenterX(gg_rct_Creeps_Akatsuki_Top),GetRectCenterY(gg_rct_Creeps_Akatsuki_Top),270.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Akatsuki_Top_O1_Healer_1)
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Akatsuki_Top_O1_Healer_1),GetRectCenterY(gg_rct_Akatsuki_Top_O1_Healer_1))
set u=CreateUnit(p,AkatsukiHealerID,GetRectCenterX(gg_rct_Creeps_Akatsuki_Top),GetRectCenterY(gg_rct_Creeps_Akatsuki_Top),270.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Akatsuki_Top_O1_Healer_2)
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Akatsuki_Top_O1_Healer_2),GetRectCenterY(gg_rct_Akatsuki_Top_O1_Healer_2))
endif
if BotLine then
set p=Player(5)
set u=CreateUnit(p,AllianceHealerID,GetRectCenterX(gg_rct_Creeps_Alliance_Bot),GetRectCenterY(gg_rct_Creeps_Alliance_Bot),90.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Alliance_Bot_O1_Healer_1)
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Alliance_Bot_O1_Healer_1),GetRectCenterY(gg_rct_Alliance_Bot_O1_Healer_1))
set u=CreateUnit(p,AllianceHealerID,GetRectCenterX(gg_rct_Creeps_Alliance_Bot),GetRectCenterY(gg_rct_Creeps_Alliance_Bot),90.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Alliance_Bot_O1_Healer_2)
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Alliance_Bot_O1_Healer_2),GetRectCenterY(gg_rct_Alliance_Bot_O1_Healer_2))
set p=Player(11)
set u=CreateUnit(p,AkatsukiHealerID,GetRectCenterX(gg_rct_Creeps_Akatsuki_Bot),GetRectCenterY(gg_rct_Creeps_Akatsuki_Bot),180.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Akatsuki_Bot_O1_Healer_1)
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Akatsuki_Bot_O1_Healer_1),GetRectCenterY(gg_rct_Akatsuki_Bot_O1_Healer_1))
set u=CreateUnit(p,AkatsukiHealerID,GetRectCenterX(gg_rct_Creeps_Akatsuki_Bot),GetRectCenterY(gg_rct_Creeps_Akatsuki_Bot),180.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Akatsuki_Bot_O1_Healer_2)
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Akatsuki_Bot_O1_Healer_2),GetRectCenterY(gg_rct_Akatsuki_Bot_O1_Healer_2))
endif
set u=null
set p=null
endfunction
function cj_anonym__77 takes nothing returns nothing
call OutpostsHealersSpawn()
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__76 takes nothing returns nothing
if not udg_GameEnd and outpostNumberForward<ForwardNumber then
set outpostNumberForward=outpostNumberForward+1
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__75 takes nothing returns nothing
if not udg_GameEnd and outpostNumberSupport<SupportNumber then
set outpostNumberSupport=outpostNumberSupport+1
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__74 takes nothing returns nothing
if not udg_GameEnd and outpostNumberForward<ForwardNumber then
set outpostNumberForward=outpostNumberForward+1
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__73 takes nothing returns nothing
if not udg_GameEnd and outpostNumber<6 then
set outpostNumber=outpostNumber+1
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__72 takes nothing returns nothing
if not udg_GameEnd then
call CreepsSpawn()
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__71 takes nothing returns nothing
if not udg_GameEnd then
call CreepsAI()
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function CreepsStartSpawn takes nothing returns nothing
if TopLine then
call EnableTrigger(gg_trg_Creeps_Up_Imp_1)
call EnableTrigger(gg_trg_Creeps_Up_Imp_2)
call EnableTrigger(gg_trg_Creeps_Up_Imp_3)
call EnableTrigger(gg_trg_Creeps_Up_Imp_4)
call EnableTrigger(gg_trg_Creeps_Up_Imp_5)
call EnableTrigger(gg_trg_Creeps_Up_Imp_6)
call EnableTrigger(gg_trg_Creeps_Up_Imp_7)
call EnableTrigger(gg_trg_Creeps_Up_Imp_8)
call EnableTrigger(gg_trg_Creeps_Up_Imp_9)
call EnableTrigger(gg_trg_Creeps_Up_Imp_10)
endif
if BotLine then
call EnableTrigger(gg_trg_Creeps_Down_Imp_1)
call EnableTrigger(gg_trg_Creeps_Down_Imp_2)
call EnableTrigger(gg_trg_Creeps_Down_Imp_3)
call EnableTrigger(gg_trg_Creeps_Down_Imp_4)
call EnableTrigger(gg_trg_Creeps_Down_Imp_5)
call EnableTrigger(gg_trg_Creeps_Down_Imp_6)
call EnableTrigger(gg_trg_Creeps_Down_Imp_7)
call EnableTrigger(gg_trg_Creeps_Down_Imp_8)
call EnableTrigger(gg_trg_Creeps_Down_Imp_9)
call EnableTrigger(gg_trg_Creeps_Down_Imp_10)
endif
call CreepsSpawn()
call TimerStart(CreateTimer(),5.,true,function cj_anonym__71)
call TimerStart(CreateTimer(),30.,true,function cj_anonym__72)
call TimerStart(CreateTimer(),600.,true,function cj_anonym__73)
call TimerStart(CreateTimer(),600.,false,function cj_anonym__74)
call TimerStart(CreateTimer(),1200.,false,function cj_anonym__75)
call TimerStart(CreateTimer(),1800.,false,function cj_anonym__76)
call TimerStart(CreateTimer(),5.,false,function cj_anonym__77)
endfunction
function InitTrig_Creeps takes nothing returns nothing
set gg_trg_Creeps=CreateTrigger()
call DisableTrigger(gg_trg_Creeps)
call TriggerAddAction(gg_trg_Creeps,function CreepsStartSpawn)
endfunction
function GetNCRespawnTime takes integer creepstype returns real
local real resp_time
if creepstype==1 then
set resp_time=30.
elseif creepstype==2 then
set resp_time=40.
elseif creepstype==3 then
set resp_time=50.
elseif creepstype==4 then
set resp_time=60.
elseif creepstype==5 then
set resp_time=70.
elseif creepstype==6 then
set resp_time=80.
elseif creepstype==7 then
set resp_time=90.
elseif creepstype==8 then
set resp_time=100.
elseif creepstype==9 then
set resp_time=110.
elseif creepstype==10 then
set resp_time=120.
endif
return resp_time
endfunction
function GetNCNumber takes integer creepstype returns integer
local integer number
if creepstype==1 or creepstype==2 or creepstype==3 then
set number=6
elseif creepstype==4 or creepstype==5 or creepstype==6 then
set number=5
elseif creepstype==7 or creepstype==8 or creepstype==9 or creepstype==10 then
set number=4
endif
return number
endfunction
function GetNCRawcode takes integer creepstype returns integer
local integer rawcode
local integer random
if creepstype==1 then
set rawcode=0x68303347
elseif creepstype==2 then
set rawcode=0x68303346
elseif creepstype==3 then
set rawcode=0x68303345
elseif creepstype==4 then
set rawcode=0x68303344
elseif creepstype==5 then
set rawcode=0x68303741
elseif creepstype==6 then
set rawcode=0x68303341
elseif creepstype==7 then
set rawcode=0x68303230
elseif creepstype==8 then
set rawcode=0x68303248
elseif creepstype==9 then
set rawcode=0x68303430
elseif creepstype==10 then
set random=GetRandomInt(1,3)
if random==1 then
set rawcode=0x68303348
elseif random==2 then
set rawcode=0x68303355
elseif random==3 then
set rawcode=0x68303356
endif
endif
return rawcode
endfunction
function NeituralsSpawn takes nothing returns nothing
local unit u
local integer i=1
local integer rawcode
local integer creep_number=1
local integer data=1
local integer rect_number=20
local integer number
local player p=Player(PLAYER_NEUTRAL_AGGRESSIVE)
local rect r
local real x
local real y
local real f
loop
if i==1 then
set r=gg_rct_Alliance_NC_1
set f=GetRandomReal(90.,135.)
elseif i==2 then
set r=gg_rct_Alliance_NC_2
set f=GetRandomReal(235.,270.)
elseif i==3 then
set r=gg_rct_Alliance_NC_3
set f=GetRandomReal(75.,120.)
elseif i==4 then
set r=gg_rct_Alliance_NC_4
set f=GetRandomReal(300.,335.)
elseif i==5 then
set r=gg_rct_Alliance_NC_5
set f=GetRandomReal(235.,270.)
elseif i==6 then
set r=gg_rct_Alliance_NC_6
set f=GetRandomReal(75.,120.)
elseif i==7 then
set r=gg_rct_Alliance_NC_7
set f=GetRandomReal(300.,335.)
elseif i==8 then
set r=gg_rct_Alliance_NC_8
set f=GetRandomReal(235.,270.)
elseif i==9 then
set r=gg_rct_Alliance_NC_9
set f=GetRandomReal(75.,120.)
elseif i==10 then
set r=gg_rct_Alliance_NC_10
set f=GetRandomReal(300.,335.)
elseif i==11 then
set r=gg_rct_Akatsuki_NC_1
set f=GetRandomReal(235.,270.)
elseif i==12 then
set r=gg_rct_Akatsuki_NC_2
set f=GetRandomReal(75.,120.)
elseif i==13 then
set r=gg_rct_Akatsuki_NC_3
set f=GetRandomReal(300.,335.)
elseif i==14 then
set r=gg_rct_Akatsuki_NC_4
set f=GetRandomReal(235.,270.)
elseif i==15 then
set r=gg_rct_Akatsuki_NC_5
set f=GetRandomReal(75.,120.)
elseif i==16 then
set r=gg_rct_Akatsuki_NC_6
set f=GetRandomReal(300.,335.)
elseif i==17 then
set r=gg_rct_Akatsuki_NC_7
set f=GetRandomReal(235.,270.)
elseif i==18 then
set r=gg_rct_Akatsuki_NC_8
set f=GetRandomReal(75.,120.)
elseif i==19 then
set r=gg_rct_Akatsuki_NC_9
set f=GetRandomReal(300.,335.)
elseif i==20 then
set r=gg_rct_Akatsuki_NC_10
set f=GetRandomReal(300.,335.)
endif
set x=GetRectCenterX(r)
set y=GetRectCenterY(r)
if creep_number>10 then
set creep_number=creep_number-10
endif
set rawcode=GetNCRawcode(creep_number)
set number=GetNCNumber(creep_number)
loop
if creep_number==10 then
set rawcode=GetNCRawcode(creep_number)
endif
set u=CreateUnit(p,rawcode,x,y,f)
call SetUnitUserData(u,data)
set NCcreepsX[data]=GetWidgetX(u)
set NCcreepsY[data]=GetWidgetY(u)
set NCcreepsF[data]=f
set NCcreepsRT[data]=GetNCRespawnTime(creep_number)
set NCcreepsID[data]=rawcode
set NCcreepsData[data]=data
call GroupAddUnit(grNeiturals,u)
set data=data+1
set number=number-1
exitwhen number==0
endloop
set creep_number=creep_number+1
set i=i+1
exitwhen i>rect_number
endloop
set u=null
set r=null
set p=null
endfunction
function cj_anonym__78 takes nothing returns nothing
call NeituralsSpawn()
call DestroyTimer(GetExpiredTimer())
endfunction
function NeituralsStartSpawn takes nothing returns nothing
call TimerStart(CreateTimer(),30.,false,function cj_anonym__78)
endfunction
function InitTrig_Neiturals takes nothing returns nothing
set gg_trg_Neiturals=CreateTrigger()
call DisableTrigger(gg_trg_Neiturals)
call TriggerAddAction(gg_trg_Neiturals,function NeituralsStartSpawn)
endfunction
function Neitural_Creeps_Left_the_Rects_Conditions takes nothing returns boolean
return IsUnitNC(GetTriggerUnit())
endfunction
function Neitural_Creeps_Left_the_Rects_Actions takes nothing returns nothing
local unit c=GetTriggerUnit()
local integer data=GetUnitUserData(c)
call IssuePointOrder(c,"move",NCcreepsX[data],NCcreepsY[data])
set c=null
endfunction
function InitTrig_Neitural_Creeps_Left_the_Rects takes nothing returns nothing
set gg_trg_Neitural_Creeps_Left_the_Rects=CreateTrigger()
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_3)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_4)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_5)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_6)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_7)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_8)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_9)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Alliance_NC_10)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_3)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_4)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_5)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_6)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_7)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_8)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_9)
call TriggerRegisterLeaveRectSimple(gg_trg_Neitural_Creeps_Left_the_Rects,gg_rct_Akatsuki_NC_10)
call TriggerAddCondition(gg_trg_Neitural_Creeps_Left_the_Rects,Condition(function Neitural_Creeps_Left_the_Rects_Conditions))
call TriggerAddAction(gg_trg_Neitural_Creeps_Left_the_Rects,function Neitural_Creeps_Left_the_Rects_Actions)
endfunction
function HealersConditions takes nothing returns boolean
return IsUnitHealer(GetTriggerUnit())and GetWidgetLife(GetTriggerUnit())>.405
endfunction
function cj_anonym__79 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local rect r=LoadRectHandle(Hash,h,1)
local real x=GetRectCenterX(r)
local real y=GetRectCenterY(r)
call IssueImmediateOrder(u,"stop")
call IssuePointOrder(u,"move",x,y)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set r=null
set u=null
set t=null
endfunction
function HealersActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit u=GetTriggerUnit()
local integer hu=GetHandleId(u)
local real timeWait=GetRandomReal(4.,5.)
local rect r=LoadRectHandle(Hash,hu,0)
call SaveAgentHandle(Hash,h,0,u)
call SaveAgentHandle(Hash,h,1,r)
call TimerStart(t,timeWait,false,function cj_anonym__79)
set r=null
set u=null
set t=null
endfunction
function InitTrig_Healers takes nothing returns nothing
set gg_trg_Healers=CreateTrigger()
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Akatsuki_Bot_O1_Healer_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Akatsuki_Bot_O1_Healer_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Akatsuki_Bot_O2_Healer_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Akatsuki_Bot_O2_Healer_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Akatsuki_Top_O1_Healer_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Akatsuki_Top_O1_Healer_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Akatsuki_Top_O2_Healer_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Akatsuki_Top_O2_Healer_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Alliance_Bot_O1_Healer_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Alliance_Bot_O1_Healer_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Alliance_Bot_O2_Healer_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Alliance_Bot_O2_Healer_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Alliance_Top_O1_Healer_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Alliance_Top_O1_Healer_2)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Alliance_Top_O2_Healer_1)
call TriggerRegisterLeaveRectSimple(gg_trg_Healers,gg_rct_Alliance_Top_O2_Healer_2)
call TriggerAddCondition(gg_trg_Healers,Condition(function HealersConditions))
call TriggerAddAction(gg_trg_Healers,function HealersActions)
endfunction
function OutpostEnterConditions takes nothing returns boolean
return GetWidgetLife(GetTriggerUnit())>.405 and GetUnitAbilityLevel(GetTriggerUnit(),ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL)==0 and IsUnitCreep(GetTriggerUnit())or IsUnitOutpost(GetTriggerUnit())
endfunction
function OutpostGetCreepForwardNumber takes rect r returns integer
local integer number=0
if r==gg_rct_Alliance_Top_O1 then
set number=AllianceOutpostForwardCurrent[2]
elseif r==gg_rct_Alliance_Top_O2 then
set number=AllianceOutpostForwardCurrent[1]
elseif r==gg_rct_Alliance_Bot_O1 then
set number=AllianceOutpostForwardCurrent[4]
elseif r==gg_rct_Alliance_Bot_O2 then
set number=AllianceOutpostForwardCurrent[3]
elseif r==gg_rct_Akatsuki_Top_O1 then
set number=AkatsukiOutpostForwardCurrent[2]
elseif r==gg_rct_Akatsuki_Top_O2 then
set number=AkatsukiOutpostForwardCurrent[1]
elseif r==gg_rct_Akatsuki_Bot_O1 then
set number=AkatsukiOutpostForwardCurrent[4]
elseif r==gg_rct_Akatsuki_Bot_O2 then
set number=AkatsukiOutpostForwardCurrent[3]
endif
return number
endfunction
function OutpostGetCreepSupportNumber takes rect r returns integer
local integer number=0
if r==gg_rct_Alliance_Top_O1 then
set number=AllianceOutpostMageCurrent[2]
elseif r==gg_rct_Alliance_Top_O2 then
set number=AllianceOutpostMageCurrent[1]
elseif r==gg_rct_Alliance_Bot_O1 then
set number=AllianceOutpostMageCurrent[4]
elseif r==gg_rct_Alliance_Bot_O2 then
set number=AllianceOutpostMageCurrent[3]
elseif r==gg_rct_Akatsuki_Top_O1 then
set number=AkatsukiOutpostMageCurrent[2]
elseif r==gg_rct_Akatsuki_Top_O2 then
set number=AkatsukiOutpostMageCurrent[1]
elseif r==gg_rct_Akatsuki_Bot_O1 then
set number=AkatsukiOutpostMageCurrent[4]
elseif r==gg_rct_Akatsuki_Bot_O2 then
set number=AkatsukiOutpostMageCurrent[3]
endif
return number
endfunction
function OutpostNumberPlus takes rect r,unit u returns nothing
if r==gg_rct_Alliance_Top_O1 then
set AllianceOutpostCurrent[2]=AllianceOutpostCurrent[2]+1
if IsUnitCreepForward(u)then
set AllianceOutpostForwardCurrent[2]=AllianceOutpostForwardCurrent[2]+1
elseif IsUnitCreepSupport(u)then
set AllianceOutpostMageCurrent[2]=AllianceOutpostMageCurrent[2]+1
endif
elseif r==gg_rct_Alliance_Top_O2 then
set AllianceOutpostCurrent[1]=AllianceOutpostCurrent[1]+1
if IsUnitCreepForward(u)then
set AllianceOutpostForwardCurrent[1]=AllianceOutpostForwardCurrent[1]+1
elseif IsUnitCreepSupport(u)then
set AllianceOutpostMageCurrent[1]=AllianceOutpostMageCurrent[1]+1
endif
elseif r==gg_rct_Alliance_Bot_O1 then
set AllianceOutpostCurrent[4]=AllianceOutpostCurrent[4]+1
if IsUnitCreepForward(u)then
set AllianceOutpostForwardCurrent[4]=AllianceOutpostForwardCurrent[4]+1
elseif IsUnitCreepSupport(u)then
set AllianceOutpostMageCurrent[4]=AllianceOutpostMageCurrent[4]+1
endif
elseif r==gg_rct_Alliance_Bot_O2 then
set AllianceOutpostCurrent[3]=AllianceOutpostCurrent[3]+1
if IsUnitCreepForward(u)then
set AllianceOutpostForwardCurrent[3]=AllianceOutpostForwardCurrent[3]+1
elseif IsUnitCreepSupport(u)then
set AllianceOutpostMageCurrent[3]=AllianceOutpostMageCurrent[3]+1
endif
elseif r==gg_rct_Akatsuki_Top_O1 then
set AkatsukiOutpostCurrent[2]=AkatsukiOutpostCurrent[2]+1
if IsUnitCreepForward(u)then
set AkatsukiOutpostForwardCurrent[2]=AkatsukiOutpostForwardCurrent[2]+1
elseif IsUnitCreepSupport(u)then
set AkatsukiOutpostMageCurrent[2]=AkatsukiOutpostMageCurrent[2]+1
endif
elseif r==gg_rct_Akatsuki_Top_O2 then
set AkatsukiOutpostCurrent[1]=AkatsukiOutpostCurrent[1]+1
if IsUnitCreepForward(u)then
set AkatsukiOutpostForwardCurrent[1]=AkatsukiOutpostForwardCurrent[1]+1
elseif IsUnitCreepSupport(u)then
set AkatsukiOutpostMageCurrent[1]=AkatsukiOutpostMageCurrent[1]+1
endif
elseif r==gg_rct_Akatsuki_Bot_O1 then
set AkatsukiOutpostCurrent[4]=AkatsukiOutpostCurrent[4]+1
if IsUnitCreepForward(u)then
set AkatsukiOutpostForwardCurrent[4]=AkatsukiOutpostForwardCurrent[4]+1
elseif IsUnitCreepSupport(u)then
set AkatsukiOutpostMageCurrent[4]=AkatsukiOutpostMageCurrent[4]+1
endif
elseif r==gg_rct_Akatsuki_Bot_O2 then
set AkatsukiOutpostCurrent[3]=AkatsukiOutpostCurrent[3]+1
if IsUnitCreepForward(u)then
set AkatsukiOutpostForwardCurrent[3]=AkatsukiOutpostForwardCurrent[3]+1
elseif IsUnitCreepSupport(u)then
set AkatsukiOutpostMageCurrent[3]=AkatsukiOutpostMageCurrent[3]+1
endif
endif
endfunction
function SetOutpostOwner takes rect r,string owner returns nothing
if r==gg_rct_Alliance_Top_O1 then
set AllianceOutpostOwner[2]=owner
elseif r==gg_rct_Alliance_Top_O2 then
set AllianceOutpostOwner[1]=owner
elseif r==gg_rct_Alliance_Bot_O1 then
set AllianceOutpostOwner[4]=owner
elseif r==gg_rct_Alliance_Bot_O2 then
set AllianceOutpostOwner[3]=owner
elseif r==gg_rct_Akatsuki_Top_O1 then
set AkatsukiOutpostOwner[2]=owner
elseif r==gg_rct_Akatsuki_Top_O2 then
set AkatsukiOutpostOwner[1]=owner
elseif r==gg_rct_Akatsuki_Bot_O1 then
set AkatsukiOutpostOwner[4]=owner
elseif r==gg_rct_Akatsuki_Bot_O2 then
set AkatsukiOutpostOwner[3]=owner
endif
endfunction
function OutpostSetChecking takes rect r,integer number,unit u returns boolean
local boolean clanCheckingLog=false
local boolean log=false
local string owner=GetOutpostOwner(r)
if number<outpostNumber then
if IsUnitAlly(u,Player(5))then
if owner=="alliance"then
set clanCheckingLog=true
elseif owner=="akatsuki"then
if number==0 then
set clanCheckingLog=true
call SetOutpostOwner(r,"alliance")
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,nameteamOne+" захватили аванпост "+nameteamTwo+"!")
endif
elseif owner=="neitural"then
set clanCheckingLog=true
call SetOutpostOwner(r,"alliance")
endif
elseif IsUnitAlly(u,Player(11))then
if owner=="akatsuki"then
set clanCheckingLog=true
elseif owner=="alliance"then
if number==0 then
set clanCheckingLog=true
call SetOutpostOwner(r,"akatsuki")
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,nameteamTwo+" захватили аванпост "+nameteamOne+"!")
endif
elseif owner=="neitural"then
set clanCheckingLog=true
call SetOutpostOwner(r,"akatsuki")
endif
endif
if clanCheckingLog then
if OutpostGetCreepSupportNumber(r)==0 and OutpostGetCreepForwardNumber(r)==0 then
set log=true
call UnitAddAbility(u,0x41313746)
call UnitAddAbility(u,0x41313132)
else
if not log and OutpostGetCreepSupportNumber(r)<outpostNumberSupport and IsUnitCreepSupport(u)then
set log=true
endif
if not log and OutpostGetCreepForwardNumber(r)<outpostNumberForward and IsUnitCreepForward(u)then
set log=true
endif
endif
if log then
call OutpostNumberPlus(r,u)
endif
endif
elseif not outpostFirst and number==outpostNumber then
set log=true
endif
return log
endfunction
function cj_anonym__80 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call IssueImmediateOrder(LoadUnitHandle(Hash,h,0),"stop")
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function OutpostEnterStart takes unit u,rect r,integer lvl returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer hu=GetHandleId(u)
local integer idart=0
if GetRandomInt(1,2)==1 then
set idart=0x4930304C
else
set idart=0x4930304B
endif
call GroupRemoveUnit(grCreepsAI,u)
call GroupRemoveUnit(grCreeps,u)
call FlushChildHashtable(Hash,hu)
call UnitAddAbility(u,0x4131324D)
call UnitAddAbility(u,0x41303947)
call UnitAddAbility(u,0x41304F37)
call UnitAddAbility(u,0x41304938)
call UnitAddAbility(u,0x41304F4A)
call UnitAddAbility(u,0x41313558)
call SetUnitAbilityLevel(u,0x41303947,lvl)
call SetUnitAbilityLevel(u,0x41304F37,lvl)
call SetUnitAbilityLevel(u,0x41304938,lvl)
if GetInventoryIndexOfItemTypeBJ(u,idart)==0 then
call UnitAddItem(u,CreateItem(idart,GetWidgetX(u),GetWidgetY(u)))
endif
call SaveRectHandle(Hash,hu,0,r)
call SaveBoolean(Hash,hu,1,true)
call SaveAgentHandle(Hash,hu,2,AddSpecialEffectTarget("MagicShieldYellow.mdx",u,"origin"))
call SaveAgentHandle(Hash,h,0,u)
call TimerStart(t,outpostMoveDelay,false,function cj_anonym__80)
set t=null
endfunction
function cj_anonym__81 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call IssueImmediateOrder(LoadUnitHandle(Hash,h,0),"stop")
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function OutpostEnterOrder takes unit u,real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
if GetUnitAbilityLevel(u,0x41313143)>0 then
call UnitRemoveAbility(u,0x41313143)
endif
call SaveAgentHandle(Hash,h,0,u)
call TimerStart(t,outpostMoveDelay,false,function cj_anonym__81)
set t=null
endfunction
function OutpostRectContainsUnit takes rect r,real x,real y returns boolean
local boolean log=false
local real x1=GetRectCenterX(r)
local real y1=GetRectCenterY(r)
local real radius=300.
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<radius then
set log=true
endif
return log
endfunction
function OutpostEnterActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local rect r=null
local integer lvl
local boolean log=false
if IsUnitOutpost(u)then
if TopLine then
if OutpostRectContainsUnit(gg_rct_Alliance_Top_O1,x,y)then
set r=gg_rct_Alliance_Top_O1
elseif OutpostRectContainsUnit(gg_rct_Alliance_Top_O2,x,y)then
set r=gg_rct_Alliance_Top_O2
elseif OutpostRectContainsUnit(gg_rct_Akatsuki_Top_O1,x,y)then
set r=gg_rct_Akatsuki_Top_O1
elseif OutpostRectContainsUnit(gg_rct_Akatsuki_Top_O2,x,y)then
set r=gg_rct_Akatsuki_Top_O2
endif
endif
if BotLine then
if OutpostRectContainsUnit(gg_rct_Alliance_Bot_O1,x,y)then
set r=gg_rct_Alliance_Bot_O1
elseif OutpostRectContainsUnit(gg_rct_Alliance_Bot_O2,x,y)then
set r=gg_rct_Alliance_Bot_O2
elseif OutpostRectContainsUnit(gg_rct_Akatsuki_Bot_O1,x,y)then
set r=gg_rct_Akatsuki_Bot_O1
elseif OutpostRectContainsUnit(gg_rct_Akatsuki_Bot_O2,x,y)then
set r=gg_rct_Akatsuki_Bot_O2
endif
endif
if r==LoadRectHandle(Hash,GetHandleId(u),0)then
call OutpostEnterOrder(u,x,y)
endif
elseif IsUnitCreep(u)and not IsUnitHealer(u)then
if TopLine then
if OutpostRectContainsUnit(gg_rct_Alliance_Top_O1,x,y)then
set r=gg_rct_Alliance_Top_O1
set log=OutpostSetChecking(r,AllianceOutpostCurrent[2],u)
set lvl=1
elseif OutpostRectContainsUnit(gg_rct_Alliance_Top_O2,x,y)then
set r=gg_rct_Alliance_Top_O2
set log=OutpostSetChecking(r,AllianceOutpostCurrent[1],u)
set lvl=2
elseif OutpostRectContainsUnit(gg_rct_Akatsuki_Top_O1,x,y)then
set r=gg_rct_Akatsuki_Top_O1
set log=OutpostSetChecking(r,AkatsukiOutpostCurrent[2],u)
set lvl=1
elseif OutpostRectContainsUnit(gg_rct_Akatsuki_Top_O2,x,y)then
set r=gg_rct_Akatsuki_Top_O2
set log=OutpostSetChecking(r,AkatsukiOutpostCurrent[1],u)
set lvl=2
endif
endif
if BotLine then
if OutpostRectContainsUnit(gg_rct_Alliance_Bot_O1,x,y)then
set r=gg_rct_Alliance_Bot_O1
set log=OutpostSetChecking(r,AllianceOutpostCurrent[4],u)
set lvl=1
elseif OutpostRectContainsUnit(gg_rct_Alliance_Bot_O2,x,y)then
set r=gg_rct_Alliance_Bot_O2
set log=OutpostSetChecking(r,AllianceOutpostCurrent[3],u)
set lvl=2
elseif OutpostRectContainsUnit(gg_rct_Akatsuki_Bot_O1,x,y)then
set r=gg_rct_Akatsuki_Bot_O1
set log=OutpostSetChecking(r,AkatsukiOutpostCurrent[4],u)
set lvl=1
elseif OutpostRectContainsUnit(gg_rct_Akatsuki_Bot_O2,x,y)then
set r=gg_rct_Akatsuki_Bot_O2
set log=OutpostSetChecking(r,AkatsukiOutpostCurrent[3],u)
set lvl=2
endif
endif
if log then
call OutpostEnterStart(u,r,lvl)
else
if TopLine then
if r==gg_rct_Alliance_Top_O2 then
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Up_2,0)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Alliance_Top,0)
endif
elseif r==gg_rct_Alliance_Top_O1 then
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Up,0)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Up_4,0)
endif
elseif r==gg_rct_Akatsuki_Top_O1 then
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Up_5,0)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Up,0)
endif
elseif r==gg_rct_Akatsuki_Top_O2 then
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Top,0)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Up_2,0)
endif
endif
endif
if BotLine then
if r==gg_rct_Alliance_Bot_O2 then
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Down_2,0)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Alliance_Bot,0)
endif
elseif r==gg_rct_Alliance_Bot_O1 then
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Down,0)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Konoha_Down_3,0)
endif
elseif r==gg_rct_Akatsuki_Bot_O1 then
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Down_4,0)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Down,0)
endif
elseif r==gg_rct_Akatsuki_Bot_O2 then
if IsUnitAlly(u,Player(5))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Bot,0)
elseif IsUnitAlly(u,Player(11))then
call AILineGiveOrderToMove(u,gg_rct_Creeps_Akatsuki_Down_2,0)
endif
endif
endif
endif
endif
set r=null
set u=null
endfunction
function InitTrig_Outpost takes nothing returns nothing
local trigger trig1=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Alliance_Top_O1)
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Alliance_Top_O2)
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Alliance_Bot_O1)
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Alliance_Bot_O2)
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Akatsuki_Top_O1)
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Akatsuki_Top_O2)
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Akatsuki_Bot_O1)
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Akatsuki_Bot_O2)
call TriggerAddCondition(trig1,Condition(function OutpostEnterConditions))
call TriggerAddAction(trig1,function OutpostEnterActions)
set trig1=null
endfunction
function GuardsEnterConditions takes nothing returns boolean
return IsUnitGuard(GetTriggerUnit())
endfunction
function GuardsEnterActions takes nothing returns nothing
call UnitRemoveAbility(GetTriggerUnit(),0x41313143)
endfunction
function GuardsLeftRectsConditions takes nothing returns boolean
return IsUnitGuard(GetTriggerUnit())
endfunction
function GuardsLeftRectsActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local rect r=LoadRectHandle(Hash,GetHandleId(u),0)
call UnitAddAbility(u,0x41313143)
call IssuePointOrder(u,"move",GetRectCenterX(r),GetRectCenterY(r))
set r=null
set u=null
endfunction
function InitTrig_GuardsBoundary takes nothing returns nothing
local trigger trig1=CreateTrigger()
local trigger trig2=CreateTrigger()
call TriggerRegisterLeaveRectSimple(trig1,gg_rct_AllianceTopGuardBounds)
call TriggerRegisterLeaveRectSimple(trig1,gg_rct_AllianceBotGuardBounds)
call TriggerRegisterLeaveRectSimple(trig1,gg_rct_AkatsukiTopGuardBounds)
call TriggerRegisterLeaveRectSimple(trig1,gg_rct_AkatsukiBotGuardBounds)
call TriggerAddCondition(trig1,Condition(function GuardsLeftRectsConditions))
call TriggerAddAction(trig1,function GuardsLeftRectsActions)
call TriggerRegisterEnterRectSimple(trig2,gg_rct_AllianceTopGuard1)
call TriggerRegisterEnterRectSimple(trig2,gg_rct_AllianceTopGuard2)
call TriggerRegisterEnterRectSimple(trig2,gg_rct_AllianceBotGuard1)
call TriggerRegisterEnterRectSimple(trig2,gg_rct_AllianceBotGuard2)
call TriggerRegisterEnterRectSimple(trig2,gg_rct_AkatsukiTopGuard1)
call TriggerRegisterEnterRectSimple(trig2,gg_rct_AkatsukiTopGuard2)
call TriggerRegisterEnterRectSimple(trig2,gg_rct_AkatsukiBotGuard1)
call TriggerRegisterEnterRectSimple(trig2,gg_rct_AkatsukiBotGuard2)
call TriggerAddCondition(trig2,Condition(function GuardsEnterConditions))
call TriggerAddAction(trig2,function GuardsEnterActions)
set trig1=null
set trig2=null
endfunction
function BijuConditions takes nothing returns boolean
return IsUnitBiju(GetTriggerUnit())
endfunction
function cj_anonym__82 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetRectCenterX(gg_rct_Boss)
local real y1=GetRectCenterY(gg_rct_Boss)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(u)>.405 and distance>200.then
if not IsUnitDisabled(u)then
call IssuePointOrder(u,"move",GetRectCenterX(gg_rct_Boss),GetRectCenterY(gg_rct_Boss))
endif
else
call UnitRemoveAbility(Boss[BossImprovementNumber],0x41313143)
call SetUnitFacing(u,270.)
call SetUnitInvulnerable(u,false)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function BijuActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call IssueImmediateOrder(Boss[BossImprovementNumber],"stop")
call UnitAddAbility(Boss[BossImprovementNumber],0x41313143)
call SetUnitInvulnerable(Boss[BossImprovementNumber],true)
call SaveAgentHandle(Hash,h,0,Boss[BossImprovementNumber])
call TimerStart(t,1.,true,function cj_anonym__82)
set t=null
endfunction
function InitTrig_Biju takes nothing returns nothing
local trigger trig=CreateTrigger()
call TriggerRegisterLeaveRectSimple(trig,gg_rct_Boss)
call TriggerAddCondition(trig,Condition(function BijuConditions))
call TriggerAddAction(trig,function BijuActions)
set trig=null
endfunction
function Trig_Average_Actions takes nothing returns nothing
call Test("ср. здоровье: "+R2S(AverageHP))
call Test("ср. чакра: "+R2S(AverageMP))
call Test("ср. скорость передвижения: "+R2S(AverageMS))
endfunction
function InitTrig_Average takes nothing returns nothing
set gg_trg_Average=CreateTrigger()
call DisableTrigger(gg_trg_Average)
call TriggerRegisterPlayerChatEvent(gg_trg_Average,Player(0),"-a",true)
call TriggerAddAction(gg_trg_Average,function Trig_Average_Actions)
endfunction
function Trig_Refresh_Actions takes nothing returns nothing
call UnitResetCooldown(udg_Hero[GetPlayerId(GetTriggerPlayer())])
call SetUnitState(udg_Hero[GetPlayerId(GetTriggerPlayer())],UNIT_STATE_MANA,99999.)
set reviveblocklog[GetPlayerId(GetTriggerPlayer())]=false
endfunction
function InitTrig_Refresh takes nothing returns nothing
set gg_trg_Refresh=CreateTrigger()
call DisableTrigger(gg_trg_Refresh)
call TriggerRegisterPlayerChatEvent(gg_trg_Refresh,Player(0),"-r",true)
call TriggerAddAction(gg_trg_Refresh,function Trig_Refresh_Actions)
endfunction
function cj_anonym__83 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call SetUnitInvulnerable(udg_Hero[id],false)
call PauseUnit(udg_Hero[id],false)
call KillUnit(udg_Hero[id])
endif
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
endfunction
function Kill_Command_Actions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetTriggerPlayer()
local real time=30.
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,GetPlayerNameColored(p)+" использовал команду |cFFFFCC00-kill|r, его герой погибнет через 30 секунд!")
call SavePlayerHandle(Hash,h,0,p)
call TimerStart(t,time,false,function cj_anonym__83)
set p=null
set t=null
endfunction
function InitTrig_Kill_Command takes nothing returns nothing
local integer i=0
local trigger trig=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(trig,Player(i),"-kill",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(trig,function Kill_Command_Actions)
set trig=null
endfunction
function Ms_Command_Actions takes nothing returns nothing
local group g=CreateGroup()
local unit tg
local integer i
call GroupEnumUnitsOfPlayer(g,GetTriggerPlayer(),null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitHero(tg)then
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0.,0.,5.,GetPlayerNameColored(GetTriggerPlayer())+": текущая скорость передвижения - |cFFFFCC00"+I2S(R2I(GetUnitMoveSpeed(tg)))+"|r")
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function InitTrig_Ms_Command takes nothing returns nothing
local integer i=0
local trigger trig=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(trig,Player(i),"-ms",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(trig,function Ms_Command_Actions)
set trig=null
endfunction
function ChatClearCommand_Actions takes nothing returns nothing
if GetLocalPlayer()==GetTriggerPlayer()then
call ClearTextMessages()
endif
endfunction
function InitTrig_ChatClear_Command takes nothing returns nothing
local integer i=0
local trigger trig=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(trig,Player(i),"-c",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(trig,function ChatClearCommand_Actions)
set trig=null
endfunction
function CamClearCommand_Actions takes nothing returns nothing
if GetLocalPlayer()==GetTriggerPlayer()then
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
call PanCameraToTimed(udg_Player_StartX[GetPlayerId(GetTriggerPlayer())],udg_Player_StartY[GetPlayerId(GetTriggerPlayer())],0.)
endif
endfunction
function InitTrig_CamClear_Command takes nothing returns nothing
local integer i=0
local trigger trig=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(trig,Player(i),"-cam",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(trig,function CamClearCommand_Actions)
set trig=null
endfunction
function Repick_Actions takes nothing returns nothing
local player p=GetTriggerPlayer()
local integer id=GetPlayerId(p)
local integer i=GetUnitTypeId(udg_Hero[id])
local integer new
local destructable des
if udg_Repick_Log[id]and not udg_VM_Log[id]then
if Sasori_lb!=null and i==heroes_rawcode[Sasori]then
call DestroyLeaderboard(Sasori_lb)
set Sasori_lb=null
endif
if IsHeroClassKiller(udg_Hero[id])then
if hc_killer_current>0 then
set hc_killer_current=hc_killer_current-1
endif
set hc_killer_log=false
elseif IsHeroClassFighter(udg_Hero[id])then
if hc_fighter_current>0 then
set hc_fighter_current=hc_fighter_current-1
endif
set hc_fighter_log=false
elseif IsHeroClassSupport(udg_Hero[id])then
if hc_support_current>0 then
set hc_support_current=hc_support_current-1
endif
set hc_support_log=false
elseif IsHeroClassSpecialist(udg_Hero[id])then
if hc_specialist_current>0 then
set hc_specialist_current=hc_specialist_current-1
endif
set hc_specialist_log=false
endif
call RemoveUnit(udg_Hero[id])
set new=SpecularRandomGetHero()
set des=LoadDestructableHandle(Hash,heroes_pick[new],1)
call CreateDestructable(0x42303449,GetWidgetX(des),GetWidgetY(des),0,1.,0)
call SaveBoolean(Hash,heroes_pick[new],0,false)
call RemoveDestructable(des)
set udg_Hero[id]=CreateUnit(p,heroes_pick[new],GetHeroMainX(p),GetHeroMainY(p),GetHeroMainF(p))
set udg_Repick_Log[id]=false
call PauseUnit(udg_Hero[id],true)
call SetUnitInvulnerable(udg_Hero[id],true)
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call PanCameraToTimed(GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),0.)
call ClearSelection()
call SelectUnit(udg_Hero[id],true)
endif
set i=1
loop
exitwhen heroes_pick[i]==GetUnitTypeId(udg_Hero[id])
set i=i+1
endloop
call mbiVal(gamestat_mb,gamestat_Place[id],0,mb_iconBTN[new],null)
set heroes_pick[new]=0
endif
set des=null
set p=null
endfunction
function InitTrig_Repick_Command takes nothing returns nothing
local integer i=0
set gg_trg_Repick_Command=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(gg_trg_Repick_Command,Player(i),"-repick",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(gg_trg_Repick_Command,function Repick_Actions)
endfunction
function cj_anonym__84 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer id=LoadInteger(Hash,h,0)
set reviveblocklog[id]=false
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set t=null
endfunction
function Revive_Command_Actions takes nothing returns nothing
local timer t
local player p=GetTriggerPlayer()
local integer id=GetPlayerId(p)
local integer price=40*GetHeroLevel(udg_Hero[id])
if GetWidgetLife(udg_Hero[id])<.405 and not udg_VM_Log[id]and not reviveblocklog[id]then
if GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)>price then
set reviveblocklog[id]=true
set reviveOnLog[id]=true
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-price)
call DisplayTimedTextToPlayer(p,0.,0.,10.,"|cFFFFCC00Вы решили воскресить своего героя раньше времени. С вас снято "+I2S(price)+" золота. Команда -revive будет вновь доступна через 360 секунд!|r")
set t=CreateTimer()
call SaveInteger(Hash,GetHandleId(t),0,id)
call TimerStart(t,360.,false,function cj_anonym__84)
else
call DisplayTextToPlayer(p,0.,0.,"|cFFFFCC00Вам не хватает "+I2S(price-GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD))+" золота|r")
endif
else
if GetWidgetLife(udg_Hero[id])>.405 then
call DisplayTextToPlayer(p,0.,0.,"|cFFFFCC00Вы живы, какой выкуп:)|r")
elseif udg_VM_Log[id]then
call DisplayTextToPlayer(p,0.,0.,"|cFFFFCC00Вы - зритель, какой выкуп:)|r")
elseif reviveblocklog[id]then
call DisplayTextToPlayer(p,0.,0.,"|cFFFFCC00Вы уже использовали эту команду ранее, либо на данный момент она Вам недоступна. Подождите немного...|r")
endif
endif
set p=null
set t=null
endfunction
function InitTrig_Revive_Command takes nothing returns nothing
local integer i=0
set gg_trg_Revive_Command=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(gg_trg_Revive_Command,Player(i),"-revive",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(gg_trg_Revive_Command,function Revive_Command_Actions)
endfunction
function Tables_Show_Conditions takes nothing returns boolean
local string s=GetEventPlayerChatString()
return SubString(s,0,8)=="-kisame "or SubString(s,0,8)=="-sasori "
endfunction
function Tables_Show_Actions takes nothing returns nothing
local unit tg
local boolean found=false
local integer id
local string s=GetEventPlayerChatString()
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup,GetTriggerPlayer(),null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or found==true
set id=GetUnitTypeId(tg)
if id==heroes_rawcode[Sasori]and Sasori_lb!=null and SubString(s,0,8)=="-sasori "then
if SubString(s,8,10)=="on"then
call LeaderboardDisplay(Sasori_lb,true)
elseif SubString(s,8,11)=="off"then
call LeaderboardDisplay(Sasori_lb,false)
endif
set found=true
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
endfunction
function InitTrig_Tables_Show takes nothing returns nothing
local integer i=0
local trigger showtables=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(showtables,Player(i),"-",false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(showtables,Condition(function Tables_Show_Conditions))
call TriggerAddAction(showtables,function Tables_Show_Actions)
set showtables=null
endfunction
function cj_anonym__98 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
call DestroyFogModifier(tutorialVision[id])
call CinematicModeBJ(false,tutorialForce[id])
call ForceClear(tutorialForce[id])
call DestroyForce(tutorialForce[id])
if GetWidgetLife(udg_Hero[id])>.405 then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call PanCameraToTimed(GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),0.)
call ClearSelection()
call SelectUnit(udg_Hero[id],true)
endif
else
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call PanCameraToTimed(udg_Player_StartX[id],udg_Player_StartY[id],0.)
endif
endif
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,GetPlayerNameColored(p)+" посмотрел обучающий ролик. Он готов нагибать!")
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
endfunction
function cj_anonym__97 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real messageTime=1.
call HeroSpeechSound(p,"Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(tutorialUnit[id]),GetWidgetY(tutorialUnit[id])))
call RemoveUnit(tutorialUnit[id])
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__98)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__96 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local string message="Ух! Кажется, всё! Что успела - то рассказала.\nМне пора уходить ... а тебе и твоим товарищам удачи в игре!"
local real messageTime=6.*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial1,true,cameraTimeOffset)
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__97)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__95 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local string message="Если тебе этого мало, то посети логово хвостатых зверей! Обуздай их немыслимую силу и одержи победу на войне!!!"
local real messageTime=6.*tutorialTalkSpeedConst
local real cameraTimeOffset=4.5
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial10,true,cameraTimeOffset)
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__96)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__94 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local string message="Если почуствуешь, что проигрываешь или наоборот - захочешь преумножить преимущество, попроси своего лидера помочь тебе!"
local real messageTime=4.66*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
if IsPlayerAlly(p,Player(5))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial9p1,true,cameraTimeOffset)
endif
elseif IsPlayerAlly(p,Player(11))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial9p2,true,cameraTimeOffset)
endif
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__95)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__93 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real messageTime=3.*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial8,true,cameraTimeOffset)
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__94)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__92 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real messageTime=3.*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial7,true,cameraTimeOffset)
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__93)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__91 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real messageTime=3.*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial6,true,cameraTimeOffset)
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__92)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__90 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real messageTime=3.*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial5,true,cameraTimeOffset)
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__91)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__89 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local string message="Ах, да! Если аванпосты потеряют часть шиноби, к ним придёт подкрепление ... Ладно, проврёмся!\nВ игре присутствует 4 великих деревни, каждая из которых приносит игроку по 10 Рьё и опыта каждые 20 секунд. Твоё главное здание приносит столько же.\nЕсли захватить хотя бы одну, это даст огромное преимущество на войне ..."
local real messageTime=15.99*tutorialTalkSpeedConst
local real cameraTimeOffset=4.
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
if IsPlayerAlly(p,Player(5))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial3p1,true,0.)
endif
elseif IsPlayerAlly(p,Player(11))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial3p2,true,0.)
endif
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,cameraTimeOffset,false,function cj_anonym__90)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__88 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local string message="Чтобы легко добраться до базы противника, нужно получить контроль над его аванпостами.\nКогда вражеские шиноби в них погибнут, на их место встанут твои союзники (крипы), и ты сможешь прижать противника к базе! Аванпосты имеют в своём арсенале опасное оружие. \nОднако враг может перезахватить аванпост, не забывай об этом ..."
local real messageTime=15.99*tutorialTalkSpeedConst
local real cameraTimeOffset=6.5
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
if IsPlayerAlly(p,Player(5))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial4p2,true,cameraTimeOffset)
endif
elseif IsPlayerAlly(p,Player(11))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial4p1,true,cameraTimeOffset)
endif
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__89)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__87 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local string message="Хорошо, с этим разобрались! Грамотно используй техники и предметы для победы в игре!\nА побеждать нам нужно шиноби, база которых находится вот тут.\nТебе с товарищами необходимо стереть в пыль главное здание противника!"
local real messageTime=11.*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
if IsPlayerAlly(p,Player(5))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial3p2,true,cameraTimeOffset)
endif
elseif IsPlayerAlly(p,Player(11))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial3p1,true,cameraTimeOffset)
endif
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__88)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__86 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local string message="Каждый герой уникален и владеет неповторимыми способностями. Накапливая игровой опыт, ты сможешь изучить новые техники!\nОднако одних техник будет недостаточно для победы. Тебе понадобятся предметы! Их можно купить в магазине."
local real messageTime=10.*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
if IsPlayerAlly(p,Player(5))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial2p1,true,cameraTimeOffset)
endif
elseif IsPlayerAlly(p,Player(11))then
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial2p2,true,cameraTimeOffset)
endif
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__87)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function cj_anonym__85 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
local integer i=GetUnitTypeId(udg_Hero[id])
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local string messageClass=TutorialGetHeroClassDescription(udg_Hero[id])
local string message="Как ты уже понял, это твой герой, которым ты будешь играть!\nУ каждого персонажа есть свой класс, который определяет его задачи в игре.\nКласс твоего - "+messageClass
local real messageTime=14.*tutorialTalkSpeedConst
local real cameraTimeOffset=0.
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call PanCameraToTimed(GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),cameraTimeOffset)
endif
call SavePlayerHandle(Hash,h1,0,p)
call TimerStart(t1,messageTime,false,function cj_anonym__86)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set t=null
set t1=null
endfunction
function TutorialActions takes nothing returns nothing
local timer t
local integer h
local player p=GetTriggerPlayer()
local integer id=GetPlayerId(p)
local integer i=GetUnitTypeId(udg_Hero[id])
local string message
local real messageTime
local real cameraTimeOffset
if not udg_ShopCam[id]then
set t=CreateTimer()
set h=GetHandleId(t)
set cameraTimeOffset=0.
set messageTime=4.*tutorialTalkSpeedConst
set message="Привет :) Я - Рин, шиноби Конохи, и кратко расскажу тебе об основах игры!"
set tutorialUnit[id]=CreateUnit(p,tutorialUnitID,GetRectCenterX(gg_rct_MainRect),GetRectCenterY(gg_rct_MainRect),0.)
set tutorialForce[id]=CreateForce()
set tutorialVision[id]=CreateFogModifierRect(p,FOG_OF_WAR_VISIBLE,gg_rct_MainRect,true,false)
call FogModifierStart(tutorialVision[id])
call ForceAddPlayer(tutorialForce[id],p)
call HeroSpeechSound(p,"Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(tutorialUnit[id]),GetWidgetY(tutorialUnit[id])))
call SetUnitVertexColor(tutorialUnit[id],255,255,255,0)
call CinematicModeBJ(true,tutorialForce[id])
if GetLocalPlayer()==p then
call FogEnable(true)
call SetUnitVertexColor(tutorialUnit[id],255,255,255,255)
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamTutorial1,true,cameraTimeOffset)
endif
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,GetPlayerNameColored(p)+" смотрит обучающий ролик. Не мешайте ему :)")
call TransmissionFromUnitWithNameBJ(tutorialForce[id],tutorialUnit[id],tutorialNameUnit,null,message,bj_TIMETYPE_ADD,messageTime,false)
call SavePlayerHandle(Hash,h,0,p)
call TimerStart(t,messageTime,false,function cj_anonym__85)
else
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00Нельзя включать обучение в магазине!|r")
endif
set p=null
set t=null
endfunction
function InitTrig_Tutorial_Command takes nothing returns nothing
local integer i=0
set gg_trg_Tutorial_Command=CreateTrigger()
call DisableTrigger(gg_trg_Tutorial_Command)
loop
call TriggerRegisterPlayerChatEvent(gg_trg_Tutorial_Command,Player(i),"-tutorial",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(gg_trg_Tutorial_Command,function TutorialActions)
endfunction
function Viewer_Mod_Conditions takes nothing returns boolean
return not udg_VM_Log[GetPlayerId(GetTriggerPlayer())]
endfunction
function Viewer_Mod_Actions takes nothing returns nothing
local player p=GetTriggerPlayer()
set udg_VM_Log[GetPlayerId(p)]=true
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
endif
call DisplayTextToPlayer(GetLocalPlayer(),0.,0.,GetPlayerNameColored(p)+"|cFF0090D4 - ТЕПЕРЬ ЗРИТЕЛЬ!|r")
set p=null
endfunction
function InitTrig_Viewer_Mod takes nothing returns nothing
local integer i=0
set gg_trg_Viewer_Mod=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(gg_trg_Viewer_Mod,Player(i),"-vm",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_Viewer_Mod,Condition(function Viewer_Mod_Conditions))
call TriggerAddAction(gg_trg_Viewer_Mod,function Viewer_Mod_Actions)
endfunction
function NarutoKuramaChakraCommandConditions takes nothing returns boolean
local integer id=GetPlayerId(GetTriggerPlayer())
return GetWidgetLife(udg_Hero[id])>.405 and GetHeroLevel(udg_Hero[id])>=5 and GetUnitTypeId(udg_Hero[id])==heroes_rawcode[Naruto]or GetUnitTypeId(udg_Hero[id])==morph_rawcode[4]
endfunction
function NarutoKuramaChakraCommandActions takes nothing returns nothing
if player_Human==1 then
call ExecuteFunc("Naruto_ChakraFun")
else
call DisplayTimedTextToPlayer(GetTriggerPlayer(),0.,0.,5.,"|cFFFFCC00Команда работает только в одиночном режиме!|r")
endif
endfunction
function InitTrig_NarutoKuramaChakra_Command takes nothing returns nothing
local integer i=0
local trigger trig=CreateTrigger()
loop
call TriggerRegisterPlayerChatEvent(trig,Player(i),"-nkc",true)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(trig,Condition(function NarutoKuramaChakraCommandConditions))
call TriggerAddAction(trig,function NarutoKuramaChakraCommandActions)
set trig=null
endfunction
function DCommandConditions takes nothing returns boolean
return SubString(GetEventPlayerChatString(),0,3)=="-d "
endfunction
function DCommandActions takes nothing returns nothing
if SubString(GetEventPlayerChatString(),3,5)=="on"and not DuelIsGoing and not DuelOn then
set DuelOn=true
call ResumeTimer(DuelTimer)
call TimerDialogDisplay(DuelWindow,true)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Duel - On|r\nДуэль включена!")
elseif SubString(GetEventPlayerChatString(),3,6)=="off"and not DuelIsGoing and DuelOn then
set DuelOn=false
call PauseTimer(DuelTimer)
call TimerDialogDisplay(DuelWindow,false)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Duel - Off|r\nДуэль отключена! Если передумаете, то можно включить с помощью |cFFFFCC00-d on|r!")
endif
endfunction
function InitTrig_D_Command takes nothing returns nothing
set gg_trg_D_Command=CreateTrigger()
call DisableTrigger(gg_trg_D_Command)
call TriggerAddCondition(gg_trg_D_Command,Condition(function DCommandConditions))
call TriggerAddAction(gg_trg_D_Command,function DCommandActions)
endfunction
function SESCommandConditions takes nothing returns boolean
return SubString(GetEventPlayerChatString(),0,5)=="-ses "
endfunction
function SESCommandActions takes nothing returns nothing
if SubString(GetEventPlayerChatString(),5,7)=="on"and not SpecialEffectsShow then
set SpecialEffectsShow=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Special Effects Show - On|r\nПоказ спецэффектов включён!")
elseif SubString(GetEventPlayerChatString(),5,8)=="off"and SpecialEffectsShow then
set SpecialEffectsShow=false
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Special Effects Show - Off|r\nПоказ некоторых спецэффектов отключён и нагрузка на игру снизилась. Если передумаете, то можно включить с помощью |cFFFFCC00-ses on|r!")
endif
endfunction
function InitTrig_SES_Command takes nothing returns nothing
set gg_trg_SES_Command=CreateTrigger()
call DisableTrigger(gg_trg_SES_Command)
call TriggerAddCondition(gg_trg_SES_Command,Condition(function SESCommandConditions))
call TriggerAddAction(gg_trg_SES_Command,function SESCommandActions)
endfunction
function WCommandConditions takes nothing returns boolean
return SubString(GetEventPlayerChatString(),0,3)=="-w "
endfunction
function WCommandActions takes nothing returns nothing
if SubString(GetEventPlayerChatString(),3,5)=="on"and not WeatherOn then
set WeatherOn=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Weather - On|r\nПогода включена!")
elseif SubString(GetEventPlayerChatString(),3,6)=="off"and WeatherOn then
set WeatherOn=false
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Weather - Off|r\nСпецэффекты погоды исчезнут в ближайшее время. Если передумаете, то можно включить с помощью |cFFFFCC00-w on|r!")
endif
endfunction
function InitTrig_W_Command takes nothing returns nothing
set gg_trg_W_Command=CreateTrigger()
call DisableTrigger(gg_trg_W_Command)
call TriggerAddCondition(gg_trg_W_Command,Condition(function WCommandConditions))
call TriggerAddAction(gg_trg_W_Command,function WCommandActions)
endfunction
function TSCommandConditions takes nothing returns boolean
return SubString(GetEventPlayerChatString(),0,4)=="-ts "
endfunction
function TSCommandActions takes nothing returns nothing
local integer i=0
local player p
if SubString(GetEventPlayerChatString(),4,6)=="on"and not TextShowOn then
set TextShowOn=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Text Show - On|r\nОтображение текста над героями включено!")
loop
if i!=5 and playerNameText[i]!=null then
set p=Player(i)
if IsPlayerAlly(p,Player(5))then
if IsPlayerInForce(GetLocalPlayer(),playerTextForceOne)then
call SetTextTagVisibility(playerNameText[i],true)
endif
elseif IsPlayerAlly(p,Player(11))then
if IsPlayerInForce(GetLocalPlayer(),playerTextForceTwo)then
call SetTextTagVisibility(playerNameText[i],true)
endif
endif
endif
set i=i+1
exitwhen i>10
endloop
elseif SubString(GetEventPlayerChatString(),4,7)=="off"and TextShowOn then
set TextShowOn=false
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Text Show - Off|r\nОтображение текста над героями отключено. Если передумаете, то можно включить с помощью |cFFFFCC00-ts on|r!")
loop
if i!=5 and playerNameText[i]!=null then
set p=Player(i)
if IsPlayerAlly(p,Player(5))then
if IsPlayerInForce(GetLocalPlayer(),playerTextForceOne)then
call SetTextTagVisibility(playerNameText[i],false)
endif
elseif IsPlayerAlly(p,Player(11))then
if IsPlayerInForce(GetLocalPlayer(),playerTextForceTwo)then
call SetTextTagVisibility(playerNameText[i],false)
endif
endif
endif
set i=i+1
exitwhen i>10
endloop
endif
endfunction
function InitTrig_TS_Command takes nothing returns nothing
set gg_trg_TS_Command=CreateTrigger()
call DisableTrigger(gg_trg_TS_Command)
call TriggerAddCondition(gg_trg_TS_Command,Condition(function TSCommandConditions))
call TriggerAddAction(gg_trg_TS_Command,function TSCommandActions)
endfunction
function MO_Command_Actions takes nothing returns nothing
call StopMusic(true)
set musicOn=false
call DisableTrigger(GetTriggeringTrigger())
endfunction
function InitTrig_MO_Command takes nothing returns nothing
set gg_trg_MO_Command=CreateTrigger()
call DisableTrigger(gg_trg_MO_Command)
call TriggerAddAction(gg_trg_MO_Command,function MO_Command_Actions)
endfunction
function Crazy_Mod_Actions takes nothing returns nothing
local integer i=0
local integer id
local player p
set wtfModOn=true
if ImprovementAlliance!=10 and ImprovementAkatsuki!=10 then
set ImprovementAlliance=9
call SetPlayerTechResearched(Player(11),0x52303034,ImprovementAlliance)
set ImprovementAkatsuki=9
call SetPlayerTechResearched(Player(5),0x52303034,ImprovementAkatsuki)
endif
loop
set p=Player(i)
set id=GetPlayerId(p)
if i!=5 and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and not udg_VM_Log[id]then
call SetHeroLevel(udg_Hero[id],10,true)
if udg_Exp_XP[id]<GetHeroXP(udg_Hero[id])then
call ExpSaveText(p,id,"за безумный мод")
endif
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+50000)
endif
set i=i+1
exitwhen i>10
endloop
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,6.,"|cFFFFCC00WTF Mod - On!|r\n|cFFFF5000Хост активировал фан-мод! Всем героям установлен 10-ый уровень и добавлено 50 000 рьё!|r")
call DisableTrigger(GetTriggeringTrigger())
set p=null
endfunction
function InitTrig_WTF_Mod takes nothing returns nothing
set gg_trg_WTF_Mod=CreateTrigger()
call DisableTrigger(gg_trg_WTF_Mod)
call TriggerAddAction(gg_trg_WTF_Mod,function Crazy_Mod_Actions)
endfunction
function AIRemoveActions takes nothing returns nothing
local integer i=0
local player p
set botlog=false
loop
if i!=4 and i!=5 then
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_COMPUTER then
call RemoveUnit(udg_Hero[i])
endif
endif
set i=i+1
exitwhen i==10
endloop
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"|cFFFFCC00Все боты удалены из игры!|r")
endfunction
function InitTrig_AI_Remove_Command takes nothing returns nothing
set gg_trg_AI_Remove_Command=CreateTrigger()
call DisableTrigger(gg_trg_AI_Remove_Command)
call TriggerAddAction(gg_trg_AI_Remove_Command,function AIRemoveActions)
endfunction
function cj_anonym__99 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
if GetWidgetLife(d)<.405 then
call DestroyEffect(LoadEffectHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function ItemsActivePoint__HiraishinKunaiCreateEffect takes unit c,real x,real y,real lifeTime returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(c),Minato_HIRAISHIN_KUNAI_UNIT_ID,x,y,0.)
call SetUnitPathing(bj_lastCreatedUnit,false)
call SetUnitFlyHeight(bj_lastCreatedUnit,-10.,0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,lifeTime)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,1,AddSpecialEffect("Minato's Fuin.mdx",x,y))
call TimerStart(t,period,true,function cj_anonym__99)
set t=null
endfunction
function cj_anonym__100 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,0)
local integer amount=LoadInteger(Hash,h,1)
local real height=LoadReal(Hash,h,2)
local real x1=LoadReal(Hash,h,3)
local real y1=LoadReal(Hash,h,4)
local real lifeTime=LoadReal(Hash,h,5)
local real offset=LoadReal(Hash,h,6)
local unit c=LoadUnitHandle(Hash,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFlyHeight(d,GetUnitFlyHeight(d)-height,0.)
call SaveInteger(Hash,h,1,amount-1)
else
if not GetUnitLocationClanBase(d)then
call ItemsActivePoint__HiraishinKunaiCreateEffect(c,x1,y1,lifeTime)
else
call SetItemCharges(Minato_hiraishinKunaiArt,GetItemCharges(Minato_hiraishinKunaiArt)+1)
call DisplayTimedTextToPlayer(GetOwningPlayer(c),0.,0.,4.,"|cFFFFCC00Нельзя оставлять кунаи на базе.|r")
endif
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set c=null
set d=null
set t=null
endfunction
function ItemsActivePoint__HiraishinKunaiCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real speed=1000.
local real period=.025
local real height=60.
local real offset=speed*period
local real lifeTime=180.
call Sound3D(c,"ITEM Kunai.mp3")
call SaveAgentHandle(Hash,h,0,CreateUnit(GetOwningPlayer(c),Minato_HIRAISHIN_KUNAI_FLY_ID,x,y,a))
call SaveInteger(Hash,h,1,R2I(distance/offset))
call SaveReal(Hash,h,2,height/(distance/offset))
call SaveReal(Hash,h,3,x1)
call SaveReal(Hash,h,4,y1)
call SaveReal(Hash,h,5,lifeTime)
call SaveReal(Hash,h,6,offset)
call SaveAgentHandle(Hash,h,7,c)
call TimerStart(t,period,true,function cj_anonym__100)
set t=null
endfunction
function ItemsActivePoint__ShinigamiOfferingCast takes unit c,real x1,real y1 returns nothing
local player p=GetOwningPlayer(c)
local real radius=600.
local real timeDebuff=10.
local group g=CreateGroup()
local unit tg
call CreateEffect(x1,y1,2.5,"DevilSlam.mdx",2.)
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,p)and not IsUnitHidden(tg)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
call UnitTempSpell(tg,0x41305141,0,timeDebuff,0,true)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set p=null
set tg=null
set g=null
endfunction
function ItemsActivePoint__IaytoCast takes unit c,real x1,real y1 returns nothing
local player p=GetOwningPlayer(c)
if GetUnitAbilityLevel(c,0x4130594E)==0 then
call Sound3D(c,"ITEM Iayto.mp3")
call SetUnitPosition(c,x1,y1)
call DestroyEffect(AddSpecialEffect("BlackBlink.mdx",x1,y1))
else
call IssueImmediateOrder(c,"stop")
call DisplayTimedTextToPlayer(p,0.,0.,3.,"|cFFFFCC00Вы не можете перемещаться.|r")
endif
set p=null
endfunction
function cj_anonym__101 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,0)
local real dmg=LoadReal(Hash,h,1)
local real radius=LoadReal(Hash,h,2)
local real knockback=LoadReal(Hash,h,3)
local unit c=LoadUnitHandle(Hash,h,4)
local player p=LoadPlayerHandle(Hash,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,p)then
call KnockBackUnitEf(tg,knockback,knockback/1000.,57.2958279087*Atan2(GetWidgetY(tg)-y,GetWidgetX(tg)-x),.025,0,false)
call UnitDamageTarget(c,tg,GetTaijutsuDamage(dmg,c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,GetRandomReal(1.2,1.5),"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,GetRandomReal(1.2,1.5),"IceSparks.mdx",8.)
endif
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+175.*Cos(1.224),y+175.*Sin(1.224)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+175.*Cos(2.448),y+175.*Sin(2.448)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+175.*Cos(3.672),y+175.*Sin(3.672)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+175.*Cos(4.896),y+175.*Sin(4.896)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+175.*Cos(6.12),y+175.*Sin(6.12)))
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set g=null
set tg=null
set c=null
set d=null
set p=null
set t=null
endfunction
function ItemsActivePoint__KibakuKunaiBabah takes unit c,real x,real y,real radius returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local real knockback=250.
local real time=1.2
local real dmg=GetHeroInt(c,true)*5.
call SaveAgentHandle(Hash,h,0,CreateUnit(p,0x68303151,x,y,0.))
call SaveReal(Hash,h,1,dmg)
call SaveReal(Hash,h,2,radius)
call SaveReal(Hash,h,3,knockback)
call SaveAgentHandle(Hash,h,4,c)
call SaveAgentHandle(Hash,h,5,p)
call TimerStart(t,time,false,function cj_anonym__101)
set p=null
set t=null
endfunction
function cj_anonym__102 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local integer amount=LoadInteger(Hash,h,2)
local real offset=LoadReal(Hash,h,3)
local boolean crashLog=LoadBoolean(Hash,h,4)
local group g=LoadGroupHandle(Hash,h,5)
local real radius=LoadReal(Hash,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and amount>0 and not crashLog then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or crashLog
if IsUnitWeapon(d,tg,GetOwningPlayer(c))then
call RemoveUnit(tg)
call UnitWeaponDestroy(x,y)
call SaveBoolean(Hash,h,4,true)
set crashLog=true
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveInteger(Hash,h,2,amount-1)
else
call RemoveUnit(d)
call DestroyGroup(g)
if not crashLog then
call ItemsActivePoint__KibakuKunaiBabah(c,x,y,radius)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set c=null
set d=null
set t=null
endfunction
function ItemsActivePoint__KibakuKunaiCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(c)
local real yHero=GetWidgetY(c)
local real startOffset=75.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real speed=600.
local real period=.025
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real radius=250.
local boolean crashLog=false
local integer amount=R2I(distance/offset)
local unit d=CreateUnit(GetOwningPlayer(c),0x68303343,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call Sound3D(c,"ITEM Kibaku Kunai Throw.mp3")
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveInteger(Hash,h,2,amount)
call SaveReal(Hash,h,3,offset)
call SaveBoolean(Hash,h,4,crashLog)
call SaveAgentHandle(Hash,h,5,CreateGroup())
call SaveReal(Hash,h,6,radius)
call TimerStart(t,period,true,function cj_anonym__102)
set d=null
set t=null
endfunction
function cj_anonym__103 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local player p=LoadPlayerHandle(Hash,h,2)
local group g1=LoadGroupHandle(Hash,h,3)
local group g2=LoadGroupHandle(Hash,h,4)
local real offset=LoadReal(Hash,h,5)
local real rangeMax=LoadReal(Hash,h,6)
local real rangeCur=LoadReal(Hash,h,7)
local real radius=LoadReal(Hash,h,8)
local real dmg=LoadReal(Hash,h,9)
local real timeDebuff=LoadReal(Hash,h,10)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null or rangeCur==rangeMax
if IsUnitNeedClear(tg,p)and not IsUnitInGroup(tg,g2)then
call UnitTempSpell(tg,0x41313159,0x42303645,timeDebuff,0,false)
call GroupAddUnit(g2,tg)
call UnitDamageTarget(c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodFootman.mdl",tg,"chest"))
elseif IsUnitWeapon(d,tg,p)then
call RemoveUnit(tg)
call UnitWeaponDestroy(x,y)
set rangeCur=rangeMax
endif
call GroupRemoveUnit(g1,tg)
endloop
call SaveReal(Hash,h,7,rangeCur+offset)
else
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set g1=null
set g2=null
set d=null
set c=null
set tg=null
set t=null
endfunction
function ItemsActivePoint__FumaShurikenCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(c)
local real yHero=GetWidgetY(c)
local real startOffset=75.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local player p=GetOwningPlayer(c)
local real dmg=GetHeroStr(c,true)*3.
local real speed=600.
local real period=.025
local real offset=speed*period
local real radius=125.
local real rangeMax=800.
local real rangeCur=0.
local real timeDebuff=4.
local unit d
if GetUnitTypeId(c)==Hashirama_MOKUTON_NO_JUTSU_FUMA_CAST_ID then
set dmg=GetHeroStr(Hashirama_c,true)*3.
set startOffset=150.
endif
set x=xHero+startOffset*Cos(a*bj_DEGTORAD)
set y=yHero+startOffset*Sin(a*bj_DEGTORAD)
set d=CreateUnit(p,0x68303342,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveAgentHandle(Hash,h,2,p)
call SaveAgentHandle(Hash,h,3,CreateGroup())
call SaveAgentHandle(Hash,h,4,CreateGroup())
call SaveReal(Hash,h,5,offset)
call SaveReal(Hash,h,6,rangeMax)
call SaveReal(Hash,h,7,rangeCur)
call SaveReal(Hash,h,8,radius)
call SaveReal(Hash,h,9,dmg)
call SaveReal(Hash,h,10,timeDebuff)
call TimerStart(t,period,true,function cj_anonym__103)
set p=null
set t=null
set d=null
endfunction
function cj_anonym__104 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local player p=LoadPlayerHandle(Hash,h,2)
local group g=LoadGroupHandle(Hash,h,3)
local real offset=LoadReal(Hash,h,4)
local real rangeMax=LoadReal(Hash,h,5)
local real rangeCur=LoadReal(Hash,h,6)
local real radius=LoadReal(Hash,h,7)
local real dmg=LoadReal(Hash,h,8)
local real timeDebuff=LoadReal(Hash,h,9)
local group gr_saved=LoadGroupHandle(Hash,h,10)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call KillDestructablesStart(x,y,radius/2.)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,p)and not IsUnitInGroup(tg,gr_saved)then
call UnitTempSpell(tg,0x41313236,0x42303235,timeDebuff,0,false)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl",tg,"chest"))
call UnitDamageTarget(c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
if GetWidgetLife(tg)>.405 then
call GroupAddUnit(gr_saved,tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(Hash,h,6,rangeCur+offset)
else
call GroupClear(gr_saved)
call DestroyGroup(gr_saved)
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set gr_saved=null
set p=null
set g=null
set d=null
set c=null
set tg=null
set t=null
endfunction
function ItemsActivePoint__VacuumShurikenCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local real xHero=GetWidgetX(c)
local real yHero=GetWidgetY(c)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real period=.025
local real dmg=60.+GetHeroLevel(c)*10.
local real speed=750.
local real offset=speed*period
local real radius=200.
local real rangeMax=800.
local real rangeCur=0.
local real timeDebuff=4.
local unit d=CreateUnit(p,0x6E303348,x,y,a)
call Sound3D(c,"ITEM Vacuum Shuriken.mp3")
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveAgentHandle(Hash,h,2,p)
call SaveAgentHandle(Hash,h,3,CreateGroup())
call SaveReal(Hash,h,4,offset)
call SaveReal(Hash,h,5,rangeMax)
call SaveReal(Hash,h,6,rangeCur)
call SaveReal(Hash,h,7,radius)
call SaveReal(Hash,h,8,dmg)
call SaveReal(Hash,h,9,timeDebuff)
call SaveAgentHandle(Hash,h,10,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__104)
set d=null
set p=null
set t=null
endfunction
function cj_anonym__105 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local player p=LoadPlayerHandle(Hash,h,2)
local group g=LoadGroupHandle(Hash,h,3)
local real offset=LoadReal(Hash,h,4)
local real rangeMax=LoadReal(Hash,h,5)
local real rangeCur=LoadReal(Hash,h,6)
local real radius=LoadReal(Hash,h,7)
local real dmg=LoadReal(Hash,h,8)
local real timeDebuff=LoadReal(Hash,h,9)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or rangeCur==rangeMax
if IsUnitNeedClear(tg,p)then
call Sound3D(c,"ITEM Kunai Touch.mp3")
call UnitTempSpell(tg,0x41313236,0x42303235,timeDebuff,0,false)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl",tg,"chest"))
call UnitDamageTarget(c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
set rangeCur=rangeMax
elseif IsUnitWeapon(d,tg,p)then
call RemoveUnit(tg)
call UnitWeaponDestroy(x,y)
set rangeCur=rangeMax
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(Hash,h,6,rangeCur+offset)
else
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set g=null
set d=null
set c=null
set tg=null
set t=null
endfunction
function ItemsActivePoint__ShurikenCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local real xHero=GetWidgetX(c)
local real yHero=GetWidgetY(c)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real period=.025
local real dmg=60.+GetHeroLevel(c)*10.
local real speed=750.
local real offset=speed*period
local real radius=40.
local real rangeMax=800.
local real rangeCur=0.
local real timeDebuff=4.
local unit d=CreateUnit(p,0x68303833,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call Sound3D(c,"ITEM Shuriken.mp3")
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveAgentHandle(Hash,h,2,p)
call SaveAgentHandle(Hash,h,3,CreateGroup())
call SaveReal(Hash,h,4,offset)
call SaveReal(Hash,h,5,rangeMax)
call SaveReal(Hash,h,6,rangeCur)
call SaveReal(Hash,h,7,radius)
call SaveReal(Hash,h,8,dmg)
call SaveReal(Hash,h,9,timeDebuff)
call TimerStart(t,period,true,function cj_anonym__105)
set d=null
set p=null
set t=null
endfunction
function cj_anonym__106 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local player p=LoadPlayerHandle(Hash,h,2)
local group g=LoadGroupHandle(Hash,h,3)
local real offset=LoadReal(Hash,h,4)
local real rangeMax=LoadReal(Hash,h,5)
local real rangeCur=LoadReal(Hash,h,6)
local real radius=LoadReal(Hash,h,7)
local real dmg=LoadReal(Hash,h,8)
local real timeDebuff=LoadReal(Hash,h,9)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or rangeCur==rangeMax
if IsUnitNeedClear(tg,p)then
call Sound3D(c,"ITEM Kunai Touch.mp3")
call UnitTempSpell(tg,0x41313051,0x42303234,timeDebuff,0,false)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl",tg,"chest"))
call UnitDamageTarget(c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
set rangeCur=rangeMax
elseif IsUnitWeapon(d,tg,p)then
call RemoveUnit(tg)
call UnitWeaponDestroy(x,y)
set rangeCur=rangeMax
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(Hash,h,6,rangeCur+offset)
else
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set g=null
set d=null
set c=null
set tg=null
set t=null
endfunction
function ItemsActivePoint__KunaiCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(c)
local real yHero=GetWidgetY(c)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local player p=GetOwningPlayer(c)
local real period=.025
local real dmg=60.+GetHeroLevel(c)*10.
local real speed=750.
local real offset=speed*period
local real radius=40.
local real rangeMax=800.
local real rangeCur=0.
local real timeDebuff=4.
local unit d=CreateUnit(p,0x68303050,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call Sound3D(c,"ITEM Kunai.mp3")
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveAgentHandle(Hash,h,2,p)
call SaveAgentHandle(Hash,h,3,CreateGroup())
call SaveReal(Hash,h,4,offset)
call SaveReal(Hash,h,5,rangeMax)
call SaveReal(Hash,h,6,rangeCur)
call SaveReal(Hash,h,7,radius)
call SaveReal(Hash,h,8,dmg)
call SaveReal(Hash,h,9,timeDebuff)
call TimerStart(t,period,true,function cj_anonym__106)
set d=null
set p=null
set t=null
endfunction
function ItemsActivePoint__DazzlingGrenadeStart takes unit c,real x1,real y1 returns nothing
local group g=CreateGroup()
local player p=GetOwningPlayer(c)
local real timeDebuff=6.
local real radius=600.
local unit tg
call UnitApplyTimedLife(CreateUnit(p,0x6E30324B,x1,y1,GetRandomReal(0.,360.)),0x42544C46,2.)
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)then
call UnitTempSpell(tg,0x41305058,0x42303354,timeDebuff,0,true)
if HasUnitInvisible(tg)then
call UnitRemoveInvisible(tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
set p=null
set tg=null
set g=null
endfunction
function cj_anonym__107 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,1)
local real offset=LoadReal(Hash,h,2)
local real x1=LoadReal(Hash,h,3)
local real y1=LoadReal(Hash,h,4)
local real maxdis=LoadReal(Hash,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if curdis>offset then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SetUnitFlyHeight(d,900./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
else
call ItemsActivePoint__DazzlingGrenadeStart(LoadUnitHandle(Hash,h,0),x1,y1)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function ItemsActivePoint__DazzlingGrenadeCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real speed=600.
local real offset=speed*period
local unit d=CreateUnit(GetOwningPlayer(c),0x68303255,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveReal(Hash,h,2,offset)
call SaveReal(Hash,h,3,x1)
call SaveReal(Hash,h,4,y1)
call SaveReal(Hash,h,5,SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1)))
call TimerStart(t,period,true,function cj_anonym__107)
set d=null
set t=null
endfunction
function ItemsActivePoint__KemuridamaRemoveDebuff takes group grCheck returns nothing
local unit tg
loop
set tg=FirstOfGroup(grCheck)
exitwhen tg==null
call UnitRemoveAbility(tg,0x42303236)
call UnitRemoveAbility(tg,0x41304A42)
call GroupRemoveUnit(grCheck,tg)
endloop
call DestroyGroup(grCheck)
set tg=null
endfunction
function ItemsActivePoint__KemuridamaSetDebuff takes player p,real x,real y,real radius,group grCheck returns nothing
local group g1=CreateGroup()
local group g2=CreateGroup()
local unit tg
local real needDistance=radius/2.
local real x1
local real y1
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitEnemy(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(tg,grCheck)then
call GroupAddUnit(grCheck,tg)
call GroupAddUnit(g2,tg)
endif
call GroupRemoveUnit(g1,tg)
endloop
loop
set tg=FirstOfGroup(grCheck)
exitwhen tg==null
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=needDistance then
if GetUnitAbilityLevel(tg,0x42303236)==0 then
set bj_lastCreatedUnit=CreateUnit(p,0x6E303042,x1,y1,0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41304F53)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call UnitAddAbility(tg,0x41304A42)
endif
else
call UnitRemoveAbility(tg,0x42303236)
call UnitRemoveAbility(tg,0x41304A42)
endif
call GroupRemoveUnit(grCheck,tg)
endloop
call GroupAddGroup(g2,grCheck)
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
set tg=null
set g1=null
set g2=null
endfunction
function cj_anonym__108 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(Hash,h,4)
local real time=LoadReal(Hash,h,5)
local group grCheck=LoadGroupHandle(Hash,h,6)
if time>0.then
call ItemsActivePoint__KemuridamaSetDebuff(LoadPlayerHandle(Hash,h,0),LoadReal(Hash,h,1),LoadReal(Hash,h,2),LoadReal(Hash,h,3),grCheck)
call SaveReal(Hash,h,5,time-period)
else
call ItemsActivePoint__KemuridamaRemoveDebuff(grCheck)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grCheck=null
set t=null
endfunction
function ItemsActivePoint__KemuridamaStart takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local real timeBuff=6.
local real radius=600.
local real offset=radius/2.5
local real degree=0.
local real degreeStep=360./5.
local real period=1.
local real time=6.
local group grCheck=CreateGroup()
call Sound3D(c,"ITEM Kemuridama.mp3")
call UnitApplyTimedLife(CreateUnit(p,0x6E303255,x1,y1,0.),0x42544C46,timeBuff)
loop
call UnitApplyTimedLife(CreateUnit(p,0x6E303255,x1+offset*Cos(degree*bj_DEGTORAD),y1+offset*Sin(degree*bj_DEGTORAD),0.),0x42544C46,timeBuff)
set degree=degree+degreeStep
exitwhen degree>=360.
endloop
call ItemsActivePoint__KemuridamaSetDebuff(p,x1,y1,radius,grCheck)
call SavePlayerHandle(Hash,h,0,p)
call SaveReal(Hash,h,1,x1)
call SaveReal(Hash,h,2,y1)
call SaveReal(Hash,h,3,radius)
call SaveReal(Hash,h,4,period)
call SaveReal(Hash,h,5,time)
call SaveAgentHandle(Hash,h,6,grCheck)
call TimerStart(t,period,true,function cj_anonym__108)
set grCheck=null
set p=null
set t=null
endfunction
function cj_anonym__109 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,1)
local real offset=LoadReal(Hash,h,2)
local real x1=LoadReal(Hash,h,3)
local real y1=LoadReal(Hash,h,4)
local real maxdis=LoadReal(Hash,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if curdis>offset then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SetUnitFlyHeight(d,900./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
else
call ItemsActivePoint__KemuridamaStart(LoadUnitHandle(Hash,h,0),x1,y1)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function ItemsActivePoint__KemuridamaCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real speed=600.
local real offset=speed*period
local unit d=CreateUnit(GetOwningPlayer(c),0x68303834,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveReal(Hash,h,2,offset)
call SaveReal(Hash,h,3,x1)
call SaveReal(Hash,h,4,y1)
call SaveReal(Hash,h,5,SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1)))
call TimerStart(t,period,true,function cj_anonym__109)
set d=null
set t=null
endfunction
function ItemsActivePoint__GasCheckingRemoveDebuff takes group grCheck returns nothing
local unit tg
loop
set tg=FirstOfGroup(grCheck)
exitwhen tg==null
call UnitRemoveAbility(tg,0x42303534)
call UnitRemoveAbility(tg,0x42303536)
call UnitRemoveAbility(tg,0x42303538)
call GroupRemoveUnit(grCheck,tg)
endloop
call DestroyGroup(grCheck)
set tg=null
endfunction
function ItemsActivePoint__GasCheckingSetDebuff takes player p,real x,real y,real radius,group grCheck returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and GetUnitAbilityLevel(tg,0x42303534)==0 then
call GroupAddUnit(grCheck,tg)
set bj_lastCreatedUnit=CreateUnit(p,0x6E303042,x,y,0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313643)
call IssueTargetOrder(bj_lastCreatedUnit,"sleep",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__110 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(Hash,h,4)
local real time=LoadReal(Hash,h,5)
local group grCheck=LoadGroupHandle(Hash,h,6)
if time>0.then
call ItemsActivePoint__GasCheckingSetDebuff(LoadPlayerHandle(Hash,h,0),LoadReal(Hash,h,1),LoadReal(Hash,h,2),LoadReal(Hash,h,3),grCheck)
call SaveReal(Hash,h,5,time-period)
else
call ItemsActivePoint__GasCheckingRemoveDebuff(grCheck)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grCheck=null
set t=null
endfunction
function ItemsActivePoint__GasCheckingStart takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local real timeBuff=6.
local real radius=300.
local real offset=radius/2.2
local real degree=0.
local real degreeStep=360./5.
local real period=1.
local real time=6.
local group grCheck=CreateGroup()
call Sound3D(c,"ITEM Gas Checker.mp3")
call UnitApplyTimedLife(CreateUnit(p,0x6E303345,x1,y1,0.),0x42544C46,timeBuff)
loop
call UnitApplyTimedLife(CreateUnit(p,0x6E303345,x1+offset*Cos(degree*bj_DEGTORAD),y1+offset*Sin(degree*bj_DEGTORAD),0.),0x42544C46,timeBuff)
set degree=degree+degreeStep
exitwhen degree>=360.
endloop
call ItemsActivePoint__GasCheckingSetDebuff(p,x1,y1,radius,grCheck)
call SavePlayerHandle(Hash,h,0,p)
call SaveReal(Hash,h,1,x1)
call SaveReal(Hash,h,2,y1)
call SaveReal(Hash,h,3,radius)
call SaveReal(Hash,h,4,period)
call SaveReal(Hash,h,5,time)
call SaveAgentHandle(Hash,h,6,grCheck)
call TimerStart(t,period,true,function cj_anonym__110)
set grCheck=null
set p=null
set t=null
endfunction
function cj_anonym__111 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,1)
local real offset=LoadReal(Hash,h,2)
local real x1=LoadReal(Hash,h,3)
local real y1=LoadReal(Hash,h,4)
local real maxdis=LoadReal(Hash,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if curdis>offset then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SetUnitFlyHeight(d,900./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
else
call ItemsActivePoint__GasCheckingStart(LoadUnitHandle(Hash,h,0),x1,y1)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function ItemsActivePoint__GasCheckingCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real speed=600.
local real offset=speed*period
local unit d=CreateUnit(GetOwningPlayer(c),0x6E303346,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,d)
call SaveReal(Hash,h,2,offset)
call SaveReal(Hash,h,3,x1)
call SaveReal(Hash,h,4,y1)
call SaveReal(Hash,h,5,SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1)))
call TimerStart(t,period,true,function cj_anonym__111)
set d=null
set t=null
endfunction
function ItemsActivePoint__HealingWardCast takes unit c,real x1,real y1 returns nothing
call UnitApplyTimedLife(CreateUnit(GetOwningPlayer(c),0x6E303256,x1,y1,GetRandomReal(0.,360.)),0x42544C46,20.)
endfunction
function ItemsActivePoint__ChakraWardCast takes unit c,real x1,real y1 returns nothing
local real time=240.
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(c),0x6E303037,x1,y1,GetRandomReal(0.,360.))
call IssueImmediateOrder(bj_lastCreatedUnit,"windwalk")
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,time)
endfunction
function ItemsActivePoint__SandWardCast takes unit c,real x1,real y1 returns nothing
local real time=360.
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(c),0x6E303034,x1,y1,GetRandomReal(0.,360.))
call IssueImmediateOrder(bj_lastCreatedUnit,"windwalk")
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,time)
endfunction
function ItemsActivePoint__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==0x41305535 or i==0x41304A4C or i==0x41313038 or i==0x41305646 or i==0x41313256 or i==0x41313331 or i==0x41305546 or i==0x41304D50 or i==0x41305643 or i==0x41304E32 or i==0x41304E34 or i==0x41304353 or i==0x41305848 or i==0x41304C39
endfunction
function ItemsActivePoint__SpellsActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local real x1=GetSpellTargetX()
local real y1=GetSpellTargetY()
local integer i=GetSpellAbilityId()
if i==0x41305535 then
call ItemsActivePoint__SandWardCast(c,x1,y1)
elseif i==0x41304A4C then
call ItemsActivePoint__ChakraWardCast(c,x1,y1)
elseif i==0x41313038 then
call ItemsActivePoint__HealingWardCast(c,x1,y1)
elseif i==0x41305646 then
call ItemsActivePoint__GasCheckingCast(c,x1,y1)
elseif i==0x41313256 then
call ItemsActivePoint__KemuridamaCast(c,x1,y1)
elseif i==0x41313331 then
call ItemsActivePoint__DazzlingGrenadeCast(c,x1,y1)
elseif i==0x41305546 then
call ItemsActivePoint__KunaiCast(c,x1,y1)
elseif i==0x41304D50 then
call ItemsActivePoint__ShurikenCast(c,x1,y1)
elseif i==0x41305643 then
call ItemsActivePoint__VacuumShurikenCast(c,x1,y1)
elseif i==0x41304E32 then
call ItemsActivePoint__FumaShurikenCast(c,x1,y1)
elseif i==0x41304E34 then
call ItemsActivePoint__KibakuKunaiCast(c,x1,y1)
elseif i==0x41304353 then
call ItemsActivePoint__IaytoCast(c,x1,y1)
elseif i==0x41305848 then
call ItemsActivePoint__ShinigamiOfferingCast(c,x1,y1)
elseif i==0x41304C39 then
call ItemsActivePoint__HiraishinKunaiCast(c,GetSpellTargetX(),GetSpellTargetY())
endif
set c=null
endfunction
function ItemsActivePoint__Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call SetPlayerAbilityAvailable(Player(i),0x41304A42,false)
exitwhen i>11
set i=i+1
endloop
call TriggerAddCondition(spells,Condition(function ItemsActivePoint__SpellsConditions))
call TriggerAddAction(spells,function ItemsActivePoint__SpellsActions)
set spells=null
endfunction
function ItemsActiveInstantly__UnitCheckRegistration takes unit u returns nothing
if not IsUnitInGroup(u,ItemsActiveInstantly__grReg)then
call GroupAddUnit(ItemsActiveInstantly__grReg,u)
call TriggerRegisterUnitEvent(ItemsActiveInstantly__getdmgRamen,u,EVENT_UNIT_DAMAGED)
endif
endfunction
function cj_anonym__112 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
local real period=LoadReal(Hash,h,1)
local real time=LoadReal(Hash,h,2)
if time>0.then
call SaveReal(Hash,h,2,time-period)
else
call KillUnit(u)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function ItemsActiveInstantly__BijuKuchiyoseCast takes unit c,integer idSpell returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.25
local player p=GetOwningPlayer(c)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real f=GetUnitFacing(c)
local real lifeTime=120.
local real textTime=10.
local unit u
local integer bijuID
local string bijuName
if idSpell==0x41313250 then
set bijuID=0x68303032
set bijuName="|cFFFF5000ICHIBI|r"
elseif idSpell==0x41303431 then
set bijuID=0x68303044
set bijuName="|cFFFF5000NIBI|r"
elseif idSpell==0x41305733 then
set bijuID=0x68303232
set bijuName="|cFFFF5000SANBI|r"
elseif idSpell==0x41305043 then
set bijuID=0x68303233
set bijuName="|cFFFF5000YONBI|r"
elseif idSpell==0x41305853 then
set bijuID=0x68303235
set bijuName="|cFFFF5000GOBI|r"
elseif idSpell==0x41305850 then
set bijuID=0x68303236
set bijuName="|cFFFF5000ROKUBI|r"
elseif idSpell==0x4130584E then
set bijuID=0x68303244
set bijuName="|cFFFF5000NANABI|r"
elseif idSpell==0x4130584B then
set bijuID=0x68303246
set bijuName="|cFFFF5000HACHIBI|r"
elseif idSpell==0x41305A54 then
set bijuID=0x68303247
set bijuName="|cFFFF5000KYUBI|r"
endif
call Sound("Ping.mp3")
set u=CreateUnit(p,bijuID,x,y,f)
call SaveBoolean(Hash,GetHandleId(u),0,false)
call KuchiyoseCreateDustEffect("cast",u,3.,3.5)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,textTime,GetPlayerNameColored(p)+" призвал "+bijuName+" на поле боя!")
call SaveAgentHandle(Hash,h,0,u)
call SaveReal(Hash,h,1,period)
call SaveReal(Hash,h,2,lifeTime)
call TimerStart(t,period,true,function cj_anonym__112)
set u=null
set p=null
set t=null
endfunction
function ItemsActiveInstantly__FuridoStaffCast takes unit c returns nothing
local integer countCreeps=0
local integer countHeroes=0
local real timeBuff=8.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real radius=450.
local player p=GetOwningPlayer(c)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
if countCreeps<6 and IsUnitCreep(tg)or IsUnitNC(tg)then
set countCreeps=countCreeps+1
elseif countHeroes<2 and IsUnitHero(tg)then
set countHeroes=countHeroes+1
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if countCreeps>0 then
call UnitTempSpell(c,0x41304133,0,timeBuff,countCreeps,true)
endif
if countHeroes>0 then
call UnitTempSpell(c,0x41304F44,0,timeBuff,countCreeps,true)
endif
set p=null
set g=null
set tg=null
endfunction
function ItemsActiveInstantly__ChakraNoYoroiCast takes unit c returns nothing
call UnitTempSpell(c,0x41304457,0,10.,0,true)
endfunction
function ItemsActiveInstantly__ChakraNoMiCast takes unit c returns nothing
local player p=GetOwningPlayer(c)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real radius=600.
local real hpRes=1000.
local real mpRes=600.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitAlly(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitOutpost(tg)then
call SetWidgetLife(tg,GetWidgetLife(tg)+GetHeal(hpRes,c,tg))
call SetUnitState(tg,UNIT_STATE_MANA,GetUnitState(tg,UNIT_STATE_MANA)+mpRes)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
set p=null
endfunction
function cj_anonym__113 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(Hash,h,0)
local unit tg
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41313258)
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set tg=null
set g=null
set t=null
endfunction
function ItemsActiveInstantly__ShitenshoinCast takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real timeBuff=10.
local real cd=58.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real radius=600.
local player p=GetOwningPlayer(c)
local group g1=CreateGroup()
local group g2=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitAlly(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and GetUnitAbilityLevel(tg,0x41305359)==0 then
call GroupAddUnit(g2,tg)
call UnitAddAbility(tg,0x41313258)
call UnitTempSpell(tg,0x41305359,0x42303134,cd,0,false)
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
call SaveAgentHandle(Hash,h,0,g2)
call TimerStart(t,timeBuff,false,function cj_anonym__113)
set p=null
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function cj_anonym__114 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(Hash,h,0)
local group g2=LoadGroupHandle(Hash,h,1)
local real period=LoadReal(Hash,h,2)
local real timeBuff=LoadReal(Hash,h,3)
local unit tg
if timeBuff>0.then
call GroupEnumUnitsInRect(g1,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitInGroup(tg,g2)then
if GetWidgetLife(tg)<.405 or ninjutsublockNumber[GetPlayerId(GetOwningPlayer(tg))]==0.then
call UnitRemoveAbility(tg,0x41305038)
call UnitRemoveAbility(tg,0x4230324F)
set ninjutsublockNumber[GetPlayerId(GetOwningPlayer(tg))]=0.
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
call SaveReal(Hash,h,3,timeBuff-period)
else
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41305038)
call UnitRemoveAbility(tg,0x4230324F)
set ninjutsublockNumber[GetPlayerId(GetOwningPlayer(tg))]=0.
call GroupRemoveUnit(g2,tg)
endloop
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function ItemsActiveInstantly__ShodaiHokageNoKubikazari takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real timeBuff=12.
local real cd=55.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real radius=900.
local player p=GetOwningPlayer(c)
local group g1=CreateGroup()
local group g2=CreateGroup()
local unit tg
call Sound3D(c,"Chakra Kai.mp3")
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitAlly(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and GetUnitAbilityLevel(tg,0x41305135)==0 then
call GroupAddUnit(g2,tg)
set ninjutsublockNumber[GetPlayerId(GetOwningPlayer(tg))]=400.
call UnitAddAbility(tg,0x41305038)
call UnitTempSpell(tg,0x41305135,0x42303231,cd,0,false)
endif
call GroupRemoveUnit(g1,tg)
endloop
call SaveAgentHandle(Hash,h,0,g1)
call SaveAgentHandle(Hash,h,1,g2)
call SaveReal(Hash,h,2,period)
call SaveReal(Hash,h,3,timeBuff)
call TimerStart(t,period,true,function cj_anonym__114)
set p=null
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function ItemsActiveInstantly__HiramekareiCast takes unit c returns nothing
local real timeBuff=6.
call Sound("Ping.mp3")
call UnitTempSpell(c,0x41313332,0,timeBuff,0,true)
endfunction
function ItemsActiveInstantly__ANBUArmorCastPing takes force f,player p,real time returns nothing
local integer id
if p==Player(0)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,255,3,3)
endif
endif
elseif p==Player(1)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,0,66,255)
endif
endif
elseif p==Player(2)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,28,230,185)
endif
endif
elseif p==Player(3)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,84,0,129)
endif
endif
elseif p==Player(4)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,255,252,1)
endif
endif
elseif p==Player(6)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,32,192,0)
endif
endif
elseif p==Player(7)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,229,91,176)
endif
endif
elseif p==Player(8)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,149,150,151)
endif
endif
elseif p==Player(9)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,126,191,241)
endif
endif
elseif p==Player(10)then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set id=GetPlayerId(p)
if GetWidgetLife(udg_Hero[id])>.405 then
call PingMinimapForForceEx(f,GetWidgetX(udg_Hero[id]),GetWidgetY(udg_Hero[id]),time,bj_MINIMAPPINGSTYLE_FLASHY,16,98,70)
endif
endif
endif
endfunction
function ItemsActiveInstantly__ANBUArmorCast takes unit c returns nothing
local integer i
local integer count
local player p
local force f=CreateForce()
local real time=5.
if IsUnitAlly(c,Player(5))then
set i=0
set count=5
elseif IsUnitAlly(c,Player(11))then
set i=6
set count=11
endif
loop
exitwhen i>count
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER then
call ForceAddPlayer(f,p)
endif
set i=i+1
endloop
if count==5 then
set i=0
elseif count==11 then
set i=6
endif
loop
exitwhen i>count
set p=Player(i)
if IsPlayerInForce(p,f)then
if IsPlayerAlly(p,Player(5))then
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(6),time)
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(7),time)
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(8),time)
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(9),time)
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(10),time)
elseif IsPlayerAlly(p,Player(11))then
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(0),time)
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(1),time)
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(2),time)
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(3),time)
call ItemsActiveInstantly__ANBUArmorCastPing(f,Player(4),time)
endif
endif
set i=i+1
endloop
call ForceClear(f)
call DestroyForce(f)
set p=null
set f=null
endfunction
function ItemsActiveInstantly__OmoriCast takes unit c returns nothing
local real timeBuff=6.
call UnitTempSpell(c,0x41303353,0x42303237,timeBuff,0,true)
endfunction
function cj_anonym__115 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
call UnitRemoveAbility(c,0x41304649)
call DestroyEffect(LoadEffectHandle(Hash,h,1))
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set c=null
set t=null
endfunction
function ItemsActiveInstantly__HogoTetsuNoKuniCast takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=6.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
call UnitAddAbility(c,0x41304649)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,AddSpecialEffect("Falling Light.mdx",x,y))
call TimerStart(t,time,false,function cj_anonym__115)
set t=null
endfunction
function ItemsActiveInstantly__KuchiyoseScrollCast takes unit c returns nothing
local player p=GetOwningPlayer(c)
local integer id=GetPlayerId(p)
local integer rawcode
local real timeLife=30.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real f=GetUnitFacing(c)
local real offset=100.
local unit d
call Sound("Ping.mp3")
if ItemsActiveInstantly_KSType[id]==1 then
set rawcode=0x68303031
elseif ItemsActiveInstantly_KSType[id]==2 then
set rawcode=0x68303039
elseif ItemsActiveInstantly_KSType[id]==3 then
set rawcode=0x6830324D
endif
set d=CreateUnit(p,rawcode,x+offset*Cos(f*.017),y+offset*Sin(f*.017),f)
call CreateEffect(GetWidgetX(d),GetWidgetY(d),1.25,"Smoke.mdx",2.)
call Sound("Bunshin Poff.wav")
call UnitApplyTimedLife(d,0x42544C46,timeLife)
set d=null
endfunction
function ItemsActiveInstantly__EiyuNoMizuCast takes unit c returns nothing
local real timeBuff=10.
call Sound("Ping.mp3")
call UnitTempSpell(c,0x41304344,0,timeBuff,0,false)
endfunction
function cj_anonym__116 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local group g=LoadGroupHandle(Hash,h,1)
local unit tg
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetWidgetLife(tg)>.405 and not IsUnitOwnedByPlayer(tg,p)then
call UnitRemoveAbility(tg,ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL)
call UnitRemoveAbility(tg,0x42303739)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set p=null
set tg=null
set g=null
set t=null
endfunction
function ItemsActiveInstantly__EdoTenseiScrollCast takes unit c returns nothing
local timer t
local group g1=CreateGroup()
local group g2=CreateGroup()
local boolean log=false
local player p=GetOwningPlayer(c)
local real radius=900.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real timeBuff=25.
local unit tg
call Sound("Ping.mp3")
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if GetWidgetLife(tg)>.405 and IsUnitCreep(tg)and GetUnitAbilityLevel(tg,ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL)==0 and GetUnitAbilityLevel(tg,ItemsActiveInstantly_EDOTENSEI_SCROLL_RESTORE_SPELL)==0 then
call UnitAddAbility(tg,ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL)
call SaveAgentHandle(Hash,GetHandleId(tg),-1,p)
call GroupAddUnit(g2,tg)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Items\\AIda\\AIdaTarget.mdl",GetWidgetX(tg),GetWidgetY(tg)))
if not log then
set log=true
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
if log then
set t=CreateTimer()
call SaveAgentHandle(Hash,GetHandleId(t),0,p)
call SaveAgentHandle(Hash,GetHandleId(t),1,g2)
call TimerStart(t,timeBuff,false,function cj_anonym__116)
endif
set t=null
set p=null
set g1=null
set g2=null
set tg=null
endfunction
function ItemsActiveInstantly__GetDamageRamenConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),0x41304442)>0
endfunction
function ItemsActiveInstantly__GetDamageRamenActions takes nothing returns nothing
local unit c=GetTriggerUnit()
call UnitRemoveAbility(c,0x41304442)
call UnitRemoveAbility(c,0x42303351)
set c=null
endfunction
function cj_anonym__117 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local real hp=LoadReal(Hash,h,1)
local real mp=LoadReal(Hash,h,2)
local real period=LoadReal(Hash,h,3)
local real time=LoadReal(Hash,h,4)
if time>0.and GetUnitAbilityLevel(c,0x41304442)>0 then
call SetWidgetLife(c,GetWidgetLife(c)+hp)
call SetUnitState(c,UNIT_STATE_MANA,GetUnitState(c,UNIT_STATE_MANA)+mp)
call SaveReal(Hash,h,4,time-period)
else
call UnitRemoveAbility(c,0x41304442)
call UnitRemoveAbility(c,0x42303351)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set c=null
set t=null
endfunction
function ItemsActiveInstantly__RamenCast takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real restoreHP=500.
local real restoreMP=260.
local real time=20.
local real period=1.
local real hp=(restoreHP/time)*period
local real mp=(restoreMP/time)*period
call UnitAddAbility(c,0x41304442)
call ItemsActiveInstantly__UnitCheckRegistration(c)
call SaveAgentHandle(Hash,h,0,c)
call SaveReal(Hash,h,1,hp)
call SaveReal(Hash,h,2,mp)
call SaveReal(Hash,h,3,period)
call SaveReal(Hash,h,4,time)
call TimerStart(t,period,true,function cj_anonym__117)
set t=null
endfunction
function ItemsActiveInstantly__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==0x41304549 or i==0x41303056 or i==0x41304545 or i==0x41304846 or i==0x4130505A or i==0x41303933 or i==0x4130464A or i==0x41303956 or i==0x4130504D or i==0x4130504A or i==0x41303051 or i==0x41313534 or i==0x41305042 or i==0x41313250 or i==0x41303431 or i==0x41305733 or i==0x41305043 or i==0x41305853 or i==0x41305850 or i==0x4130584E or i==0x4130584B or i==0x41305A54
endfunction
function ItemsActiveInstantly__SpellsActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local integer i=GetSpellAbilityId()
if i==0x41304549 then
call ItemsActiveInstantly__RamenCast(c)
elseif i==0x41303056 then
call ItemsActiveInstantly__EdoTenseiScrollCast(c)
elseif i==0x41304545 then
call ItemsActiveInstantly__EiyuNoMizuCast(c)
elseif i==0x41304846 then
call ItemsActiveInstantly__KuchiyoseScrollCast(c)
elseif i==0x4130505A then
call ItemsActiveInstantly__OmoriCast(c)
elseif i==0x41303933 then
call ItemsActiveInstantly__ANBUArmorCast(c)
elseif i==0x4130464A then
call ItemsActiveInstantly__HogoTetsuNoKuniCast(c)
elseif i==0x41303956 then
call ItemsActiveInstantly__HiramekareiCast(c)
elseif i==0x4130504D then
call ItemsActiveInstantly__ShodaiHokageNoKubikazari(c)
elseif i==0x4130504A then
call ItemsActiveInstantly__ShitenshoinCast(c)
elseif i==0x41303051 then
call ItemsActiveInstantly__ChakraNoMiCast(c)
elseif i==0x41313534 then
call ItemsActiveInstantly__ChakraNoYoroiCast(c)
elseif i==0x41305042 then
call ItemsActiveInstantly__FuridoStaffCast(c)
elseif i==0x41313250 or i==0x41303431 or i==0x41305733 or i==0x41305043 or i==0x41305853 or i==0x41305850 or i==0x4130584E or i==0x4130584B or i==0x41305A54 then
call ItemsActiveInstantly__BijuKuchiyoseCast(c,i)
endif
set c=null
endfunction
function ItemsActiveInstantly__Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call SetPlayerAbilityAvailable(Player(i),0x41304649,false)
call SetPlayerAbilityAvailable(Player(i),0x41313258,false)
call SetPlayerAbilityAvailable(Player(i),0x41304344,false)
exitwhen i>11
set i=i+1
endloop
call TriggerAddCondition(spells,Condition(function ItemsActiveInstantly__SpellsConditions))
call TriggerAddAction(spells,function ItemsActiveInstantly__SpellsActions)
call TriggerAddCondition(ItemsActiveInstantly__getdmgRamen,Condition(function ItemsActiveInstantly__GetDamageRamenConditions))
call TriggerAddAction(ItemsActiveInstantly__getdmgRamen,function ItemsActiveInstantly__GetDamageRamenActions)
set spells=null
endfunction
function ItemsActiveTarget__TobiramaRaijinCast takes unit c,unit tu returns nothing
local real timeStun=2.
call Sound("Double Cut 2.mp3")
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",GetWidgetX(tu),GetWidgetY(tu)))
call GetStun(tu,timeStun)
endfunction
function ItemsActiveTarget__KihouBlasterChecking takes unit c,real x,real y returns boolean
local real dmg=400.
local real radius=50.
local player p=GetOwningPlayer(c)
local group g=CreateGroup()
local unit tg
local boolean log=false
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitNeedNinjutsu(tg,p)then
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg,c,tg,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call DestroyEffect(AddSpecialEffect("AerialExplosionV3.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
set log=true
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=null
set p=null
set tg=null
return log
endfunction
function cj_anonym__118 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,1)
local real a=LoadReal(Hash,h,2)
local real offset=LoadReal(Hash,h,3)
local integer amount=LoadInteger(Hash,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local boolean log=false
if amount>0 then
set log=ItemsActiveTarget__KihouBlasterChecking(LoadUnitHandle(Hash,h,0),x,y)
if not log then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveInteger(Hash,h,4,amount-1)
else
call SaveInteger(Hash,h,4,0)
endif
else
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function ItemsActiveTarget__KihouBlasterCast takes unit c,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.295*Atan2(y1-y,x1-x)
local real period=.025
local real speed=900.
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer amount=R2I(distance/offset)
call Sound("Ping.mp3")
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,CreateUnit(p,0x6E303153,x,y,a))
call SaveReal(Hash,h,2,a)
call SaveReal(Hash,h,3,offset)
call SaveInteger(Hash,h,4,amount)
call TimerStart(t,period,true,function cj_anonym__118)
set p=null
set t=null
endfunction
function ItemsActiveTarget__BenihisagoCast takes unit c,unit tu returns nothing
local real timeDebuff=12.
local real xx=.5
local real manaCaster=GetUnitState(c,UNIT_STATE_MANA)*xx
local real manaTarget=GetUnitState(tu,UNIT_STATE_MANA)*xx
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
call CreateEffect(x,y,1.,"Angel Sword.mdx",.5)
call DestroyEffect(AddSpecialEffect("DarkNova.mdx",x1,y1))
call SetUnitState(tu, UNIT_STATE_MANA, manaTarget)
call SetUnitState(c, UNIT_STATE_MANA, GetUnitState(c, UNIT_STATE_MANA) - manaTarget)
if manaTarget<manaCaster then
call UnitTempSpell(tu,0x41303652,0x42303655,timeDebuff,0,true)
endif
endfunction
function ItemsActiveTarget__TenseiganAbility takes unit u returns nothing
call SetUnitAbilityLevel(u,0x41304A37,GetUnitAbilityLevel(u,0x41304A37)+1)
call SetUnitAbilityLevel(u,0x41304A38,GetUnitAbilityLevel(u,0x41304A38)+1)
call SetUnitAbilityLevel(u,0x41304A35,GetUnitAbilityLevel(u,0x41304A35)+1)
call SetUnitAbilityLevel(u,0x41304953,GetUnitAbilityLevel(u,0x41304953)+1)
call SetUnitAbilityLevel(u,0x41313257,GetUnitAbilityLevel(u,0x41313257)+1)
call SetUnitAbilityLevel(u,0x4130314B,GetUnitAbilityLevel(u,0x4130314B)+1)
call SetUnitAbilityLevel(u,0x41304A36,GetUnitAbilityLevel(u,0x41304A36)+1)
endfunction
function ItemsActiveTarget__TenseiganLightning takes integer h,integer number,unit c,unit tg,real x1,real y1,real timeAbility,real time returns nothing
local real x=GetWidgetX(tg)
local real y=GetWidgetY(tg)
local lightning lig=AddLightning("FORK",false,x1,y1,x,y)
call SaveLightningHandle(Hash,h,number,lig)
call ItemsActiveTarget__TenseiganAbility(c)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ManaFlare\\ManaFlareBoltImpact.mdl",tg,"chest"))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ManaFlare\\ManaFlareBoltImpact.mdl",x,y))
call CreateTimerForLightning(lig,time)
call StartSound(gg_snd_LightningBolt)
set lig=null
endfunction
function cj_anonym__119 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit tu=LoadUnitHandle(Hash,h,1)
local group g2=LoadGroupHandle(Hash,h,2)
local integer time=LoadInteger(Hash,h,3)
local integer timeMax=LoadInteger(Hash,h,4)
local real x=LoadReal(Hash,h,5)
local real y=LoadReal(Hash,h,6)
local real x1=LoadReal(Hash,h,7)
local real y1=LoadReal(Hash,h,8)
local real timeAbility=LoadReal(Hash,h,9)
local group g1=LoadGroupHandle(Hash,h,10)
local boolean log=false
local unit tg
if time>0 then
if GetWidgetLife(c)>.405 and GetWidgetLife(tu)>.405 then
call MoveLightning(LoadLightningHandle(Hash,h,11),false,x,y,x1,y1)
if LoadLightningHandle(Hash,h,12)!=null then
call MoveLightning(LoadLightningHandle(Hash,h,12),false,x,y,x1,y1)
endif
if LoadLightningHandle(Hash,h,13)!=null then
call MoveLightning(LoadLightningHandle(Hash,h,13),false,x,y,x1,y1)
endif
if LoadLightningHandle(Hash,h,14)!=null then
call MoveLightning(LoadLightningHandle(Hash,h,14),false,x,y,x1,y1)
endif
if LoadLightningHandle(Hash,h,15)!=null then
call MoveLightning(LoadLightningHandle(Hash,h,15),false,x,y,x1,y1)
endif
if time>timeMax then
call SaveReal(Hash,h,5,GetWidgetX(c))
call SaveReal(Hash,h,6,GetWidgetY(c))
endif
endif
if time==10 or time==20 or time==30 or time==40 then
call GroupEnumUnitsInRect(g1,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null or log
if IsUnitInGroup(tg,g2)then
if time==40 then
call ItemsActiveTarget__TenseiganLightning(h,12,c,tg,x1,y1,timeAbility,.5)
elseif time==30 then
call ItemsActiveTarget__TenseiganLightning(h,13,c,tg,x1,y1,timeAbility,.4)
elseif time==20 then
call ItemsActiveTarget__TenseiganLightning(h,14,c,tg,x1,y1,timeAbility,.3)
elseif time==10 then
call ItemsActiveTarget__TenseiganLightning(h,15,c,tg,x1,y1,timeAbility,.2)
endif
call SaveReal(Hash,h,5,x1)
call SaveReal(Hash,h,6,y1)
set tu=tg
call SaveAgentHandle(Hash,h,1,tu)
call GroupRemoveUnit(g2,tg)
set log=true
endif
call GroupRemoveUnit(g1,tg)
endloop
endif
call SaveInteger(Hash,h,3,time-1)
else
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set tu=null
set c=null
set g1=null
set g2=null
set t=null
endfunction
function ItemsActiveTarget__TenseiganCast takes unit c,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local group g1=CreateGroup()
local group g2=CreateGroup()
local player p=GetOwningPlayer(c)
local integer count=0
local integer max=4
local real period=.01
local real timeAbility=8.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real radius=600.
local unit tg
set max=max-1
call DestroyEffect(AddSpecialEffectTarget("Ghost Strike.mdx",c,"origin"))
call UnitTempSpell(c,0x41304A39,0,timeAbility,0,true)
call ItemsActiveTarget__TenseiganAbility(c)
call GroupEnumUnitsInRange(g1,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null or count==max
if tg!=tu and IsUnitEnemy(tg,p)and not HasUnitInvisible(tg)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)and not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
call UnitTempSpell(tg,0x41304A39,0,timeAbility,0,true)
call ItemsActiveTarget__TenseiganAbility(c)
set count=count+1
endif
call GroupRemoveUnit(g1,tg)
endloop
set bj_lastCreatedLightning=AddLightning("FORK",false,x,y,x1,y1)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\ManaFlare\\ManaFlareBoltImpact.mdl",tg,"chest"))
call CreateTimerForLightning(bj_lastCreatedLightning,.4)
call StartSound(gg_snd_LightningBolt)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,tu)
call SaveAgentHandle(Hash,h,2,g2)
call SaveInteger(Hash,h,3,count*10+10)
call SaveInteger(Hash,h,4,count*10+10)
call SaveReal(Hash,h,5,x)
call SaveReal(Hash,h,6,y)
call SaveReal(Hash,h,7,x1)
call SaveReal(Hash,h,8,y1)
call SaveReal(Hash,h,9,timeAbility)
call SaveAgentHandle(Hash,h,10,g1)
call SaveLightningHandle(Hash,h,11,bj_lastCreatedLightning)
call TimerStart(t,period,true,function cj_anonym__119)
set g1=null
set g2=null
set p=null
set tg=null
set tu=null
set c=null
set t=null
endfunction
function cj_anonym__120 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local destructable des=LoadDestructableHandle(Hash,h,1)
local real offset=LoadReal(Hash,h,2)
local real distance=LoadReal(Hash,h,3)
local real a=LoadReal(Hash,h,4)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
if GetWidgetLife(c)>.405 and GetWidgetLife(des)>.405 and distance>0.then
call SetUnitPosition(c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveReal(Hash,h,3,distance-offset)
else
call PauseUnit(c,false)
call SetUnitPathing(c,true)
if GetWidgetLife(c)>.405 and GetWidgetLife(des)>.405 then
call SetUnitAnimation(c,"stand ready")
call KillDestructable(des)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set des=null
set c=null
set t=null
endfunction
function ItemsActiveTarget__BatorugurobuMovement takes unit c,destructable des,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(des)
local real y1=GetWidgetY(des)
local real period=.025
local real speed=900.
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call SetUnitPathing(c,false)
call SetUnitTypeFlying(c)
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,des)
call SaveReal(Hash,h,2,offset)
call SaveReal(Hash,h,3,distance)
call SaveReal(Hash,h,4,a)
call TimerStart(t,period,true,function cj_anonym__120)
set t=null
endfunction
function cj_anonym__121 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,0)
local unit c=LoadUnitHandle(Hash,h,1)
local destructable des=LoadDestructableHandle(Hash,h,2)
local real offset=LoadReal(Hash,h,3)
local real distance=LoadReal(Hash,h,4)
local real a=LoadReal(Hash,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if GetWidgetLife(c)>.405 and GetWidgetLife(des)>.405 and distance>0.then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call UnitApplyTimedLife(CreateUnit(GetOwningPlayer(c),0x6E303050,x,y,a),0x42544C46,(distance/600.))
call SaveReal(Hash,h,4,distance-offset)
else
call RemoveUnit(d)
if GetWidgetLife(c)>.405 and GetWidgetLife(des)>.405 then
call ItemsActiveTarget__BatorugurobuMovement(c,des,a)
else
call PauseUnit(c,false)
endif
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set c=null
set d=null
set des=null
set t=null
endfunction
function ItemsActiveTarget__BatorugurobuCast takes unit c,destructable des returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.04
local real speed=1200.
local real offset=speed*period
local real startOffset=50.
local real x1=GetWidgetX(des)
local real y1=GetWidgetY(des)
local real xHero=GetWidgetX(c)
local real yHero=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call PauseUnit(c,true)
call SaveAgentHandle(Hash,h,0,CreateUnit(GetOwningPlayer(c),0x6E303050,x,y,a))
call SaveAgentHandle(Hash,h,1,c)
call SaveAgentHandle(Hash,h,2,des)
call SaveReal(Hash,h,3,offset)
call SaveReal(Hash,h,4,distance)
call SaveReal(Hash,h,5,a)
call TimerStart(t,period,true,function cj_anonym__121)
set t=null
endfunction
function cj_anonym__122 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(Hash,h,0)
local real time=LoadReal(Hash,h,1)
local real period=LoadReal(Hash,h,2)
local real stunTime=LoadReal(Hash,h,3)
if time>0.and GetWidgetLife(tu)>.405 then
call GetStun(tu,stunTime)
call SaveReal(Hash,h,1,time-period)
else
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function ItemsActiveTarget__ElementalSphereCast takes unit c,unit tu returns nothing
local timer t
local integer h
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real dmg=GetUnitState(tu,UNIT_STATE_MAX_LIFE)*.15
local real stunTime=.33
local real time=4.
local real period=1.
local real knockback=400.
call DestroyEffect(AddSpecialEffectTarget("ElementalEffect.MDX",tu,"origin"))
call UnitDamageTarget(c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x4130584F,0x42303548,time,0,true)
call KnockBackUnitEf(tu,knockback,.4,a,.025,3,false)
call UnitTempSpell(tu,0x41313143,0,time,0,true)
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(c),0x6E303042,x1,y1,a)
call UnitAddAbility(bj_lastCreatedUnit,0x41313544)
call IssuePointOrder(bj_lastCreatedUnit,"silence",x1,y1)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(Hash,h,0,tu)
call SaveReal(Hash,h,1,time)
call SaveReal(Hash,h,2,period)
call SaveReal(Hash,h,3,stunTime)
call TimerStart(t,period,true,function cj_anonym__122)
endif
set t=null
endfunction
function ItemsActiveTarget__SenninStaffCast takes unit c,unit tu returns nothing
local real a=GetUnitFacing(tu)
local real distance=600.
local real period=.033
call KnockBackUnitEf(tu,distance,distance/1000.,a,period,10,false)
endfunction
function ItemsActiveTarget__HiNoIshiCast takes unit c,unit tu returns nothing
local player p=GetOwningPlayer(c)
local real time=7.
if IsUnitAlly(tu,p)then
call UnitTempSpell(tu,0x41305741,0,time,0,true)
else
call UnitTempSpell(tu,0x41313339,0,time,0,true)
endif
endfunction
function ItemsActiveTarget__LumberjackAxeCast takes unit c,destructable des returns nothing
local integer hd=GetHandleId(des)
local integer wood_step=GetRandomInt(1,10)
local real dmg=50.
if LoadEffectHandle(Hash,hd,0)!=null then
call SetWidgetLife(des,GetWidgetLife(des)-dmg)
if GetWidgetLife(des)<.405 then
call DestroyEffect(LoadEffectHandle(Hash,hd,0))
call FlushChildHashtable(Hash,hd)
endif
call LumberPlus(c,wood_step)
else
call DisplayTimedTextToPlayer(GetOwningPlayer(c),0.,0.,5.,"|cFFFFCC00Рубить можно только отмеченные деревья!|r")
endif
endfunction
function cj_anonym__123 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(Hash,h,0)
local real period=LoadReal(Hash,h,2)
local real time=LoadReal(Hash,h,3)
if GetWidgetLife(tu)>.405 and time>0.then
call SaveReal(Hash,h,3,time-period)
else
call UnitRemoveAbility(tu,0x41313336)
call UnitRemoveAbility(tu,0x42303337)
call DestroyEffect(LoadEffectHandle(Hash,h,1))
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function ItemsActiveTarget__RosaryMonkCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real time=4.
local real period=1.
call UnitAddAbility(tu,0x41313336)
call DestroyEffect(AddSpecialEffect("LawOfBloodScroll_Cast.mdx",x,y))
call SaveAgentHandle(Hash,h,0,tu)
call SaveAgentHandle(Hash,h,1,AddSpecialEffectTarget("corruptionaura.mdx",tu,"origin"))
call SaveReal(Hash,h,2,period)
call SaveReal(Hash,h,3,time)
call TimerStart(t,period,true,function cj_anonym__123)
set t=null
endfunction
function cj_anonym__124 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit tu=LoadUnitHandle(Hash,h,1)
local unit d=LoadUnitHandle(Hash,h,2)
local real offset=LoadReal(Hash,h,3)
local real radius=LoadReal(Hash,h,7)
local group g=LoadGroupHandle(Hash,h,8)
local boolean crashLog=LoadBoolean(Hash,h,9)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local unit tg
if d!=null and distance>offset and distance<LoadReal(Hash,h,6)and GetWidgetLife(tu)>.405 and not crashLog then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or crashLog
if IsUnitWeapon(d,tg,GetOwningPlayer(c))then
call RemoveUnit(tg)
call UnitWeaponDestroy(x,y)
call SaveBoolean(Hash,h,9,true)
call SaveReal(Hash,h,3,0.)
set crashLog=true
endif
call GroupRemoveUnit(g,tg)
endloop
else
if not crashLog then
call UnitDamageTarget(c,tu,LoadReal(Hash,h,5),true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x41304E35,0x4230334A,LoadReal(Hash,h,4),0,true)
endif
endif
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set tu=null
set c=null
set t=null
endfunction
function ItemsActiveTarget__SenbonCast takes unit c,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real dmg=GetHeroAgi(c,true)*4.
local real timeDebuff=4.
local real period=.025
local real speed=900.
local real maxrange=speed*1.5
local real radius=40.
local real offset=speed*period
local boolean crashLog=false
local player p=GetOwningPlayer(c)
local unit d=CreateUnit(p,0x68303337,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,tu)
call SaveAgentHandle(Hash,h,2,d)
call SaveReal(Hash,h,3,offset)
call SaveReal(Hash,h,4,timeDebuff)
call SaveReal(Hash,h,5,dmg)
call SaveReal(Hash,h,6,maxrange)
call SaveReal(Hash,h,7,radius)
call SaveAgentHandle(Hash,h,8,CreateGroup())
call SaveBoolean(Hash,h,9,crashLog)
call TimerStart(t,period,true,function cj_anonym__124)
set p=null
set t=null
set d=null
endfunction
function cj_anonym__125 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(Hash,h,0)
local group g=LoadGroupHandle(Hash,h,1)
local real period=LoadReal(Hash,h,2)
local real time=LoadReal(Hash,h,3)
local real dmg=LoadReal(Hash,h,4)
local real radius=LoadReal(Hash,h,5)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local player p=GetOwningPlayer(tu)
local boolean log=false
local unit tg
if time>0.and GetWidgetLife(tu)>.405 then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitEnemy(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and IsUnitHero(tg)then
call UnitDamageTarget(tu,tg,GetNinjutsuDamage(dmg,tu,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call DestroyEffect(AddSpecialEffectTarget("Environment\\LargeBuildingFire\\LargeBuildingFire1.mdl",tg,"origin"))
set log=true
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(Hash,h,3,time-period)
else
call DestroyGroup(g)
call DestroyEffect(LoadEffectHandle(Hash,h,6))
call UnitRemoveAbility(tu,0x4130314E)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tu=null
set tg=null
set p=null
set t=null
endfunction
function ItemsActiveTarget__KuramaChakraSealedScrollCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real timeBuff=15.
local real period=.1
local real dmg=12.*period
local real radius=250.
call UnitAddAbility(tu,0x4130314E)
call SaveAgentHandle(Hash,h,0,tu)
call SaveAgentHandle(Hash,h,1,CreateGroup())
call SaveReal(Hash,h,2,period)
call SaveReal(Hash,h,3,timeBuff)
call SaveReal(Hash,h,4,dmg)
call SaveReal(Hash,h,5,radius)
call SaveAgentHandle(Hash,h,6,AddSpecialEffectTarget("Burning_Cage_1.mdx",tu,"chest"))
call TimerStart(t,period,true,function cj_anonym__125)
set t=null
endfunction
function ItemsActiveTarget__SaikenChakraSealedScrollCast takes unit tu returns nothing
local real timeBuff=15.
local real mp=65.
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
call DestroyEffect(AddSpecialEffect("Mana Refresh.mdx",x,y))
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)+mp)
call UnitTempSpell(tu,0x41304656,0,timeBuff,0,true)
endfunction
function ItemsActiveTarget__SonGokuChakraSealedScrollCast takes unit tu returns nothing
local real timeBuff=15.
call UnitTempSpell(tu,0x41304F55,0,timeBuff,0,true)
endfunction
function ItemsActiveTarget__IsobuChakraSealedScrollCast takes unit tu returns nothing
local real timeBuff=15.
local real hp=125.
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
call DestroyEffect(AddSpecialEffect("Healing Surge.mdx",x,y))
call SetWidgetLife(tu,GetWidgetLife(tu)+hp)
call UnitTempSpell(tu,0x41304655,0,timeBuff,0,true)
endfunction
function ItemsActiveTarget__ShukakuChakraSealedScrollCast takes unit tu returns nothing
local real timeBuff=15.
call UnitTempSpell(tu,0x41304654,0,timeBuff,0,true)
call UnitTempSpell(tu,0x41304653,0,timeBuff,0,true)
endfunction
function ItemsActiveTarget__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==0x41304652 or i==0x41304651 or i==0x41304F54 or i==0x41313348 or i==0x4130494D or i==0x41304D43 or i==0x41303633 or i==0x41304130 or i==0x41305739 or i==0x41305030 or i==0x41303530 or i==0x41304546 or i==0x41304550 or i==0x41304A30 or i==0x41303651 or i==0x41305051
endfunction
function ItemsActiveTarget__SpellsActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local unit tu=GetSpellTargetUnit()
local integer i=GetSpellAbilityId()
if i==0x41304652 then
call ItemsActiveTarget__ShukakuChakraSealedScrollCast(tu)
elseif i==0x41304651 then
call ItemsActiveTarget__IsobuChakraSealedScrollCast(tu)
elseif i==0x41304F54 then
call ItemsActiveTarget__SonGokuChakraSealedScrollCast(tu)
elseif i==0x41313348 then
call ItemsActiveTarget__SaikenChakraSealedScrollCast(tu)
elseif i==0x4130494D then
call ItemsActiveTarget__KuramaChakraSealedScrollCast(tu)
elseif i==0x41304D43 then
call ItemsActiveTarget__SenbonCast(c,tu)
elseif i==0x41303633 then
call ItemsActiveTarget__LumberjackAxeCast(c,GetSpellTargetDestructable())
elseif i==0x41304130 then
call ItemsActiveTarget__RosaryMonkCast(tu)
elseif i==0x41305739 then
call ItemsActiveTarget__HiNoIshiCast(c,tu)
elseif i==0x41305030 then
call ItemsActiveTarget__ElementalSphereCast(c,tu)
elseif i==0x41304550 then
call ItemsActiveTarget__SenninStaffCast(c,tu)
elseif i==0x41303530 then
call ItemsActiveTarget__BatorugurobuCast(c,GetSpellTargetDestructable())
elseif i==0x41304A30 then
call ItemsActiveTarget__TenseiganCast(c,tu)
elseif i==0x41303651 then
call ItemsActiveTarget__BenihisagoCast(c,tu)
elseif i==0x41304546 then
call ItemsActiveTarget__KihouBlasterCast(c,tu)
elseif i==0x41305051 then
call ItemsActiveTarget__TobiramaRaijinCast(c,tu)
endif
set tu=null
set c=null
endfunction
function ItemsActiveTarget__Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call SetPlayerAbilityAvailable(Player(i),0x41304F55,false)
call SetPlayerAbilityAvailable(Player(i),0x41304A39,false)
exitwhen i>11
set i=i+1
endloop
call TriggerAddCondition(spells,Condition(function ItemsActiveTarget__SpellsConditions))
call TriggerAddAction(spells,function ItemsActiveTarget__SpellsActions)
set spells=null
endfunction
function ItemsPassive__UnitCheckRegistration takes unit u returns nothing
if not IsUnitInGroup(u,grItemsReg)then
call GroupAddUnit(grItemsReg,u)
call TriggerRegisterUnitEvent(ItemsPassive__getdmgANBUTanto,u,EVENT_UNIT_DAMAGED)
call TriggerRegisterUnitEvent(ItemsPassive__getdmgKurosava,u,EVENT_UNIT_DAMAGED)
call TriggerRegisterUnitEvent(ItemsPassive__getdmgHiramekarei,u,EVENT_UNIT_DAMAGED)
call TriggerRegisterUnitEvent(ItemsPassive__getdmgKabutowari,u,EVENT_UNIT_DAMAGED)
call TriggerRegisterUnitEvent(ItemsPassive__getdmgBloodstone,u,EVENT_UNIT_DAMAGED)
call TriggerRegisterUnitEvent(ItemsPassive__getdmgBashosen,u,EVENT_UNIT_DAMAGED)
endif
endfunction
function ItemsPassive__GetDamageHiramekareiConditions takes nothing returns boolean
return GetInventoryIndexOfItemTypeBJ(GetEventDamageSource(),HIRAMEKAREI_ID)>0 and IsUnitInGroup(GetTriggerUnit(),ItemsPassive__grHiramekarei)
endfunction
function ItemsPassive__GetDamageHiramekareiActions takes nothing returns nothing
local unit c=GetEventDamageSource()
local unit tu=GetTriggerUnit()
call DisableTrigger(ItemsPassive__getdmgHiramekarei)
call UnitRemoveAbility(c,0x41313332)
call GroupRemoveUnit(ItemsPassive__grHiramekarei,tu)
call EnableTrigger(ItemsPassive__getdmgHiramekarei)
set tu=null
set c=null
endfunction
function ItemsPassive__AttackHiramekareiConditions takes nothing returns boolean
return GetInventoryIndexOfItemTypeBJ(GetAttacker(),HIRAMEKAREI_ID)>0 and GetUnitAbilityLevel(GetAttacker(),0x41313332)>0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))
endfunction
function ItemsPassive__AttackHiramekareiActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
call ItemsPassive__UnitCheckRegistration(tu)
call GroupAddUnit(ItemsPassive__grHiramekarei,tu)
set tu=null
endfunction
function ItemsPassive__GetDamageKabutowariConditions takes nothing returns boolean
return GetInventoryIndexOfItemTypeBJ(GetEventDamageSource(),KABUTOWARI_ID)>0 and IsUnitInGroup(GetTriggerUnit(),ItemsPassive__grKabutowari)
endfunction
function ItemsPassive__GetDamageKabutowariActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real timeDebuff=15.
call DisableTrigger(ItemsPassive__getdmgKabutowari)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\GargoyleCrumble\\GargoyleCrumble.mdl",GetWidgetX(tu),GetWidgetY(tu)))
call UnitTempSpell(tu,0x41305035,0,timeDebuff,0,true)
call GroupRemoveUnit(ItemsPassive__grKabutowari,tu)
call EnableTrigger(ItemsPassive__getdmgKabutowari)
set tu=null
endfunction
function ItemsPassive__AttackKabutowariConditions takes nothing returns boolean
return GetInventoryIndexOfItemTypeBJ(GetAttacker(),KABUTOWARI_ID)>0 and GetUnitAbilityLevel(GetTriggerUnit(),0x41305035)==0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)
endfunction
function ItemsPassive__AttackKabutowariActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
call ItemsPassive__UnitCheckRegistration(tu)
call GroupAddUnit(ItemsPassive__grKabutowari,tu)
set tu=null
endfunction
function ItemsPassive__GetDamageBashosenConditions takes nothing returns boolean
return GetEventDamage()>0.and IsUnitInGroup(GetTriggerUnit(),ItemsPassive__grBashosen)and GetInventoryIndexOfItemTypeBJ(GetEventDamageSource(),BASHOSEN_ID)>0
endfunction
function ItemsPassive__GetDamageBashosenActions takes nothing returns nothing
local unit c=GetEventDamageSource()
local unit tu=GetTriggerUnit()
local player p=GetOwningPlayer(c)
local integer id=GetPlayerId(p)
local real dmg=GetEventDamage()*.3
call DisableTrigger(ItemsPassive__getdmgBashosen)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIfb\\AIfbSpecialArt.mdl",tu,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",tu,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl",tu,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",tu,"chest"))
call UnitDamageTarget(c,tu,GetNinjutsuDamage(dmg,c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call GroupRemoveUnit(ItemsPassive__grBashosen,tu)
call EnableTrigger(ItemsPassive__getdmgBashosen)
set c=null
set tu=null
endfunction
function ItemsPassive__AttackBashosenConditions takes nothing returns boolean
return GetInventoryIndexOfItemTypeBJ(GetAttacker(),BASHOSEN_ID)>0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)
endfunction
function ItemsPassive__AttackBashosenActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
call ItemsPassive__UnitCheckRegistration(tu)
call GroupAddUnit(ItemsPassive__grBashosen,tu)
set tu=null
endfunction
function ItemsPassive__GetDamageBloodstoneConditions takes nothing returns boolean
return GetEventDamage()>.0 and GetInventoryIndexOfItemTypeBJ(GetEventDamageSource(),NUNOBOKO_NO_KEN_ID)>0 and IsUnitInGroup(GetTriggerUnit(),ItemsPassive__grBloodstone)
endfunction
function ItemsPassive__GetDamageBloodstoneActions takes nothing returns nothing
local unit c=GetEventDamageSource()
local unit tu=GetTriggerUnit()
local real life=GetUnitState(tu,UNIT_STATE_MAX_LIFE)*.01
local real dmg=life
call DisableTrigger(ItemsPassive__getdmgBloodstone)
call CreateEffect(GetWidgetX(tu),GetWidgetY(tu),1.65,"Gravitone.mdx",1.)
call UnitDamageTarget(c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call GroupRemoveUnit(ItemsPassive__grBloodstone,tu)
call EnableTrigger(ItemsPassive__getdmgBloodstone)
set tu=null
set c=null
endfunction
function ItemsPassive__AttackBloodstoneConditions takes nothing returns boolean
return GetInventoryIndexOfItemTypeBJ(GetAttacker(),NUNOBOKO_NO_KEN_ID)>0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)
endfunction
function ItemsPassive__AttackBloodstoneActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
call ItemsPassive__UnitCheckRegistration(tu)
call GroupAddUnit(ItemsPassive__grBloodstone,tu)
set tu=null
endfunction
function ItemsPassive__GetDamageKurosavaConditions takes nothing returns boolean
return GetEventDamage()>0.and GetInventoryIndexOfItemTypeBJ(GetTriggerUnit(),KUROSAVA_ID)>0 and GetUnitAbilityLevel(GetTriggerUnit(),0x4130594E)==0 and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetEventDamageSource()))and IsUnitHero(GetEventDamageSource())
endfunction
function ItemsPassive__GetDamageKurosavaActions takes nothing returns nothing
local real timeDebuff=3.
local unit c=GetTriggerUnit()
call UnitTempSpell(c,0x4130594E,0x42303246,timeDebuff,0,true)
set c=null
endfunction
function ItemsPassive__AttackKurosavaConditions takes nothing returns boolean
return GetInventoryIndexOfItemTypeBJ(GetTriggerUnit(),KUROSAVA_ID)>0 and GetUnitAbilityLevel(GetTriggerUnit(),0x4130594E)==0 and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and IsUnitHero(GetAttacker())
endfunction
function ItemsPassive__AttackKurosavaActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
call ItemsPassive__UnitCheckRegistration(tu)
set tu=null
endfunction
function ItemsPassive__GetDamageANBUTantoConditions takes nothing returns boolean
return GetEventDamage()>.0 and GetInventoryIndexOfItemTypeBJ(GetEventDamageSource(),ANBU_TANTO_ID)>0 and IsUnitInGroup(GetTriggerUnit(),ItemsPassive__grANBUTanto)
endfunction
function ItemsPassive__GetDamageANBUTantoActions takes nothing returns nothing
local unit c=GetEventDamageSource()
local unit tu=GetTriggerUnit()
local real dmg=GetEventDamage()
call DisableTrigger(ItemsPassive__getdmgANBUTanto)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call SetWidgetLife(tu,GetWidgetLife(tu)+dmg)
call GroupRemoveUnit(ItemsPassive__grANBUTanto,tu)
call EnableTrigger(ItemsPassive__getdmgANBUTanto)
set tu=null
set c=null
endfunction
function ItemsPassive__AttackANBUTantoConditions takes nothing returns boolean
return GetRandomInt(1,7)==1 and GetInventoryIndexOfItemTypeBJ(GetAttacker(),ANBU_TANTO_ID)>0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)
endfunction
function ItemsPassive__AttackANBUTantoActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
call ItemsPassive__UnitCheckRegistration(tu)
call GroupAddUnit(ItemsPassive__grANBUTanto,tu)
set tu=null
endfunction
function ItemsPassive__SamuraiKatanaDamage takes unit c,real x,real y,group gr returns boolean
local player p=GetOwningPlayer(c)
local boolean log=false
local real dmg=60.
local real radius=125.
local unit tg
call GroupEnumUnitsInRange(gr,x,y,radius,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null or log
if IsUnitNeedNinjutsu(tg,p)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg,c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
set log=true
endif
call GroupRemoveUnit(gr,tg)
endloop
set p=null
set tg=null
return log
endfunction
function ItemsPassive__AttackSamuraiKatanaConditions takes nothing returns boolean
return GetInventoryIndexOfItemTypeBJ(GetAttacker(),SAMURAI_KATANA_ID)>0 and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and GetRandomInt(1,7)==1
endfunction
function cj_anonym__126 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d1=LoadUnitHandle(Hash,h,0)
local unit d2=LoadUnitHandle(Hash,h,1)
local real a=LoadReal(Hash,h,2)
local real offset=LoadReal(Hash,h,3)
local real range=LoadReal(Hash,h,4)
local real x=GetWidgetX(d1)
local real y=GetWidgetY(d1)
local boolean logDamaged=ItemsPassive__SamuraiKatanaDamage(LoadUnitHandle(Hash,h,5),x,y,LoadGroupHandle(Hash,h,6))
if range>0.and not logDamaged then
call SetUnitPosition(d1,x+offset*Cos(a),y+offset*Sin(a))
call SetUnitPosition(d2,x+offset*Cos(a),y+offset*Sin(a))
call SaveReal(Hash,h,4,range-offset)
else
call DestroyGroup(LoadGroupHandle(Hash,h,6))
call RemoveUnit(d1)
call RemoveUnit(d2)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d1=null
set d2=null
set t=null
endfunction
function ItemsPassive__AttackSamuraiKatanaActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit c=GetAttacker()
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=GetUnitFacing(c)
local real speed=1100.
local real period=.025
local real offset=speed*period
local real range=800.
local player p=GetOwningPlayer(c)
call Sound3D(c,"CREEP Issen.mp3")
call SaveAgentHandle(Hash,h,0,CreateUnit(p,0x6E303249,x,y,a))
call SaveAgentHandle(Hash,h,1,CreateUnit(p,0x6E303248,x,y,a))
call SaveReal(Hash,h,2,a*bj_DEGTORAD)
call SaveReal(Hash,h,3,offset)
call SaveReal(Hash,h,4,range)
call SaveAgentHandle(Hash,h,5,c)
call SaveAgentHandle(Hash,h,6,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__126)
set p=null
set t=null
set c=null
endfunction
function cj_anonym__127 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local group g=LoadGroupHandle(Hash,h,1)
local player p=LoadPlayerHandle(Hash,h,2)
local real radius=LoadReal(Hash,h,3)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1
local real y1
local rect r
local unit tg
if GetInventoryIndexOfItemTypeBJ(c,SHODAI_HOKAGE_NO_KUBIKAZARI_ID)>0 then
if GetWidgetLife(c)>.405 then
set r=Rect(x-radius/2.,y-radius/2.,x+radius/2.,y+radius/2.)
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitAlly(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if GetUnitAbilityLevel(tg,0x41304E30)==0 then
call UnitAddAbility(tg,0x41304E30)
endif
else
if GetUnitAbilityLevel(tg,0x41304E30)>0 then
call UnitRemoveAbility(tg,0x41304E30)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call RemoveRect(r)
endif
else
call DestroyGroup(g)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set r=null
set tg=null
set g=null
set c=null
set t=null
endfunction
function ItemsPassive__ShodaiHokageNoKubikazariCast takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real radius=600.
local real period=1.
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,CreateGroup())
call SaveAgentHandle(Hash,h,2,GetOwningPlayer(c))
call SaveReal(Hash,h,3,radius)
call TimerStart(t,period,true,function cj_anonym__127)
set t=null
endfunction
function ItemsPassive__KuchiyoseScrollPlayerAnswer takes nothing returns nothing
local dialog dia=GetClickedDialog()
local integer hd=GetHandleId(dia)
local player p=LoadPlayerHandle(Hash,hd,0)
local button but1=LoadButtonHandle(Hash,hd,1)
local button but2=LoadButtonHandle(Hash,hd,2)
local button but3=LoadButtonHandle(Hash,hd,3)
local button butClicked=GetClickedButton()
local integer id=GetPlayerId(p)
local trigger trig=GetTriggeringTrigger()
if butClicked==but1 then
set ItemsActiveInstantly_KSType[id]=1
call DisplayTimedTextToPlayer(p,0.,0.,5.,"Вы заключили контракт с |cFFFFCC00ЧЕРЕПАХОЙ|r.")
elseif butClicked==but2 then
set ItemsActiveInstantly_KSType[id]=2
call DisplayTimedTextToPlayer(p,0.,0.,5.,"Вы заключили контракт с |cFFFFCC00ЯСТРЕБОМ|r.")
elseif butClicked==but3 then
set ItemsActiveInstantly_KSType[id]=3
call DisplayTimedTextToPlayer(p,0.,0.,5.,"Вы заключили контракт с |cFFFFCC00ДРАКОНОМ|r.")
endif
call FlushChildHashtable(Hash,hd)
call DialogClear(dia)
call DialogDestroy(dia)
call DestroyTrigger(trig)
set but1=null
set but2=null
set but3=null
set butClicked=null
set trig=null
set dia=null
set p=null
endfunction
function ItemsPassive__KuchiyoseScrollChoice takes unit c returns nothing
local player p=GetOwningPlayer(c)
local integer id=GetPlayerId(p)
local integer hd
local dialog dia
local trigger trig
if GetPlayerController(p)==MAP_CONTROL_USER then
if ItemsActiveInstantly_KSType[id]==0 then
set dia=DialogCreate()
set hd=GetHandleId(dia)
call DialogSetMessage(dia,"С КАКИМ ЖИВОТНЫМ ВЫ|nХОТИТЕ ЗАКЛЮЧИТЬ КОНТРАКТ?")
call SavePlayerHandle(Hash,hd,0,p)
call SaveButtonHandle(Hash,hd,1,DialogAddButton(dia,"ЧЕРЕПАХА",0))
call SaveButtonHandle(Hash,hd,2,DialogAddButton(dia,"ЯСТРЕБ",1))
call SaveButtonHandle(Hash,hd,3,DialogAddButton(dia,"ДРАКОН",2))
set trig=CreateTrigger()
call TriggerRegisterDialogEvent(trig,dia)
call TriggerAddAction(trig,function ItemsPassive__KuchiyoseScrollPlayerAnswer)
call DialogDisplay(p,dia,true)
else
if ItemsActiveInstantly_KSType[id]==1 then
call DisplayTimedTextToPlayer(p,0.,0.,5.,"У Вас заключен контракт с |cFFFFCC00ЧЕРЕПАХОЙ|r.")
elseif ItemsActiveInstantly_KSType[id]==2 then
call DisplayTimedTextToPlayer(p,0.,0.,5.,"У Вас заключен контракт с |cFFFFCC00ЯСТРЕБОМ|r.")
elseif ItemsActiveInstantly_KSType[id]==3 then
call DisplayTimedTextToPlayer(p,0.,0.,5.,"У Вас заключен контракт с |cFFFFCC00ДРАКОНОМ|r.")
endif
endif
else
set hd=GetRandomInt(1,3)
if hd==1 then
set ItemsActiveInstantly_KSType[id]=1
elseif hd==2 then
set ItemsActiveInstantly_KSType[id]=2
elseif hd==3 then
set ItemsActiveInstantly_KSType[id]=3
endif
endif
set trig=null
set dia=null
set p=null
endfunction
function ItemsPassive__GetItemConditions takes nothing returns boolean
local unit c=GetTriggerUnit()
local item art=GetManipulatedItem()
local integer i=GetItemTypeId(art)
local boolean log=false
if IsUnitHero(GetTriggerUnit())and i==KUCHIYOSE_SCROLL_ID or i==SHODAI_HOKAGE_NO_KUBIKAZARI_ID then
set log=true
endif
set art=null
set c=null
return log
endfunction
function ItemsPassive__GetItemActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local item art=GetManipulatedItem()
local integer i=GetItemTypeId(art)
if i==KUCHIYOSE_SCROLL_ID then
call ItemsPassive__KuchiyoseScrollChoice(c)
elseif i==SHODAI_HOKAGE_NO_KUBIKAZARI_ID then
call ItemsPassive__ShodaiHokageNoKubikazariCast(c)
endif
set art=null
set c=null
endfunction
function ItemsPassive__Init takes nothing returns nothing
local integer i=0
local trigger getitem=CreateTrigger()
local trigger attackANBUTanto=CreateTrigger()
local trigger attackSamuraiKatana=CreateTrigger()
local trigger attackKurosava=CreateTrigger()
local trigger attackHiramekarei=CreateTrigger()
local trigger attackKabutowari=CreateTrigger()
local trigger attackBashosen=CreateTrigger()
local trigger attackBloodstone=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(getitem,Player(i),EVENT_PLAYER_UNIT_PICKUP_ITEM,null)
call TriggerRegisterPlayerUnitEvent(attackANBUTanto,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attackSamuraiKatana,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attackKurosava,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attackHiramekarei,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attackKabutowari,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attackBashosen,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attackBloodstone,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41304E30,false)
exitwhen i>11
set i=i+1
endloop
call TriggerAddCondition(getitem,Condition(function ItemsPassive__GetItemConditions))
call TriggerAddAction(getitem,function ItemsPassive__GetItemActions)
call TriggerAddCondition(attackANBUTanto,Condition(function ItemsPassive__AttackANBUTantoConditions))
call TriggerAddAction(attackANBUTanto,function ItemsPassive__AttackANBUTantoActions)
call TriggerAddCondition(attackSamuraiKatana,Condition(function ItemsPassive__AttackSamuraiKatanaConditions))
call TriggerAddAction(attackSamuraiKatana,function ItemsPassive__AttackSamuraiKatanaActions)
call TriggerAddCondition(attackKurosava,Condition(function ItemsPassive__AttackKurosavaConditions))
call TriggerAddAction(attackKurosava,function ItemsPassive__AttackKurosavaActions)
call TriggerAddCondition(attackHiramekarei,Condition(function ItemsPassive__AttackHiramekareiConditions))
call TriggerAddAction(attackHiramekarei,function ItemsPassive__AttackHiramekareiActions)
call TriggerAddCondition(attackKabutowari,Condition(function ItemsPassive__AttackKabutowariConditions))
call TriggerAddAction(attackKabutowari,function ItemsPassive__AttackKabutowariActions)
call TriggerAddCondition(attackBashosen,Condition(function ItemsPassive__AttackBashosenConditions))
call TriggerAddAction(attackBashosen,function ItemsPassive__AttackBashosenActions)
call TriggerAddCondition(attackBloodstone,Condition(function ItemsPassive__AttackBloodstoneConditions))
call TriggerAddAction(attackBloodstone,function ItemsPassive__AttackBloodstoneActions)
call TriggerAddCondition(ItemsPassive__getdmgANBUTanto,Condition(function ItemsPassive__GetDamageANBUTantoConditions))
call TriggerAddAction(ItemsPassive__getdmgANBUTanto,function ItemsPassive__GetDamageANBUTantoActions)
call TriggerAddCondition(ItemsPassive__getdmgKurosava,Condition(function ItemsPassive__GetDamageKurosavaConditions))
call TriggerAddAction(ItemsPassive__getdmgKurosava,function ItemsPassive__GetDamageKurosavaActions)
call TriggerAddCondition(ItemsPassive__getdmgHiramekarei,Condition(function ItemsPassive__GetDamageHiramekareiConditions))
call TriggerAddAction(ItemsPassive__getdmgHiramekarei,function ItemsPassive__GetDamageHiramekareiActions)
call TriggerAddCondition(ItemsPassive__getdmgKabutowari,Condition(function ItemsPassive__GetDamageKabutowariConditions))
call TriggerAddAction(ItemsPassive__getdmgKabutowari,function ItemsPassive__GetDamageKabutowariActions)
call TriggerAddCondition(ItemsPassive__getdmgBashosen,Condition(function ItemsPassive__GetDamageBashosenConditions))
call TriggerAddAction(ItemsPassive__getdmgBashosen,function ItemsPassive__GetDamageBashosenActions)
call TriggerAddCondition(ItemsPassive__getdmgBloodstone,Condition(function ItemsPassive__GetDamageBloodstoneConditions))
call TriggerAddAction(ItemsPassive__getdmgBloodstone,function ItemsPassive__GetDamageBloodstoneActions)
set attackSamuraiKatana=null
set attackKurosava=null
set attackHiramekarei=null
set attackKabutowari=null
set attackBloodstone=null
set attackBashosen=null
set getitem=null
set attackANBUTanto=null
endfunction
function ItemsDropActions takes nothing returns nothing
call RemoveItem(GetManipulatedItem())
endfunction
function ItemsPickUpConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and not IsUnitIllusion(GetTriggerUnit())
endfunction
function ItemsPickUpGiveCharge takes unit u,item new returns nothing
local integer il=0
local integer c=0
local integer max=50
local item si
loop
exitwhen il>6
set si=UnitItemInSlot(u,il)
if GetItemTypeId(new)==GetItemTypeId(si)and GetItemCharges(si)+GetItemCharges(new)<=max and si!=new then
set c=GetItemCharges(si)+GetItemCharges(new)
call SetItemCharges(si,c)
call RemoveItem(new)
set il=7
endif
if il<7 then
set il=il+1
endif
endloop
set si=null
endfunction
function GetItemTypeIdentity takes integer id1,integer id2 returns boolean
local boolean log=false
if id1==id2 then
set log=true
else
if id1==KONOHA_JACKET_ID_1 then
if id2==KONOHA_JACKET_ID_2 or id2==KONOHA_JACKET_ID_3 or id2==KONOHA_JACKET_ID_4 or id2==KONOHA_JACKET_ID_5 then
set log=true
endif
elseif id2==KONOHA_JACKET_ID_1 then
if id1==KONOHA_JACKET_ID_2 or id1==KONOHA_JACKET_ID_3 or id1==KONOHA_JACKET_ID_4 or id1==KONOHA_JACKET_ID_5 then
set log=true
endif
elseif id1==NUKENIN_GLOVES_ID_1 then
if id2==NUKENIN_GLOVES_ID_2 or id2==NUKENIN_GLOVES_ID_3 or id2==NUKENIN_GLOVES_ID_4 or id2==NUKENIN_GLOVES_ID_5 then
set log=true
endif
elseif id2==NUKENIN_GLOVES_ID_1 then
if id1==NUKENIN_GLOVES_ID_2 or id1==NUKENIN_GLOVES_ID_3 or id1==NUKENIN_GLOVES_ID_4 or id1==NUKENIN_GLOVES_ID_5 then
set log=true
endif
elseif id1==WAIST_POUCH_ID_1 then
if id2==WAIST_POUCH_ID_2 or id2==WAIST_POUCH_ID_3 or id2==WAIST_POUCH_ID_4 or id2==WAIST_POUCH_ID_5 then
set log=true
endif
elseif id2==WAIST_POUCH_ID_1 then
if id1==WAIST_POUCH_ID_2 or id1==WAIST_POUCH_ID_3 or id1==WAIST_POUCH_ID_4 or id1==WAIST_POUCH_ID_5 then
set log=true
endif
elseif id1==HITAIATE_ID_1 then
if id2==HITAIATE_ID_2 or id2==HITAIATE_ID_3 or id2==HITAIATE_ID_4 or id2==HITAIATE_ID_5 then
set log=true
endif
elseif id2==HITAIATE_ID_1 then
if id1==HITAIATE_ID_2 or id1==HITAIATE_ID_3 or id1==HITAIATE_ID_4 or id1==HITAIATE_ID_5 then
set log=true
endif
elseif id1==ROBBER_MACE_ID_1 then
if id2==ROBBER_MACE_ID_2 or id2==ROBBER_MACE_ID_3 or id2==ROBBER_MACE_ID_4 or id2==ROBBER_MACE_ID_5 then
set log=true
endif
elseif id2==ROBBER_MACE_ID_1 then
if id1==ROBBER_MACE_ID_2 or id1==ROBBER_MACE_ID_3 or id1==ROBBER_MACE_ID_4 or id1==ROBBER_MACE_ID_5 then
set log=true
endif
elseif id1==SAMURAI_CETTO_ID_1 then
if id2==SAMURAI_CETTO_ID_2 or id2==SAMURAI_CETTO_ID_3 or id2==SAMURAI_CETTO_ID_4 or id2==SAMURAI_CETTO_ID_5 then
set log=true
endif
elseif id2==SAMURAI_CETTO_ID_1 then
if id1==SAMURAI_CETTO_ID_2 or id1==SAMURAI_CETTO_ID_3 or id1==SAMURAI_CETTO_ID_4 or id1==SAMURAI_CETTO_ID_5 then
set log=true
endif
elseif id1==YUKIGAKURE_GHOST_ID_1 then
if id2==YUKIGAKURE_GHOST_ID_2 or id2==YUKIGAKURE_GHOST_ID_3 or id2==YUKIGAKURE_GHOST_ID_4 or id2==YUKIGAKURE_GHOST_ID_5 then
set log=true
endif
elseif id2==YUKIGAKURE_GHOST_ID_1 then
if id1==YUKIGAKURE_GHOST_ID_2 or id1==YUKIGAKURE_GHOST_ID_3 or id1==YUKIGAKURE_GHOST_ID_4 or id1==YUKIGAKURE_GHOST_ID_5 then
set log=true
endif
elseif id1==BATTLE_CLAW_ID_1 then
if id2==BATTLE_CLAW_ID_2 or id2==BATTLE_CLAW_ID_3 or id2==BATTLE_CLAW_ID_4 or id2==BATTLE_CLAW_ID_5 then
set log=true
endif
elseif id2==BATTLE_CLAW_ID_1 then
if id1==BATTLE_CLAW_ID_2 or id1==BATTLE_CLAW_ID_3 or id1==BATTLE_CLAW_ID_4 or id1==BATTLE_CLAW_ID_5 then
set log=true
endif
endif
endif
return log
endfunction
function ItemsPickUpActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local player p=GetOwningPlayer(u)
local item art=GetManipulatedItem()
local integer id=GetItemTypeId(art)
local integer idp=GetPlayerId(p)
local integer current=0
local boolean log=false
if IsItemRuins(id)then
call DestroyEffect(LoadEffectHandle(Hash,GetHandleId(art),0))
call FlushChildHashtable(Hash,GetHandleId(art))
call RemoveItem(art)
elseif IsItemBijuChakra(id)then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,GetPlayerNameColored(p)+" подбирает "+BossItemName+"!")
elseif IsItemQuest(id)then
if id==CHAKRA_NO_MI_ID then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p)+" подбирает |cFFFFCC00Плод Чакры|r!")
set QuestItemEff_1=AddSpecialEffectTarget("Item Chakra no Mi.mdx",u,"origin")
elseif id==MADARA_GUNBAI_ID then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p)+" подбирает |cFFFFCC00Гунбай Мадары|r!")
set QuestItemEff_2=AddSpecialEffectTarget("Item Madara Gunbai.mdx",u,"hand left")
elseif id==RYUJIN_ID then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p)+" подбирает |cFFFFCC00Рьюджин|r!")
set QuestItemEff_3=AddSpecialEffectTarget("Item Ryujin.mdx",u,"hand right")
endif
else
if IsItemCharged(id)then
call ItemsPickUpGiveCharge(u,art)
else
call UnitRemoveItem(u,art)
call SetItemPosition(art,udg_Player_StartX[idp],udg_Player_StartY[idp])
loop
if GetItemTypeIdentity(GetItemTypeId(UnitItemInSlot(u,current)),id)then
call DisplayTextToPlayer(p,0.,0.,"Вы не можете носить с собой 2 предмета типа: |cFFFFCC00"+GetItemName(art)+"|r")
set log=true
endif
if current==5 and not log then
call DisableTrigger(GetTriggeringTrigger())
call UnitAddItem(u,art)
call EnableTrigger(GetTriggeringTrigger())
endif
set current=current+1
exitwhen current>5 or log
endloop
endif
endif
set art=null
set p=null
set u=null
endfunction
function ItemsQuestDropConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and not IsUnitIllusion(GetTriggerUnit())
endfunction
function ItemsQuestDropActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local player p=GetOwningPlayer(u)
local item art=GetManipulatedItem()
local integer id=GetItemTypeId(art)
if IsItemQuest(id)then
if id==CHAKRA_NO_MI_ID then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p)+" теряет |cFFFFCC00Плод Чакры|r!")
call DestroyEffect(QuestItemEff_1)
elseif id==MADARA_GUNBAI_ID then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p)+" теряет |cFFFFCC00Гунбай Мадары|r!")
call DestroyEffect(QuestItemEff_2)
elseif id==RYUJIN_ID then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p)+" теряет |cFFFFCC00Рьюджин|r!")
call DestroyEffect(QuestItemEff_3)
endif
endif
set art=null
set u=null
endfunction
function InitTrig_ItemsPickUp takes nothing returns nothing
local trigger trig=CreateTrigger()
local trigger drop=CreateTrigger()
local trigger quest_drop=CreateTrigger()
local integer i=0
loop
call TriggerRegisterPlayerUnitEvent(trig,Player(i),EVENT_PLAYER_UNIT_PICKUP_ITEM,null)
if i==5 or i==11 then
call TriggerRegisterPlayerUnitEvent(drop,Player(i),EVENT_PLAYER_UNIT_DROP_ITEM,null)
endif
call TriggerRegisterPlayerUnitEvent(quest_drop,Player(i),EVENT_PLAYER_UNIT_DROP_ITEM,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(trig,Condition(function ItemsPickUpConditions))
call TriggerAddAction(trig,function ItemsPickUpActions)
call TriggerAddCondition(quest_drop,Condition(function ItemsQuestDropConditions))
call TriggerAddAction(quest_drop,function ItemsQuestDropActions)
call TriggerAddAction(drop,function ItemsDropActions)
set trig=null
set drop=null
set quest_drop=null
endfunction
function ItemsSellNetWorthActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local player p=GetOwningPlayer(c)
local integer id=GetPlayerId(p)
set gamestat_NW_New[id]=gamestat_NW_New[id]-GetFullPriceItem(GetSoldItem())
set p=null
set c=null
endfunction
function InitTrig_ItemsSellNetWorth takes nothing returns nothing
local integer i=0
local trigger trig=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(trig,Player(i),EVENT_PLAYER_UNIT_PAWN_ITEM,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(trig,function ItemsSellNetWorthActions)
set trig=null
endfunction
function Assists_Reg_Conditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())
endfunction
function Assists_Reg_Actions takes nothing returns nothing
local unit c=GetTriggerUnit()
if not IsUnitInGroup(c,grAssistersReg)then
call GroupAddUnit(grAssistersReg,c)
call TriggerRegisterUnitEvent(gg_trg_AddToAssisters,c,EVENT_UNIT_DAMAGED)
endif
set c=null
endfunction
function InitTrig_Assists_Reg takes nothing returns nothing
set gg_trg_Assists_Reg=CreateTrigger()
call DisableTrigger(gg_trg_Assists_Reg)
call TriggerRegisterEnterRectSimple(gg_trg_Assists_Reg,GetPlayableMapRect())
call TriggerAddCondition(gg_trg_Assists_Reg,Condition(function Assists_Reg_Conditions))
call TriggerAddAction(gg_trg_Assists_Reg,function Assists_Reg_Actions)
endfunction
function AddToAssisters_Conditions takes nothing returns boolean
return GetEventDamage()>0.and IsUnitHero(GetEventDamageSource())
endfunction
function AddToAssisters_Timer takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
set PlayerKillerAfterCreeps=null
call ForceRemovePlayer(GetAssisters(LoadPlayerHandle(Hash,h,1)),LoadPlayerHandle(Hash,h,0))
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set t=null
endfunction
function AddToAssistersStart takes force f,player pc,player pt returns nothing
local timer t=CreateTimer()
call ForceAddPlayer(f,pc)
set PlayerKillerAfterCreeps=pc
call SaveAgentHandle(Hash,GetHandleId(t),0,pc)
call SaveAgentHandle(Hash,GetHandleId(t),1,pt)
call TimerStart(t,15.,false,function AddToAssisters_Timer)
set t=null
endfunction
function AddToAssisters_Actions takes nothing returns nothing
local player pc=GetOwningPlayer(GetEventDamageSource())
local player pt=GetOwningPlayer(GetTriggerUnit())
local force f=GetAssisters(pt)
if not IsPlayerInForce(pc,f)then
call AddToAssistersStart(f,pc,pt)
endif
set f=null
endfunction
function InitTrig_AddToAssisters takes nothing returns nothing
set gg_trg_AddToAssisters=CreateTrigger()
call DisableTrigger(gg_trg_AddToAssisters)
call TriggerAddCondition(gg_trg_AddToAssisters,Condition(function AddToAssisters_Conditions))
call TriggerAddAction(gg_trg_AddToAssisters,function AddToAssisters_Actions)
endfunction
function Damage_System_Text_Registr_Conditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())
endfunction
function Damage_System_Text_Registr_Actions takes nothing returns nothing
call TriggerRegisterUnitEvent(gg_trg_Damage_System_Text_Show,GetTriggerUnit(),EVENT_UNIT_DAMAGED)
endfunction
function InitTrig_Damage_System_Text_Registr takes nothing returns nothing
set gg_trg_Damage_System_Text_Registr=CreateTrigger()
call TriggerRegisterEnterRectSimple(gg_trg_Damage_System_Text_Registr,GetPlayableMapRect())
call TriggerAddCondition(gg_trg_Damage_System_Text_Registr,Condition(function Damage_System_Text_Registr_Conditions))
call TriggerAddAction(gg_trg_Damage_System_Text_Registr,function Damage_System_Text_Registr_Actions)
endfunction
function Damage_System_Text_Show_Conditions takes nothing returns boolean
return GetEventDamage()>1.
endfunction
function GetDamageSystemTextShowColor takes player p,texttag text returns texttag
local integer red
local integer green
local integer blue
if p==Player(0)then
set red=255
set green=3
set blue=3
elseif p==Player(1)then
set red=0
set green=66
set blue=255
elseif p==Player(2)then
set red=28
set green=230
set blue=185
elseif p==Player(3)then
set red=84
set green=0
set blue=129
elseif p==Player(4)then
set red=255
set green=252
set blue=1
elseif p==Player(6)then
set red=32
set green=192
set blue=0
elseif p==Player(7)then
set red=229
set green=91
set blue=176
elseif p==Player(8)then
set red=149
set green=150
set blue=151
elseif p==Player(9)then
set red=126
set green=191
set blue=241
elseif p==Player(10)then
set red=16
set green=98
set blue=70
else
set red=131
set green=131
set blue=54
endif
call SetTextTagColor(text,red,green,blue,0)
return text
endfunction
function DestroyDST takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call DestroyTextTag(LoadTextTagHandle(Hash,h,0))
call ForceClear(LoadForceHandle(Hash,h,1))
call DestroyForce(LoadForceHandle(Hash,h,1))
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function Damage_System_Text_Show_Actions takes nothing returns nothing
local timer t=CreateTimer()
local player p1=GetOwningPlayer(GetTriggerUnit())
local player p2=GetOwningPlayer(GetEventDamageSource())
local force f=CreateForce()
local texttag text=CreateTextTag()
local real dmg=GetEventDamage()
if QuestPlayer!=null then
if p1==QuestPlayer and QuestNumber==2 then
set QuestValue=QuestValue+R2I(dmg)
if QuestValue>=10000 then
call QuestExecute()
endif
elseif p2==QuestPlayer and QuestNumber==3 then
set QuestValue=QuestValue+R2I(dmg)
if QuestValue>=30000 then
call QuestExecute()
endif
endif
call LeaderboardSetItemValue(QuestProgressBoard,LeaderboardGetPlayerIndex(QuestProgressBoard,Player(0)),QuestValue)
endif
if dmg<1.then
call SetTextTagText(text,R2S(dmg),.0235)
else
call SetTextTagText(text,I2S(R2I(dmg)),.0235)
endif
call SetTextTagPosUnit(text,udg_Hero[GetPlayerId(p1)],6.5)
call GetDamageSystemTextShowColor(p1,text)
call SetTextTagVelocity(text,-.05,.04)
call SetTextTagPermanent(text,false)
call SetTextTagLifespan(text,2.5)
call SetTextTagFadepoint(text,0.)
call SetTextTagVisibility(text,false)
call ForceAddPlayer(f,p1)
call ForceAddPlayer(f,p2)
if IsPlayerInForce(GetLocalPlayer(),f)and not IsUnitInvisible(udg_Hero[GetPlayerId(p1)],p2)then
call SetTextTagVisibility(text,true)
endif
call SaveTextTagHandle(Hash,GetHandleId(t),0,text)
call SaveAgentHandle(Hash,GetHandleId(t),1,f)
call TimerStart(t,2.5,false,function DestroyDST)
set f=null
set p1=null
set p2=null
set text=null
set t=null
endfunction
function InitTrig_Damage_System_Text_Show takes nothing returns nothing
set gg_trg_Damage_System_Text_Show=CreateTrigger()
call TriggerAddCondition(gg_trg_Damage_System_Text_Show,Condition(function Damage_System_Text_Show_Conditions))
call TriggerAddAction(gg_trg_Damage_System_Text_Show,function Damage_System_Text_Show_Actions)
endfunction
function DenayConditions takes nothing returns boolean
return IsUnitAlly(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))
endfunction
function DenayActions takes nothing returns nothing
local unit attacker=GetAttacker()
local unit target=GetTriggerUnit()
local real needHP
local boolean log=false
if IsUnitCreep(target)then
set needHP=.5
if GetWidgetLife(target)/GetUnitState(target,UNIT_STATE_MAX_LIFE)>needHP then
set log=true
endif
elseif IsUnitHero(target)then
set needHP=.25
if GetWidgetLife(target)/GetUnitState(target,UNIT_STATE_MAX_LIFE)>needHP then
set log=true
endif
elseif IsUnitBarracks(target)then
set needHP=.1
if GetWidgetLife(target)/GetUnitState(target,UNIT_STATE_MAX_LIFE)>needHP then
set log=true
endif
elseif IsUnitTurels(target)then
set needHP=.1
if GetWidgetLife(target)/GetUnitState(target,UNIT_STATE_MAX_LIFE)>needHP then
set log=true
endif
elseif IsUnitOutpost(target)then
set needHP=.1
if GetWidgetLife(target)/GetUnitState(target,UNIT_STATE_MAX_LIFE)>needHP then
set log=true
endif
endif
if log then
call IssueImmediateOrder(attacker,"stop")
endif
set attacker=null
set target=null
endfunction
function InitTrig_Denay takes nothing returns nothing
set gg_trg_Denay=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Denay,EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddCondition(gg_trg_Denay,Condition(function DenayConditions))
call TriggerAddAction(gg_trg_Denay,function DenayActions)
endfunction
function BushInvisibility__BushLeaveConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and GetUnitAbilityLevel(GetTriggerUnit(),0x42303338)>0
endfunction
function BushInvisibility__BushLeaveActions takes nothing returns nothing
local unit bush=LoadUnitHandle(Hash,GetHandleId(GetTriggeringTrigger()),0)
call UnitRemoveAbility(GetTriggerUnit(),0x42303338)
call FlushChildHashtable(Hash,GetHandleId(bush))
set bush=null
endfunction
function BushInvisibility__BushEnterConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and GetUnitAbilityLevel(GetTriggerUnit(),0x42303338)==0
endfunction
function BushInvisibility__BushEnterActions takes nothing returns nothing
local unit bush=LoadUnitHandle(Hash,GetHandleId(GetTriggeringTrigger()),0)
if not LoadBoolean(Hash,GetHandleId(bush),0)then
set bj_lastCreatedUnit=CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),0x6E303042,GetWidgetX(bush),GetWidgetY(bush),0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call UnitAddAbility(bj_lastCreatedUnit,0x41304244)
call IssueTargetOrder(bj_lastCreatedUnit,"invisibility",GetTriggerUnit())
call SaveBoolean(Hash,GetHandleId(bush),0,true)
endif
set bush=null
endfunction
function BushInvisibility_Init takes nothing returns nothing
local integer i=0
local trigger enter
local trigger leave
local rect r
local group g=CreateGroup()
local unit tg
local real radius=100.
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitBush(tg)then
call SetUnitPathing(tg,false)
set enter=CreateTrigger()
set leave=CreateTrigger()
set r=Rect(GetWidgetX(tg)-radius,GetWidgetY(tg)-radius,GetWidgetX(tg)+radius,GetWidgetY(tg)+radius)
call TriggerRegisterEnterRectSimple(enter,r)
call TriggerAddCondition(enter,Condition(function BushInvisibility__BushEnterConditions))
call TriggerAddAction(enter,function BushInvisibility__BushEnterActions)
call SaveAgentHandle(Hash,GetHandleId(enter),0,tg)
call TriggerRegisterLeaveRectSimple(leave,r)
call TriggerAddCondition(leave,Condition(function BushInvisibility__BushLeaveConditions))
call TriggerAddAction(leave,function BushInvisibility__BushLeaveActions)
call SaveAgentHandle(Hash,GetHandleId(leave),0,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set r=null
set enter=null
set leave=null
set tg=null
set g=null
endfunction
function SunagakureEnterConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and GetWidgetLife(GetTriggerUnit())>.405 and not IsUnitIllusion(GetTriggerUnit())
endfunction
function SunagakureEnterActions takes nothing returns nothing
call GakureEnter(GetTriggerUnit(),gg_rct_Sunagakure,1)
endfunction
function InitTrig_SunagakureCapture takes nothing returns nothing
local trigger trig1=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Sunagakure)
call TriggerAddCondition(trig1,Condition(function SunagakureEnterConditions))
call TriggerAddAction(trig1,function SunagakureEnterActions)
set trig1=null
endfunction
function IwagakureEnterConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and GetWidgetLife(GetTriggerUnit())>.405 and not IsUnitIllusion(GetTriggerUnit())
endfunction
function IwagakureEnterActions takes nothing returns nothing
call GakureEnter(GetTriggerUnit(),gg_rct_Iwagakure,2)
endfunction
function InitTrig_IwagakureCapture takes nothing returns nothing
local trigger trig1=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Iwagakure)
call TriggerAddCondition(trig1,Condition(function IwagakureEnterConditions))
call TriggerAddAction(trig1,function IwagakureEnterActions)
set trig1=null
endfunction
function KirigakureEnterConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and GetWidgetLife(GetTriggerUnit())>.405 and not IsUnitIllusion(GetTriggerUnit())
endfunction
function KirigakureEnterActions takes nothing returns nothing
call GakureEnter(GetTriggerUnit(),gg_rct_Kirigakure,3)
endfunction
function InitTrig_KirigakureCapture takes nothing returns nothing
local trigger trig1=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Kirigakure)
call TriggerAddCondition(trig1,Condition(function KirigakureEnterConditions))
call TriggerAddAction(trig1,function KirigakureEnterActions)
set trig1=null
endfunction
function KumogakureEnterConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and GetWidgetLife(GetTriggerUnit())>.405 and not IsUnitIllusion(GetTriggerUnit())
endfunction
function KumogakureEnterActions takes nothing returns nothing
call GakureEnter(GetTriggerUnit(),gg_rct_Kumogakure,4)
endfunction
function InitTrig_KumogakureCapture takes nothing returns nothing
local trigger trig1=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig1,gg_rct_Kumogakure)
call TriggerAddCondition(trig1,Condition(function KumogakureEnterConditions))
call TriggerAddAction(trig1,function KumogakureEnterActions)
set trig1=null
endfunction
function BijuSpells__AttackGetStrikeTime takes unit u returns real
local integer id=GetUnitTypeId(u)
local real strikeTime=0.
if id==0x68303032 then
set strikeTime=.75
elseif id==0x68303044 then
set strikeTime=1.
elseif id==0x68303232 then
set strikeTime=1.
elseif id==0x68303233 then
set strikeTime=.5
elseif id==0x68303235 then
set strikeTime=.5
elseif id==0x68303236 then
set strikeTime=1.
elseif id==0x68303244 then
set strikeTime=.4
elseif id==0x68303246 then
set strikeTime=.5
elseif id==0x68303247 then
set strikeTime=1.
elseif id==morph_rawcode[6]then
set strikeTime=.434
elseif id==morph_rawcode[5]then
set strikeTime=1.
endif
return strikeTime
endfunction
function BijuSpells__AttackGetAddDamage takes unit u returns real
local integer id=GetUnitTypeId(u)
local real addDmg=0.
if id==0x68303032 then
set addDmg=.1
elseif id==0x68303044 then
set addDmg=.15
elseif id==0x68303232 then
set addDmg=.2
elseif id==0x68303233 then
set addDmg=.25
elseif id==0x68303235 then
set addDmg=.3
elseif id==0x68303236 then
set addDmg=.35
elseif id==0x68303244 then
set addDmg=.4
elseif id==0x68303246 then
set addDmg=.45
elseif id==0x68303247 or id==morph_rawcode[5]or id==morph_rawcode[6]then
set addDmg=.5
endif
return addDmg
endfunction
function BijuSpells__AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not LoadBoolean(Hash,GetHandleId(GetAttacker()),1)and IsUnitBiju(GetAttacker())
endfunction
function cj_anonym__128 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,0)
local real x=LoadReal(Hash,h,1)
local real y=LoadReal(Hash,h,2)
local real hpMax
local real addDmg=BijuSpells__AttackGetAddDamage(d)
local real dmg
local real radius=400.
local real randomSize=GetRandomReal(1.6,2.25)
local player p=GetOwningPlayer(d)
local integer hd=GetHandleId(d)
local unit tg
if GetWidgetLife(d)>.405 then
if not IsUnitDisabled(d)then
if SpecialEffectsShow then
call TerrainDeformRipple(x,y,radius,60.,500,1,250.,4.,.5,false)
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,randomSize,"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,randomSize,"IceSparks.mdx",8.)
endif
endif
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,p)then
set hpMax=GetUnitState(tg,UNIT_STATE_MAX_LIFE)
if not IsUnitBig(tg)then
set dmg=hpMax*addDmg
else
set dmg=(hpMax*addDmg)/4.
endif
call UnitDamageTarget(d,tg,GetTaijutsuDamage(dmg,d,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
endif
call SaveBoolean(Hash,hd,1,false)
endif
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set p=null
set d=null
set tg=null
endfunction
function BijuSpells__AttackActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit d=GetAttacker()
local unit tu=GetTriggerUnit()
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real strikeTime=BijuSpells__AttackGetStrikeTime(d)
local integer hd=GetHandleId(d)
call SaveBoolean(Hash,hd,1,true)
call SaveAgentHandle(Hash,h,0,d)
call SaveReal(Hash,h,1,x)
call SaveReal(Hash,h,2,y)
call TimerStart(t,strikeTime,false,function cj_anonym__128)
set d=null
set tu=null
set t=null
endfunction
function cj_anonym__129 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(Hash,h,0)
local unit d=LoadUnitHandle(Hash,h,1)
local integer amount=LoadInteger(Hash,h,2)
local real offset=LoadReal(Hash,h,3)
local real period=LoadReal(Hash,h,4)
local real castTime=LoadReal(Hash,h,5)
local real animationTime=LoadReal(Hash,h,6)
local real sizePlus=LoadReal(Hash,h,7)
local real sizeCur=LoadReal(Hash,h,8)
local real heightStep=LoadReal(Hash,h,9)
local real heightCur=LoadReal(Hash,h,10)
local real dmgStep=LoadReal(Hash,h,11)
local real dmgCur=LoadReal(Hash,h,12)
local real radiusPlus=LoadReal(Hash,h,13)
local real radiusCur=LoadReal(Hash,h,14)
local real size=sizeCur+sizePlus
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
call SetUnitFlyHeight(d,heightCur,0.)
if GetUnitCurrentOrder(c)==OrderId("carrionswarm")and castTime>0.then
call SetUnitScale(d,size,size,size)
call SaveReal(Hash,h,5,castTime-period)
call SaveReal(Hash,h,8,sizeCur+sizePlus)
call SaveReal(Hash,h,10,heightCur+(heightStep/2.))
call SaveReal(Hash,h,12,dmgCur+dmgStep)
call SaveReal(Hash,h,14,radiusCur+radiusPlus)
if GetUnitTypeId(c)==morph_rawcode[6]then
if Naruto_kuramaModeChakra>0 then
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-R2I(150.*period)
call ExecuteFunc("Naruto_BijudamaChangeText")
if Naruto_kuramaModeChakra<=0 then
call IssueImmediateOrder(c,"stop")
endif
elseif Naruto_bijuModeChakra>0 then
call SetUnitState(Naruto_c,UNIT_STATE_MANA,GetUnitState(Naruto_c,UNIT_STATE_MANA)-R2I(150.*period))
set Naruto_bijuModeChakra=R2I(GetUnitState(Naruto_c,UNIT_STATE_MANA))
call ExecuteFunc("Naruto_RikudoBijudamaChangeText")
if Naruto_bijuModeChakra<=0 then
call IssueImmediateOrder(c,"stop")
endif
endif
endif
else
call IssueImmediateOrder(c,"stop")
if animationTime>0.then
if not IsUnitPaused(c)then
call SetUnitTimeScale(c,1.)
call PauseUnit(c,true)
endif
call SaveReal(Hash,h,6,animationTime-period)
call SaveReal(Hash,h,10,heightCur-heightStep)
else
if IsUnitPaused(c)then
call PauseUnit(c,false)
endif
if amount>0 then
if not LoadBoolean(Hash,h,15)and GetUnitTypeId(c)==morph_rawcode[6]then
call Sound("Naruto Bijudama Cast Over.mp3")
call SaveBoolean(Hash,h,15,true)
endif
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SaveInteger(Hash,h,2,amount-1)
else
call BijudamaAct(c,d,dmgCur,radiusCur)
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
endif
endif
set c=null
set d=null
set t=null
endfunction
function BijuSpells__BijudamaCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player p=GetOwningPlayer(c)
local integer id=GetUnitTypeId(c)
local real offsetStart=200.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real x2=x+offsetStart*Cos(a*bj_DEGTORAD)
local real y2=y+offsetStart*Sin(a*bj_DEGTORAD)
local real speed=1250.
local real period=.025
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real castTime=3.
local real sizePlus=period
local real sizeCur=1.
local real animationTime=.4
local real animationSpeed=1.
local real heightStep=3.125
local real heightCur=200.
local real dmgCur=0.
local real dmgPlus=period*360.
local real radiusCur=100.
local real radiusPlus=period*100.
local integer amount=R2I(distance/offset)
if id==0x68303032 then
set animationSpeed=.5
elseif id==morph_rawcode[5]then
call SetUnitAnimation(c,"Spell one")
elseif id==morph_rawcode[6]then
call SetUnitAnimation(c,"Spell one")
call Sound("Naruto Bijudama Cast Start.mp3")
endif
call SetUnitTimeScale(c,animationSpeed)
call SaveAgentHandle(Hash,h,0,c)
call SaveAgentHandle(Hash,h,1,CreateUnit(p,0x6E303133,x2,y2,a))
call SaveInteger(Hash,h,2,amount)
call SaveReal(Hash,h,3,offset)
call SaveReal(Hash,h,4,period)
call SaveReal(Hash,h,5,castTime)
call SaveReal(Hash,h,6,animationTime)
call SaveReal(Hash,h,7,sizePlus)
call SaveReal(Hash,h,8,sizeCur)
call SaveReal(Hash,h,9,heightStep)
call SaveReal(Hash,h,10,heightCur)
call SaveReal(Hash,h,11,dmgPlus)
call SaveReal(Hash,h,12,dmgCur)
call SaveReal(Hash,h,13,radiusPlus)
call SaveReal(Hash,h,14,radiusCur)
call SaveBoolean(Hash,h,15,false)
call TimerStart(t,period,true,function cj_anonym__129)
set p=null
set t=null
endfunction
function BijuSpells__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==0x41304556
endfunction
function BijuSpells__SpellsActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local real x1=GetSpellTargetX()
local real y1=GetSpellTargetY()
local integer i=GetSpellAbilityId()
if i==0x41304556 then
call BijuSpells__BijudamaCast(c,x1,y1)
endif
set c=null
endfunction
function BijuSpells__Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
exitwhen i>11
set i=i+1
endloop
call TriggerAddCondition(spells,Condition(function BijuSpells__SpellsConditions))
call TriggerAddAction(spells,function BijuSpells__SpellsActions)
call TriggerAddCondition(attack,Condition(function BijuSpells__AttackConditions))
call TriggerAddAction(attack,function BijuSpells__AttackActions)
set attack=null
set spells=null
endfunction
function Glyph__FortificationAddRemove takes unit c,boolean log returns nothing
local player p=GetOwningPlayer(c)
local player whatp
local group g=CreateGroup()
local unit tg
if IsPlayerAlly(p,Player(5))then
set whatp=Player(5)
elseif IsPlayerAlly(p,Player(11))then
set whatp=Player(11)
endif
call GroupEnumUnitsOfPlayer(g,whatp,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if not IsUnitGakureBuilding(tg)and not IsUnitShopOrHelper(tg)and IsUnitType(tg,UNIT_TYPE_STRUCTURE)or IsUnitOutpost(tg)then
call SetUnitInvulnerable(tg,log)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Items\\AItb\\AItbTarget.mdl",GetWidgetX(tg),GetWidgetY(tg)))
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set whatp=null
set p=null
set g=null
set tg=null
endfunction
function cj_anonym__130 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Glyph__FortificationAddRemove(LoadUnitHandle(Hash,h,0),false)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set t=null
endfunction
function Glyph__FortificationCast takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=10.
call StartSound(gg_snd_ShrineOfAzsharaWhat1)
call Glyph__FortificationAddRemove(c,true)
call SaveAgentHandle(Hash,h,0,c)
call TimerStart(t,time,false,function cj_anonym__130)
set t=null
endfunction
function Glyph__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==0x41303738
endfunction
function Glyph__SpellsActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local integer i=GetSpellAbilityId()
if i==0x41303738 then
call Glyph__FortificationCast(c)
endif
set c=null
endfunction
function Glyph__Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Glyph__SpellsConditions))
call TriggerAddAction(spells,function Glyph__SpellsActions)
set spells=null
endfunction
function RankSystemDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and not IsUnitIllusion(GetTriggerUnit())
endfunction
function RankSystemDamageActions takes nothing returns nothing
local unit u1=GetTriggerUnit()
local unit u2=GetEventDamageSource()
local real dmg=GetEventDamage()
local player p
local integer id
if u1!=u2 then
if IsUnitHero(u1)then
set p=GetOwningPlayer(u1)
set id=GetPlayerId(p)
set rankSturdy[id]=rankSturdy[id]+dmg
endif
if IsUnitHero(u2)then
set p=GetOwningPlayer(u2)
set id=GetPlayerId(p)
set rankDamager[id]=rankDamager[id]+dmg
endif
endif
set u1=null
set u2=null
set p=null
endfunction
function InitTrig_RankSystemGetDamage takes nothing returns nothing
set gg_trg_RankSystemGetDamage=CreateTrigger()
call TriggerAddCondition(gg_trg_RankSystemGetDamage,Condition(function RankSystemDamageConditions))
call TriggerAddAction(gg_trg_RankSystemGetDamage,function RankSystemDamageActions)
endfunction
function RankSystemGetClickConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and not IsUnitIllusion(GetTriggerUnit())and GetWidgetLife(GetTriggerUnit())>.405
endfunction
function RankSystemGetClickActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(u))
set rankClicker[id]=rankClicker[id]
set rankClicker[id]=rankClicker[id]+1
set u=null
endfunction
function InitTrig_RankSystemGetClick takes nothing returns nothing
set gg_trg_RankSystemGetClick=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_RankSystemGetClick,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerRegisterAnyUnitEventBJ(gg_trg_RankSystemGetClick,EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER)
call TriggerRegisterAnyUnitEventBJ(gg_trg_RankSystemGetClick,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)
call TriggerAddCondition(gg_trg_RankSystemGetClick,Condition(function RankSystemGetClickConditions))
call TriggerAddAction(gg_trg_RankSystemGetClick,function RankSystemGetClickActions)
endfunction
function MB_Frag_Hero_Conditions takes nothing returns boolean
return not IsUnitIllusion(GetTriggerUnit())and IsUnitHeroOnly(GetTriggerUnit())or IsUnitHeroRikudoForm(GetTriggerUnit())
endfunction
function MB_Frag_Hero_Action takes nothing returns nothing
local unit c=GetTriggerUnit()
local unit k=GetKillingUnit()
local player pk=GetOwningPlayer(k)
local player pc=GetOwningPlayer(c)
local integer id=GetPlayerId(pc)
local integer i=0
local integer start=0
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real x1=GetWidgetX(k)
local real y1=GetWidgetY(k)
local boolean log=true
if GetUnitAbilityLevel(c,0x41303250)==0 then
if GetUnitAbilityLevel(c,0x41313631)>0 then
set log=false
call SasoriGetNewForm(pc,c,x,y)
elseif GetUnitTypeId(c)==0x4F303056 and GetUnitAbilityLevel(c,Hidan_JASHINKYO)>0 and Hidan_jashinPoint>0 and GetUnitAbilityLevel(c,Minato_DEATH_GOD_AFTER)==0 then
set log=false
call HidanJashinkyoRevive(x,y)
endif
if GetUnitAbilityLevel(c,Minato_DEATH_GOD_AFTER)>0 then
call UnitRemoveAbility(c,Minato_DEATH_GOD_AFTER)
endif
if log then
set start=1
if gamestat_FB==0 and IsUnitEnemy(c,pk)then
set gamestat_FB=1
endif
if GetUnitAbilityLevel(k,Hidan_JASHINKYO)>0 then
if Hidan_prey!=null and GetWidgetLife(Hidan_prey)<.405 and SquareRoot((Hidan_ritualX-x1)*(Hidan_ritualX-x1)+(Hidan_ritualY-y1)*(Hidan_ritualY-y1))<150.then
call HidanJashinkyoPlus(c,true)
else
call HidanJashinkyoPlus(c,false)
endif
endif
endif
call DestroyEffect(AddSpecialEffect("BloodySplat Missile.mdx",x,y))
endif
if k!=null then
if IsUnitEnemy(c,pk)then
call GetExpHeroes(k,c,pc)
else
if c!=k then
call Sound("Denied.wav")
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Charm\\CharmTarget.mdl",x,y))
endif
endif
endif
if start!=0 then
call MBFragHero(id,c,k,pc,pk,x,y,false)
endif
set pc=null
set pk=null
set k=null
set c=null
endfunction
function InitTrig_MB_Frag_Hero takes nothing returns nothing
local integer i=0
set gg_trg_MB_Frag_Hero=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_MB_Frag_Hero,Player(i),EVENT_PLAYER_UNIT_DEATH,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_MB_Frag_Hero,Condition(function MB_Frag_Hero_Conditions))
call TriggerAddAction(gg_trg_MB_Frag_Hero,function MB_Frag_Hero_Action)
endfunction
function MB_Frag_Barracks_Conditions takes nothing returns boolean
return IsUnitBarracks(GetTriggerUnit())
endfunction
function MB_Frag_Barracks_Action takes nothing returns nothing
local unit barrack=GetTriggerUnit()
local player pk=GetOwningPlayer(GetKillingUnit())
local integer i=0
local integer id=GetUnitTypeId(barrack)
local integer gold=0
local integer lumber=0
local boolean log=false
local real maxLife
local real value
if id==0x68303652 or id==0x68303656 then
set gold=300
set lumber=150
elseif id==0x68303241 or id==0x68303249 then
set gold=240
set lumber=120
endif
if TopLine then
if barrack==gg_unit_h02A_0014 then
set AllianceSupportTopDestroy=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Казарма поддержки "+nameteamOne+" на верхней линии разрушена, прочность |cFFFFCC00Штаба|r снижена на |cFFFFCC0015 %|r")
elseif barrack==gg_unit_h06R_0049 then
set AllianceForwardTopDestroy=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Казарма авангарда "+nameteamOne+" на верхней линии разрушена, прочность |cFFFFCC00Штаба|r снижена на |cFFFFCC0015 %|r")
elseif barrack==gg_unit_h02I_0113 then
set AkatuskiSupportTopDestroy=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Древо поддержки "+nameteamTwo+" на верхней линии разрушено, прочность |cFFFFCC00Божественного Древа|r снижена на |cFFFFCC0015 %|r")
elseif barrack==gg_unit_h06V_0110 then
set AkatuskiForwardTopDestroy=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Древо авангарда "+nameteamTwo+" на верхней линии разрушено, прочность |cFFFFCC00Божественного Древа|r снижена на |cFFFFCC0015 %|r")
endif
set log=true
endif
if BotLine then
if barrack==gg_unit_h02A_0039 then
set AllianceSupportBotDestroy=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Казарма поддержки "+nameteamOne+" на нижней линии разрушена, прочность |cFFFFCC00Штаба|r снижена на |cFFFFCC0015 %|r")
elseif barrack==gg_unit_h06R_0013 then
set AllianceForwardBotDestroy=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Казарма авангарда "+nameteamOne+" на нижней линии разрушена, прочность |cFFFFCC00Штаба|r снижена на |cFFFFCC0015 %|r")
elseif barrack==gg_unit_h02I_0111 then
set AkatuskiSupportBotDestroy=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Древо поддержки "+nameteamTwo+" на нижней линии разрушено, прочность |cFFFFCC00Божественного Древа|r снижена на |cFFFFCC0015 %|r")
elseif barrack==gg_unit_h06V_0108 then
set AkatuskiForwardBotDestroy=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Древо авангарда "+nameteamTwo+" на нижней линии разрушено, прочность |cFFFFCC00Божественного Древа|r снижена на |cFFFFCC0015 %|r")
endif
set log=true
endif
if IsUnitAlly(barrack,Player(5))then
set maxLife=GetUnitState(gg_unit_h005_0045,UNIT_STATE_MAX_LIFE)
set value=GetWidgetLife(gg_unit_h005_0045)-maxLife*.15
if GetWidgetLife(gg_unit_h005_0045)>value then
call SetWidgetLife(gg_unit_h005_0045,GetWidgetLife(gg_unit_h005_0045)-maxLife*.15)
else
call SetWidgetLife(gg_unit_h005_0045,maxLife*.1)
endif
elseif IsUnitAlly(barrack,Player(11))then
set maxLife=GetUnitState(gg_unit_h004_0068,UNIT_STATE_MAX_LIFE)
set value=GetWidgetLife(gg_unit_h004_0068)-maxLife*.15
if GetWidgetLife(gg_unit_h004_0068)>value then
call SetWidgetLife(gg_unit_h004_0068,GetWidgetLife(gg_unit_h004_0068)-maxLife*.15)
else
call SetWidgetLife(gg_unit_h004_0068,maxLife*.1)
endif
endif
if log then
if GetOwningPlayer(barrack)==Player(5)then
set i=6
loop
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and Player(i)!=pk and not udg_VM_Log[i]then
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD)+gold)
endif
set i=i+1
exitwhen i==11
endloop
if IsUnitEnemy(barrack,pk)then
call LumberPlus(GetKillingUnit(),lumber)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,nameteamTwo+" получают по |cFF20C000"+I2S(lumber)+" дерева!")
endif
elseif GetOwningPlayer(barrack)==Player(11)then
set i=0
loop
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and Player(i)!=pk and not udg_VM_Log[i]then
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD)+gold)
endif
set i=i+1
exitwhen i==5
endloop
if IsUnitEnemy(barrack,pk)then
call LumberPlus(GetKillingUnit(),lumber)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,nameteamOne+" получают по |cFF20C000"+I2S(lumber)+" дерева!")
endif
endif
call RemoveUnit(barrack)
endif
set pk=null
set barrack=null
endfunction
function InitTrig_MB_Frag_Barracks takes nothing returns nothing
local integer i=0
set gg_trg_MB_Frag_Barracks=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_MB_Frag_Barracks,Player(i),EVENT_PLAYER_UNIT_DEATH,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_MB_Frag_Barracks,Condition(function MB_Frag_Barracks_Conditions))
call TriggerAddAction(gg_trg_MB_Frag_Barracks,function MB_Frag_Barracks_Action)
endfunction
function MB_Frag_Outpost_Conditions takes nothing returns boolean
return IsUnitOutpost(GetTriggerUnit())
endfunction
function MB_Frag_Outpost_Action takes nothing returns nothing
local unit u=GetTriggerUnit()
local unit k=GetKillingUnit()
local player pk=GetOwningPlayer(k)
local integer hu=GetHandleId(u)
local integer i=0
local integer id=GetUnitTypeId(u)
local integer gold=0
local integer whatType=0
local rect r=LoadRectHandle(Hash,hu,0)
if r==gg_rct_Alliance_Top_O1 then
set AllianceOutpostCurrent[2]=AllianceOutpostCurrent[2]-1
set whatType=AllianceOutpostCurrent[2]
if IsUnitCreepForward(u)then
set AllianceOutpostForwardCurrent[2]=AllianceOutpostForwardCurrent[2]-1
elseif IsUnitCreepSupport(u)then
set AllianceOutpostMageCurrent[2]=AllianceOutpostMageCurrent[2]-1
endif
if whatType==0 then
set AllianceOutpostOwner[2]="neitural"
endif
elseif r==gg_rct_Alliance_Top_O2 then
set AllianceOutpostCurrent[1]=AllianceOutpostCurrent[1]-1
set whatType=AllianceOutpostCurrent[1]
if IsUnitCreepForward(u)then
set AllianceOutpostForwardCurrent[1]=AllianceOutpostForwardCurrent[1]-1
elseif IsUnitCreepSupport(u)then
set AllianceOutpostMageCurrent[1]=AllianceOutpostMageCurrent[1]-1
endif
if whatType==0 then
set AllianceOutpostOwner[1]="neitural"
endif
elseif r==gg_rct_Alliance_Bot_O1 then
set AllianceOutpostCurrent[4]=AllianceOutpostCurrent[4]-1
set whatType=AllianceOutpostCurrent[4]
if IsUnitCreepForward(u)then
set AllianceOutpostForwardCurrent[4]=AllianceOutpostForwardCurrent[4]-1
elseif IsUnitCreepSupport(u)then
set AllianceOutpostMageCurrent[4]=AllianceOutpostMageCurrent[4]-1
endif
if whatType==0 then
set AllianceOutpostOwner[4]="neitural"
endif
elseif r==gg_rct_Alliance_Bot_O2 then
set AllianceOutpostCurrent[3]=AllianceOutpostCurrent[3]-1
set whatType=AllianceOutpostCurrent[3]
if IsUnitCreepForward(u)then
set AllianceOutpostForwardCurrent[3]=AllianceOutpostForwardCurrent[3]-1
elseif IsUnitCreepSupport(u)then
set AllianceOutpostMageCurrent[3]=AllianceOutpostMageCurrent[3]-1
endif
if whatType==0 then
set AllianceOutpostOwner[3]="neitural"
endif
elseif r==gg_rct_Akatsuki_Top_O1 then
set AkatsukiOutpostCurrent[2]=AkatsukiOutpostCurrent[2]-1
set whatType=AkatsukiOutpostCurrent[2]
if IsUnitCreepForward(u)then
set AkatsukiOutpostForwardCurrent[2]=AkatsukiOutpostForwardCurrent[2]-1
elseif IsUnitCreepSupport(u)then
set AkatsukiOutpostMageCurrent[2]=AkatsukiOutpostMageCurrent[2]-1
endif
if whatType==0 then
set AkatsukiOutpostOwner[2]="neitural"
endif
elseif r==gg_rct_Akatsuki_Top_O2 then
set AkatsukiOutpostCurrent[1]=AkatsukiOutpostCurrent[1]-1
set whatType=AkatsukiOutpostCurrent[1]
if IsUnitCreepForward(u)then
set AkatsukiOutpostForwardCurrent[1]=AkatsukiOutpostForwardCurrent[1]-1
elseif IsUnitCreepSupport(u)then
set AkatsukiOutpostMageCurrent[1]=AkatsukiOutpostMageCurrent[1]-1
endif
if whatType==0 then
set AkatsukiOutpostOwner[1]="neitural"
endif
elseif r==gg_rct_Akatsuki_Bot_O1 then
set AkatsukiOutpostCurrent[4]=AkatsukiOutpostCurrent[4]-1
set whatType=AkatsukiOutpostCurrent[4]
if IsUnitCreepForward(u)then
set AkatsukiOutpostForwardCurrent[4]=AkatsukiOutpostForwardCurrent[4]-1
elseif IsUnitCreepSupport(u)then
set AkatsukiOutpostMageCurrent[4]=AkatsukiOutpostMageCurrent[4]-1
endif
if whatType==0 then
set AkatsukiOutpostOwner[4]="neitural"
endif
elseif r==gg_rct_Akatsuki_Bot_O2 then
set AkatsukiOutpostCurrent[3]=AkatsukiOutpostCurrent[3]-1
set whatType=AkatsukiOutpostCurrent[3]
if IsUnitCreepForward(u)then
set AkatsukiOutpostForwardCurrent[3]=AkatsukiOutpostForwardCurrent[3]-1
elseif IsUnitCreepSupport(u)then
set AkatsukiOutpostMageCurrent[3]=AkatsukiOutpostMageCurrent[3]-1
endif
if whatType==0 then
set AkatsukiOutpostOwner[3]="neitural"
endif
endif
if ImprovementAlliance<10 or ImprovementAkatsuki<10 then
call GetExpHeroes(k,u,GetOwningPlayer(u))
endif
if whatType==0 then
if IsUnitHero(k)then
if GetUnitAbilityLevel(u,0x41304F37)==1 then
if IsUnitEnemy(u,pk)then
set gold=200
elseif IsUnitAlly(u,pk)then
set gold=100
endif
elseif GetUnitAbilityLevel(u,0x41304F37)==2 then
if IsUnitEnemy(u,pk)then
set gold=400
elseif IsUnitAlly(u,pk)then
set gold=200
endif
endif
else
if GetUnitAbilityLevel(u,0x41304F37)==1 then
if IsUnitEnemy(u,pk)then
set gold=100
elseif IsUnitAlly(u,pk)then
set gold=50
endif
elseif GetUnitAbilityLevel(u,0x41304F37)==2 then
if IsUnitEnemy(u,pk)then
set gold=200
elseif IsUnitAlly(u,pk)then
set gold=100
endif
endif
endif
if GetOwningPlayer(u)==Player(5)then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,7.,"Аванпост "+nameteamOne+" уничтожен, герои "+nameteamTwo+" получают |cFFFFCC00"+I2S(gold)+"|r рьё!")
set i=6
loop
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and Player(i)!=pk and not udg_VM_Log[i]then
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD)+gold)
endif
set i=i+1
exitwhen i==10
endloop
elseif GetOwningPlayer(u)==Player(11)then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,7.,"Аванпост "+nameteamTwo+" уничтожен, герои "+nameteamOne+" получают |cFFFFCC00"+I2S(gold)+"|r рьё!")
set i=0
loop
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and Player(i)!=pk and not udg_VM_Log[i]then
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD)+gold)
endif
set i=i+1
exitwhen i==4
endloop
endif
endif
call DestroyEffect(LoadEffectHandle(Hash,hu,2))
call FlushChildHashtable(Hash,hu)
set r=null
set u=null
set pk=null
set k=null
endfunction
function InitTrig_MB_Frag_Outpost takes nothing returns nothing
local integer i=0
set gg_trg_MB_Frag_Outpost=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_MB_Frag_Outpost,Player(i),EVENT_PLAYER_UNIT_DEATH,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_MB_Frag_Outpost,Condition(function MB_Frag_Outpost_Conditions))
call TriggerAddAction(gg_trg_MB_Frag_Outpost,function MB_Frag_Outpost_Action)
endfunction
function MB_Frag_Turels_Conditions takes nothing returns boolean
return IsUnitTurels(GetTriggerUnit())
endfunction
function MB_Frag_Turels_Action takes nothing returns nothing
local unit turel=GetTriggerUnit()
local player pk=GetOwningPlayer(GetKillingUnit())
local integer i=0
local integer id=GetUnitTypeId(turel)
local integer gold=0
local integer lumber=100
local string add_lumber=""
if IsUnitEnemy(turel,pk)then
set gold=500
set add_lumber=" А также по |cFF20C000"+I2S(lumber)+"|r дерева!"
call LumberPlus(GetKillingUnit(),lumber)
elseif IsUnitAlly(turel,pk)then
set gold=250
endif
if GetOwningPlayer(turel)==Player(5)then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,12.,"Турель "+nameteamOne+" разрушена, герои "+nameteamTwo+" получают |cFFFFCC00"+I2S(gold)+"|r рьё!"+add_lumber)
set i=6
loop
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and Player(i)!=pk and not udg_VM_Log[i]then
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD)+gold)
endif
set i=i+1
exitwhen i==11
endloop
elseif GetOwningPlayer(turel)==Player(11)then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,12.,"Турель "+nameteamTwo+" разрушена, герои "+nameteamOne+" получают |cFFFFCC00"+I2S(gold)+"|r рьё!"+add_lumber)
set i=0
loop
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and Player(i)!=pk and not udg_VM_Log[i]then
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD)+gold)
endif
set i=i+1
exitwhen i==5
endloop
endif
call RemoveUnit(turel)
set pk=null
set turel=null
endfunction
function InitTrig_MB_Frag_Turels takes nothing returns nothing
local integer i=0
set gg_trg_MB_Frag_Turels=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_MB_Frag_Turels,Player(i),EVENT_PLAYER_UNIT_DEATH,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_MB_Frag_Turels,Condition(function MB_Frag_Turels_Conditions))
call TriggerAddAction(gg_trg_MB_Frag_Turels,function MB_Frag_Turels_Action)
endfunction
function MB_Frag_Others_Conditions takes nothing returns boolean
return not IsUnitHeroOnly(GetTriggerUnit())and not IsUnitHeroRikudoForm(GetTriggerUnit())and not IsUnitOutpost(GetTriggerUnit())and not IsUnitBarracks(GetTriggerUnit())and not IsUnitIllusion(GetTriggerUnit())
endfunction
function BijuGetReward takes real x,real y,unit c,unit k returns nothing
local boolean log=LoadBoolean(Hash,GetHandleId(c),0)
local integer gold=100*BossImprovementNumber
local integer exp=200*BossImprovementNumber
local integer i
local player p
call FlushChildHashtable(Hash,GetHandleId(c))
if log then
if BossItem!=null then
call RemoveItem(BossItem)
endif
set BossItem=CreateItem(BossItemID,x,y)
if IsUnitAlly(k,Player(11))then
set i=6
loop
exitwhen i>10
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
if p!=GetOwningPlayer(k)then
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+gold)
endif
call SetHeroXP(udg_Hero[i],GetHeroXP(udg_Hero[i])+exp,true)
endif
set i=i+1
endloop
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,nameteamTwo+" побеждают "+BossName+" и каждый игрок получает |cFF0090D4"+I2S(gold)+"|r рьё и |cFFA5FD00"+I2S(exp)+"|r опыта! Скоро появится новый зверь ...")
elseif IsUnitAlly(k,Player(5))then
set i=0
loop
exitwhen i>5
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
if p!=GetOwningPlayer(k)then
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+gold)
endif
call SetHeroXP(udg_Hero[i],GetHeroXP(udg_Hero[i])+exp,true)
endif
set i=i+1
endloop
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,nameteamOne+" побеждают "+BossName+" и каждый игрок получает |cFF0090D4"+I2S(gold)+"|r рьё и |cFFA5FD00"+I2S(exp)+"|r опыта! Скоро появится новый зверь ...")
endif
set p=GetOwningPlayer(k)
set i=GetPlayerId(p)
if not JSbijuFuin[i]then
set JSbijuFuin[i]=true
set JSbijuFuinNumber[i]=BossImprovementNumber
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"\n"+GetPlayerNameColored(p)+" получает чакру "+BossName+" и возможность её запечатать!")
endif
endif
call KuchiyoseCreateDustEffect("end",c,3.,3.5)
call RemoveUnit(c)
set p=null
endfunction
function GetEdoTenseiCaster takes unit creep returns player
return LoadPlayerHandle(Hash,GetHandleId(creep),-1)
endfunction
function cj_anonym__133 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Sound("Kuchiyose Poff Destroy.mp3")
call RemoveUnit(LoadUnitHandle(Hash,h,0))
call DestroyEffect(AddSpecialEffect("Smoke.mdx",LoadReal(Hash,h,1),LoadReal(Hash,h,2)))
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set t=null
endfunction
function cj_anonym__132 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(Hash,h,0)
local unit new=LoadUnitHandle(Hash,h,1)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call PauseUnit(new,false)
call KillUnit(d)
call SaveAgentHandle(Hash,h1,0,d)
call SaveReal(Hash,h1,1,x)
call SaveReal(Hash,h1,2,y)
call TimerStart(t1,2.4,false,function cj_anonym__133)
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set new=null
set d=null
set t=null
endfunction
function cj_anonym__131 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit d=LoadUnitHandle(Hash,h,0)
local unit new=LoadUnitHandle(Hash,h,1)
call SetUnitAnimation(d,"Stand")
call SaveAgentHandle(Hash,h1,0,d)
call SaveAgentHandle(Hash,h1,1,new)
call TimerStart(t1,.5,false,function cj_anonym__132)
call DestroyTimer(t)
call FlushChildHashtable(Hash,h)
set new=null
set d=null
set t=null
endfunction
function StartTimerForGrob takes unit new,unit c,player p returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(new)
local real y=GetWidgetY(new)
local unit d=CreateUnit(p,0x68303531,x,y,GetUnitFacing(c))
call PauseUnit(new,true)
call SetUnitAnimation(d,"Birth")
call SaveAgentHandle(Hash,h,0,d)
call SaveAgentHandle(Hash,h,1,new)
call TimerStart(t,1.,false,function cj_anonym__131)
set d=null
set t=null
endfunction
function CreateScrollsAfterCreeps takes real x,real y returns nothing
local integer random=GetRandomInt(1,6)
local integer rawcode
if random==1 then
set rawcode=0x49303437
elseif random==2 then
set rawcode=0x49303441
elseif random==3 then
set rawcode=0x49303434
elseif random==4 then
set rawcode=0x49303436
elseif random==5 then
set rawcode=0x49303438
elseif random==6 then
set rawcode=0x49303439
endif
set bj_lastCreatedItem=CreateItem(rawcode,x,y)
call SaveAgentHandle(Hash,GetHandleId(bj_lastCreatedItem),0,AddSpecialEffect("LightCircle.mdl",x,y))
endfunction
function cj_anonym__134 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer data=LoadInteger(Hash,h,0)
local unit u=CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),NCcreepsID[data],NCcreepsX[data],NCcreepsY[data],NCcreepsF[data])
call SetUnitUserData(u,data)
call GroupAddUnit(grNeiturals,u)
call FlushChildHashtable(Hash,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function NCRespawnStart takes unit c,integer id,real x,real y returns nothing
local timer t=CreateTimer()
local integer data=GetUnitUserData(c)
if GetRandomInt(1,10)==1 then
call CreateScrollsAfterCreeps(x,y)
endif
if IsUnitInGroup(c,grNeiturals)then
call GroupRemoveUnit(grNeiturals,c)
endif
call SaveInteger(Hash,GetHandleId(t),0,data)
call TimerStart(t,NCcreepsRT[data],false,function cj_anonym__134)
set t=null
endfunction
function NagatoPainDeath takes unit c,player p,integer id returns nothing
local string color="|cFFFFCC00"
local string painName
local integer i=1
set Nagato_PainNumber=Nagato_PainNumber-1
set Nagato_PainControlNumber=Nagato_PainControlNumber-1
set Nagato_PainSelectedNumberNext=0
if id==Nagato_PAIN_ID_1 then
set painName="Чикушодо"
set Nagato_PainExist[1]=false
elseif id==Nagato_PAIN_ID_2 then
set painName="Гакидо"
set Nagato_PainExist[2]=false
elseif id==Nagato_PAIN_ID_3 then
set painName="Нингендо"
set Nagato_PainExist[3]=false
elseif id==Nagato_PAIN_ID_4 then
set painName="Шурадо"
set Nagato_PainExist[4]=false
elseif id==Nagato_PAIN_ID_5 then
set painName="Джигокудо"
set Nagato_PainExist[5]=false
elseif id==Nagato_PAIN_ID_6 then
set painName="Тендо"
set Nagato_PainExist[6]=false
endif
loop
if Nagato_JutsuActive[i]!=0 then
call SetPlayerAbilityAvailable(p,Nagato_JutsuActive[i],false)
endif
set i=i+1
exitwhen i>5
endloop
if Nagato_PainNumber==0 then
call UnitRemoveAbility(Nagato_c,Nagato_RIKUDO_CANCEL)
call NagatoPainNumberChangeText(false)
else
call NagatoPainNumberChangeText(true)
endif
call RemoveUnit(c)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,5.,"Вы потеряли Пейна! "+color+painName+"|r вышел из строя!")
endfunction
function NukeninGlovesAddRyo takes unit c,unit k,player pk returns nothing
local integer ryo=0
if GetInventoryIndexOfItemTypeBJ(k,NUKENIN_GLOVES_ID_1)>0 then
set ryo=4
elseif GetInventoryIndexOfItemTypeBJ(k,NUKENIN_GLOVES_ID_2)>0 then
set ryo=8
elseif GetInventoryIndexOfItemTypeBJ(k,NUKENIN_GLOVES_ID_3)>0 then
set ryo=12
elseif GetInventoryIndexOfItemTypeBJ(k,NUKENIN_GLOVES_ID_4)>0 then
set ryo=16
elseif GetInventoryIndexOfItemTypeBJ(k,NUKENIN_GLOVES_ID_5)>0 then
set ryo=20
endif
if ryo>0 then
if IsUnitNC(c)then
set ryo=ryo/2
endif
call SetPlayerState(pk,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(pk,PLAYER_STATE_RESOURCE_GOLD)+ryo)
call GoldSaveText(k,ryo)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Transmute\\GoldBottleMissile.mdl",GetWidgetX(k),GetWidgetY(k)))
endif
endfunction
function MB_Frag_Others_Action takes nothing returns nothing
local unit c=GetTriggerUnit()
local unit k=GetKillingUnit()
local player pc=GetOwningPlayer(c)
local player pk=GetOwningPlayer(k)
local integer ut=GetPlayerId(pc)
local integer i=GetPlayerId(pk)
local integer id=GetUnitTypeId(c)
local integer h=GetHandleId(c)
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
if k!=null then
if IsUnitEnemy(c,pk)then
if IsUnitCreep(c)or IsUnitNC(c)or IsUnitHealer(c)or IsUnitCreepSpecial(c)then
if pk==Player(0)or pk==Player(1)or pk==Player(2)or pk==Player(3)or pk==Player(6)or pk==Player(7)or pk==Player(8)or pk==Player(9)then
set gamestat_LH[i]=gamestat_LH[i]+1
call mbiVal(gamestat_mb,gamestat_Place[i],7,null,"|cFFA5FD00"+I2S(gamestat_LH[i])+"|r|cFFFCC75D/"+I2S(gamestat_LD[i])+"|r")
call NukeninGlovesAddRyo(c,k,pk)
if GetUnitAbilityLevel(k,0x41305559)>0 then
set Sasori_bodies=Sasori_bodies+1
call LeaderboardSetItemValue(Sasori_lb,LeaderboardGetPlayerIndex(Sasori_lb,Player(0)),Sasori_bodies)
endif
if QuestPlayer!=null and QuestNumber==1 then
if QuestPlayer==pk then
set QuestValue=QuestValue+1
call LeaderboardSetItemValue(QuestProgressBoard,LeaderboardGetPlayerIndex(QuestProgressBoard,Player(0)),QuestValue)
if QuestValue>=100 then
call QuestExecute()
endif
endif
endif
endif
endif
if GetUnitAbilityLevel(k,Hidan_JASHINKYO)>0 then
call HidanJashinkyoPlus(c,false)
endif
if ImprovementAlliance<10 or ImprovementAkatsuki<10 then
call GetExpHeroes(k,c,pc)
endif
else
set gamestat_LD[i]=gamestat_LD[i]+1
call mbiVal(gamestat_mb,gamestat_Place[i],7,null,"|cFFA5FD00"+I2S(gamestat_LH[i])+"|r|cFFFCC75D/"+I2S(gamestat_LD[i])+"|r")
endif
endif
if GetUnitAbilityLevel(c,ItemsActiveInstantly_EDOTENSEI_SCROLL_RESTORE_SPELL)>0 then
call UnitApplyTimedLife(CreateUnit(pc,0x6E303347,x,y,GetUnitFacing(c)),0x42544C46,.424)
call RemoveUnit(c)
endif
if IsUnitCreep(c)then
if GetUnitAbilityLevel(c,ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL)>0 and not IsUnitOwnedByPlayer(c,GetEdoTenseiCaster(c))then
set bj_lastCreatedUnit=CreateUnit(GetEdoTenseiCaster(c),id,x,y,GetUnitFacing(c))
call UnitAddAbility(bj_lastCreatedUnit,ItemsActiveInstantly_EDOTENSEI_SCROLL_RESTORE_SPELL)
call SetUnitVertexColor(bj_lastCreatedUnit,187,107,114,192)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,15.)
call StartTimerForGrob(bj_lastCreatedUnit,c,pc)
endif
if IsUnitInGroup(c,grCreeps)then
call GroupRemoveUnit(grCreeps,c)
endif
call GroupRemoveUnit(grCreepsAI,c)
call FlushChildHashtable(Hash,h)
elseif IsUnitHealer(c)then
call FlushChildHashtable(Hash,h)
elseif IsUnitCreepSpecial(c)then
call Sound("Kuchiyose Poff Destroy.mp3")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(c),GetWidgetY(c)))
call GroupRemoveUnit(grCreepsSpecialAI,c)
call GroupRemoveUnit(grCreepsSpecial,c)
call FlushChildHashtable(Hash,h)
call RemoveUnit(c)
elseif IsUnitNC(c)then
call NCRespawnStart(c,id,x,y)
elseif IsUnitBiju(c)then
call BijuGetReward(x,y,c,k)
elseif IsUnitPain(c)then
call NagatoPainDeath(c,pc,id)
elseif id==morph_rawcode[2]then
call SasoriGetNewForm(pc,c,x,y)
elseif id==morph_rawcode[3]then
call MBFragHero(ut,c,k,pc,pk,x,y,false)
elseif id==morph_rawcode[4]then
call UnitRemoveAbility(c,Naruto_KURAMA_MODO_CANCEL)
elseif id==0x4F303143 then
set Mu_bunretsuLog=false
call RemoveUnit(c)
elseif id==0x4F303053 then
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",x,y))
call RemoveUnit(c)
elseif id==Madara_RINBO_ID then
call Sound("Madara Rinbo Hengoku Over.mp3")
call RemoveUnit(c)
elseif id==0x6830314F or id==0x6830314E then
set Zetsu_UltKiller=k
elseif id==0x68303238 then
if IsUnitInGroup(c,Shikamaru_KibakufudaGroup)then
set Shikamaru_KibakufudaNumberCur=Shikamaru_KibakufudaNumberCur-1
call DisplayTimedTextToPlayer(pc,0.,0.,4.,"Осталось взрывных печатей: |cFFFFCC00"+I2S(Shikamaru_KibakufudaNumberMax-Shikamaru_KibakufudaNumberCur)+"|r")
call GroupRemoveUnit(Shikamaru_KibakufudaGroup,c)
call RemoveUnit(c)
endif
elseif IsUnitDummyEffect(c)then
call RemoveUnit(c)
endif
set k=null
set pc=null
set pk=null
set c=null
endfunction
function InitTrig_MB_Frag_Others takes nothing returns nothing
local integer i=0
set gg_trg_MB_Frag_Others=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_MB_Frag_Others,Player(i),EVENT_PLAYER_UNIT_DEATH,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_MB_Frag_Others,Condition(function MB_Frag_Others_Conditions))
call TriggerAddAction(gg_trg_MB_Frag_Others,function MB_Frag_Others_Action)
endfunction
function EmotionsSystemConditions takes nothing returns boolean
return not udg_ShopCam[GetPlayerId(GetTriggerPlayer())]and not playerAD[GetPlayerId(GetTriggerPlayer())]
endfunction
function EmotionsSystemSelectPlayer takes nothing returns nothing
local dialog dia=GetClickedDialog()
local integer hd=GetHandleId(dia)
local player p1=LoadPlayerHandle(Hash,hd,-1)
local player p2
local button array butPlayer
local string sEmotion=LoadStr(Hash,hd,-2)
local button butPlayerClicked=GetClickedButton()
local integer id1=GetPlayerId(p1)
local integer id2
local trigger trig=GetTriggeringTrigger()
local string s=null
local string model=null
local string attach="overhead"
local string colored="|cFFFFCC00"
local real time=4.
local integer i=0
loop
set butPlayer[i]=LoadButtonHandle(Hash,hd,i)
set i=i+1
exitwhen i==11
endloop
if butPlayerClicked==butPlayer[0]then
set playerEMtarget[id1]=Player(0)
elseif butPlayerClicked==butPlayer[1]then
set playerEMtarget[id1]=Player(1)
elseif butPlayerClicked==butPlayer[2]then
set playerEMtarget[id1]=Player(2)
elseif butPlayerClicked==butPlayer[3]then
set playerEMtarget[id1]=Player(3)
elseif butPlayerClicked==butPlayer[6]then
set playerEMtarget[id1]=Player(6)
elseif butPlayerClicked==butPlayer[7]then
set playerEMtarget[id1]=Player(7)
elseif butPlayerClicked==butPlayer[8]then
set playerEMtarget[id1]=Player(8)
elseif butPlayerClicked==butPlayer[9]then
set playerEMtarget[id1]=Player(9)
endif
set p2=playerEMtarget[id1]
set id2=GetPlayerId(p2)
if sEmotion=="1"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" благодарит|r себя, потому что он классный :P"
else
set s=GetPlayerNameColored(p1)+colored+" благодарит|r "+GetPlayerNameColored(p2)
endif
set model="ShowTongue.mdx"
elseif sEmotion=="2"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" восхищается|r собой ^_^"
else
set s=GetPlayerNameColored(p1)+colored+" восхищается|r "+GetPlayerNameColored(p2)
endif
set model="Smirk.mdx"
elseif sEmotion=="3"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" гордится|r собой :)"
else
set s=GetPlayerNameColored(p1)+colored+" гордится|r "+GetPlayerNameColored(p2)
endif
set model="Happiness.mdx"
elseif sEmotion=="4"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" издевается|r над собой X)"
else
set s=GetPlayerNameColored(p1)+colored+" издевается|r над "+GetPlayerNameColored(p2)
endif
set model="TrollFaceProjectile.mdx"
elseif sEmotion=="5"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" любит|r себя :3"
else
set s=GetPlayerNameColored(p1)+colored+" любит|r "+GetPlayerNameColored(p2)
endif
set model="serdce.mdx"
elseif sEmotion=="6"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" смеётся|r над собой :D"
else
set s=GetPlayerNameColored(p1)+colored+" смеётся|r над "+GetPlayerNameColored(p2)
endif
set model="Laughing.mdx"
elseif sEmotion=="7"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" испытывает стыд|r за себя T_T"
else
set s=GetPlayerNameColored(p1)+colored+" испытвает стыд|r за "+GetPlayerNameColored(p2)
endif
set model="Crying.mdx"
elseif sEmotion=="8"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" тоскует|r :("
else
set s=GetPlayerNameColored(p1)+colored+" тоскует|r по "+GetPlayerNameColored(p2)
endif
set model="Sorrow.mdx"
elseif sEmotion=="9"then
if p1==p2 then
set s=GetPlayerNameColored(p1)+colored+" уважает|r себя ;)"
else
set s=GetPlayerNameColored(p1)+colored+" уважает|r "+GetPlayerNameColored(p2)
endif
set model="Amazement.mdx"
endif
if GetWidgetLife(udg_Hero[id2])>.405 and not IsUnitHidden(udg_Hero[id2])then
call CreateAttachedEffect(udg_Hero[id2],model,attach,time)
endif
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,s)
call FlushChildHashtable(Hash,hd)
call DialogClear(dia)
call DialogDestroy(dia)
call DestroyTrigger(trig)
set colored=null
set s=null
set sEmotion=null
set playerEM[id1]=false
set butPlayer[0]=null
set butPlayer[1]=null
set butPlayer[2]=null
set butPlayer[3]=null
set butPlayer[4]=null
set butPlayer[5]=null
set butPlayer[6]=null
set butPlayer[7]=null
set butPlayerClicked=null
set trig=null
set dia=null
set p1=null
set p2=null
endfunction
function EmotionsSystemAnswer takes nothing returns nothing
local dialog dia=GetClickedDialog()
local integer hd=GetHandleId(dia)
local player p1=LoadPlayerHandle(Hash,hd,0)
local player p2
local integer id1=GetPlayerId(p1)
local trigger trigEmotion=GetTriggeringTrigger()
local button array butEmotion
local button butEmotionClicked=GetClickedButton()
local string sEmotion=""
local trigger trigPlayer=CreateTrigger()
local string mt="ВЫБЕРИТЕ ИГРОКА"
local integer i=0
local integer numberIcon=3
set butEmotion[0]=LoadButtonHandle(Hash,hd,1)
set butEmotion[1]=LoadButtonHandle(Hash,hd,2)
set butEmotion[2]=LoadButtonHandle(Hash,hd,3)
set butEmotion[3]=LoadButtonHandle(Hash,hd,4)
set butEmotion[4]=LoadButtonHandle(Hash,hd,5)
set butEmotion[5]=LoadButtonHandle(Hash,hd,6)
set butEmotion[6]=LoadButtonHandle(Hash,hd,7)
set butEmotion[7]=LoadButtonHandle(Hash,hd,8)
set butEmotion[8]=LoadButtonHandle(Hash,hd,9)
if butEmotionClicked==butEmotion[0]then
set sEmotion="1"
elseif butEmotionClicked==butEmotion[1]then
set sEmotion="2"
elseif butEmotionClicked==butEmotion[2]then
set sEmotion="3"
elseif butEmotionClicked==butEmotion[3]then
set sEmotion="4"
elseif butEmotionClicked==butEmotion[4]then
set sEmotion="5"
elseif butEmotionClicked==butEmotion[5]then
set sEmotion="6"
elseif butEmotionClicked==butEmotion[6]then
set sEmotion="7"
elseif butEmotionClicked==butEmotion[7]then
set sEmotion="8"
elseif butEmotionClicked==butEmotion[8]then
set sEmotion="9"
endif
call DialogClear(dia)
if sEmotion!=""then
call DialogSetMessage(dia,mt)
call DialogDisplay(p1,dia,false)
call SaveStr(Hash,hd,-2,sEmotion)
call SavePlayerHandle(Hash,hd,-1,p1)
loop
set p2=Player(i)
if p2!=Player(5)and GetPlayerSlotState(p2)==PLAYER_SLOT_STATE_PLAYING then
call SaveButtonHandle(Hash,hd,i,DialogAddButton(dia,GetPlayerNameColored(p2),numberIcon))
endif
set numberIcon=numberIcon+2
set i=i+1
exitwhen i==11
endloop
call TriggerRegisterDialogEvent(trigPlayer,dia)
call TriggerAddAction(trigPlayer,function EmotionsSystemSelectPlayer)
call DialogDisplay(p1,dia,true)
else
call FlushChildHashtable(Hash,hd)
call DialogDestroy(dia)
endif
call DestroyTrigger(trigEmotion)
set sEmotion=null
set mt=null
set playerEM[id1]=false
set butEmotionClicked=null
set butEmotion[0]=null
set butEmotion[1]=null
set butEmotion[2]=null
set butEmotion[3]=null
set butEmotion[4]=null
set butEmotion[5]=null
set butEmotion[6]=null
set butEmotion[7]=null
set butEmotion[8]=null
set trigEmotion=null
set trigPlayer=null
set dia=null
set p1=null
set p2=null
endfunction
function EmotionsSystemActions takes nothing returns nothing
local player p=GetTriggerPlayer()
local integer id=GetPlayerId(p)
local dialog dia=DialogCreate()
local integer hd=GetHandleId(dia)
local trigger trig=CreateTrigger()
local string array s
set s[0]="ВЫБЕРИТЕ ЭМОЦИЮ"
set s[1]="БЛАГОДАРНОСТЬ"
set s[2]="ВОСХИЩЕНИЕ"
set s[3]="ГОРДОСТЬ"
set s[4]="ИЗДЁВКА"
set s[5]="ЛЮБОВЬ"
set s[6]="СМЕХ"
set s[7]="СТЫД"
set s[8]="ТОСКА"
set s[9]="УВАЖЕНИЕ"
set s[10]="ОТМЕНА"
set playerEM[id]=true
call DialogSetMessage(dia,s[0])
call SavePlayerHandle(Hash,hd,0,p)
call SaveButtonHandle(Hash,hd,1,DialogAddButton(dia,s[1],3))
call SaveButtonHandle(Hash,hd,2,DialogAddButton(dia,s[2],5))
call SaveButtonHandle(Hash,hd,3,DialogAddButton(dia,s[3],7))
call SaveButtonHandle(Hash,hd,4,DialogAddButton(dia,s[4],9))
call SaveButtonHandle(Hash,hd,5,DialogAddButton(dia,s[5],11))
call SaveButtonHandle(Hash,hd,6,DialogAddButton(dia,s[6],13))
call SaveButtonHandle(Hash,hd,7,DialogAddButton(dia,s[7],15))
call SaveButtonHandle(Hash,hd,8,DialogAddButton(dia,s[8],17))
call SaveButtonHandle(Hash,hd,9,DialogAddButton(dia,s[9],19))
call SaveButtonHandle(Hash,hd,10,DialogAddButton(dia,s[10],21))
call TriggerRegisterDialogEvent(trig,dia)
call TriggerAddAction(trig,function EmotionsSystemAnswer)
call DialogDisplay(p,dia,true)
set trig=null
set dia=null
set p=null
endfunction
function InitTrig_EmotionsSystem takes nothing returns nothing
local integer i=0
local trigger trig=CreateTrigger()
loop
call TriggerRegisterPlayerEvent(trig,Player(i),EVENT_PLAYER_ARROW_UP_DOWN)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(trig,Condition(function EmotionsSystemConditions))
call TriggerAddAction(trig,function EmotionsSystemActions)
set trig=null
endfunction
function cj_anonym__135 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit iso_susanoo=LoadUnitHandle(HH,h,0)
local unit madara=LoadUnitHandle(HH,h,1)
local unit kyubi=LoadUnitHandle(HH,h,2)
if GetWidgetLife(kyubi)>.405 then
if not IsUnitPaused(madara)then
call PauseUnit(madara,true)
call ShowUnit(madara,false)
call SetUnitInvulnerable(madara,true)
endif
if not IsUnitPaused(kyubi)then
call PauseUnit(kyubi,true)
call ShowUnit(kyubi,false)
call SetUnitInvulnerable(kyubi,true)
endif
else
call SetUnitInvulnerable(madara,false)
call PauseUnit(madara,false)
call ShowUnit(madara,true)
call SetUnitPosition(madara,GetWidgetX(iso_susanoo),GetWidgetY(iso_susanoo))
call SetUnitFacing(madara,GetUnitFacing(iso_susanoo))
call SetUnitPosition(kyubi,GetWidgetX(iso_susanoo),GetWidgetY(iso_susanoo))
call RemoveUnit(iso_susanoo)
if GetLocalPlayer()==GetOwningPlayer(madara)then
call ClearSelection()
call SelectUnit(madara,true)
endif
set ComboMadaraKyubi=false
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set iso_susanoo=null
set madara=null
set kyubi=null
set t=null
endfunction
function Combo_StartMadaraKyubi takes unit kyubi returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
local real f=GetUnitFacing(Madara_c)
local real period=.1
local unit iso_susanoo=CreateUnit(Madara_p,morph_rawcode[5],x,y,f)
set ComboMadaraKyubi=true
call PauseUnit(Madara_c,true)
call ShowUnit(Madara_c,false)
call SetUnitInvulnerable(Madara_c,true)
call PauseUnit(kyubi,true)
call ShowUnit(kyubi,false)
call SetUnitInvulnerable(kyubi,true)
if GetLocalPlayer()==Madara_p then
call ClearSelection()
call SelectUnit(iso_susanoo,true)
endif
call SaveAgentHandle(HH,h,0,iso_susanoo)
call SaveAgentHandle(HH,h,1,Madara_c)
call SaveAgentHandle(HH,h,2,kyubi)
call TimerStart(t,period,true,function cj_anonym__135)
set t=null
set iso_susanoo=null
endfunction
function Combo_GetMadaraKyubi takes unit u1,player p1 returns unit
local unit u2=null
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,GetWidgetX(u1),GetWidgetY(u1),300.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or u2!=null
if IsUnitAlly(tg,p1)and GetWidgetLife(tg)>.405 and GetUnitTypeId(tg)==0x68303247 and tg!=Boss[BossImprovementNumber]then
set u2=tg
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
set cj_v666_unit=u2
set u2=null
return cj_v666_unit
endfunction
function cj_anonym__137 takes nothing returns nothing
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__136 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real size=LoadReal(HH,h,2)
local real sizeStep=LoadReal(HH,h,3)
local integer alpha=LoadInteger(HH,h,4)
local integer alphaStep=LoadInteger(HH,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if alpha>0 then
if alpha<125 then
call CreateEffect(x,y,size/2.,"Rasengan2.mdx",.01)
endif
call SetUnitScale(d,size,size,size)
call SetUnitVertexColor(d,255,255,255,alpha)
set d=LoadUnitHandle(HH,h,1)
call SetUnitScale(d,size/2.,size/2.,size/2.)
call SetUnitVertexColor(d,255,255,255,alpha)
call SaveReal(HH,h,2,size+sizeStep)
call SaveInteger(HH,h,4,alpha-alphaStep)
else
call RemoveUnit(d)
call RemoveUnit(LoadUnitHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Combo__NarutoSasukeTwoStart takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.05
local real size=2.4
local real sizeStep=9.*period
local real timeShake=10.
local real timeC0Eff=.8
local real radius=1800.
local real dmg=3000.
local unit tg
local group g=CreateGroup()
local integer alphaStep=5
local player p=Player(PLAYER_NEUTRAL_AGGRESSIVE)
call Sound("Shinobi Tenpechi.mp3")
call KillDestructablesStart(x,y,radius/2.)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)then
call SetWidgetLife(tg,GetWidgetLife(tg)-dmg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call DestroyEffect(AddSpecialEffect("Almagest.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Holy_Fire_Slam2.mdx",x,y))
call DestroyEffect(AddSpecialEffect("SuperBigExplosion.mdx",x,y))
call CreateEffect(x,y,3.,"NuclearExplosion.mdx",15.)
call CreateEffect(x,y,5.,"NewMassiveEX.mdx",10.)
call CreateEffect(x,y,2.,"-!EfRasen!-.mdx",2.)
call SaveAgentHandle(HH,h,0,CreateUnit(p,0x68303152,x,y,0.))
call SaveAgentHandle(HH,h,1,CreateUnit(p,0x68303154,x,y,0.))
call SaveReal(HH,h,2,size)
call SaveReal(HH,h,3,sizeStep)
call SaveInteger(HH,h,4,250)
call SaveInteger(HH,h,5,alphaStep)
call TimerStart(t,period,true,function cj_anonym__136)
call CameraSetTargetNoiseEx(32.,16.*Pow(12.,6.),true)
call CameraSetSourceNoiseEx(32.,16.*Pow(12.,6.),true)
call TimerStart(CreateTimer(),timeShake,false,function cj_anonym__137)
set g=null
set tg=null
set t=null
endfunction
function Combo_GetNarutoSasukeTwo takes unit u returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1
local real y1
local boolean log=false
if GetWidgetLife(Naruto_BijudamaRasenShuriken)>.405 and GetWidgetLife(Naruto_FutonChoOdamaRasenShuriken)>.405 then
if IsPlayerEnemy(Sasuke_p,Naruto_p)then
set x1=GetWidgetX(Naruto_BijudamaRasenShuriken)
set y1=GetWidgetY(Naruto_BijudamaRasenShuriken)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<300.then
set log=true
else
set x1=GetWidgetX(Naruto_FutonChoOdamaRasenShuriken)
set y1=GetWidgetY(Naruto_FutonChoOdamaRasenShuriken)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<300.then
set log=true
endif
endif
if log then
call KillUnit(Naruto_BijudamaRasenShuriken)
call KillUnit(Naruto_FutonChoOdamaRasenShuriken)
call KillUnit(u)
call Combo__NarutoSasukeTwoStart(x,y)
endif
endif
endif
endfunction
function cj_anonym__141 takes nothing returns nothing
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__140 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real offset=LoadReal(HH,h,0)
local real a=LoadReal(HH,h,1)
local real range=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local group grCheck=LoadGroupHandle(HH,h,4)
local real startOffset=15.
local real angleOffset=60.
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(Naruto_c)
local real y1=GetWidgetY(Naruto_c)
local real x2=x1-startOffset*Cos(a*bj_DEGTORAD)
local real y2=y1-startOffset*Sin(a*bj_DEGTORAD)
local real x3=x2+angleOffset*Cos((a-90.)*bj_DEGTORAD)
local real y3=y2+angleOffset*Sin((a-90.)*bj_DEGTORAD)
local real x4=x3+(startOffset/2.)*Cos((a+90.)*bj_DEGTORAD)
local real y4=y3+(startOffset/2.)*Sin((a+90.)*bj_DEGTORAD)
local unit tg
call KillDestructablesStart(x4,y4,250.)
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(Naruto_c)>.405 and range>offset then
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x4,y4,150.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Naruto_p)then
if not IsUnitInGroup(tg,grCheck)then
call GroupAddUnit(grCheck,tg)
call CreateEffect(GetWidgetX(tg),GetWidgetY(tg),1.5,"Wave.mdx",1.)
call CreateEffect(GetWidgetX(tg),GetWidgetY(tg),1.25,"IceNova.mdx",1.)
call UnitDamageTarget(Naruto_c,tg,GetNinjutsuDamage(dmg,Naruto_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call UnitTempSpell(tg,0x4130524E,0x42303048,4.,0,false)
endif
endif
if GetWidgetLife(tg)>.405 and GetUnitAbilityLevel(tg,0x41304330)==0 then
set bj_lastCreatedUnit=CreateUnit(Sasuke_p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313337)
call IssueTargetOrder(bj_lastCreatedUnit,"shadowstrike",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
if IsTerrainPathable(x4,y4,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x2,y2))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x2,y2))
endif
call SetUnitFacing(Sasuke_c,a)
if not IsTerrainPathable(x4,y4,PATHING_TYPE_WALKABILITY)then
call SetUnitPosition(Sasuke_c,x3,y3)
call SetUnitPosition(Naruto_c,x1+offset*Cos(a*bj_DEGTORAD),y1+offset*Sin(a*bj_DEGTORAD))
else
call SetUnitPosition(Sasuke_c,x,y)
call SetUnitPosition(Naruto_c,x1,y1)
endif
call SaveReal(HH,h,2,range-offset)
else
call DestroyEffect(LoadEffectHandle(HH,h,5))
call GroupClear(grCheck)
call DestroyGroup(grCheck)
set ComboNarutoSasukeOne=false
call CreateEffect(x4,y4,2.5,"Energy Release.mdx",2.)
call CreateEffect(x4,y4,2.5,"-!EfRasen!-2.mdx",2.)
call CameraSetTargetNoiseEx(24.,12.*Pow(10.,5.),true)
call CameraSetSourceNoiseEx(24.,12.*Pow(10.,5.),true)
call TimerStart(CreateTimer(),1.35,false,function cj_anonym__141)
call SetUnitTimeScale(Sasuke_c,1.)
call SetUnitTimeScale(Naruto_c,1.)
call PauseUnit(Sasuke_c,false)
call PauseUnit(Naruto_c,false)
call SetUnitPathing(Sasuke_c,true)
call SetUnitPathing(Naruto_c,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grCheck=null
set tg=null
set t=null
endfunction
function cj_anonym__139 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real speed=1100.
local real period=.025
local real range=1400.
local real offset=speed*period
local real angleOffset=30.
local real a=GetUnitFacing(Naruto_c)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(Naruto_c)
local real y1=GetWidgetY(Naruto_c)
local real x2=x1+angleOffset*Cos(a*bj_DEGTORAD)
local real y2=y1+angleOffset*Sin(a*bj_DEGTORAD)
call SetUnitTimeScale(Sasuke_c,0.)
call SetUnitTimeScale(Naruto_c,0.)
call CreateEffect(x2,y2,1.5,"-!EfRasen!-.mdx",2.)
call SaveReal(HH,h1,0,offset)
call SaveReal(HH,h1,1,a)
call SaveReal(HH,h1,2,range)
call SaveReal(HH,h1,3,Naruto_rasenganDamage)
call SaveAgentHandle(HH,h1,4,CreateGroup())
call SaveAgentHandle(HH,h1,5,LoadEffectHandle(HH,h,0))
call TimerStart(t1,period,true,function cj_anonym__140)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function cj_anonym__138 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1
local real startOffset=15.
local real angleOffset=60.
local real a=GetUnitFacing(Naruto_c)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(Naruto_c)
local real y1=GetWidgetY(Naruto_c)
local real x2=x1-startOffset*Cos(a*bj_DEGTORAD)
local real y2=y1-startOffset*Sin(a*bj_DEGTORAD)
local real x3=x2+angleOffset*Cos((a-90.)*bj_DEGTORAD)
local real y3=y2+angleOffset*Sin((a-90.)*bj_DEGTORAD)
if not IsUnitPaused(Sasuke_c)then
call PauseUnit(Sasuke_c,true)
endif
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(Naruto_c)>.405 and GetUnitCurrentOrder(Naruto_c)==OrderId("whirlwind")then
call SetUnitPosition(Sasuke_c,x3,y3)
call SetUnitFacing(Sasuke_c,a)
else
call DestroyEffect(LoadEffectHandle(HH,h,0))
call DestroyEffect(LoadEffectHandle(HH,h,1))
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(Naruto_c)>.405 then
call Sound("Combo Naruto Sasuke - 1,2.mp3")
set t1=CreateTimer()
call PauseUnit(Naruto_c,true)
call SetUnitAnimation(Sasuke_c,"Spell One")
call SetUnitAnimation(Naruto_c,"Spell Throw Two")
call SaveAgentHandle(HH,GetHandleId(t1),0,AddSpecialEffectTarget("HTLXW.mdx",Naruto_c,"hand right"))
call TimerStart(t1,.3,false,function cj_anonym__139)
else
call PauseUnit(Sasuke_c,false)
call SetUnitPathing(Sasuke_c,true)
call SetUnitPathing(Naruto_c,true)
set ComboNarutoSasukeOne=false
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
set t1=null
endfunction
function Combo_StartNarutoSasukeOne takes nothing returns nothing
local timer t=CreateTimer()
local real a=GetUnitFacing(Naruto_c)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(Naruto_c)
local real y1=GetWidgetY(Naruto_c)
local real startOffset=15.
local real angleOffset=60.
local real x2=x1-startOffset*Cos(a*bj_DEGTORAD)
local real y2=y1-startOffset*Sin(a*bj_DEGTORAD)
local real x3=x2+angleOffset*Cos((a-90.)*bj_DEGTORAD)
local real y3=y2+angleOffset*Sin((a-90.)*bj_DEGTORAD)
local real period=.01
set ComboNarutoSasukeOne=true
call Sound("Combo Naruto Sasuke - 1,1.mp3")
call PauseUnit(Sasuke_c,true)
call SetUnitPathing(Sasuke_c,false)
call SetUnitPathing(Naruto_c,false)
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SetUnitPosition(Sasuke_c,x3,y3)
call SetUnitAnimation(Sasuke_c,"Stand Ready")
call SetUnitFacing(Sasuke_c,a)
call SaveAgentHandle(HH,GetHandleId(t),0,AddSpecialEffectTarget("amaterasu2.mdx",Sasuke_c,"hand left"))
call SaveAgentHandle(HH,GetHandleId(t),1,AddSpecialEffectTarget("fdlxw jhxcom_2000.mdx",Naruto_c,"hand right"))
call TimerStart(t,period,true,function cj_anonym__138)
set t=null
endfunction
function Combo_GetNarutoSasukeOne takes unit u1,player p1,real x1,real y1 returns unit
local unit u2=null
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,GetWidgetX(u1),GetWidgetY(u1),150.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or u2!=null
if IsUnitAlly(tg,p1)and GetWidgetLife(tg)>.405 and GetUnitTypeId(tg)==heroes_rawcode[Naruto]and GetUnitCurrentOrder(tg)==OrderId("whirlwind")and SquareRoot((x1-GetWidgetX(tg))*(x1-GetWidgetX(tg))+(y1-GetWidgetY(tg))*(y1-GetWidgetY(tg)))<200.then
set u2=tg
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
set cj_v666_unit=u2
set u2=null
return cj_v666_unit
endfunction
function Shop_Open_Akatsuki_Conditions takes nothing returns boolean
local unit c=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(c))
local boolean log=false
if IsPlayerAlly(GetOwningPlayer(c),Player(5))and GetPlayerController(GetOwningPlayer(c))==MAP_CONTROL_USER and not JSonlog[id]and not udg_ShopCam[id]and not IsUnitIllusion(c)and IsUnitHero(c)then
set log=true
endif
set c=null
return log
endfunction
function Shop_Open_Akatsuki_Actions takes nothing returns nothing
call ShopOpen(GetTriggerUnit())
endfunction
function InitTrig_Shop_Open_Alliance takes nothing returns nothing
set gg_trg_Shop_Open_Alliance=CreateTrigger()
call TriggerRegisterEnterRectSimple(gg_trg_Shop_Open_Alliance,gg_rct_ShopOpenAlliance)
call TriggerAddCondition(gg_trg_Shop_Open_Alliance,Condition(function Shop_Open_Akatsuki_Conditions))
call TriggerAddAction(gg_trg_Shop_Open_Alliance,function Shop_Open_Akatsuki_Actions)
endfunction
function Shop_Open_Alliance_Conditions takes nothing returns boolean
local unit c=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(c))
local boolean log=false
if IsPlayerAlly(GetOwningPlayer(c),Player(11))and GetPlayerController(GetOwningPlayer(c))==MAP_CONTROL_USER and not JSonlog[id]and not udg_ShopCam[id]and not IsUnitIllusion(c)and IsUnitHero(c)then
set log=true
endif
set c=null
return log
endfunction
function Shop_Open_Alliance_Actions takes nothing returns nothing
call ShopOpen(GetTriggerUnit())
endfunction
function InitTrig_Shop_Open_Akatsuki takes nothing returns nothing
set gg_trg_Shop_Open_Akatsuki=CreateTrigger()
call TriggerRegisterEnterRectSimple(gg_trg_Shop_Open_Akatsuki,gg_rct_ShopOpenAkatsuki)
call TriggerAddCondition(gg_trg_Shop_Open_Akatsuki,Condition(function Shop_Open_Alliance_Conditions))
call TriggerAddAction(gg_trg_Shop_Open_Akatsuki,function Shop_Open_Alliance_Actions)
endfunction
function Shop_Esc_Conditions takes nothing returns boolean
return udg_ShopCam[GetPlayerId(GetTriggerPlayer())]
endfunction
function Shop_Esc_Actions takes nothing returns nothing
local player p=GetTriggerPlayer()
local integer id=GetPlayerId(p)
set udg_ShopCam[id]=false
call ShopDestroyEffects(p)
if GetLocalPlayer()==p then
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
call ResetToGameCamera(0.)
call PanCameraToTimed(GetWidgetX(shopUser[id]),GetWidgetY(shopUser[id]),0.)
call ClearSelection()
call SelectUnit(shopUser[id],true)
endif
endfunction
function InitTrig_Shop_Esc takes nothing returns nothing
local integer i=0
set gg_trg_Shop_Esc=CreateTrigger()
loop
call TriggerRegisterPlayerEvent(gg_trg_Shop_Esc,Player(i),EVENT_PLAYER_END_CINEMATIC)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_Shop_Esc,Condition(function Shop_Esc_Conditions))
call TriggerAddAction(gg_trg_Shop_Esc,function Shop_Esc_Actions)
endfunction
function Shop_Track_Actions takes nothing returns nothing
local trackable tr=GetTriggeringTrackable()
local player p=GetTrackableOwner(tr)
local real xOffset=15.
local integer id=GetPlayerId(p)
local integer items=GetTrackableRawcode(tr)
local string s=null
local string stext=null
local string sname=null
local string text=LoadStr(Hash,items,4)
local string name=LoadStr(Hash,items,5)
if udg_ShopCam[id]then
call DestroyTextTag(udg_ShopText1[id])
call DestroyTextTag(udg_ShopText2[id])
call DestroyEffect(shopEffect1[id])
call DestroyEffect(shopEffect2[id])
call DestroyEffect(shopEffect3[id])
call DestroyEffect(shopEffect4[id])
call DestroyEffect(shopEffect5[id])
call DestroyEffect(shopEffect6[id])
call DestroyEffect(shopEffect7[id])
if items==0 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00НАЧАЛЬНЫЕ ПРЕДМЕТЫ|r"
endif
elseif items==-1 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00ОСНОВНЫЕ ПРЕДМЕТЫ|r"
endif
elseif items==-2 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00ПРЕДМЕТЫ ПО СИТУАЦИИ|r"
endif
elseif items==-3 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00ПРОДАТЬ ВСЕ ПРЕДМЕТЫ В ИНВЕНТАРЕ|r"
endif
elseif items==-4 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00ВЫХОД ИЗ МАГАЗИНА (ESC)|r"
endif
elseif items==-5 or items==-6 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00РАСХОДУЕМЫЕ|r"
endif
elseif items==-7 or items==-8 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00ПОДДЕРЖКА|r"
endif
elseif items==-9 or items==-10 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00ОБМУНДИРОВАНИЕ|r"
endif
elseif items==-11 or items==-12 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00ВООРУЖЕНИЕ|r"
endif
elseif items==-13 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00АПГРЕЙД СЛОТА 1|r"
set stext="Улучшает ранг предмета в выбранном слоте"
endif
elseif items==-14 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00АПГРЕЙД СЛОТА 2|r"
set stext="Улучшает ранг предмета в выбранном слоте"
endif
elseif items==-15 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00АПГРЕЙД СЛОТА 3|r"
set stext="Улучшает ранг предмета в выбранном слоте"
endif
elseif items==-16 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00АПГРЕЙД СЛОТА 4|r"
set stext="Улучшает ранг предмета в выбранном слоте"
endif
elseif items==-17 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00АПГРЕЙД СЛОТА 5|r"
set stext="Улучшает ранг предмета в выбранном слоте"
endif
elseif items==-18 then
if GetLocalPlayer()==p then
set sname="|cFFFFFF00АПГРЕЙД СЛОТА 6|r"
set stext="Улучшает ранг предмета в выбранном слоте"
endif
else
if GetLocalPlayer()==p then
set stext=text
set sname=name
endif
endif
if sname!=null then
set udg_ShopText1[id]=CreateTextTag()
call SetTextTagText(udg_ShopText1[id],sname,.025)
call SetTextTagPos(udg_ShopText1[id],GetRectCenterX(gg_rct_ShopName)+xOffset,GetRectCenterY(gg_rct_ShopName),10.)
call SetTextTagColor(udg_ShopText1[id],255,255,255,0)
call SetTextTagVisibility(udg_ShopText1[id],false)
if GetLocalPlayer()==p then
call SetTextTagVisibility(udg_ShopText1[id],true)
set s="BTNselection.mdx"
endif
endif
if stext!=null then
set udg_ShopText2[id]=CreateTextTag()
call SetTextTagText(udg_ShopText2[id],stext,.0195)
call SetTextTagPos(udg_ShopText2[id],GetRectCenterX(gg_rct_ShopDis),GetRectCenterY(gg_rct_ShopDis),10.)
call SetTextTagColor(udg_ShopText2[id],255,255,255,0)
call SetTextTagVisibility(udg_ShopText2[id],false)
if GetLocalPlayer()==p then
call SetTextTagVisibility(udg_ShopText2[id],true)
set s="BTNselection.mdx"
endif
endif
set shopEffect7[id]=AddSpecialEffect(s,GetTrackableX(tr),GetTrackableY(tr))
endif
set p=null
set tr=null
endfunction
function InitTrig_Shop_Track takes nothing returns nothing
set gg_trg_Shop_Track=CreateTrigger()
call TriggerAddAction(gg_trg_Shop_Track,function Shop_Track_Actions)
endfunction
function ShopHelpCreateEffect takes integer id,integer art1,integer art2,integer art3,integer art4,integer art5,integer art6,integer art7,integer art8 returns nothing
local string s=null
if GetLocalPlayer()==GetOwningPlayer(shopUser[id])then
set s="BTNselection.mdx"
endif
if art1!=0 then
set shopHelpEffect1[id]=AddSpecialEffect(s,GetWidgetX(udg_ShopDes[art1]),GetWidgetY(udg_ShopDes[art1]))
endif
if art2!=0 then
set shopHelpEffect2[id]=AddSpecialEffect(s,GetWidgetX(udg_ShopDes[art2]),GetWidgetY(udg_ShopDes[art2]))
endif
if art3!=0 then
set shopHelpEffect3[id]=AddSpecialEffect(s,GetWidgetX(udg_ShopDes[art3]),GetWidgetY(udg_ShopDes[art3]))
endif
if art4!=0 then
set shopHelpEffect4[id]=AddSpecialEffect(s,GetWidgetX(udg_ShopDes[art4]),GetWidgetY(udg_ShopDes[art4]))
endif
if art5!=0 then
set shopHelpEffect5[id]=AddSpecialEffect(s,GetWidgetX(udg_ShopDes[art5]),GetWidgetY(udg_ShopDes[art5]))
endif
if art6!=0 then
set shopHelpEffect6[id]=AddSpecialEffect(s,GetWidgetX(udg_ShopDes[art6]),GetWidgetY(udg_ShopDes[art6]))
endif
if art7!=0 then
set shopHelpEffect7[id]=AddSpecialEffect(s,GetWidgetX(udg_ShopDes[art7]),GetWidgetY(udg_ShopDes[art7]))
endif
if art8!=0 then
set shopHelpEffect8[id]=AddSpecialEffect(s,GetWidgetX(udg_ShopDes[art8]),GetWidgetY(udg_ShopDes[art8]))
endif
set s=null
endfunction
function ShopHelpSituationGetItems takes integer id returns nothing
local integer art1=0
local integer art2=0
local integer art3=0
local integer art4=0
local integer art5=0
local integer art6=0
local integer art7=0
local integer art8=0
local integer i=GetUnitTypeId(udg_Hero[id])
if i==heroes_rawcode[Asuma]then
set art1=SOSHUGA
set art2=NUIBARI
set art3=FURIDO_STAFF
set art4=SHIBUKI
elseif i==heroes_rawcode[Ei]then
set art1=HIRAISHIN_BOOTS
set art2=RAITON
set art3=CHAKRA_NO_YOROI
set art4=BENIHISAGO
set art5=SHITENSHOIN
elseif i==heroes_rawcode[Gai]then
set art1=HIRAISHIN_BOOTS
set art2=NUIBARI
set art3=NUNOBOKO_NO_KEN
set art4=KABUTOWARI
elseif i==heroes_rawcode[Han]then
set art1=OMORI
set art2=SHODAI_HOKAGE_NO_KUBIKAZARI
set art3=SHITENSHOIN
set art4=NUNOBOKO_NO_KEN
elseif i==heroes_rawcode[Hanzo]then
set art1=HIRAISHIN_BOOTS
set art2=NUIBARI
set art3=KUSANAGI_NO_TSURUGI
set art4=NUNOBOKO_NO_KEN
set art5=KABUTOWARI
elseif i==heroes_rawcode[Jiraya]then
set art1=SHINIGAMI_OFFERING
set art2=HIRAISHIN_BOOTS
set art3=FURIDO_STAFF
set art4=BENIHISAGO
set art5=KOKINJO
elseif i==heroes_rawcode[Jugo]then
set art1=HIRAISHIN_BOOTS
set art2=KUSANAGI_NO_TSURUGI
set art3=SHICHISEIKEN
set art4=CHAKRA_NO_YOROI
set art5=SHIBUKI
elseif i==heroes_rawcode[Naruto]then
set art1=FUTON
set art2=HIRAISHIN_BOOTS
set art3=NUIBARI
elseif i==heroes_rawcode[Sasori]then
set art1=HIRAISHIN_BOOTS
set art2=FURIDO_STAFF
set art3=KUSANAGI_NO_TSURUGI
set art4=BENIHISAGO
set art5=SHITENSHOIN
elseif i==heroes_rawcode[Tsunade]then
set art1=RAITON
set art2=SHODAI_HOKAGE_NO_KUBIKAZARI
set art3=NUNOBOKO_NO_KEN
set art4=KOKINJO
elseif i==heroes_rawcode[Zabuza]then
set art1=HIRAISHIN_BOOTS
set art2=KABUTOWARI
set art3=KUSANAGI_NO_TSURUGI
set art4=FURIDO_STAFF
set art5=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Haku]then
set art1=HIRAISHIN_BOOTS
set art2=KABUTOWARI
set art3=NUIBARI
set art4=KUSANAGI_NO_TSURUGI
set art5=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Hidan]then
set art1=HIRAISHIN_BOOTS
set art2=SHODAI_HOKAGE_NO_KUBIKAZARI
set art3=NUNOBOKO_NO_KEN
set art4=CHAKRA_NO_YOROI
set art5=SHITENSHOIN
elseif i==heroes_rawcode[Itachi]then
set art1=KUROSAVA
set art2=SENNIN_STAFF
set art3=HIRAISHIN_BOOTS
set art4=KOKINJO
set art5=TOBIRAMA_RAIJIN
elseif i==heroes_rawcode[Kakashi]then
set art1=KUROSAVA
set art2=KABUTOWARI
set art3=HIRAISHIN_BOOTS
set art4=KUSANAGI_NO_TSURUGI
set art5=KOKINJO
elseif i==heroes_rawcode[Minato]then
set art1=SOSHUGA
set art2=HIRAISHIN_BOOTS
set art3=NUIBARI
set art4=SHICHISEIKEN
set art5=FURIDO_STAFF
set art6=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Mu]then
set art1=KIHOU_BLASTER
set art2=HIRAMEKAREI
set art3=HIRAISHIN_BOOTS
set art4=KUSANAGI_NO_TSURUGI
set art5=KOKINJO
set art6=TOBIRAMA_RAIJIN
elseif i==heroes_rawcode[Neji]then
set art1=HIRAISHIN_BOOTS
set art2=KUROSAVA
set art3=KUSANAGI_NO_TSURUGI
set art4=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Orochimaru]then
set art1=HI_NO_ISHI
set art2=HOGO_TETSU_NO_KUNI
set art4=SHODAI_HOKAGE_NO_KUBIKAZARI
set art5=SHITENSHOIN
set art5=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Sai]then
set art1=HI_NO_ISHI
set art2=AKATSUKI_ROBE
set art3=SENNIN_STAFF
set art4=KOKINJO
set art5=TOBIRAMA_RAIJIN
elseif i==heroes_rawcode[Sasuke]then
set art1=HIRAISHIN_BOOTS
set art2=KUROSAVA
set art3=KUSANAGI_NO_TSURUGI
set art4=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Suigetsu]then
set art1=HIRAISHIN_BOOTS
set art2=CHAKRA_NO_YOROI
set art3=KABUTOWARI
set art4=SHICHISEIKEN
set art5=SHODAI_HOKAGE_NO_KUBIKAZARI
elseif i==heroes_rawcode[Chiyo]then
set art1=HOSHI
set art2=KIHOU_BLASTER
set art3=FUTON
set art4=RAITON
set art5=KOKINJO
elseif i==heroes_rawcode[Danzo]then
set art1=FUTON
set art2=TENSEIGAN
set art3=CHAKRA_NO_YOROI
set art4=SHITENSHOIN
elseif i==heroes_rawcode[Darui]then
set art1=KUROSAVA
set art2=SHINIGAMI_OFFERING
set art3=HIRAISHIN_BOOTS
set art4=BENIHISAGO
set art5=KOKINJO
elseif i==heroes_rawcode[Deidara]then
set art1=SHINIGAMI_OFFERING
set art2=BENIHISAGO
set art3=KOKINJO
set art4=BASHOSEN
elseif i==heroes_rawcode[Gaara]then
set art1=AKATSUKI_ROBE
set art2=DOTON
set art3=FUTON
set art4=SHODAI_HOKAGE_NO_KUBIKAZARI
set art5=SHITENSHOIN
elseif i==heroes_rawcode[Gengetsu]then
set art1=ROSARY_MONK
set art2=SENNIN_STAFF
set art3=HOSHI
set art4=BENIHISAGO
set art5=KOKINJO
elseif i==heroes_rawcode[Hashirama]then
set art1=AKATSUKI_ROBE
set art2=SENNIN_STAFF
set art3=TENSEIGAN
elseif i==heroes_rawcode[Kabuto]then
set art1=KUROSAVA
set art2=SENNIN_STAFF
set art3=HOSHI
set art4=KIHOU_BLASTER
set art5=KOKINJO
elseif i==heroes_rawcode[Madara]then
set art1=KIHOU_BLASTER
set art2=BENIHISAGO
set art3=KOKINJO
set art4=BASHOSEN
set art5=KATON
elseif i==heroes_rawcode[Mei]then
set art1=HOSHI
set art2=KIHOU_BLASTER
set art3=TENSEIGAN
set art4=KOKINJO
elseif i==heroes_rawcode[Nagato]then
set art1=SENNIN_STAFF
set art2=AKATSUKI_ROBE
set art3=BENIHISAGO
set art4=KOKINJO
elseif i==heroes_rawcode[Obito]then
set art1=AKATSUKI_ROBE
set art2=BENIHISAGO
set art3=KATON
set art4=KOKINJO
elseif i==heroes_rawcode[Onoki]then
set art1=SENNIN_STAFF
set art2=TENSEIGAN
set art3=BENIHISAGO
set art4=KOKINJO
elseif i==heroes_rawcode[Sakura]then
set art1=SAND_WARD
set art2=CHAKRA_WARD
set art3=ROSARY_MONK
set art4=SENNIN_STAFF
set art5=KOKINJO
elseif i==heroes_rawcode[Shikamaru]then
set art1=HIRAISHIN_BOOTS
set art2=ANBU_AMMUNITION
set art3=SENNIN_STAFF
set art4=SHINIGAMI_OFFERING
elseif i==heroes_rawcode[Tobirama]then
set art1=HIRAISHIN_BOOTS
set art2=KABUTOWARI
set art3=KUSANAGI_NO_TSURUGI
set art4=TOBIRAMA_RAIJIN
elseif i==heroes_rawcode[Zetsu]then
set art1=KIHOU_BLASTER
set art2=DOTON
set art3=ANBU_AMMUNITION
set art4=SHODAI_HOKAGE_NO_KUBIKAZARI
set art5=KOKINJO
elseif i==heroes_rawcode[Yamato]then
set art1=SUITON
set art2=DOTON
set art3=SENNIN_STAFF
set art4=TENSEIGAN
set art5=BENIHISAGO
set art6=KOKINJO
endif
call ShopHelpCreateEffect(id,art1,art2,art3,art4,art5,art6,art7,art8)
endfunction
function ShopHelpMainGetItems takes integer id returns nothing
local integer art1=0
local integer art2=0
local integer art3=0
local integer i=GetUnitTypeId(udg_Hero[id])
if i==heroes_rawcode[Asuma]then
set art1=SHIBUKI
set art2=CHAKRA_NO_YOROI
set art3=HIRAISHIN_BOOTS
elseif i==heroes_rawcode[Ei]then
set art1=OMORI
elseif i==heroes_rawcode[Gai]then
set art1=OMORI
set art2=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Han]then
set art1=BENIHISAGO
elseif i==heroes_rawcode[Hanzo]then
set art1=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Jiraya]then
set art1=KIHOU_BLASTER
elseif i==heroes_rawcode[Jugo]then
set art1=NUIBARI
elseif i==heroes_rawcode[Naruto]then
set art1=FURIDO_STAFF
set art2=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Sasori]then
set art1=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Tsunade]then
set art1=TENSEIGAN
elseif i==heroes_rawcode[Zabuza]then
set art1=HIRAMEKAREI
elseif i==heroes_rawcode[Haku]then
set art1=SOSHUGA
elseif i==heroes_rawcode[Hidan]then
set art1=HOGO_TETSU_NO_KUNI
set art2=BENIHISAGO
elseif i==heroes_rawcode[Itachi]then
set art1=ANBU_AMMUNITION
elseif i==heroes_rawcode[Kakashi]then
set art1=TOBIRAMA_RAIJIN
elseif i==heroes_rawcode[Minato]then
set art1=TOBIRAMA_RAIJIN
elseif i==heroes_rawcode[Mu]then
set art1=ANBU_AMMUNITION
elseif i==heroes_rawcode[Neji]then
set art1=SOSHUGA
elseif i==heroes_rawcode[Orochimaru]then
set art1=BENIHISAGO
elseif i==heroes_rawcode[Sai]then
set art1=HOSHI
elseif i==heroes_rawcode[Sasuke]then
set art1=SOSHUGA
set art2=HIRAMEKAREI
elseif i==heroes_rawcode[Suigetsu]then
set art1=SOSHUGA
set art2=HIRAMEKAREI
elseif i==heroes_rawcode[Chiyo]then
set art1=KUCHIYOSE_SCROLL
elseif i==heroes_rawcode[Danzo]then
set art1=EIYU_NO_MIZU
set art2=HOGO_TETSU_NO_KUNI
elseif i==heroes_rawcode[Darui]then
set art1=HOSHI
elseif i==heroes_rawcode[Deidara]then
set art1=SENNIN_STAFF
set art2=KIHOU_BLASTER
elseif i==heroes_rawcode[Gaara]then
set art1=TENSEIGAN
elseif i==heroes_rawcode[Gengetsu]then
set art1=KIHOU_BLASTER
elseif i==heroes_rawcode[Hashirama]then
set art1=SUITON
set art2=DOTON
elseif i==heroes_rawcode[Kabuto]then
set art1=BENIHISAGO
set art2=SHINIGAMI_OFFERING
elseif i==heroes_rawcode[Madara]then
set art1=SHINIGAMI_OFFERING
set art2=CHAKRA_NO_YOROI
elseif i==heroes_rawcode[Mei]then
set art1=SUITON
set art2=SHINIGAMI_OFFERING
elseif i==heroes_rawcode[Nagato]then
set art1=TENSEIGAN
elseif i==heroes_rawcode[Obito]then
set art1=KIHOU_BLASTER
elseif i==heroes_rawcode[Onoki]then
set art1=DOTON
elseif i==heroes_rawcode[Sakura]then
set art1=KUCHIYOSE_SCROLL
set art2=TENSEIGAN
elseif i==heroes_rawcode[Shikamaru]then
set art1=OMORI
elseif i==heroes_rawcode[Tobirama]then
set art1=SUITON
elseif i==heroes_rawcode[Zetsu]then
set art1=TENSEIGAN
elseif i==heroes_rawcode[Yamato]then
set art1=ANBU_AMMUNITION
endif
call ShopHelpCreateEffect(id,art1,art2,art3,0,0,0,0,0)
endfunction
function ShopHelpStartingGetItems takes integer id returns nothing
local integer art1=0
local integer art2=0
local integer art3=0
local integer art4=0
local integer art5=0
local integer art6=0
local integer art7=0
local integer art8=0
local integer i=GetUnitTypeId(udg_Hero[id])
if i==heroes_rawcode[Asuma]then
set art1=RAMEN
set art2=FUMA_SHURIKEN
elseif i==heroes_rawcode[Ei]then
set art1=RAMEN
set art2=FUMA_SHURIKEN
elseif i==heroes_rawcode[Gai]then
set art1=TRAINING_SUIT
elseif i==heroes_rawcode[Han]then
set art1=RAMEN
set art2=KONOHA_JACKET
elseif i==heroes_rawcode[Hanzo]then
set art1=RAMEN
set art2=FUMA_SHURIKEN
elseif i==heroes_rawcode[Jiraya]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Jugo]then
set art1=BATORUGUROBU
set art2=NUKENIN_GLOVES
elseif i==heroes_rawcode[Naruto]then
set art1=RAMEN
set art2=FUMA_SHURIKEN
elseif i==heroes_rawcode[Sasori]then
set art1=RAMEN
set art2=WAIST_POUCH
elseif i==heroes_rawcode[Tsunade]then
set art1=SAND_WARD
set art2=CHAKRA_WARD
set art3=KUCHIYOSE_SCROLL
elseif i==heroes_rawcode[Zabuza]then
set art1=RAMEN
set art2=FUMA_SHURIKEN
elseif i==heroes_rawcode[Haku]then
set art1=SENBON
set art2=NUKENIN_GLOVES
elseif i==heroes_rawcode[Hidan]then
set art1=KONOHA_JACKET
set art2=WAIST_POUCH
elseif i==heroes_rawcode[Itachi]then
set art1=KUNAI
set art2=SHURIKEN
set art3=WAIST_POUCH
elseif i==heroes_rawcode[Kakashi]then
set art1=KUNAI
set art2=SHURIKEN
set art3=NUKENIN_GLOVES
elseif i==heroes_rawcode[Minato]then
set art1=KUNAI
set art2=SHURIKEN
set art3=SENBON
elseif i==heroes_rawcode[Mu]then
set art1=KUNAI
set art2=SHURIKEN
set art3=SENBON
elseif i==heroes_rawcode[Neji]then
set art1=BATORUGUROBU
set art2=NUKENIN_GLOVES
elseif i==heroes_rawcode[Orochimaru]then
set art1=KONOHA_JACKET
set art2=WAIST_POUCH
elseif i==heroes_rawcode[Sai]then
set art1=KUNAI
set art2=SHURIKEN
set art3=KUCHIYOSE_SCROLL
elseif i==heroes_rawcode[Sasuke]then
set art1=KUNAI
set art2=SHURIKEN
set art3=NUKENIN_GLOVES
elseif i==heroes_rawcode[Suigetsu]then
set art1=RAMEN
set art2=KONOHA_JACKET
elseif i==heroes_rawcode[Chiyo]then
set art1=KUNAI
set art2=SHURIKEN
set art3=KUCHIYOSE_SCROLL
elseif i==heroes_rawcode[Danzo]then
set art1=KUNAI
set art2=SHURIKEN
set art3=KIBAKU_KUNAI
elseif i==heroes_rawcode[Darui]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Deidara]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Gaara]then
set art1=RAMEN
set art2=KUCHIYOSE_SCROLL
elseif i==heroes_rawcode[Gengetsu]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Hashirama]then
set art1=KUCHIYOSE_SCROLL
set art2=KIBAKU_KUNAI
elseif i==heroes_rawcode[Kabuto]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Madara]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Mei]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Nagato]then
set art1=SAND_WARD
set art2=CHAKRA_WARD
set art3=KIBAKU_KUNAI
elseif i==heroes_rawcode[Obito]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Onoki]then
set art1=EIYU_NO_MIZU
elseif i==heroes_rawcode[Sakura]then
set art1=HI_NO_ISHI
elseif i==heroes_rawcode[Shikamaru]then
set art1=KIBAKU_KUNAI
set art2=WAIST_POUCH
elseif i==heroes_rawcode[Tobirama]then
set art1=KUNAI
set art2=SHURIKEN
set art3=KIBAKU_KUNAI
elseif i==heroes_rawcode[Yamato]then
set art1=KUNAI
set art2=SHURIKEN
set art3=KIBAKU_KUNAI
elseif i==heroes_rawcode[Zetsu]then
set art1=SAND_WARD
set art2=CHAKRA_WARD
set art3=KUCHIYOSE_SCROLL
endif
call ShopHelpCreateEffect(id,art1,art2,art3,art4,art5,art6,art7,art8)
endfunction
function cj_anonym__144 takes nothing returns nothing
set limitHealingWard=limitHealingWard+1
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"|cFFFFCC00Целительный вард пополнен в магазине.|r")
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__143 takes nothing returns nothing
set limitChakraWard=limitChakraWard+1
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"|cFFFFCC00Сгусток Чакры пополнен в магазине.|r")
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__142 takes nothing returns nothing
set limitSandWard=limitSandWard+1
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"|cFFFFCC00Песчаный глаз пополнен в магазине.|r")
call DestroyTimer(GetExpiredTimer())
endfunction
function GetLimitedItem takes player p,integer items returns boolean
local boolean log=false
if items==SAND_WARD_ID then
if limitSandWard>0 then
set limitSandWard=limitSandWard-1
if limitSandWard>0 then
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00В магазине осталось|r "+I2S(limitSandWard)+" |cFFFFCC00Песчаных глаза.|r")
else
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00Песчаный глаз пополнится в течение|r "+I2S(R2I(cdSandWard))+" |cFFFFCC00секунд.|r")
endif
call TimerStart(CreateTimer(),cdSandWard,false,function cj_anonym__142)
else
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00Песчаный глаз пополнится в течение|r "+I2S(R2I(cdSandWard))+" |cFFFFCC00секунд.|r")
set log=true
endif
elseif items==CHAKRA_WARD_ID then
if limitChakraWard>0 then
set limitChakraWard=limitChakraWard-1
if limitChakraWard>0 then
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00В магазине осталось|r "+I2S(limitChakraWard)+" |cFFFFCC00Сгустка Чакры.|r")
else
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00Сгусток Чакры пополнится в течение|r "+I2S(R2I(cdChakraWard))+" |cFFFFCC00секунд.|r")
endif
call TimerStart(CreateTimer(),cdChakraWard,false,function cj_anonym__143)
else
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00Сгусток Чакры пополнится в течение|r "+I2S(R2I(cdChakraWard))+" |cFFFFCC00секунд.|r")
set log=true
endif
elseif items==HEALING_WARD_ID then
if limitHealingWard>0 then
set limitHealingWard=limitHealingWard-1
if limitHealingWard>0 then
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00В магазине осталось|r "+I2S(limitHealingWard)+" |cFFFFCC00Целительных варда.|r")
else
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00Целительный вард пополнится в течение|r "+I2S(R2I(cdHealingWard))+" |cFFFFCC00секунд.|r")
endif
call TimerStart(CreateTimer(),cdHealingWard,false,function cj_anonym__144)
else
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00Целительный вард пополнится в течение|r "+I2S(R2I(cdHealingWard))+" |cFFFFCC00секунд.|r")
set log=true
endif
endif
return log
endfunction
function Shop_Hit_Actions takes nothing returns nothing
local trackable tr=GetTriggeringTrackable()
local player p=GetTrackableOwner(tr)
local integer id=GetPlayerId(p)
local integer items=GetTrackableRawcode(tr)
local integer cost=LoadInteger(Hash,items,6)
local integer playergold=GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)
local integer nocost=cost-playergold
local integer i
local integer ids
local string text=LoadStr(Hash,items,4)
local string name=LoadStr(Hash,items,5)
local string stext=null
local boolean log=false
local unit tg
local item art
if udg_ShopCam[id]then
call DestroyTextTag(udg_ShopText1[id])
call DestroyTextTag(udg_ShopText2[id])
call DestroyEffect(shopEffect1[id])
call DestroyEffect(shopEffect2[id])
call DestroyEffect(shopEffect3[id])
call DestroyEffect(shopEffect4[id])
call DestroyEffect(shopEffect5[id])
call DestroyEffect(shopEffect6[id])
call DestroyEffect(shopEffect7[id])
if items==0 then
if shopHelp2[id]or shopHelp3[id]then
set shopHelp2[id]=false
set shopHelp3[id]=false
call ShopHelpDestroyEffect(id)
endif
if not shopHelp1[id]then
set shopHelp1[id]=true
call ShopHelpStartingGetItems(id)
else
set shopHelp1[id]=false
call ShopHelpDestroyEffect(id)
endif
elseif items==-1 then
if shopHelp1[id]or shopHelp3[id]then
set shopHelp1[id]=false
set shopHelp3[id]=false
call ShopHelpDestroyEffect(id)
endif
if not shopHelp2[id]then
set shopHelp2[id]=true
call ShopHelpMainGetItems(id)
else
set shopHelp2[id]=false
call ShopHelpDestroyEffect(id)
endif
elseif items==-2 then
if shopHelp1[id]or shopHelp2[id]then
set shopHelp1[id]=false
set shopHelp2[id]=false
call ShopHelpDestroyEffect(id)
endif
if not shopHelp3[id]then
set shopHelp3[id]=true
call ShopHelpSituationGetItems(id)
else
set shopHelp3[id]=false
call ShopHelpDestroyEffect(id)
endif
elseif items==-3 then
set i=0
loop
exitwhen i>5
set art=UnitItemInSlot(shopUser[id],i)
if art!=null and not IsItemUnsold(art)then
set playergold=playergold+R2I(GetFullPriceItem(art)*.8)
call RemoveItem(art)
endif
set i=i+1
endloop
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,playergold)
elseif items==-4 then
if shopHelp1[id]or shopHelp2[id]or shopHelp3[id]then
set shopHelp1[id]=false
set shopHelp2[id]=false
set shopHelp3[id]=false
call ShopHelpDestroyEffect(id)
endif
set udg_ShopCam[id]=false
call DestroyFogModifier(udg_ShopVision[id])
call SetUnitInvulnerable(shopUser[id],false)
call SetUnitPathing(shopUser[id],true)
call ShopOpenExitChecking(p,id,GetUnitTypeId(shopUser[id]),false,true,true)
if GetLocalPlayer()==p then
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
call ResetToGameCamera(0.)
call PanCameraToTimed(GetWidgetX(shopUser[id]),GetWidgetY(shopUser[id]),0.)
call ClearSelection()
call SelectUnit(shopUser[id],true)
endif
elseif items==-5 or items==-6 or items==-7 or items==-8 or items==-9 or items==-10 or items==-11 or items==-12 then
if shopHelp1[id]or shopHelp2[id]or shopHelp3[id]then
set shopHelp1[id]=false
set shopHelp2[id]=false
set shopHelp3[id]=false
call ShopHelpDestroyEffect(id)
endif
elseif items==-13 or items==-14 or items==-15 or items==-16 or items==-17 or items==-18 then
if shopHelp1[id]or shopHelp2[id]or shopHelp3[id]then
set shopHelp1[id]=false
set shopHelp2[id]=false
set shopHelp3[id]=false
call ShopHelpDestroyEffect(id)
endif
if items==-13 then
set i=0
elseif items==-14 then
set i=1
elseif items==-15 then
set i=2
elseif items==-16 then
set i=3
elseif items==-17 then
set i=4
elseif items==-18 then
set i=5
endif
set art=UnitItemInSlot(shopUser[id],i)
set name=IsItemUpgraded(art)
if art!=null and name!=null then
set ids=GetItemTypeId(art)
if name=="Жилет Конохи"then
set cost=500
if ids==KONOHA_JACKET_ID_1 then
set ids=KONOHA_JACKET_ID_2
elseif ids==KONOHA_JACKET_ID_2 then
set ids=KONOHA_JACKET_ID_3
elseif ids==KONOHA_JACKET_ID_3 then
set ids=KONOHA_JACKET_ID_4
elseif ids==KONOHA_JACKET_ID_4 then
set ids=KONOHA_JACKET_ID_5
endif
elseif name=="Перчатки нукенина"then
set cost=500
if ids==NUKENIN_GLOVES_ID_1 then
set ids=NUKENIN_GLOVES_ID_2
elseif ids==NUKENIN_GLOVES_ID_2 then
set ids=NUKENIN_GLOVES_ID_3
elseif ids==NUKENIN_GLOVES_ID_3 then
set ids=NUKENIN_GLOVES_ID_4
elseif ids==NUKENIN_GLOVES_ID_4 then
set ids=NUKENIN_GLOVES_ID_5
endif
elseif name=="Сумка"then
set cost=500
if ids==WAIST_POUCH_ID_1 then
set ids=WAIST_POUCH_ID_2
elseif ids==WAIST_POUCH_ID_2 then
set ids=WAIST_POUCH_ID_3
elseif ids==WAIST_POUCH_ID_3 then
set ids=WAIST_POUCH_ID_4
elseif ids==WAIST_POUCH_ID_4 then
set ids=WAIST_POUCH_ID_5
endif
elseif name=="Повязка шиноби"then
set cost=500
if ids==HITAIATE_ID_1 then
set ids=HITAIATE_ID_2
elseif ids==HITAIATE_ID_2 then
set ids=HITAIATE_ID_3
elseif ids==HITAIATE_ID_3 then
set ids=HITAIATE_ID_4
elseif ids==HITAIATE_ID_4 then
set ids=HITAIATE_ID_5
endif
elseif name=="Булава грабителя"then
set cost=500
if ids==ROBBER_MACE_ID_1 then
set ids=ROBBER_MACE_ID_2
elseif ids==ROBBER_MACE_ID_2 then
set ids=ROBBER_MACE_ID_3
elseif ids==ROBBER_MACE_ID_3 then
set ids=ROBBER_MACE_ID_4
elseif ids==ROBBER_MACE_ID_4 then
set ids=ROBBER_MACE_ID_5
endif
elseif name=="Вакидзаси самурая"then
set cost=500
if ids==SAMURAI_CETTO_ID_1 then
set ids=SAMURAI_CETTO_ID_2
elseif ids==SAMURAI_CETTO_ID_2 then
set ids=SAMURAI_CETTO_ID_3
elseif ids==SAMURAI_CETTO_ID_3 then
set ids=SAMURAI_CETTO_ID_4
elseif ids==SAMURAI_CETTO_ID_4 then
set ids=SAMURAI_CETTO_ID_5
endif
elseif name=="Душа Страны снега"then
set cost=500
if ids==YUKIGAKURE_GHOST_ID_1 then
set ids=YUKIGAKURE_GHOST_ID_2
elseif ids==YUKIGAKURE_GHOST_ID_2 then
set ids=YUKIGAKURE_GHOST_ID_3
elseif ids==YUKIGAKURE_GHOST_ID_3 then
set ids=YUKIGAKURE_GHOST_ID_4
elseif ids==YUKIGAKURE_GHOST_ID_4 then
set ids=YUKIGAKURE_GHOST_ID_5
endif
elseif name=="Боевой коготь"then
set cost=500
if ids==BATTLE_CLAW_ID_1 then
set ids=BATTLE_CLAW_ID_2
elseif ids==BATTLE_CLAW_ID_2 then
set ids=BATTLE_CLAW_ID_3
elseif ids==BATTLE_CLAW_ID_3 then
set ids=BATTLE_CLAW_ID_4
elseif ids==BATTLE_CLAW_ID_4 then
set ids=BATTLE_CLAW_ID_5
endif
endif
if GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)>=cost then
call RemoveItem(art)
call UnitAddItemById(shopUser[id],ids)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Transmute\\PileofGold.mdl",GetWidgetX(shopUser[id]),GetWidgetY(shopUser[id])))
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,playergold-cost)
if GetLocalPlayer()==p then
set stext="Вы улучшили |cFFFFCC00"+name+"|r за |cFFFFFF00"+I2S(cost)+"|r рьё"
endif
else
set nocost=cost-playergold
if GetLocalPlayer()==p then
set stext="Не хватает |cFFFFFF00"+I2S(nocost)+"|r рьё"
endif
endif
else
if GetLocalPlayer()==p then
set stext="У вас нет улучшаемых предметов в этом слоте"
endif
endif
set udg_ShopText1[id]=CreateTextTag()
call SetTextTagText(udg_ShopText1[id],stext,.025)
call SetTextTagPos(udg_ShopText1[id],GetRectCenterX(gg_rct_ShopDis),GetRectCenterY(gg_rct_ShopDis),10.)
call SetTextTagColor(udg_ShopText1[id],255,255,255,0)
call SetTextTagVisibility(udg_ShopText1[id],false)
if GetLocalPlayer()==p then
call SetTextTagVisibility(udg_ShopText1[id],true)
endif
else
if GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)>=cost then
set log=true
if GetLimitedItem(p,items)then
set log=false
endif
if log then
if GetLocalPlayer()==p then
set stext="Вы купили "+name+" за |cFFFFFF00"+I2S(cost)+"|r рьё"
endif
set udg_ShopText1[id]=CreateTextTag()
call SetTextTagText(udg_ShopText1[id],stext,.025)
call SetTextTagPos(udg_ShopText1[id],GetRectCenterX(gg_rct_ShopDis),GetRectCenterY(gg_rct_ShopDis),10.)
call SetTextTagColor(udg_ShopText1[id],255,255,255,0)
call SetTextTagVisibility(udg_ShopText1[id],false)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,playergold-cost)
if UnitInventoryCount(shopUser[id])<6 then
call UnitAddItemById(shopUser[id],items)
else
if IsItemCharged(items)and GetInventoryIndexOfItemTypeBJ(shopUser[id],items)>0 then
call SetItemCharges(GetItemOfTypeFromUnitBJ(shopUser[id],items),GetItemCharges(GetItemOfTypeFromUnitBJ(shopUser[id],items))+GetItemMaxCharge(GetItemOfTypeFromUnitBJ(shopUser[id],items)))
else
call CreateItem(items,udg_Player_StartX[id],udg_Player_StartY[id])
endif
endif
endif
else
if GetLocalPlayer()==p then
set stext="Не хватает |cFFFFFF00"+I2S(nocost)+"|r рьё"
endif
set udg_ShopText1[id]=CreateTextTag()
call SetTextTagText(udg_ShopText1[id],stext,.025)
call SetTextTagPos(udg_ShopText1[id],GetRectCenterX(gg_rct_ShopDis),GetRectCenterY(gg_rct_ShopDis),10.)
call SetTextTagColor(udg_ShopText1[id],255,255,255,0)
call SetTextTagVisibility(udg_ShopText1[id],false)
endif
if GetLocalPlayer()==p then
call SetTextTagVisibility(udg_ShopText1[id],true)
endif
endif
endif
set art=null
set tg=null
set p=null
set tr=null
endfunction
function InitTrig_Shop_Hit takes nothing returns nothing
set gg_trg_Shop_Hit=CreateTrigger()
call TriggerAddAction(gg_trg_Shop_Hit,function Shop_Hit_Actions)
endfunction
function HeroPickShowEmpty takes integer id returns nothing
call mbiVal(udg_LMB[id],0,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp","|cFF959697Биография|r")
call mbiVal(udg_LMB[id],2,0,null,"")
call mbiVal(udg_LMB[id],5,0,"ReplaceableTextures\\CommandButtons\\BTNPriestAdept.blp","|cFF0090D4Класс:|r")
call mbiVal(udg_LMB[id],6,0,"ReplaceableTextures\\CommandButtons\\BTNMove.blp","|cFF0090D4Рекомендуемая линия:|r")
call mbiVal(udg_LMB[id],9,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-str.blp","|cFFC6D2FFСила:|r")
call mbiVal(udg_LMB[id],10,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-agi.blp","|cFFC6D2FFЛовкость:|r")
call mbiVal(udg_LMB[id],11,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-int.blp","|cFFC6D2FFРазум:|r")
call mbiVal(udg_LMB[id],12,0,"ReplaceableTextures\\CommandButtons\\BTNSkillz.blp","|cFFFF5000Здоровье:|r")
call mbiVal(udg_LMB[id],13,0,"ReplaceableTextures\\CommandButtons\\BTNStatUp.blp","|cFFABA8FFЧакра:|r")
call mbiVal(udg_LMB[id],14,0,"ReplaceableTextures\\CommandButtons\\BTNTransmute.blp","|cFFFF0303Урон:|r")
call mbiVal(udg_LMB[id],15,0,"ReplaceableTextures\\CommandButtons\\BTNBearBlink.blp","|cFFE5BC97Тип атаки:|r")
call mbiVal(udg_LMB[id],16,0,"ReplaceableTextures\\CommandButtons\\BTNHelmutPurple.blp","|cFF20C000Защита:|r")
call mbiVal(udg_LMB[id],17,0,"ReplaceableTextures\\CommandButtons\\BTNBootsOfSpeed.blp","|cFFB56B72Скорость передвижения:|r")
call mbiVal(udg_LMB[id],20,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp","")
call mbiVal(udg_LMB[id],21,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp","")
call mbiVal(udg_LMB[id],22,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp","")
call mbiVal(udg_LMB[id],23,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp","")
call mbiVal(udg_LMB[id],24,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp","")
endfunction
function Track_Actions takes nothing returns nothing
local trackable tr=GetTriggeringTrackable()
local player p=GetTrackableOwner(tr)
local integer id=GetPlayerId(p)
local integer herot=GetTrackableRawcode(tr)
local integer i=0
local string s=null
local destructable model
if udg_CamT[id]then
if herot>0 then
if LoadBoolean(Hash,herot,0)then
call RemoveDestructable(LoadDestructableHandle(Hash,id,0))
call DestroyEffect(LoadEffectHandle(Hash,id,1))
set model=CreateDestructable(LoadInteger(Hash,herot,2),770.,3400.,270.,LoadReal(Hash,herot,3),0)
call SetDestructableAnimation(model,"attack")
if GetLocalPlayer()==p then
set s="BTNselection.mdx"
endif
if GetLocalPlayer()!=p then
call ShowDestructable(model,false)
endif
call SaveDestructableHandle(Hash,id,0,model)
call SaveAgentHandle(Hash,id,1,AddSpecialEffect(s,GetTrackableX(tr),GetTrackableY(tr)))
set PickMBName[id]=LoadStr(Hash,herot,4)
if captainMode or captainModeEnd then
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id])
else
if PickTime>59 then
if PickTime>69 then
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id]+" - 1:"+I2S(PickTime-60))
else
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id]+" - 1:0"+I2S(PickTime-60))
endif
else
if PickTime>9 then
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id]+" - 0:"+I2S(PickTime))
else
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id]+" - 0:0"+I2S(PickTime))
endif
endif
endif
loop
exitwhen herot==heroes_pick[i]
set i=i+1
endloop
call mbiVal(udg_LMB[id],0,0,mb_iconBTN[i],"|cFF959697Биография|r")
call mbiVal(udg_LMB[id],2,0,null,LoadStr(Hash,herot,5))
call mbiStyle(udg_LMB[id],2,0,true,false)
call mbiVal(udg_LMB[id],5,0,"ReplaceableTextures\\CommandButtons\\BTNPriestAdept.blp","|cFF0090D4Класс:|r"+LoadStr(Hash,herot,6))
call mbiVal(udg_LMB[id],6,0,"ReplaceableTextures\\CommandButtons\\BTNMove.blp","|cFF0090D4Рекомендуемая линия:|r"+LoadStr(Hash,herot,7))
call mbiVal(udg_LMB[id],9,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-str.blp","|cFFC6D2FFСила:|r"+LoadStr(Hash,herot,8))
call mbiVal(udg_LMB[id],10,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-agi.blp","|cFFC6D2FFЛовкость:|r"+LoadStr(Hash,herot,9))
call mbiVal(udg_LMB[id],11,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-int.blp","|cFFC6D2FFРазум:|r"+LoadStr(Hash,herot,10))
call mbiVal(udg_LMB[id],12,0,"ReplaceableTextures\\CommandButtons\\BTNSkillz.blp","|cFFFF5000Здоровье:|r"+LoadStr(Hash,herot,11))
call mbiVal(udg_LMB[id],13,0,"ReplaceableTextures\\CommandButtons\\BTNStatUp.blp","|cFFABA8FFЧакра:|r"+LoadStr(Hash,herot,12))
call mbiVal(udg_LMB[id],14,0,"ReplaceableTextures\\CommandButtons\\BTNTransmute.blp","|cFFFF0303Урон:|r"+LoadStr(Hash,herot,13))
call mbiVal(udg_LMB[id],15,0,"ReplaceableTextures\\CommandButtons\\BTNBearBlink.blp","|cFFE5BC97Радиус атаки:|r"+LoadStr(Hash,herot,14))
call mbiVal(udg_LMB[id],16,0,"ReplaceableTextures\\CommandButtons\\BTNHelmutPurple.blp","|cFF20C000Защита:|r"+LoadStr(Hash,herot,15))
call mbiVal(udg_LMB[id],17,0,"ReplaceableTextures\\CommandButtons\\BTNBootsOfSpeed.blp","|cFFB56B72Скорость передвижения:|r"+LoadStr(Hash,herot,16))
call mbiVal(udg_LMB[id],20,0,LoadStr(Hash,herot,17),LoadStr(Hash,herot,18))
call mbiStyle(udg_LMB[id],20,0,true,true)
call mbiVal(udg_LMB[id],21,0,LoadStr(Hash,herot,19),LoadStr(Hash,herot,20))
call mbiStyle(udg_LMB[id],21,0,true,true)
call mbiVal(udg_LMB[id],22,0,LoadStr(Hash,herot,21),LoadStr(Hash,herot,22))
call mbiStyle(udg_LMB[id],22,0,true,true)
call mbiVal(udg_LMB[id],23,0,LoadStr(Hash,herot,23),LoadStr(Hash,herot,24))
call mbiStyle(udg_LMB[id],23,0,true,true)
call mbiVal(udg_LMB[id],24,0,LoadStr(Hash,herot,25),LoadStr(Hash,herot,26))
call mbiStyle(udg_LMB[id],24,0,true,true)
endif
elseif herot<=0 then
if not captainModeEnd then
call HeroPickShowEmpty(id)
call RemoveDestructable(LoadDestructableHandle(Hash,id,0))
call DestroyEffect(LoadEffectHandle(Hash,id,1))
if GetLocalPlayer()==p then
set s="BTNselection.mdx"
endif
call SaveAgentHandle(Hash,id,1,AddSpecialEffect(s,GetTrackableX(tr),GetTrackableY(tr)))
if herot==0 then
set PickMBName[id]="|cFFFF0303СЛУЧАЙНЫЙ ГЕРОЙ|r"
elseif herot==-1 then
set PickMBName[id]="|cFFFF0303СБРОСИТЬ ФИЛЬТРЫ|r"
elseif herot==-2 then
set PickMBName[id]="|cFFFF0303ПОКАЗАТЬ УБИЙЦ|r"
call mbiVal(udg_LMB[id],2,0,null,"|cFFFE8A0EГерой, наносящий высокий физический и\nмагический урон.|r")
call mbiStyle(udg_LMB[id],2,0,true,false)
call mbiVal(udg_LMB[id],8,0,"ReplaceableTextures\\CommandButtons\\BTNMove.blp","|cFF0090D4Рекомендуемая линия:|r|cFFFFCC00 Middle Lane|r, |cFFFFCC00 Safe Lane|r")
elseif herot==-3 then
set PickMBName[id]="|cFFFF0303ПОКАЗАТЬ БОЙЦОВ|r"
call mbiVal(udg_LMB[id],2,0,null,"|cFFFE8A0EГерой, способный выдерживать большое\nколичество урона.|r")
call mbiStyle(udg_LMB[id],2,0,true,false)
call mbiVal(udg_LMB[id],8,0,"ReplaceableTextures\\CommandButtons\\BTNMove.blp","|cFF0090D4Рекомендуемая линия:|r|cFFFFCC00 Hard Lane|r")
elseif herot==-4 then
set PickMBName[id]="|cFFFF0303ПОКАЗАТЬ ПОДДЕРЖКУ|r"
call mbiVal(udg_LMB[id],2,0,null,"|cFFFE8A0EГерой, помогающий команде на протяжении\nвсей игры.|r")
call mbiStyle(udg_LMB[id],2,0,true,false)
call mbiVal(udg_LMB[id],8,0,"ReplaceableTextures\\CommandButtons\\BTNMove.blp","|cFF0090D4Рекомендуемая линия:|r|cFFFFCC00 Safe Lane|r")
elseif herot==-5 then
set PickMBName[id]="|cFFFF0303ПОКАЗАТЬ СПЕЦИАЛИСТОВ|r"
call mbiVal(udg_LMB[id],2,0,null,"|cFFFE8A0EГерой, способный выиграть игру\nальтернативными возможностями.|r")
call mbiStyle(udg_LMB[id],2,0,true,false)
call mbiVal(udg_LMB[id],8,0,"ReplaceableTextures\\CommandButtons\\BTNMove.blp","|cFF0090D4Рекомендуемая линия:|r|cFFFFCC00 Off Lane|r")
endif
if captainMode or captainModeEnd then
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id])
else
if PickTime>59 then
if PickTime>69 then
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id]+" - 1:"+I2S(PickTime-60))
else
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id]+" - 1:0"+I2S(PickTime-60))
endif
else
if PickTime>9 then
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id]+" - 0:"+I2S(PickTime))
else
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id]+" - 0:0"+I2S(PickTime))
endif
endif
endif
endif
endif
endif
set model=null
set p=null
set tr=null
endfunction
function InitTrig_Track takes nothing returns nothing
set gg_trg_Track=CreateTrigger()
call DisableTrigger(gg_trg_Track)
call TriggerAddAction(gg_trg_Track,function Track_Actions)
endfunction
function SetHeroPickFilter takes player p,integer id,integer herot returns nothing
local string s=null
local destructable des
local integer number=27
call DestroyEffect(PickFilterEff_1[id])
call DestroyEffect(PickFilterEff_2[id])
call DestroyEffect(PickFilterEff_3[id])
call DestroyEffect(PickFilterEff_4[id])
call DestroyEffect(PickFilterEff_5[id])
call DestroyEffect(PickFilterEff_6[id])
call DestroyEffect(PickFilterEff_7[id])
call DestroyEffect(PickFilterEff_8[id])
call DestroyEffect(PickFilterEff_9[id])
call DestroyEffect(PickFilterEff_10[id])
call DestroyEffect(PickFilterEff_11[id])
call DestroyEffect(PickFilterEff_12[id])
call DestroyEffect(PickFilterEff_13[id])
call DestroyEffect(PickFilterEff_14[id])
call DestroyEffect(PickFilterEff_15[id])
call DestroyEffect(PickFilterEff_16[id])
call DestroyEffect(PickFilterEff_17[id])
call DestroyEffect(PickFilterEff_18[id])
call DestroyEffect(PickFilterEff_19[id])
call DestroyEffect(PickFilterEff_20[id])
call DestroyEffect(PickFilterEff_21[id])
call DestroyEffect(PickFilterEff_22[id])
call DestroyEffect(PickFilterEff_23[id])
if GetLocalPlayer()==p then
set s="BTNselection.mdx"
endif
if herot==-2 then
if heroes_pick[Asuma]!=0 and LoadInteger(Hash,heroes_pick[Asuma],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Asuma],1)
set PickFilterEff_1[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Gai]!=0 and LoadInteger(Hash,heroes_pick[Gai],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Gai],1)
set PickFilterEff_2[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Jugo]!=0 and LoadInteger(Hash,heroes_pick[Jugo],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Jugo],1)
set PickFilterEff_3[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Sasuke]!=0 and LoadInteger(Hash,heroes_pick[Sasuke],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Sasuke],1)
set PickFilterEff_4[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Zabuza]!=0 and LoadInteger(Hash,heroes_pick[Zabuza],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Zabuza],1)
set PickFilterEff_5[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Haku]!=0 and LoadInteger(Hash,heroes_pick[Haku],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Haku],1)
set PickFilterEff_6[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Minato]!=0 and LoadInteger(Hash,heroes_pick[Minato],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Minato],1)
set PickFilterEff_7[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Mu]!=0 and LoadInteger(Hash,heroes_pick[Mu],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Mu],1)
set PickFilterEff_8[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Neji]!=0 and LoadInteger(Hash,heroes_pick[Neji],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Neji],1)
set PickFilterEff_9[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Tobirama]!=0 and LoadInteger(Hash,heroes_pick[Tobirama],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Tobirama],1)
set PickFilterEff_10[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Hanzo]!=0 and LoadInteger(Hash,heroes_pick[Hanzo],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Hanzo],1)
set PickFilterEff_11[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Kabuto]!=0 and LoadInteger(Hash,heroes_pick[Kabuto],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Kabuto],1)
set PickFilterEff_12[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Obito]!=0 and LoadInteger(Hash,heroes_pick[Obito],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Obito],1)
set PickFilterEff_13[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Itachi]!=0 and LoadInteger(Hash,heroes_pick[Itachi],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Itachi],1)
set PickFilterEff_14[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Mei]!=0 and LoadInteger(Hash,heroes_pick[Mei],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Mei],1)
set PickFilterEff_15[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Naruto]!=0 and LoadInteger(Hash,heroes_pick[Naruto],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Naruto],1)
set PickFilterEff_16[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Jiraya]!=0 and LoadInteger(Hash,heroes_pick[Jiraya],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Jiraya],1)
set PickFilterEff_17[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Kakashi]!=0 and LoadInteger(Hash,heroes_pick[Kakashi],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Kakashi],1)
set PickFilterEff_18[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Madara]!=0 and LoadInteger(Hash,heroes_pick[Madara],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Madara],1)
set PickFilterEff_19[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Darui]!=0 and LoadInteger(Hash,heroes_pick[Darui],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Darui],1)
set PickFilterEff_20[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Deidara]!=0 and LoadInteger(Hash,heroes_pick[Deidara],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Deidara],1)
set PickFilterEff_21[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Gengetsu]!=0 and LoadInteger(Hash,heroes_pick[Gengetsu],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Gengetsu],1)
set PickFilterEff_22[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Hidan]!=0 and LoadInteger(Hash,heroes_pick[Hidan],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Hidan],1)
set PickFilterEff_23[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
elseif herot==-3 then
if heroes_pick[Danzo]!=0 and LoadInteger(Hash,heroes_pick[Danzo],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Danzo],1)
set PickFilterEff_1[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Ei]!=0 and LoadInteger(Hash,heroes_pick[Ei],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Ei],1)
set PickFilterEff_2[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Han]!=0 and LoadInteger(Hash,heroes_pick[Han],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Han],1)
set PickFilterEff_3[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Orochimaru]!=0 and LoadInteger(Hash,heroes_pick[Orochimaru],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Orochimaru],1)
set PickFilterEff_4[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Suigetsu]!=0 and LoadInteger(Hash,heroes_pick[Suigetsu],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Suigetsu],1)
set PickFilterEff_5[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
elseif herot==-4 then
if heroes_pick[Gaara]!=0 and LoadInteger(Hash,heroes_pick[Gaara],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Gaara],1)
set PickFilterEff_1[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Hashirama]!=0 and LoadInteger(Hash,heroes_pick[Hashirama],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Hashirama],1)
set PickFilterEff_2[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Nagato]!=0 and LoadInteger(Hash,heroes_pick[Nagato],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Nagato],1)
set PickFilterEff_3[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Onoki]!=0 and LoadInteger(Hash,heroes_pick[Onoki],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Onoki],1)
set PickFilterEff_4[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Sai]!=0 and LoadInteger(Hash,heroes_pick[Sai],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Sai],1)
set PickFilterEff_5[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Sakura]!=0 and LoadInteger(Hash,heroes_pick[Sakura],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Sakura],1)
set PickFilterEff_6[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Tsunade]!=0 and LoadInteger(Hash,heroes_pick[Tsunade],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Tsunade],1)
set PickFilterEff_7[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Yamato]!=0 and LoadInteger(Hash,heroes_pick[Yamato],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Yamato],1)
set PickFilterEff_8[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
elseif herot==-5 then
if heroes_pick[Chiyo]!=0 and LoadInteger(Hash,heroes_pick[Chiyo],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Chiyo],1)
set PickFilterEff_1[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Sasori]!=0 and LoadInteger(Hash,heroes_pick[Sasori],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Sasori],1)
set PickFilterEff_2[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Shikamaru]!=0 and LoadInteger(Hash,heroes_pick[Shikamaru],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Shikamaru],1)
set PickFilterEff_3[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
if heroes_pick[Zetsu]!=0 and LoadInteger(Hash,heroes_pick[Zetsu],number)==0 then
set des=LoadDestructableHandle(Hash,heroes_pick[Zetsu],1)
set PickFilterEff_4[id]=AddSpecialEffect(s,GetWidgetX(des),GetWidgetY(des))
endif
endif
set des=null
endfunction
function Click_Actions takes nothing returns nothing
local trackable tr=GetTriggeringTrackable()
local player p=GetTrackableOwner(tr)
local integer id=GetPlayerId(p)
local integer herot=GetTrackableRawcode(tr)
local integer count=0
local integer numberhero=0
local integer random=0
local integer i=1
local integer h=GetHandleId(gg_trg_Click)
local destructable des
local destructable desEmpty
local boolean pickContinue=true
if udg_CamT[id]then
if playerCanPick[id]then
if herot>0 then
if LoadBoolean(Hash,herot,0)then
set des=LoadDestructableHandle(Hash,herot,1)
if captainMode then
call ClickDestroyHeroFilter(herot,id)
call ClickCreateIcons(des,p,herot)
call StartSound(gg_snd_ItemReceived)
else
if captainModeEnd then
if IsPlayerAlly(p,LoadPlayerHandle(Hash,herot,28))then
call ClickDestroyHeroFilter(herot,id)
call ClickCreateIcons(des,p,herot)
set udg_CamT[id]=false
set udg_Hero[id]=CreateUnit(p,herot,GetHeroMainX(p),GetHeroMainY(p),GetHeroMainF(p))
call HeroMoveOnMainAreaAfterPick(p,id)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-playerHeroCost)
call StartSound(gg_snd_ItemReceived)
else
call DisplayTimedTextToPlayer(p,0.,0.,captainModeTimeText,"|cFFFFCC00Выбирать можно только из тех героев, которых выбрал ВАШ капитан.|r")
set pickContinue=false
endif
else
if IsPlayerAlly(p,Player(5))then
set desEmpty=LoadDestructableHandle(Hash,h,id+1)
elseif IsPlayerAlly(p,Player(11))then
set desEmpty=LoadDestructableHandle(Hash,h,id)
endif
call CreateDestructable(GetDestructableTypeId(des),GetWidgetX(desEmpty),GetWidgetY(desEmpty),0,1.,0)
call RemoveDestructable(desEmpty)
call ClickDestroyHeroFilter(herot,id)
call ClickCreateIcons(des,p,herot)
set udg_CamT[id]=false
set udg_Hero[id]=CreateUnit(p,herot,GetHeroMainX(p),GetHeroMainY(p),GetHeroMainF(p))
call HeroMoveOnMainAreaAfterPick(p,id)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)-playerHeroCost)
call StartSound(gg_snd_ItemReceived)
endif
endif
else
set pickContinue=false
endif
elseif herot==0 then
if captainMode then
call CaptainsModeGetRandomHero(p)
call StartSound(gg_snd_ItemReceived)
else
if not captainModeEnd then
loop
set random=GetRandomInt(1,hero_number)
set numberhero=hc_list[random]
exitwhen heroes_pick[numberhero]!=0
endloop
set des=LoadDestructableHandle(Hash,heroes_pick[numberhero],1)
if IsPlayerAlly(p,Player(5))then
set desEmpty=LoadDestructableHandle(Hash,h,id+1)
elseif IsPlayerAlly(p,Player(11))then
set desEmpty=LoadDestructableHandle(Hash,h,id)
endif
call CreateDestructable(GetDestructableTypeId(des),GetWidgetX(desEmpty),GetWidgetY(desEmpty),0,1.,0)
call ClickDestroyHeroFilter(heroes_pick[numberhero],id)
call ClickCreateIcons(des,p,heroes_pick[numberhero])
set udg_Repick_Log[id]=true
set udg_CamT[id]=false
set udg_Hero[id]=CreateUnit(p,heroes_pick[numberhero],GetHeroMainX(p),GetHeroMainY(p),GetHeroMainF(p))
call HeroMoveOnMainAreaAfterPick(p,id)
call StartSound(gg_snd_ItemReceived)
else
set pickContinue=false
endif
endif
elseif herot<0 then
call SetHeroPickFilter(p,id,herot)
endif
if herot>=0 and not captainMode and pickContinue then
call HeroPickEnd(p,id,herot,h,GetHandleId(tr))
endif
else
if herot>=0 then
if not captainModeEnd then
if p==captainAlliance then
if captainState=="бан"then
call DisplayTimedTextToPlayer(p,0.,0.,captainModeTimeText,"Сейчас очередь "+GetPlayerNameColored(captainAkatsuki)+" |cFFFFCC00банить|r героя.")
elseif captainState=="пик"then
call DisplayTimedTextToPlayer(p,0.,0.,captainModeTimeText,"Сейчас очередь "+GetPlayerNameColored(captainAkatsuki)+" |cFFFFCC00выбирать|r героя.")
endif
elseif p==captainAkatsuki then
if captainState=="бан"then
call DisplayTimedTextToPlayer(p,0.,0.,captainModeTimeText,"Сейчас очередь "+GetPlayerNameColored(captainAlliance)+" |cFFFFCC00банить|r героя.")
elseif captainState=="пик"then
call DisplayTimedTextToPlayer(p,0.,0.,captainModeTimeText,"Сейчас очередь "+GetPlayerNameColored(captainAlliance)+" |cFFFFCC00выбирать героя.")
endif
else
call DisplayTimedTextToPlayer(p,0.,0.,captainModeTimeText,"|cFFFFCC00Подождите, пока капитаны выберут героев.|r")
endif
endif
elseif herot<0 then
call SetHeroPickFilter(p,id,herot)
endif
endif
endif
set desEmpty=null
set des=null
set p=null
set tr=null
endfunction
function InitTrig_Click takes nothing returns nothing
set gg_trg_Click=CreateTrigger()
call DisableTrigger(gg_trg_Click)
call TriggerAddAction(gg_trg_Click,function Click_Actions)
endfunction
function cj_anonym__145 takes nothing returns nothing
local integer time
if not captainModeEnd then
if GetRandomInt(1,5)==1 and captainModeAI and captainTimeToChoice>1 then
if captainState=="бан"then
set time=30
elseif captainState=="пик"then
set time=40
endif
if captainTimeToChoice<time-1 then
if GetPlayerController(captainAlliance)==MAP_CONTROL_COMPUTER and playerCanPick[GetPlayerId(captainAlliance)]then
call CaptainsModeGetRandomHero(captainAlliance)
elseif GetPlayerController(captainAkatsuki)==MAP_CONTROL_COMPUTER and playerCanPick[GetPlayerId(captainAkatsuki)]then
call CaptainsModeGetRandomHero(captainAkatsuki)
endif
call StartSound(gg_snd_ItemReceived)
endif
endif
set captainTimeToChoice=captainTimeToChoice-1
call SetTextTagText(captainTextTime,I2S(captainTimeToChoice),.02)
if captainTimeToChoice==0 then
if playerCanPick[GetPlayerId(captainAlliance)]then
call CaptainsModeGetRandomHero(captainAlliance)
elseif playerCanPick[GetPlayerId(captainAkatsuki)]then
call CaptainsModeGetRandomHero(captainAkatsuki)
endif
call StartSound(gg_snd_ItemReceived)
endif
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function CaptainsModeStartTimer takes nothing returns nothing
local integer h=GetHandleId(gg_trg_Click)
local player pl=GetLocalPlayer()
local destructable des
local string s="BTNselection.mdx"
local real x
local real y
set captainPhaseCur=1
set captainState="бан"
set captainTimeToChoice=30
set captainTextTime=CreateTextTag()
call SetTextTagText(captainTextTime,I2S(captainTimeToChoice),.02)
call SetTextTagColor(captainTextTime,254,244,209,0)
if captainDialogAnswerAlliance=="да"then
set des=LoadDestructableHandle(Hash,h,captainAllianceHeroBanNumber+9)
call SetTextTagPos(captainTextTime,captainTextOffsetX,4015.-captainModeOffsetText,heightGameText)
call SetTextTagColor(captainTextTime,254,138,14,0)
set playerCanPick[GetPlayerId(captainAlliance)]=true
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAlliance)+" начинает первым |cFFFFCC00банить/выбирать|r героев.")
elseif captainDialogAnswerAkatsuki=="да"then
set des=LoadDestructableHandle(Hash,h,captainAkatsukiHeroBanNumber+13)
call SetTextTagPos(captainTextTime,captainTextOffsetX,3951.-captainModeOffsetText,heightGameText)
call SetTextTagColor(captainTextTime,78,42,4,0)
set playerCanPick[GetPlayerId(captainAkatsuki)]=true
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAkatsuki)+" начинает первым |cFFFFCC00банить/выбирать|r героев.")
endif
set x=GetWidgetX(des)
set y=GetWidgetY(des)
set captainEffectPick=AddSpecialEffect(s,x,y)
call TimerStart(CreateTimer(),1.,true,function cj_anonym__145)
set s=null
set des=null
endfunction
function CaptainAnswer_Actions takes nothing returns nothing
local player p=GetTriggerPlayer()
local player pl=GetLocalPlayer()
local button but=GetClickedButton()
if but==captainDialogButtonYes then
call DialogDisplay(p,captainDialog,false)
if IsPlayerAlly(p,Player(5))then
set captainDialogAnswerAlliance="да"
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAlliance)+" хочет начинать первым |cFFFFCC00банить/выбирать|r героев.")
elseif IsPlayerAlly(p,Player(11))then
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAlliance)+" НЕ хочет начинать первым |cFFFFCC00банить/выбирать|r героев.")
set captainDialogAnswerAkatsuki="да"
endif
elseif but==captainDialogButtonNo then
call DialogDisplay(p,captainDialog,false)
if IsPlayerAlly(p,Player(5))then
set captainDialogAnswerAlliance="нет"
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAkatsuki)+" хочет начинать первым |cFFFFCC00банить/выбирать|r героев.")
elseif IsPlayerAlly(p,Player(11))then
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAkatsuki)+" НЕ хочет начинать первым |cFFFFCC00банить/выбирать|r героев.")
set captainDialogAnswerAkatsuki="нет"
endif
endif
if captainDialogAnswerAlliance!=""and captainDialogAnswerAkatsuki!=""then
if captainDialogAnswerAlliance==captainDialogAnswerAkatsuki then
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,"Капитаны не смогли договориться о порядке банов/пиков героев.\nВыбор за них сделает игра.")
if GetRandomInt(1,2)==1 then
set captainDialogAnswerAlliance="да"
set captainDialogAnswerAkatsuki="нет"
else
set captainDialogAnswerAkatsuki="да"
set captainDialogAnswerAlliance="нет"
endif
endif
call DialogClear(captainDialog)
call DialogDestroy(captainDialog)
call CaptainsModeStartTimer()
endif
set but=null
set p=null
set pl=null
endfunction
function InitTrig_CaptainAnswer takes nothing returns nothing
set gg_trg_CaptainAnswer=CreateTrigger()
call DisableTrigger(gg_trg_CaptainAnswer)
call TriggerRegisterDialogEvent(gg_trg_CaptainAnswer,captainDialog)
call TriggerAddAction(gg_trg_CaptainAnswer,function CaptainAnswer_Actions)
endfunction
function QuestConditions takes nothing returns boolean
return IsUnitHero(GetTriggerUnit())and QuestNumber<3
endfunction
function cj_anonym__146 takes nothing returns nothing
if not QuestIsExecuted then
call QuestFail()
endif
call DestroyTimer(QuestTimer)
call DestroyTimerDialog(QuestWindow)
set QuestTimer=null
set QuestWindow=null
set QuestTakeOn=true
endfunction
function QuestStart takes unit u,player p returns nothing
set QuestValue=0
set QuestTimer=CreateTimer()
set QuestWindow=CreateTimerDialog(QuestTimer)
set QuestPlayer=p
set QuestTakeOn=false
set QuestIsExecuted=false
set QuestNumber=QuestNumber+1
set QuestProgressBoard=CreateLeaderboard()
call PlayerSetLeaderboard(p,QuestProgressBoard)
call LeaderboardSetLabel(QuestProgressBoard,"Прогресс")
if QuestNumber==1 then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,"|cFFFF5000ВНИМАНИЕ!|r "+GetPlayerNameColored(QuestPlayer)+" взял миссию ранга |cFFFFCC00S|r! Его задачей является добить |cFFFFCC00100|r вражеских крипов!")
call TimerDialogSetTitle(QuestWindow,"Миссия 1:")
call LeaderboardAddItem(QuestProgressBoard,"Убито крипов:",QuestValue,Player(0))
elseif QuestNumber==2 then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,"|cFFFF5000ВНИМАНИЕ!|r "+GetPlayerNameColored(QuestPlayer)+" взял миссию ранга |cFFFFCC00S|r! Его задачей является впитать в себя |cFFFFCC0010 000|r урона!")
call TimerDialogSetTitle(QuestWindow,"Миссия 2:")
call LeaderboardAddItem(QuestProgressBoard,"Впитано урона:",QuestValue,Player(0))
elseif QuestNumber==3 then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,30.,"|cFFFF5000ВНИМАНИЕ!|r "+GetPlayerNameColored(QuestPlayer)+" взял миссию ранга |cFFFFCC00S|r! Его задачей является нанести противникам |cFFFFCC0030 000|r урона!")
call TimerDialogSetTitle(QuestWindow,"Миссия 3:")
call LeaderboardAddItem(QuestProgressBoard,"Нанесено урона:",QuestValue,Player(0))
endif
call TimerDialogDisplay(QuestWindow,true)
call LeaderboardSetSizeByItemCount(QuestProgressBoard,LeaderboardGetItemCount(QuestProgressBoard))
call LeaderboardSetItemValueColor(QuestProgressBoard,LeaderboardGetPlayerIndex(QuestProgressBoard,Player(0)),255,80,0,255)
call LeaderboardSetItemLabelColor(QuestProgressBoard,LeaderboardGetPlayerIndex(QuestProgressBoard,Player(0)),255,204,0,255)
call LeaderboardDisplay(QuestProgressBoard,true)
call TimerStart(QuestTimer,QuestTime,false,function cj_anonym__146)
endfunction
function QuestActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local player p=GetOwningPlayer(u)
if QuestTakeOn then
call QuestStart(u,p)
else
call DisplayTimedTextToPlayer(p,0.,0.,3.,"|cFFFFCC00В настоящий момент Вы не можете взять миссию!|r")
endif
set u=null
endfunction
function InitTrig_Quest takes nothing returns nothing
local trigger trig=CreateTrigger()
call TriggerRegisterEnterRectSimple(trig,gg_rct_Quest)
call TriggerAddCondition(trig,Condition(function QuestConditions))
call TriggerAddAction(trig,function QuestActions)
set trig=null
endfunction
function Trig_Leavers_Actions takes nothing returns nothing
local player p=GetTriggerPlayer()
local player pgold
local unit tg
local integer i=0
local integer count1=0
local integer count2=0
local integer ally=0
local integer cost
local integer artgold=0
local group g=CreateGroup()
local item art
call GroupEnumUnitsOfPlayer(g,p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
call SetUnitPosition(tg,GetStartLocationX(GetPlayerStartLocation(p)),GetStartLocationY(GetPlayerStartLocation(p)))
if IsUnitAlly(tg,Player(5))then
set ally=1
elseif IsUnitAlly(tg,Player(11))then
set ally=2
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
loop
exitwhen i>5
set art=UnitItemInSlot(udg_Hero[GetPlayerId(p)],i)
set artgold=artgold+GetFullPriceItem(art)
call RemoveItem(art)
set i=i+1
endloop
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+artgold)
set i=0
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,GetPlayerNameColored(p)+" покинул игру! Армия ливеров пополняется...")
call mbiVal(gamestat_mb,gamestat_Place[GetPlayerId(p)],2,null,"|cFFFCC75D- Покинул игру -|r")
loop
exitwhen i==11
set pgold=Player(i)
if GetPlayerSlotState(pgold)==PLAYER_SLOT_STATE_PLAYING and pgold!=Player(5)then
if i<5 then
set count1=count1+1
elseif i>5 then
set count2=count2+1
endif
endif
set i=i+1
endloop
if ally==1 then
set cost=GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)/count1
set i=0
loop
exitwhen i==5
set pgold=Player(i)
if GetPlayerSlotState(pgold)==PLAYER_SLOT_STATE_PLAYING then
call SetPlayerState(pgold,PLAYER_STATE_RESOURCE_GOLD,(GetPlayerState(pgold,PLAYER_STATE_RESOURCE_GOLD)+cost))
call DisplayTimedTextToPlayer(pgold,0.,0.,5.,"Вы получили |cFFFFCC00"+I2S(cost)+"|r золота!")
endif
set i=i+1
endloop
elseif ally==2 then
set cost=GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)/count2
set i=6
loop
exitwhen i==11
set pgold=Player(i)
if GetPlayerSlotState(pgold)==PLAYER_SLOT_STATE_PLAYING then
call SetPlayerState(pgold,PLAYER_STATE_RESOURCE_GOLD,(GetPlayerState(pgold,PLAYER_STATE_RESOURCE_GOLD)+cost))
endif
set i=i+1
endloop
endif
if RatingGameOn then
set RatingGameOn=false
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,15.,"Рейтинговый режим выключен! Хост может активировать фан-мод |cFFFFCC00-wtf|r в любое время игры!")
call EnableTrigger(gg_trg_WTF_Mod)
endif
set art=null
set g=null
set tg=null
set p=null
set pgold=null
endfunction
function InitTrig_Leavers takes nothing returns nothing
set gg_trg_Leavers=CreateTrigger()
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(0),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(1),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(2),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(3),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(4),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(6),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(7),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(8),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(9),EVENT_PLAYER_LEAVE)
call TriggerRegisterPlayerEvent(gg_trg_Leavers,Player(10),EVENT_PLAYER_LEAVE)
call TriggerAddAction(gg_trg_Leavers,function Trig_Leavers_Actions)
endfunction
function Hero_Enter_an_Rect_Alliance_Conditions takes nothing returns boolean
return IsPlayerAlly(GetOwningPlayer(GetTriggerUnit()),Player(5))and IsUnitHero(GetTriggerUnit())
endfunction
function Hero_Enter_an_Rect_Alliance_Actions takes nothing returns nothing
call HeroEnteranReviveRect(GetTriggerUnit())
endfunction
function InitTrig_Hero_Enter_an_Rect_Alliance takes nothing returns nothing
set gg_trg_Hero_Enter_an_Rect_Alliance=CreateTrigger()
call TriggerRegisterEnterRectSimple(gg_trg_Hero_Enter_an_Rect_Alliance,gg_rct_Revive_Alliance)
call TriggerAddCondition(gg_trg_Hero_Enter_an_Rect_Alliance,Condition(function Hero_Enter_an_Rect_Alliance_Conditions))
call TriggerAddAction(gg_trg_Hero_Enter_an_Rect_Alliance,function Hero_Enter_an_Rect_Alliance_Actions)
endfunction
function Hero_Enter_an_Rect_Akatsuki_Conditions takes nothing returns boolean
return IsPlayerAlly(GetOwningPlayer(GetTriggerUnit()),Player(11))and IsUnitHero(GetTriggerUnit())
endfunction
function Hero_Enter_an_Rect_Akatsuki_Actions takes nothing returns nothing
call HeroEnteranReviveRect(GetTriggerUnit())
endfunction
function InitTrig_Hero_Enter_an_Rect_Akatsuki takes nothing returns nothing
set gg_trg_Hero_Enter_an_Rect_Akatsuki=CreateTrigger()
call TriggerRegisterEnterRectSimple(gg_trg_Hero_Enter_an_Rect_Akatsuki,gg_rct_Revive_Akatsuki)
call TriggerAddCondition(gg_trg_Hero_Enter_an_Rect_Akatsuki,Condition(function Hero_Enter_an_Rect_Akatsuki_Conditions))
call TriggerAddAction(gg_trg_Hero_Enter_an_Rect_Akatsuki,function Hero_Enter_an_Rect_Akatsuki_Actions)
endfunction
function Heroes_Speech_Conditions takes nothing returns boolean
local integer id=GetIssuedOrderId()
local integer i=GetPlayerId(GetOwningPlayer(GetOrderedUnit()))
return not IsUnitPaused(udg_Hero[i])and not udg_ShopCam[i]and GetWidgetLife(GetTriggerUnit())>.405 and id==851972 or id==851971 or id==851983
endfunction
function Heroes_Speech_Actions takes nothing returns nothing
local unit c=GetOrderedUnit()
local player p=GetOwningPlayer(c)
local integer i=GetUnitTypeId(c)
local integer id=GetPlayerId(p)
if i==heroes_rawcode[Naruto]or i==heroes_rikudo_rawcode[Naruto]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Speech Naruto 4.mp3")
call HeroesSpeechSelectTimer(id,1.03)
elseif i==2 then
call HeroSpeechSound(p,"Speech Naruto 5.mp3")
call HeroesSpeechSelectTimer(id,1.1)
elseif i==3 then
call HeroSpeechSound(p,"Speech Naruto 11.mp3")
call HeroesSpeechSelectTimer(id,.1)
endif
endif
elseif i==heroes_rawcode[Sakura]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Speech Sakura 2.mp3")
call HeroesSpeechSelectTimer(id,2.15)
elseif i==2 then
call HeroSpeechSound(p,"Speech Sakura 3.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==3 then
call HeroSpeechSound(p,"Speech Sakura 6.mp3")
call HeroesSpeechSelectTimer(id,1.)
endif
endif
elseif i==heroes_rawcode[Sai]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Speech Sai 1.mp3")
call HeroesSpeechSelectTimer(id,2.13)
elseif i==2 then
call HeroSpeechSound(p,"Speech Sai 6.mp3")
call HeroesSpeechSelectTimer(id,1.527)
elseif i==3 then
call HeroSpeechSound(p,"Speech Sai 7.mp3")
call HeroesSpeechSelectTimer(id,1.318)
endif
endif
elseif i==heroes_rawcode[Shikamaru]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech Shikamaru 3.mp3")
call HeroesSpeechSelectTimer(id,1.527)
elseif i==2 then
call HeroSpeechSound(p,"Speech Shikamaru 4.mp3")
call HeroesSpeechSelectTimer(id,1.945)
endif
endif
elseif i==heroes_rawcode[Madara]or i==heroes_rikudo_rawcode[Madara]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Speech Madara 2.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==2 then
call HeroSpeechSound(p,"Speech Madara 3.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==3 then
call HeroSpeechSound(p,"Speech Madara 7.mp3")
call HeroesSpeechSelectTimer(id,1.2)
elseif i==4 then
call HeroSpeechSound(p,"Speech Madara 8.mp3")
call HeroesSpeechSelectTimer(id,3.5)
endif
endif
elseif i==heroes_rawcode[Nagato]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Speech Nagato 2.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==2 then
call HeroSpeechSound(p,"Speech Nagato 3.mp3")
call HeroesSpeechSelectTimer(id,3.)
elseif i==3 then
call HeroSpeechSound(p,"Speech Nagato 7.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==4 then
call HeroSpeechSound(p,"Speech Nagato 8.mp3")
call HeroesSpeechSelectTimer(id,2.25)
endif
endif
elseif i==heroes_rawcode[Jugo]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Speech Juugo 1.mp3")
call HeroesSpeechSelectTimer(id,2.25)
elseif i==2 then
call HeroSpeechSound(p,"Speech Juugo 2.mp3")
call HeroesSpeechSelectTimer(id,2.1)
elseif i==3 then
call HeroSpeechSound(p,"Speech Juugo 3.mp3")
call HeroesSpeechSelectTimer(id,.3)
endif
endif
elseif i==heroes_rawcode[Sasuke]or i==heroes_rikudo_rawcode[Sasuke]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,7)
if i==1 then
call HeroSpeechSound(p,"Speech Sasuke 3.mp3")
call HeroesSpeechSelectTimer(id,3.5)
elseif i==2 then
call HeroSpeechSound(p,"Speech Sasuke 7.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==3 then
call HeroSpeechSound(p,"Speech Sasuke 8.mp3")
call HeroesSpeechSelectTimer(id,2.3)
elseif i==4 then
call HeroSpeechSound(p,"Speech Sasuke 9.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==5 then
call HeroSpeechSound(p,"Speech Sasuke 11.mp3")
call HeroesSpeechSelectTimer(id,3.25)
elseif i==6 then
call HeroSpeechSound(p,"Speech Sasuke 12.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==7 then
call HeroSpeechSound(p,"Speech Sasuke 13.mp3")
call HeroesSpeechSelectTimer(id,1.1)
endif
endif
elseif i==heroes_rawcode[Suigetsu]or i==morph_rawcode[1]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech Suigetsu 1.mp3")
call HeroesSpeechSelectTimer(id,3.3)
elseif i==2 then
call HeroSpeechSound(p,"Speech Suigetsu 2.mp3")
call HeroesSpeechSelectTimer(id,2.05)
endif
endif
elseif i==heroes_rawcode[Jiraya]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Speech Jiraya 1.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==2 then
call HeroSpeechSound(p,"Speech Jiraya 4.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==3 then
call HeroSpeechSound(p,"Speech Jiraya 6.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==4 then
call HeroSpeechSound(p,"Speech Jiraya 7.mp3")
call HeroesSpeechSelectTimer(id,2.1)
endif
endif
elseif i==heroes_rawcode[Chiyo]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Speech Chiyo 2.mp3")
call HeroesSpeechSelectTimer(id,4.1)
elseif i==2 then
call HeroSpeechSound(p,"Speech Chiyo 4.mp3")
call HeroesSpeechSelectTimer(id,.5)
elseif i==3 then
call HeroSpeechSound(p,"Speech Chiyo 6.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==4 then
call HeroSpeechSound(p,"Speech Chiyo 7.mp3")
call HeroesSpeechSelectTimer(id,2.5)
endif
endif
elseif i==heroes_rawcode[Hashirama]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech Hashirama 2.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==2 then
call HeroSpeechSound(p,"Speech Hashirama 4.mp3")
call HeroesSpeechSelectTimer(id,3.5)
endif
endif
elseif i==heroes_rawcode[Gengetsu]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech NM 2.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==2 then
call HeroSpeechSound(p,"Speech NM 5.mp3")
call HeroesSpeechSelectTimer(id,3.25)
endif
endif
elseif i==heroes_rawcode[Sasori]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech Sasori 1.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==2 then
call HeroSpeechSound(p,"Speech Sasori 4.mp3")
call HeroesSpeechSelectTimer(id,2.25)
endif
endif
elseif i==heroes_rawcode[Asuma]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Asuma Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,1.75)
elseif i==2 then
call HeroSpeechSound(p,"Asuma Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==3 then
call HeroSpeechSound(p,"Asuma Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,.75)
endif
endif
elseif i==heroes_rawcode[Gaara]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,5)
if i==1 then
call HeroSpeechSound(p,"Gaara Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,.75)
elseif i==2 then
call HeroSpeechSound(p,"Gaara Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==3 then
call HeroSpeechSound(p,"Gaara Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,4.)
elseif i==4 then
call HeroSpeechSound(p,"Gaara Speech Target 4.mp3")
call HeroesSpeechSelectTimer(id,3.)
elseif i==5 then
call HeroSpeechSound(p,"Gaara Speech Target 5.mp3")
call HeroesSpeechSelectTimer(id,1.)
endif
endif
elseif i==heroes_rawcode[Gai]then
if udg_Speech[id]==null and not Gai_SoundOn then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Gai Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==2 then
call HeroSpeechSound(p,"Gai Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,.3)
elseif i==3 then
call HeroSpeechSound(p,"Gai Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==4 then
call HeroSpeechSound(p,"Gai Speech Target 4.mp3")
call HeroesSpeechSelectTimer(id,2.)
endif
endif
elseif i==heroes_rawcode[Deidara]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,5)
if i==1 then
call HeroSpeechSound(p,"Deidara Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==2 then
call HeroSpeechSound(p,"Deidara Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,.3)
elseif i==3 then
call HeroSpeechSound(p,"Deidara Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==4 then
call HeroSpeechSound(p,"Deidara Speech Target 4.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==5 then
call HeroSpeechSound(p,"Deidara Speech Target 5.mp3")
call HeroesSpeechSelectTimer(id,.85)
endif
endif
elseif i==heroes_rawcode[Kakashi]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,6)
if i==1 then
call HeroSpeechSound(p,"Kakashi Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==2 then
call HeroSpeechSound(p,"Kakashi Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==3 then
call HeroSpeechSound(p,"Kakashi Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,.5)
elseif i==4 then
call HeroSpeechSound(p,"Kakashi Speech Target 4.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==5 then
call HeroSpeechSound(p,"Kakashi Speech Target 5.mp3")
call HeroesSpeechSelectTimer(id,.3)
elseif i==6 then
call HeroSpeechSound(p,"Kakashi Speech Target 6.mp3")
call HeroesSpeechSelectTimer(id,1.5)
endif
endif
elseif i==heroes_rawcode[Mu]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Muu Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,1.25)
elseif i==2 then
call HeroSpeechSound(p,"Muu Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,1.25)
elseif i==3 then
call HeroSpeechSound(p,"Muu Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,2.)
endif
endif
elseif i==heroes_rawcode[Neji]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Neji Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==2 then
call HeroSpeechSound(p,"Neji Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==2 then
call HeroSpeechSound(p,"Neji Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,3.25)
endif
endif
elseif i==heroes_rawcode[Obito]or i==heroes_rikudo_rawcode[Obito]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Obito Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,4.)
elseif i==2 then
call HeroSpeechSound(p,"Obito Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==3 then
call HeroSpeechSound(p,"Obito Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,3.)
endif
endif
elseif i==heroes_rawcode[Hidan]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Hidan Speech Target 1.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==2 then
call HeroSpeechSound(p,"Hidan Speech Target 2.mp3")
call HeroesSpeechSelectTimer(id,.5)
elseif i==3 then
call HeroSpeechSound(p,"Hidan Speech Target 3.mp3")
call HeroesSpeechSelectTimer(id,2.)
endif
endif
endif
set p=null
set c=null
endfunction
function InitTrig_Heroes_Speech takes nothing returns nothing
local integer i
set gg_trg_Heroes_Speech=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Heroes_Speech,EVENT_PLAYER_UNIT_ISSUED_ORDER)
call TriggerRegisterAnyUnitEventBJ(gg_trg_Heroes_Speech,EVENT_PLAYER_UNIT_ISSUED_UNIT_ORDER)
call TriggerAddCondition(gg_trg_Heroes_Speech,Condition(function Heroes_Speech_Conditions))
call TriggerAddAction(gg_trg_Heroes_Speech,function Heroes_Speech_Actions)
endfunction
function Heroes_Speech_Select_Conditions takes nothing returns boolean
local integer id=GetIssuedOrderId()
local integer i=GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
return not IsUnitPaused(udg_Hero[i])and not udg_ShopCam[i]and GetOwningPlayer(GetTriggerUnit())==GetTriggerPlayer()and GetWidgetLife(GetTriggerUnit())>.405
endfunction
function Heroes_Speech_Select_Actions takes nothing returns nothing
local unit c=GetTriggerUnit()
local player p=GetOwningPlayer(c)
local integer i=GetUnitTypeId(c)
local integer id=GetPlayerId(p)
if i==heroes_rawcode[Naruto]or i==heroes_rikudo_rawcode[Naruto]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,9)
if i==1 then
call HeroSpeechSound(p,"Speech Naruto 1.mp3")
call HeroesSpeechSelectTimer(id,.15)
elseif i==2 then
call HeroSpeechSound(p,"Speech Naruto 2.mp3")
call HeroesSpeechSelectTimer(id,1.2)
elseif i==3 then
call HeroSpeechSound(p,"Speech Naruto 3.mp3")
call HeroesSpeechSelectTimer(id,1.05)
elseif i==4 then
call HeroSpeechSound(p,"Speech Naruto 6.mp3")
call HeroesSpeechSelectTimer(id,2.02)
elseif i==5 then
call HeroSpeechSound(p,"Speech Naruto 7.mp3")
call HeroesSpeechSelectTimer(id,2.08)
elseif i==6 then
call HeroSpeechSound(p,"Speech Naruto 8.mp3")
call HeroesSpeechSelectTimer(id,.15)
elseif i==7 then
call HeroSpeechSound(p,"Speech Naruto 9.mp3")
call HeroesSpeechSelectTimer(id,.18)
elseif i==8 then
call HeroSpeechSound(p,"Speech Naruto 10.mp3")
call HeroesSpeechSelectTimer(id,.84)
elseif i==9 then
call HeroSpeechSound(p,"Speech Naruto 12.mp3")
call HeroesSpeechSelectTimer(id,2.5)
endif
endif
elseif i==heroes_rawcode[Sakura]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Speech Sakura 1.mp3")
call HeroesSpeechSelectTimer(id,2.26)
elseif i==2 then
call HeroSpeechSound(p,"Speech Sakura 4.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==3 then
call HeroSpeechSound(p,"Speech Sakura 5.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==4 then
call HeroSpeechSound(p,"Speech Sakura 7.mp3")
call HeroesSpeechSelectTimer(id,2.5)
endif
endif
elseif i==heroes_rawcode[Sai]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Speech Sai 2.mp3")
call HeroesSpeechSelectTimer(id,2.258)
elseif i==2 then
call HeroSpeechSound(p,"Speech Sai 3.mp3")
call HeroesSpeechSelectTimer(id,2.232)
elseif i==3 then
call HeroSpeechSound(p,"Speech Sai 4.mp3")
call HeroesSpeechSelectTimer(id,.56)
elseif i==4 then
call HeroSpeechSound(p,"Speech Sai 5.mp3")
call HeroesSpeechSelectTimer(id,1.292)
endif
endif
elseif i==heroes_rawcode[Shikamaru]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech Shikamaru 1.mp3")
call HeroesSpeechSelectTimer(id,1.03)
elseif i==2 then
call HeroSpeechSound(p,"Speech Shikamaru 2.mp3")
call HeroesSpeechSelectTimer(id,3.2)
endif
endif
elseif i==heroes_rawcode[Madara]or i==heroes_rikudo_rawcode[Madara]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Speech Madara 1.mp3")
call HeroesSpeechSelectTimer(id,3.23)
elseif i==2 then
call HeroSpeechSound(p,"Speech Madara 4.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==3 then
call HeroSpeechSound(p,"Speech Madara 5.mp3")
call HeroesSpeechSelectTimer(id,1.2)
elseif i==4 then
call HeroSpeechSound(p,"Speech Madara 6.mp3")
call HeroesSpeechSelectTimer(id,1.2)
endif
endif
elseif i==heroes_rawcode[Nagato]then
if udg_Speech[id]==null and not Nagato_painClickSound then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Speech Nagato 1.mp3")
call HeroesSpeechSelectTimer(id,1.1)
elseif i==2 then
call HeroSpeechSound(p,"Speech Nagato 4.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==3 then
call HeroSpeechSound(p,"Speech Nagato 5.mp3")
call HeroesSpeechSelectTimer(id,3.25)
elseif i==4 then
call HeroSpeechSound(p,"Speech Nagato 6.mp3")
call HeroesSpeechSelectTimer(id,3.1)
endif
endif
elseif i==heroes_rawcode[Jugo]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Speech Juugo 4.mp3")
call HeroesSpeechSelectTimer(id,1.25)
elseif i==2 then
call HeroSpeechSound(p,"Speech Juugo 5.mp3")
call HeroesSpeechSelectTimer(id,1.1)
elseif i==3 then
call HeroSpeechSound(p,"Speech Juugo 6.mp3")
call HeroesSpeechSelectTimer(id,2.2)
endif
endif
elseif i==heroes_rawcode[Sasuke]or i==heroes_rikudo_rawcode[Sasuke]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,7)
if i==1 then
call HeroSpeechSound(p,"Speech Sasuke 1.mp3")
call HeroesSpeechSelectTimer(id,3.25)
elseif i==2 then
call HeroSpeechSound(p,"Speech Sasuke 2.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==3 then
call HeroSpeechSound(p,"Speech Sasuke 4.mp3")
call HeroesSpeechSelectTimer(id,4.)
elseif i==4 then
call HeroSpeechSound(p,"Speech Sasuke 5.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==5 then
call HeroSpeechSound(p,"Speech Sasuke 6.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==6 then
call HeroSpeechSound(p,"Speech Sasuke 10.mp3")
call HeroesSpeechSelectTimer(id,2.5)
endif
endif
elseif i==heroes_rawcode[Suigetsu]or i==morph_rawcode[1]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech Suigetsu 3.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==2 then
call HeroSpeechSound(p,"Speech Suigetsu 4.mp3")
call HeroesSpeechSelectTimer(id,1.5)
endif
endif
elseif i==heroes_rawcode[Jiraya]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Speech Jiraya 2.mp3")
call HeroesSpeechSelectTimer(id,3.2)
elseif i==2 then
call HeroSpeechSound(p,"Speech Jiraya 3.mp3")
call HeroesSpeechSelectTimer(id,2.1)
elseif i==3 then
call HeroSpeechSound(p,"Speech Jiraya 5.mp3")
call HeroesSpeechSelectTimer(id,1.25)
endif
endif
elseif i==heroes_rawcode[Chiyo]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Speech Chiyo 1.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==2 then
call HeroSpeechSound(p,"Speech Chiyo 3.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==3 then
call HeroSpeechSound(p,"Speech Chiyo 5.mp3")
call HeroesSpeechSelectTimer(id,3.25)
endif
endif
elseif i==heroes_rawcode[Hashirama]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech Hashirama 2.mp3")
call HeroesSpeechSelectTimer(id,2.5)
elseif i==2 then
call HeroSpeechSound(p,"Speech Hashirama 3.mp3")
call HeroesSpeechSelectTimer(id,1.5)
endif
endif
elseif i==heroes_rawcode[Gengetsu]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Speech NM 1.mp3")
call HeroesSpeechSelectTimer(id,1.25)
elseif i==2 then
call HeroSpeechSound(p,"Speech NM 3.mp3")
call HeroesSpeechSelectTimer(id,2.25)
elseif i==3 then
call HeroSpeechSound(p,"Speech NM 4.mp3")
call HeroesSpeechSelectTimer(id,2.25)
endif
endif
elseif i==heroes_rawcode[Sasori]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Speech Sasori 2.mp3")
call HeroesSpeechSelectTimer(id,3.25)
elseif i==2 then
call HeroSpeechSound(p,"Speech Sasori 3.mp3")
call HeroesSpeechSelectTimer(id,1.25)
endif
endif
elseif i==heroes_rawcode[Asuma]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Asuma Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,1.5)
elseif i==2 then
call HeroSpeechSound(p,"Asuma Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,.5)
elseif i==3 then
call HeroSpeechSound(p,"Asuma Speech Self 3.mp3")
call HeroesSpeechSelectTimer(id,1.75)
endif
endif
elseif i==heroes_rawcode[Gaara]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,5)
if i==1 then
call HeroSpeechSound(p,"Gaara Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,3.)
elseif i==2 then
call HeroSpeechSound(p,"Gaara Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==3 then
call HeroSpeechSound(p,"Gaara Speech Self 3.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==4 then
call HeroSpeechSound(p,"Gaara Speech Self 4.mp3")
call HeroesSpeechSelectTimer(id,4.)
elseif i==5 then
call HeroSpeechSound(p,"Gaara Speech Self 5.mp3")
call HeroesSpeechSelectTimer(id,2.)
endif
endif
elseif i==heroes_rawcode[Gai]then
if udg_Speech[id]==null and not Gai_SoundOn then
set i=GetRandomInt(1,5)
if i==1 then
call HeroSpeechSound(p,"Gai Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==2 then
call HeroSpeechSound(p,"Gai Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==3 then
call HeroSpeechSound(p,"Gai Speech Self 3.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==4 then
call HeroSpeechSound(p,"Gai Speech Self 4.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==5 then
call HeroSpeechSound(p,"Gai Speech Self 5.mp3")
call HeroesSpeechSelectTimer(id,.5)
endif
endif
elseif i==heroes_rawcode[Deidara]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,4)
if i==1 then
call HeroSpeechSound(p,"Deidara Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==2 then
call HeroSpeechSound(p,"Deidara Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,.3)
elseif i==3 then
call HeroSpeechSound(p,"Deidara Speech Self 3.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==4 then
call HeroSpeechSound(p,"Deidara Speech Self 4.mp3")
call HeroesSpeechSelectTimer(id,2.)
endif
endif
elseif i==heroes_rawcode[Kakashi]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,5)
if i==1 then
call HeroSpeechSound(p,"Kakashi Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==2 then
call HeroSpeechSound(p,"Kakashi Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==3 then
call HeroSpeechSound(p,"Kakashi Speech Self 3.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==4 then
call HeroSpeechSound(p,"Kakashi Speech Self 4.mp3")
call HeroesSpeechSelectTimer(id,1.)
elseif i==5 then
call HeroSpeechSound(p,"Kakashi Speech Self 5.mp3")
call HeroesSpeechSelectTimer(id,1.)
endif
endif
elseif i==heroes_rawcode[Mu]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Muu Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,4.25)
elseif i==2 then
call HeroSpeechSound(p,"Muu Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,2.25)
endif
endif
elseif i==heroes_rawcode[Neji]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Neji Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==2 then
call HeroSpeechSound(p,"Neji Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,2.25)
endif
endif
elseif i==heroes_rawcode[Obito]or i==heroes_rikudo_rawcode[Obito]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,3)
if i==1 then
call HeroSpeechSound(p,"Obito Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,3.)
elseif i==2 then
call HeroSpeechSound(p,"Obito Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,4.)
elseif i==3 then
call HeroSpeechSound(p,"Obito Speech Self 3.mp3")
call HeroesSpeechSelectTimer(id,3.)
endif
endif
elseif i==heroes_rawcode[Hidan]then
if udg_Speech[id]==null then
set i=GetRandomInt(1,2)
if i==1 then
call HeroSpeechSound(p,"Hidan Speech Self 1.mp3")
call HeroesSpeechSelectTimer(id,2.)
elseif i==2 then
call HeroSpeechSound(p,"Hidan Speech Self 2.mp3")
call HeroesSpeechSelectTimer(id,4.)
endif
endif
endif
set p=null
set c=null
endfunction
function InitTrig_Heroes_Speech_Select takes nothing returns nothing
local integer i=0
set gg_trg_Heroes_Speech_Select=CreateTrigger()
loop
exitwhen i>10
if i!=5 then
call TriggerRegisterPlayerUnitEvent(gg_trg_Heroes_Speech_Select,Player(i),EVENT_PLAYER_UNIT_SELECTED,null)
endif
set i=i+1
endloop
call TriggerAddCondition(gg_trg_Heroes_Speech_Select,Condition(function Heroes_Speech_Select_Conditions))
call TriggerAddAction(gg_trg_Heroes_Speech_Select,function Heroes_Speech_Select_Actions)
endfunction
function JutsuSystemData_IsTrackableEqualsEvent takes integer idDes returns boolean
local boolean log=false
if idDes==0x42303431 or idDes==0x42303435 then
set log=true
endif
return log
endfunction
function JutsuSystemData_GetEventNumber takes integer idp returns integer
local integer number=0
local integer idu=GetUnitTypeId(udg_Hero[idp])
if idu==heroes_rawcode[Asuma]then
set number=6
elseif idu==heroes_rawcode[Chiyo]then
set number=6
elseif idu==heroes_rawcode[Danzo]then
set number=6
elseif idu==heroes_rawcode[Darui]then
set number=6
elseif idu==heroes_rawcode[Deidara]then
set number=6
elseif idu==heroes_rawcode[Ei]then
set number=6
elseif idu==heroes_rawcode[Gaara]then
set number=6
elseif idu==heroes_rawcode[Gai]then
set number=6
elseif idu==heroes_rawcode[Gengetsu]then
set number=6
elseif idu==heroes_rawcode[Haku]then
set number=6
elseif idu==heroes_rawcode[Han]then
set number=6
elseif idu==heroes_rawcode[Hanzo]then
set number=6
elseif idu==heroes_rawcode[Hashirama]then
set number=6
elseif idu==heroes_rawcode[Hidan]then
set number=6
elseif idu==heroes_rawcode[Itachi]then
set number=6
elseif idu==heroes_rawcode[Jiraya]then
set number=6
elseif idu==heroes_rawcode[Jugo]then
set number=6
elseif idu==heroes_rawcode[Kabuto]then
set number=6
elseif idu==heroes_rawcode[Kakashi]then
set number=6
elseif idu==heroes_rawcode[Madara]then
set number=6
elseif idu==heroes_rawcode[Mei]then
set number=6
elseif idu==heroes_rawcode[Minato]then
set number=6
elseif idu==heroes_rawcode[Mu]then
set number=6
elseif idu==heroes_rawcode[Nagato]then
set number=6
elseif idu==heroes_rawcode[Naruto]then
set number=6
elseif idu==heroes_rawcode[Neji]then
set number=6
elseif idu==heroes_rawcode[Obito]then
set number=6
elseif idu==heroes_rawcode[Onoki]then
set number=6
elseif idu==heroes_rawcode[Orochimaru]then
set number=6
elseif idu==heroes_rawcode[Sai]then
set number=6
elseif idu==heroes_rawcode[Sakura]then
set number=6
elseif idu==heroes_rawcode[Sasori]then
set number=6
elseif idu==heroes_rawcode[Sasuke]then
set number=6
elseif idu==heroes_rawcode[Shikamaru]then
set number=6
elseif idu==heroes_rawcode[Suigetsu]then
set number=6
elseif idu==heroes_rawcode[Tobirama]then
set number=6
elseif idu==heroes_rawcode[Tsunade]then
set number=6
elseif idu==heroes_rawcode[Yamato]then
set number=6
elseif idu==heroes_rawcode[Zabuza]then
set number=6
elseif idu==heroes_rawcode[Zetsu]then
set number=6
endif
return number
endfunction
function JutsuSystemData_GetEventDescriptionId takes integer idp,integer value returns string
local string desc="Событие ещё не произошло!"
local integer idu=GetUnitTypeId(udg_Hero[idp])
if value==1 and JSeventOne[idp]then
if idu==heroes_rawcode[Asuma]then
set desc="1 событие для Асумы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="1 событие для Чиё"
elseif idu==heroes_rawcode[Danzo]then
set desc="1 событие для Данзо"
elseif idu==heroes_rawcode[Darui]then
set desc="1 событие для Даруи"
elseif idu==heroes_rawcode[Deidara]then
set desc="1 событие для Дейдары"
elseif idu==heroes_rawcode[Ei]then
set desc="1 событие для Эя"
elseif idu==heroes_rawcode[Gaara]then
set desc="1 событие для Гаары"
elseif idu==heroes_rawcode[Gai]then
set desc="1 событие для Гая"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="1 событие для Генгетсу"
elseif idu==heroes_rawcode[Haku]then
set desc="1 событие для Хаку"
elseif idu==heroes_rawcode[Han]then
set desc="1 событие для Хана"
elseif idu==heroes_rawcode[Hanzo]then
set desc="1 событие для Ханзо"
elseif idu==heroes_rawcode[Hashirama]then
set desc="1 событие для Хаширамы"
elseif idu==heroes_rawcode[Hidan]then
set desc="1 событие для Хидана"
elseif idu==heroes_rawcode[Itachi]then
set desc="1 событие для Итачи"
elseif idu==heroes_rawcode[Jiraya]then
set desc="1 событие для Джирайи"
elseif idu==heroes_rawcode[Jugo]then
set desc="1 событие для Джуго"
elseif idu==heroes_rawcode[Kabuto]then
set desc="1 событие для Кабуто"
elseif idu==heroes_rawcode[Kakashi]then
set desc="1 событие для Какаши"
elseif idu==heroes_rawcode[Madara]then
set desc="1 событие для Мадары"
elseif idu==heroes_rawcode[Mei]then
set desc="1 событие для Мей"
elseif idu==heroes_rawcode[Minato]then
set desc="1 событие для Минато"
elseif idu==heroes_rawcode[Mu]then
set desc="1 событие для Му"
elseif idu==heroes_rawcode[Nagato]then
set desc="1 событие для Нагато"
elseif idu==heroes_rawcode[Naruto]then
set desc="1 событие для Наруто"
elseif idu==heroes_rawcode[Neji]then
set desc="1 событие для Неджи"
elseif idu==heroes_rawcode[Obito]then
set desc="1 событие для Обито"
elseif idu==heroes_rawcode[Onoki]then
set desc="1 событие для Оноки"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="1 событие для Орочимару"
elseif idu==heroes_rawcode[Sai]then
set desc="1 событие для Сая"
elseif idu==heroes_rawcode[Sakura]then
set desc="1 событие для Сакуры"
elseif idu==heroes_rawcode[Sasori]then
set desc="1 событие для Сасори"
elseif idu==heroes_rawcode[Sasuke]then
set desc="1 событие для Саске"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="1 событие для Шикамару"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="1 событие для Суйгетсу"
elseif idu==heroes_rawcode[Tobirama]then
set desc="1 событие для Тобирамы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="1 событие для Тсунаде"
elseif idu==heroes_rawcode[Yamato]then
set desc="1 событие для Ямато"
elseif idu==heroes_rawcode[Zabuza]then
set desc="1 событие для Забузы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="1 событие для Зетсу"
endif
elseif value==2 and JSeventTwo[idp]then
if idu==heroes_rawcode[Asuma]then
set desc="2 событие для Асумы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="2 событие для Чиё"
elseif idu==heroes_rawcode[Danzo]then
set desc="2 событие для Данзо"
elseif idu==heroes_rawcode[Darui]then
set desc="2 событие для Даруи"
elseif idu==heroes_rawcode[Deidara]then
set desc="2 событие для Дейдары"
elseif idu==heroes_rawcode[Ei]then
set desc="2 событие для Эя"
elseif idu==heroes_rawcode[Gaara]then
set desc="2 событие для Гаары"
elseif idu==heroes_rawcode[Gai]then
set desc="2 событие для Гая"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="2 событие для Генгетсу"
elseif idu==heroes_rawcode[Haku]then
set desc="2 событие для Хаку"
elseif idu==heroes_rawcode[Han]then
set desc="2 событие для Хана"
elseif idu==heroes_rawcode[Hanzo]then
set desc="2 событие для Ханзо"
elseif idu==heroes_rawcode[Hashirama]then
set desc="2 событие для Хаширамы"
elseif idu==heroes_rawcode[Hidan]then
set desc="2 событие для Хидана"
elseif idu==heroes_rawcode[Itachi]then
set desc="2 событие для Итачи"
elseif idu==heroes_rawcode[Jiraya]then
set desc="2 событие для Джирайи"
elseif idu==heroes_rawcode[Jugo]then
set desc="2 событие для Джуго"
elseif idu==heroes_rawcode[Kabuto]then
set desc="2 событие для Кабуто"
elseif idu==heroes_rawcode[Kakashi]then
set desc="2 событие для Какаши"
elseif idu==heroes_rawcode[Madara]then
set desc="2 событие для Мадары"
elseif idu==heroes_rawcode[Mei]then
set desc="2 событие для Мей"
elseif idu==heroes_rawcode[Minato]then
set desc="2 событие для Минато"
elseif idu==heroes_rawcode[Mu]then
set desc="2 событие для Му"
elseif idu==heroes_rawcode[Nagato]then
set desc="2 событие для Нагато"
elseif idu==heroes_rawcode[Naruto]then
set desc="2 событие для Наруто"
elseif idu==heroes_rawcode[Neji]then
set desc="2 событие для Неджи"
elseif idu==heroes_rawcode[Obito]then
set desc="2 событие для Обито"
elseif idu==heroes_rawcode[Onoki]then
set desc="2 событие для Оноки"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="2 событие для Орочимару"
elseif idu==heroes_rawcode[Sai]then
set desc="2 событие для Сая"
elseif idu==heroes_rawcode[Sakura]then
set desc="2 событие для Сакуры"
elseif idu==heroes_rawcode[Sasori]then
set desc="2 событие для Сасори"
elseif idu==heroes_rawcode[Sasuke]then
set desc="2 событие для Саске"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="2 событие для Шикамару"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="2 событие для Суйгетсу"
elseif idu==heroes_rawcode[Tobirama]then
set desc="2 событие для Тобирамы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="2 событие для Тсунаде"
elseif idu==heroes_rawcode[Yamato]then
set desc="2 событие для Ямато"
elseif idu==heroes_rawcode[Zabuza]then
set desc="2 событие для Забузы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="2 событие для Зетсу"
endif
elseif value==3 and JSeventThree[idp]then
if idu==heroes_rawcode[Asuma]then
set desc="3 событие для Асумы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="3 событие для Чиё"
elseif idu==heroes_rawcode[Danzo]then
set desc="3 событие для Данзо"
elseif idu==heroes_rawcode[Darui]then
set desc="3 событие для Даруи"
elseif idu==heroes_rawcode[Deidara]then
set desc="3 событие для Дейдары"
elseif idu==heroes_rawcode[Ei]then
set desc="3 событие для Эя"
elseif idu==heroes_rawcode[Gaara]then
set desc="3 событие для Гаары"
elseif idu==heroes_rawcode[Gai]then
set desc="3 событие для Гая"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="3 событие для Генгетсу"
elseif idu==heroes_rawcode[Haku]then
set desc="3 событие для Хаку"
elseif idu==heroes_rawcode[Han]then
set desc="3 событие для Хана"
elseif idu==heroes_rawcode[Hanzo]then
set desc="3 событие для Ханзо"
elseif idu==heroes_rawcode[Hashirama]then
set desc="3 событие для Хаширамы"
elseif idu==heroes_rawcode[Hidan]then
set desc="3 событие для Хидана"
elseif idu==heroes_rawcode[Itachi]then
set desc="3 событие для Итачи"
elseif idu==heroes_rawcode[Jiraya]then
set desc="3 событие для Джирайи"
elseif idu==heroes_rawcode[Jugo]then
set desc="3 событие для Джуго"
elseif idu==heroes_rawcode[Kabuto]then
set desc="3 событие для Кабуто"
elseif idu==heroes_rawcode[Kakashi]then
set desc="3 событие для Какаши"
elseif idu==heroes_rawcode[Madara]then
set desc="3 событие для Мадары"
elseif idu==heroes_rawcode[Mei]then
set desc="3 событие для Мей"
elseif idu==heroes_rawcode[Minato]then
set desc="3 событие для Минато"
elseif idu==heroes_rawcode[Mu]then
set desc="3 событие для Му"
elseif idu==heroes_rawcode[Nagato]then
set desc="3 событие для Нагато"
elseif idu==heroes_rawcode[Naruto]then
set desc="3 событие для Наруто"
elseif idu==heroes_rawcode[Neji]then
set desc="3 событие для Неджи"
elseif idu==heroes_rawcode[Obito]then
set desc="3 событие для Обито"
elseif idu==heroes_rawcode[Onoki]then
set desc="3 событие для Оноки"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="3 событие для Орочимару"
elseif idu==heroes_rawcode[Sai]then
set desc="3 событие для Сая"
elseif idu==heroes_rawcode[Sakura]then
set desc="3 событие для Сакуры"
elseif idu==heroes_rawcode[Sasori]then
set desc="3 событие для Сасори"
elseif idu==heroes_rawcode[Sasuke]then
set desc="3 событие для Саске"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="3 событие для Шикамару"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="3 событие для Суйгетсу"
elseif idu==heroes_rawcode[Tobirama]then
set desc="3 событие для Тобирамы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="3 событие для Тсунаде"
elseif idu==heroes_rawcode[Yamato]then
set desc="3 событие для Ямато"
elseif idu==heroes_rawcode[Zabuza]then
set desc="3 событие для Забузы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="3 событие для Зетсу"
endif
elseif value==4 and JSeventFour[idp]then
if idu==heroes_rawcode[Asuma]then
set desc="4 событие для Асумы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="4 событие для Чиё"
elseif idu==heroes_rawcode[Danzo]then
set desc="4 событие для Данзо"
elseif idu==heroes_rawcode[Darui]then
set desc="4 событие для Даруи"
elseif idu==heroes_rawcode[Deidara]then
set desc="4 событие для Дейдары"
elseif idu==heroes_rawcode[Ei]then
set desc="4 событие для Эя"
elseif idu==heroes_rawcode[Gaara]then
set desc="4 событие для Гаары"
elseif idu==heroes_rawcode[Gai]then
set desc="4 событие для Гая"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="4 событие для Генгетсу"
elseif idu==heroes_rawcode[Haku]then
set desc="4 событие для Хаку"
elseif idu==heroes_rawcode[Han]then
set desc="4 событие для Хана"
elseif idu==heroes_rawcode[Hanzo]then
set desc="4 событие для Ханзо"
elseif idu==heroes_rawcode[Hashirama]then
set desc="4 событие для Хаширамы"
elseif idu==heroes_rawcode[Hidan]then
set desc="4 событие для Хидана"
elseif idu==heroes_rawcode[Itachi]then
set desc="4 событие для Итачи"
elseif idu==heroes_rawcode[Jiraya]then
set desc="4 событие для Джирайи"
elseif idu==heroes_rawcode[Jugo]then
set desc="4 событие для Джуго"
elseif idu==heroes_rawcode[Kabuto]then
set desc="4 событие для Кабуто"
elseif idu==heroes_rawcode[Kakashi]then
set desc="4 событие для Какаши"
elseif idu==heroes_rawcode[Madara]then
set desc="4 событие для Мадары"
elseif idu==heroes_rawcode[Mei]then
set desc="4 событие для Мей"
elseif idu==heroes_rawcode[Minato]then
set desc="4 событие для Минато"
elseif idu==heroes_rawcode[Mu]then
set desc="4 событие для Му"
elseif idu==heroes_rawcode[Nagato]then
set desc="4 событие для Нагато"
elseif idu==heroes_rawcode[Naruto]then
set desc="4 событие для Наруто"
elseif idu==heroes_rawcode[Neji]then
set desc="4 событие для Неджи"
elseif idu==heroes_rawcode[Obito]then
set desc="4 событие для Обито"
elseif idu==heroes_rawcode[Onoki]then
set desc="4 событие для Оноки"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="4 событие для Орочимару"
elseif idu==heroes_rawcode[Sai]then
set desc="4 событие для Сая"
elseif idu==heroes_rawcode[Sakura]then
set desc="4 событие для Сакуры"
elseif idu==heroes_rawcode[Sasori]then
set desc="4 событие для Сасори"
elseif idu==heroes_rawcode[Sasuke]then
set desc="4 событие для Саске"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="4 событие для Шикамару"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="4 событие для Суйгетсу"
elseif idu==heroes_rawcode[Tobirama]then
set desc="4 событие для Тобирамы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="4 событие для Тсунаде"
elseif idu==heroes_rawcode[Yamato]then
set desc="4 событие для Ямато"
elseif idu==heroes_rawcode[Zabuza]then
set desc="4 событие для Забузы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="4 событие для Зетсу"
endif
elseif value==5 and JSeventFive[idp]then
if idu==heroes_rawcode[Asuma]then
set desc="5 событие для Асумы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="5 событие для Чиё"
elseif idu==heroes_rawcode[Danzo]then
set desc="5 событие для Данзо"
elseif idu==heroes_rawcode[Darui]then
set desc="5 событие для Даруи"
elseif idu==heroes_rawcode[Deidara]then
set desc="5 событие для Дейдары"
elseif idu==heroes_rawcode[Ei]then
set desc="5 событие для Эя"
elseif idu==heroes_rawcode[Gaara]then
set desc="5 событие для Гаары"
elseif idu==heroes_rawcode[Gai]then
set desc="5 событие для Гая"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="5 событие для Генгетсу"
elseif idu==heroes_rawcode[Haku]then
set desc="5 событие для Хаку"
elseif idu==heroes_rawcode[Han]then
set desc="5 событие для Хана"
elseif idu==heroes_rawcode[Hanzo]then
set desc="5 событие для Ханзо"
elseif idu==heroes_rawcode[Hashirama]then
set desc="5 событие для Хаширамы"
elseif idu==heroes_rawcode[Hidan]then
set desc="5 событие для Хидана"
elseif idu==heroes_rawcode[Itachi]then
set desc="5 событие для Итачи"
elseif idu==heroes_rawcode[Jiraya]then
set desc="5 событие для Джирайи"
elseif idu==heroes_rawcode[Jugo]then
set desc="5 событие для Джуго"
elseif idu==heroes_rawcode[Kabuto]then
set desc="5 событие для Кабуто"
elseif idu==heroes_rawcode[Kakashi]then
set desc="5 событие для Какаши"
elseif idu==heroes_rawcode[Madara]then
set desc="5 событие для Мадары"
elseif idu==heroes_rawcode[Mei]then
set desc="5 событие для Мей"
elseif idu==heroes_rawcode[Minato]then
set desc="5 событие для Минато"
elseif idu==heroes_rawcode[Mu]then
set desc="5 событие для Му"
elseif idu==heroes_rawcode[Nagato]then
set desc="5 событие для Нагато"
elseif idu==heroes_rawcode[Naruto]then
set desc="5 событие для Наруто"
elseif idu==heroes_rawcode[Neji]then
set desc="5 событие для Неджи"
elseif idu==heroes_rawcode[Obito]then
set desc="5 событие для Обито"
elseif idu==heroes_rawcode[Onoki]then
set desc="5 событие для Оноки"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="5 событие для Орочимару"
elseif idu==heroes_rawcode[Sai]then
set desc="5 событие для Сая"
elseif idu==heroes_rawcode[Sakura]then
set desc="5 событие для Сакуры"
elseif idu==heroes_rawcode[Sasori]then
set desc="5 событие для Сасори"
elseif idu==heroes_rawcode[Sasuke]then
set desc="5 событие для Саске"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="5 событие для Шикамару"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="5 событие для Суйгетсу"
elseif idu==heroes_rawcode[Tobirama]then
set desc="5 событие для Тобирамы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="5 событие для Тсунаде"
elseif idu==heroes_rawcode[Yamato]then
set desc="5 событие для Ямато"
elseif idu==heroes_rawcode[Zabuza]then
set desc="5 событие для Забузы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="5 событие для Зетсу"
endif
elseif value==6 and JSeventSix[idp]then
if idu==heroes_rawcode[Asuma]then
set desc="6 событие для Асумы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="6 событие для Чиё"
elseif idu==heroes_rawcode[Danzo]then
set desc="6 событие для Данзо"
elseif idu==heroes_rawcode[Darui]then
set desc="6 событие для Даруи"
elseif idu==heroes_rawcode[Deidara]then
set desc="6 событие для Дейдары"
elseif idu==heroes_rawcode[Ei]then
set desc="6 событие для Эя"
elseif idu==heroes_rawcode[Gaara]then
set desc="6 событие для Гаары"
elseif idu==heroes_rawcode[Gai]then
set desc="6 событие для Гая"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="6 событие для Генгетсу"
elseif idu==heroes_rawcode[Haku]then
set desc="6 событие для Хаку"
elseif idu==heroes_rawcode[Han]then
set desc="6 событие для Хана"
elseif idu==heroes_rawcode[Hanzo]then
set desc="6 событие для Ханзо"
elseif idu==heroes_rawcode[Hashirama]then
set desc="6 событие для Хаширамы"
elseif idu==heroes_rawcode[Hidan]then
set desc="6 событие для Хидана"
elseif idu==heroes_rawcode[Itachi]then
set desc="6 событие для Итачи"
elseif idu==heroes_rawcode[Jiraya]then
set desc="6 событие для Джирайи"
elseif idu==heroes_rawcode[Jugo]then
set desc="6 событие для Джуго"
elseif idu==heroes_rawcode[Kabuto]then
set desc="6 событие для Кабуто"
elseif idu==heroes_rawcode[Kakashi]then
set desc="6 событие для Какаши"
elseif idu==heroes_rawcode[Madara]then
set desc="6 событие для Мадары"
elseif idu==heroes_rawcode[Mei]then
set desc="6 событие для Мей"
elseif idu==heroes_rawcode[Minato]then
set desc="6 событие для Минато"
elseif idu==heroes_rawcode[Mu]then
set desc="6 событие для Му"
elseif idu==heroes_rawcode[Nagato]then
set desc="6 событие для Нагато"
elseif idu==heroes_rawcode[Naruto]then
set desc="6 событие для Наруто"
elseif idu==heroes_rawcode[Neji]then
set desc="6 событие для Неджи"
elseif idu==heroes_rawcode[Obito]then
set desc="6 событие для Обито"
elseif idu==heroes_rawcode[Onoki]then
set desc="6 событие для Оноки"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="6 событие для Орочимару"
elseif idu==heroes_rawcode[Sai]then
set desc="6 событие для Сая"
elseif idu==heroes_rawcode[Sakura]then
set desc="6 событие для Сакуры"
elseif idu==heroes_rawcode[Sasori]then
set desc="6 событие для Сасори"
elseif idu==heroes_rawcode[Sasuke]then
set desc="6 событие для Саске"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="6 событие для Шикамару"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="6 событие для Суйгетсу"
elseif idu==heroes_rawcode[Tobirama]then
set desc="6 событие для Тобирамы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="6 событие для Тсунаде"
elseif idu==heroes_rawcode[Yamato]then
set desc="6 событие для Ямато"
elseif idu==heroes_rawcode[Zabuza]then
set desc="6 событие для Забузы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="6 событие для Зетсу"
endif
endif
return desc
endfunction
function JutsuSystemData_GetEventModelId takes integer idp,integer value returns integer
local integer idModel=0
if value==1 and JSeventOne[idp]then
set idModel=0x42303435
elseif value==2 and JSeventTwo[idp]then
set idModel=0x42303435
elseif value==3 and JSeventThree[idp]then
set idModel=0x42303435
elseif value==4 and JSeventTwo[idp]then
set idModel=0x42303435
elseif value==5 and JSeventThree[idp]then
set idModel=0x42303435
elseif value==6 and JSeventTwo[idp]then
set idModel=0x42303435
else
set idModel=0x42303431
endif
return idModel
endfunction
function JutsuSystemData_GetEventSpellId takes integer value returns integer
local integer idSpell=0
if value==1 then
set idSpell=0x41303147
elseif value==2 then
set idSpell=0x41313044
elseif value==3 then
set idSpell=0x41313043
elseif value==4 then
set idSpell=0x41313049
elseif value==5 then
set idSpell=0x41313042
elseif value==6 then
set idSpell=0x41303635
endif
return idSpell
endfunction
function JutsuSystemData_IsTrackableEqualsBijuBuffFuin takes integer idDes returns boolean
local boolean log=false
if idDes==0x42303448 then
set log=true
endif
return log
endfunction
function JutsuSystemData_GetBijuBuffFuinDescriptionId takes integer idp returns string
local string desc="Вам нужно запечатать хвостатого зверя!"
if JSbijuFuin[idp]then
set desc="При нажатии вы запечатаете силу Биджу!"
endif
return desc
endfunction
function JutsuSystemData_GetBijuBuffFuinModelId takes integer idp returns integer
local integer idModel=0
if not JSbijuBuffFuin[idp]then
set idModel=0x42303448
else
set idModel=0x42303449
endif
return idModel
endfunction
function JutsuSystemData_GetBijuBuffFuinSpellId takes nothing returns integer
return 0x41313035
endfunction
function JutsuSystemData_HasUnitBijuBuffId takes integer idp returns boolean
local boolean log=true
local integer idu=GetUnitTypeId(udg_Hero[idp])
if idu==heroes_rawcode[Madara]or idu==heroes_rawcode[Naruto]or idu==heroes_rawcode[Obito]or idu==heroes_rawcode[Sasuke]then
set log=false
endif
return log
endfunction
function JutsuSystemData_IsTrackableEqualsBiju takes integer idDes returns boolean
local boolean log=false
if idDes==BijuDesEmptyID or idDes==0x42303250 or idDes==0x42303254 or idDes==0x42303255 or idDes==0x42303258 or idDes==0x42303259 or idDes==0x42303330 or idDes==0x42303331 or idDes==0x42303334 then
set log=true
endif
return log
endfunction
function JutsuSystemData_GetBijuNameId takes integer idp returns string
local string nameColor="|cFFFF5000"
local string nameBiju=null
if JSbijuFuinNumber[idp]==0 then
set nameBiju=AttantionTextColored+"У вас нет запечатанного хвостатого зверя!|r"
elseif JSbijuFuinNumber[idp]==1 then
set nameBiju="У вас есть однохвостый - "+nameColor+"Шукаку|r"
elseif JSbijuFuinNumber[idp]==2 then
set nameBiju="У вас есть двуххвостый - "+nameColor+"Мататаби|r"
elseif JSbijuFuinNumber[idp]==3 then
set nameBiju="У вас есть трёххвостый - "+nameColor+"Исобу|r"
elseif JSbijuFuinNumber[idp]==4 then
set nameBiju="У вас есть четырёххвостый - "+nameColor+"Сон Гоку|r"
elseif JSbijuFuinNumber[idp]==5 then
set nameBiju="У вас есть пятихвостый - "+nameColor+"Кокуо|r"
elseif JSbijuFuinNumber[idp]==6 then
set nameBiju="У вас есть шестихвостый - "+nameColor+"Сайкен|r"
elseif JSbijuFuinNumber[idp]==7 then
set nameBiju="У вас есть семихвостый - "+nameColor+"Чомей|r"
elseif JSbijuFuinNumber[idp]==8 then
set nameBiju="У вас есть восмьихвостый - "+nameColor+"Гьюки|r"
elseif JSbijuFuinNumber[idp]==9 then
set nameBiju="У вас есть девятихвостый - "+nameColor+"Курама|r"
endif
set nameColor=null
return nameBiju
endfunction
function JutsuSystemData_GetBijuModelId takes integer idp returns integer
local integer idModel=0
if JSbijuFuinNumber[idp]==0 then
set idModel=0x4230324F
elseif JSbijuFuinNumber[idp]==1 then
set idModel=0x42303250
elseif JSbijuFuinNumber[idp]==2 then
set idModel=0x42303252
elseif JSbijuFuinNumber[idp]==3 then
set idModel=0x42303254
elseif JSbijuFuinNumber[idp]==4 then
set idModel=0x42303255
elseif JSbijuFuinNumber[idp]==5 then
set idModel=0x42303258
elseif JSbijuFuinNumber[idp]==6 then
set idModel=0x42303259
elseif JSbijuFuinNumber[idp]==7 then
set idModel=0x42303330
elseif JSbijuFuinNumber[idp]==8 then
set idModel=0x42303331
elseif JSbijuFuinNumber[idp]==9 then
set idModel=0x42303334
endif
return idModel
endfunction
function JutsuSystemData_GetBijuSpellId takes integer idp returns integer
return 0x41304556
endfunction
function JutsuSystemData_GetRTNDescription takes integer value returns string
local string desc=null
if value==1 then
set desc="Даёт 3,75 ед. физической защиты и 7,5 % сопротивления к Ниндзюцу"
elseif value==2 then
set desc="Даёт 2,50 ед. регенерации здоровья и 2,00 ед. регенерации чакры"
elseif value==3 then
set desc="Даёт 6 % скорости передвижения и 10 % скорости боя"
elseif value==4 then
set desc="Даёт 7,5 % урона от Ниндзюцу и 5 % урона от Тайдзюцу"
endif
return desc
endfunction
function JutsuSystemData_GetRTNPoint takes integer idp returns integer
return JS_RTN_MaxLevel-JS_RTN_CurLevel[idp]
endfunction
function JutsuSystemData_GetRTNModelId takes integer value returns integer
local integer idModel=0
if value==1 then
set idModel=0x4230324B
elseif value==2 then
set idModel=0x4230324D
elseif value==3 then
set idModel=0x4230324E
elseif value==4 then
set idModel=0x4230324C
endif
return idModel
endfunction
function JutsuSystemData_IsExistsRTN takes integer idp returns boolean
local boolean log=true
local integer idu=GetUnitTypeId(udg_Hero[idp])
if idu==heroes_rawcode[Danzo]or idu==heroes_rawcode[Gai]or idu==heroes_rawcode[Gengetsu]or idu==heroes_rawcode[Haku]or idu==heroes_rawcode[Hanzo]or idu==heroes_rawcode[Hashirama]or idu==heroes_rawcode[Hidan]or idu==heroes_rawcode[Itachi]or idu==heroes_rawcode[Jiraya]or idu==heroes_rawcode[Madara]or idu==heroes_rawcode[Minato]or idu==heroes_rawcode[Mu]or idu==heroes_rawcode[Nagato]or idu==heroes_rawcode[Naruto]or idu==morph_rawcode[4]or idu==heroes_rawcode[Obito]or idu==heroes_rawcode[Onoki]or idu==heroes_rawcode[Sai]or idu==heroes_rawcode[Sasori]or idu==heroes_rawcode[Sasuke]or idu==heroes_rawcode[Zabuza]then
set log=false
endif
return log
endfunction
function JutsuSystemData_GetRTNId takes integer value returns integer
local integer idSpell=0
if value==1 then
set idSpell=0x4130495A
elseif value==2 then
set idSpell=0x41304D53
elseif value==3 then
set idSpell=0x41305634
elseif value==4 then
set idSpell=0x4130354B
endif
return idSpell
endfunction
function JutsuSystemData_GetSkillPoint takes integer idp returns integer
local integer lvl=GetHeroLevel(udg_Hero[idp])
local integer sp=lvl-JSSP[idp]
if lvl>4 then
set sp=4-JSSP[idp]
endif
return sp
endfunction
function JutsuSystemData_GetValueMax takes integer idp returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer Vmax=1
if idu==heroes_rawcode[Deidara]then
set Vmax=2
elseif idu==heroes_rawcode[Jiraya]then
set Vmax=2
elseif idu==heroes_rawcode[Madara]then
set Vmax=2
endif
return Vmax
endfunction
function JutsuSystemData_IsTrackableEqualsBijuBuff takes integer idDes returns boolean
local boolean log=false
if idDes==0x42303335 or idDes==0x42303344 or idDes==0x42303345 or idDes==0x42303346 or idDes==0x42303347 or idDes==0x4230334B or idDes==0x42303445 or idDes==0x42303446 then
set log=true
endif
return log
endfunction
function JutsuSystemData_IsGetBijuBuffMarked takes integer idp,integer value returns boolean
local integer idModel=0
local boolean log=false
if value==1 and JSbijuBuffOne[idp]then
set log=true
elseif value==2 and JSbijuBuffTwo[idp]then
set log=true
elseif value==3 and JSbijuBuffThree[idp]then
set log=true
elseif value==4 and JSbijuBuffFour[idp]then
set log=true
elseif value==5 and JSbijuBuffFive[idp]then
set log=true
elseif value==6 and JSbijuBuffSix[idp]then
set log=true
elseif value==7 and JSbijuBuffSeven[idp]then
set log=true
elseif value==8 and JSbijuBuffEight[idp]then
set log=true
endif
return log
endfunction
function JutsuSystemData_GetBijuBuffModelId takes integer idp,integer i,integer value returns integer
local integer idModel=0
if not JSbijuBuffFuin[idp]and i<=value then
if i==1 then
set idModel=0x42303335
elseif i==2 then
set idModel=0x42303344
elseif i==3 then
set idModel=0x42303345
elseif i==4 then
set idModel=0x42303346
elseif i==5 then
set idModel=0x42303347
elseif i==6 then
set idModel=0x4230334B
elseif i==7 then
set idModel=0x42303445
elseif i==8 then
set idModel=0x42303446
endif
else
set idModel=0x42303449
endif
return idModel
endfunction
function JutsuSystemData_GetBijuBuffSpellId takes integer value returns integer
local integer idSpell=0
if value==1 then
set idSpell=0x41304E52
elseif value==2 then
set idSpell=0x41304752
elseif value==3 then
set idSpell=0x41303657
elseif value==4 then
set idSpell=0x41304837
elseif value==5 then
set idSpell=0x41304650
elseif value==6 then
set idSpell=0x41303744
elseif value==7 then
set idSpell=0x4131354D
elseif value==8 then
set idSpell=0x41313452
endif
return idSpell
endfunction
function JutsuSystemData_GetBijuBuffSpellAddId takes integer i returns integer
local integer idSpell=0
if i==1 then
set idSpell=0x41313248
elseif i==2 then
set idSpell=0x4130564C
elseif i==3 then
set idSpell=0x41304337
elseif i==4 then
set idSpell=0x41304553
elseif i==5 then
set idSpell=0x4130474B
elseif i==6 then
set idSpell=0x4130504C
endif
return idSpell
endfunction
function JutsuSystemData_GetBijuBuffNumber takes integer idp returns integer
local integer number=0
local integer idu=GetUnitTypeId(udg_Hero[idp])
if idu==heroes_rawcode[Asuma]then
set number=6
elseif idu==heroes_rawcode[Chiyo]then
set number=6
elseif idu==heroes_rawcode[Danzo]then
set number=6
elseif idu==heroes_rawcode[Darui]then
set number=6
elseif idu==heroes_rawcode[Deidara]then
set number=6
elseif idu==heroes_rawcode[Ei]then
set number=6
elseif idu==heroes_rawcode[Gaara]then
set number=6
elseif idu==heroes_rawcode[Gai]then
set number=6
elseif idu==heroes_rawcode[Gengetsu]then
set number=6
elseif idu==heroes_rawcode[Haku]then
set number=6
elseif idu==heroes_rawcode[Han]then
set number=6
elseif idu==heroes_rawcode[Hanzo]then
set number=6
elseif idu==heroes_rawcode[Hashirama]then
set number=6
elseif idu==heroes_rawcode[Hidan]then
set number=6
elseif idu==heroes_rawcode[Itachi]then
set number=6
elseif idu==heroes_rawcode[Jiraya]then
set number=6
elseif idu==heroes_rawcode[Jugo]then
set number=6
elseif idu==heroes_rawcode[Kabuto]then
set number=6
elseif idu==heroes_rawcode[Kakashi]then
set number=6
elseif idu==heroes_rawcode[Mei]then
set number=6
elseif idu==heroes_rawcode[Minato]then
set number=6
elseif idu==heroes_rawcode[Mu]then
set number=6
elseif idu==heroes_rawcode[Nagato]then
set number=6
elseif idu==heroes_rawcode[Neji]then
set number=6
elseif idu==heroes_rawcode[Onoki]then
set number=6
elseif idu==heroes_rawcode[Orochimaru]then
set number=6
elseif idu==heroes_rawcode[Sai]then
set number=6
elseif idu==heroes_rawcode[Sakura]then
set number=6
elseif idu==heroes_rawcode[Sasori]then
set number=6
elseif idu==heroes_rawcode[Shikamaru]then
set number=6
elseif idu==heroes_rawcode[Suigetsu]then
set number=6
elseif idu==heroes_rawcode[Tobirama]then
set number=6
elseif idu==heroes_rawcode[Tsunade]then
set number=6
elseif idu==heroes_rawcode[Yamato]then
set number=6
elseif idu==heroes_rawcode[Zabuza]then
set number=6
elseif idu==heroes_rawcode[Zetsu]then
set number=6
endif
return number
endfunction
function JutsuSystemData_IsHeroUseSpells takes integer idp returns boolean
local boolean log=true
local integer idu=GetUnitTypeId(udg_Hero[idp])
if idu==heroes_rawcode[Deidara]then
set log=false
endif
return log
endfunction
function JutsuSystemData_GetBijuBuffDescriptionId takes integer idp,integer value returns string
local string desc=null
local integer idu=GetUnitTypeId(udg_Hero[idp])
if value==1 then
if idu==heroes_rawcode[Asuma]then
set desc="1 баф для Асумы: +200 здоровья"
elseif idu==heroes_rawcode[Chiyo]then
set desc="1 баф для Чиё: +200 здоровья"
elseif idu==heroes_rawcode[Danzo]then
set desc="1 баф для Данзо: +200 здоровья"
elseif idu==heroes_rawcode[Darui]then
set desc="1 баф для Даруи: +200 здоровья"
elseif idu==heroes_rawcode[Deidara]then
set desc="1 баф для Дейдары: +200 здоровья"
elseif idu==heroes_rawcode[Ei]then
set desc="1 баф для Эя: +200 здоровья"
elseif idu==heroes_rawcode[Gaara]then
set desc="1 баф для Гаары: +200 здоровья"
elseif idu==heroes_rawcode[Gai]then
set desc="1 баф для Гая: +200 здоровья"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="1 баф для Генгетсу: +200 здоровья"
elseif idu==heroes_rawcode[Haku]then
set desc="1 баф для Хаку: +200 здоровья"
elseif idu==heroes_rawcode[Han]then
set desc="1 баф для Хана: +200 здоровья"
elseif idu==heroes_rawcode[Hanzo]then
set desc="1 баф для Ханзо: +200 здоровья"
elseif idu==heroes_rawcode[Hashirama]then
set desc="1 баф для Хаширамы: +200 здоровья"
elseif idu==heroes_rawcode[Hidan]then
set desc="1 баф для Хидана: +200 здоровья"
elseif idu==heroes_rawcode[Itachi]then
set desc="1 баф для Итачи: +200 здоровья"
elseif idu==heroes_rawcode[Jiraya]then
set desc="1 баф для Джирайи: +200 здоровья"
elseif idu==heroes_rawcode[Jugo]then
set desc="1 баф для Джуго: +200 здоровья"
elseif idu==heroes_rawcode[Kabuto]then
set desc="1 баф для Кабуто: +200 здоровья"
elseif idu==heroes_rawcode[Kakashi]then
set desc="1 баф для Какаши: +200 здоровья"
elseif idu==heroes_rawcode[Mei]then
set desc="1 баф для Мей: +200 здоровья"
elseif idu==heroes_rawcode[Minato]then
set desc="1 баф для Минато: +200 здоровья"
elseif idu==heroes_rawcode[Mu]then
set desc="1 баф для Му: +200 здоровья"
elseif idu==heroes_rawcode[Nagato]then
set desc="1 баф для Нагато: +200 здоровья"
elseif idu==heroes_rawcode[Neji]then
set desc="1 баф для Неджи: +200 здоровья"
elseif idu==heroes_rawcode[Obito]then
set desc="1 баф для Оноки: +200 здоровья"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="1 баф для Орочимару: +200 здоровья"
elseif idu==heroes_rawcode[Sai]then
set desc="1 баф для Сая: +200 здоровья"
elseif idu==heroes_rawcode[Sakura]then
set desc="1 баф для Сакуры: +200 здоровья"
elseif idu==heroes_rawcode[Sasori]then
set desc="1 баф для Сасори: +200 здоровья"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="1 баф для Шикамару: +200 здоровья"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="1 баф для Суйгетсу: +200 здоровья"
elseif idu==heroes_rawcode[Tobirama]then
set desc="1 баф для Тобирамы: +200 здоровья"
elseif idu==heroes_rawcode[Tsunade]then
set desc="1 баф для Тсунаде: +200 здоровья"
elseif idu==heroes_rawcode[Yamato]then
set desc="1 баф для Ямато: +200 здоровья"
elseif idu==heroes_rawcode[Zabuza]then
set desc="1 баф для Забузы: +200 здоровья"
elseif idu==heroes_rawcode[Zetsu]then
set desc="1 баф для Зетсу: +200 здоровья"
endif
elseif value==2 then
if idu==heroes_rawcode[Asuma]then
set desc="2 баф для Асумы: +350 чакры"
elseif idu==heroes_rawcode[Chiyo]then
set desc="2 баф для Чиё: +350 чакры"
elseif idu==heroes_rawcode[Danzo]then
set desc="2 баф для Данзо: +350 чакры"
elseif idu==heroes_rawcode[Darui]then
set desc="2 баф для Даруи: +350 чакры"
elseif idu==heroes_rawcode[Deidara]then
set desc="2 баф для Дейдары: +350 чакры"
elseif idu==heroes_rawcode[Ei]then
set desc="2 баф для Эя: +350 чакры"
elseif idu==heroes_rawcode[Gaara]then
set desc="2 баф для Гаары: +350 чакры"
elseif idu==heroes_rawcode[Gai]then
set desc="2 баф для Гая: +350 чакры"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="2 баф для Генгетсу: +350 чакры"
elseif idu==heroes_rawcode[Haku]then
set desc="2 баф для Хаку: +350 чакры"
elseif idu==heroes_rawcode[Han]then
set desc="2 баф для Хана: +350 чакры"
elseif idu==heroes_rawcode[Hanzo]then
set desc="2 баф для Ханзо: +350 чакры"
elseif idu==heroes_rawcode[Hashirama]then
set desc="2 баф для Хаширамы: +350 чакры"
elseif idu==heroes_rawcode[Hidan]then
set desc="2 баф для Хидана: +350 чакры"
elseif idu==heroes_rawcode[Itachi]then
set desc="2 баф для Итачи: +350 чакры"
elseif idu==heroes_rawcode[Jiraya]then
set desc="2 баф для Джирайи: +350 чакры"
elseif idu==heroes_rawcode[Jugo]then
set desc="2 баф для Джуго: +350 чакры"
elseif idu==heroes_rawcode[Kabuto]then
set desc="2 баф для Кабуто: +350 чакры"
elseif idu==heroes_rawcode[Kakashi]then
set desc="2 баф для Какаши: +350 чакры"
elseif idu==heroes_rawcode[Mei]then
set desc="2 баф для Мей: +350 чакры"
elseif idu==heroes_rawcode[Minato]then
set desc="2 баф для Минато: +350 чакры"
elseif idu==heroes_rawcode[Mu]then
set desc="2 баф для Му: +350 чакры"
elseif idu==heroes_rawcode[Nagato]then
set desc="2 баф для Нагато: +350 чакры"
elseif idu==heroes_rawcode[Neji]then
set desc="2 баф для Неджи: +350 чакры"
elseif idu==heroes_rawcode[Onoki]then
set desc="2 баф для Оноки: +350 чакры"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="2 баф для Орочимару: +350 чакры"
elseif idu==heroes_rawcode[Sai]then
set desc="2 баф для Сая: +350 чакры"
elseif idu==heroes_rawcode[Sakura]then
set desc="2 баф для Сакуры: +350 чакры"
elseif idu==heroes_rawcode[Sasori]then
set desc="2 баф для Сасори: +350 чакры"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="2 баф для Шикамару: +350 чакры"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="2 баф для Суйгетсу: +350 чакры"
elseif idu==heroes_rawcode[Tobirama]then
set desc="2 баф для Тобирамы: +350 чакры"
elseif idu==heroes_rawcode[Tsunade]then
set desc="2 баф для Тсунаде: +350 чакры"
elseif idu==heroes_rawcode[Yamato]then
set desc="2 баф для Ямато: +350 чакры"
elseif idu==heroes_rawcode[Zabuza]then
set desc="2 баф для Забузы: +350 чакры"
elseif idu==heroes_rawcode[Zetsu]then
set desc="2 баф для Зетсу: +350 чакры"
endif
elseif value==3 then
if idu==heroes_rawcode[Asuma]then
set desc="3 баф для Асумы: +400 области обзора"
elseif idu==heroes_rawcode[Chiyo]then
set desc="3 баф для Чиё: +400 области обзора"
elseif idu==heroes_rawcode[Danzo]then
set desc="3 баф для Данзо: +400 области обзора"
elseif idu==heroes_rawcode[Darui]then
set desc="3 баф для Даруи: +400 области обзора"
elseif idu==heroes_rawcode[Deidara]then
set desc="3 баф для Дейдары: +400 области обзора"
elseif idu==heroes_rawcode[Ei]then
set desc="3 баф для Эя: +400 области обзора"
elseif idu==heroes_rawcode[Gaara]then
set desc="3 баф для Гаары: +400 области обзора"
elseif idu==heroes_rawcode[Gai]then
set desc="3 баф для Гая: +400 области обзора"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="3 баф для Генгетсу: +400 области обзора"
elseif idu==heroes_rawcode[Haku]then
set desc="3 баф для Хаку: +400 области обзора"
elseif idu==heroes_rawcode[Han]then
set desc="3 баф для Хана: +400 области обзора"
elseif idu==heroes_rawcode[Hanzo]then
set desc="3 баф для Ханзо: +400 области обзора"
elseif idu==heroes_rawcode[Hashirama]then
set desc="3 баф для Хаширамы: +400 области обзора"
elseif idu==heroes_rawcode[Hidan]then
set desc="3 баф для Хидана: +400 области обзора"
elseif idu==heroes_rawcode[Itachi]then
set desc="3 баф для Итачи: +400 области обзора"
elseif idu==heroes_rawcode[Jiraya]then
set desc="3 баф для Джирайи: +400 области обзора"
elseif idu==heroes_rawcode[Jugo]then
set desc="3 баф для Джуго: +400 области обзора"
elseif idu==heroes_rawcode[Kabuto]then
set desc="3 баф для Кабуто: +400 области обзора"
elseif idu==heroes_rawcode[Kakashi]then
set desc="3 баф для Какаши: +400 области обзора"
elseif idu==heroes_rawcode[Mei]then
set desc="3 баф для Мей: +400 области обзора"
elseif idu==heroes_rawcode[Minato]then
set desc="3 баф для Минато: +400 области обзора"
elseif idu==heroes_rawcode[Mu]then
set desc="3 баф для Му: +400 области обзора"
elseif idu==heroes_rawcode[Nagato]then
set desc="3 баф для Нагато: +400 области обзора"
elseif idu==heroes_rawcode[Neji]then
set desc="3 баф для Неджи: +400 области обзора"
elseif idu==heroes_rawcode[Onoki]then
set desc="3 баф для Оноки: +400 области обзора"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="3 баф для Орочимару: +400 области обзора"
elseif idu==heroes_rawcode[Sai]then
set desc="3 баф для Сая: +400 области обзора"
elseif idu==heroes_rawcode[Sakura]then
set desc="3 баф для Сакуры: +400 области обзора"
elseif idu==heroes_rawcode[Sasori]then
set desc="3 баф для Сасори: +400 области обзора"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="3 баф для Шикамару: +400 области обзора"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="3 баф для Суйгетсу: +400 области обзора"
elseif idu==heroes_rawcode[Tobirama]then
set desc="3 баф для Тобирамы: +400 области обзора"
elseif idu==heroes_rawcode[Tsunade]then
set desc="3 баф для Тсунаде: +400 области обзора"
elseif idu==heroes_rawcode[Yamato]then
set desc="3 баф для Ямато: +400 области обзора"
elseif idu==heroes_rawcode[Zabuza]then
set desc="3 баф для Забузы: +400 области обзора"
elseif idu==heroes_rawcode[Zetsu]then
set desc="3 баф для Зетсу: +400 области обзора"
endif
elseif value==4 then
if idu==heroes_rawcode[Asuma]then
set desc="4 баф для Асумы: +10 силы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="4 баф для Чиё: +10 силы"
elseif idu==heroes_rawcode[Danzo]then
set desc="4 баф для Данзо: +10 силы"
elseif idu==heroes_rawcode[Darui]then
set desc="4 баф для Даруи: +10 силы"
elseif idu==heroes_rawcode[Deidara]then
set desc="4 баф для Дейдары: +10 силы"
elseif idu==heroes_rawcode[Ei]then
set desc="4 баф для Эя: +10 силы"
elseif idu==heroes_rawcode[Gaara]then
set desc="4 баф для Гаары: +10 силы"
elseif idu==heroes_rawcode[Gai]then
set desc="4 баф для Гая: +10 силы"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="4 баф для Генгетсу: +10 силы"
elseif idu==heroes_rawcode[Haku]then
set desc="4 баф для Хаку: +10 силы"
elseif idu==heroes_rawcode[Han]then
set desc="4 баф для Хана: +10 силы"
elseif idu==heroes_rawcode[Hanzo]then
set desc="4 баф для Ханзо: +10 силы"
elseif idu==heroes_rawcode[Hashirama]then
set desc="4 баф для Хаширамы: +10 силы"
elseif idu==heroes_rawcode[Hidan]then
set desc="4 баф для Хидана: +10 силы"
elseif idu==heroes_rawcode[Itachi]then
set desc="4 баф для Итачи: +10 силы"
elseif idu==heroes_rawcode[Jiraya]then
set desc="4 баф для Джирайи: +10 силы"
elseif idu==heroes_rawcode[Jugo]then
set desc="4 баф для Джуго: +10 силы"
elseif idu==heroes_rawcode[Kabuto]then
set desc="4 баф для Кабуто: +10 силы"
elseif idu==heroes_rawcode[Kakashi]then
set desc="4 баф для Какаши: +10 силы"
elseif idu==heroes_rawcode[Mei]then
set desc="4 баф для Мей: +10 силы"
elseif idu==heroes_rawcode[Minato]then
set desc="4 баф для Минато: +10 силы"
elseif idu==heroes_rawcode[Mu]then
set desc="4 баф для Му: +10 силы"
elseif idu==heroes_rawcode[Nagato]then
set desc="4 баф для Нагато: +10 силы"
elseif idu==heroes_rawcode[Neji]then
set desc="4 баф для Неджи: +10 силы"
elseif idu==heroes_rawcode[Onoki]then
set desc="4 баф для Оноки: +10 силы"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="4 баф для Орочимару: +10 силы"
elseif idu==heroes_rawcode[Sai]then
set desc="4 баф для Сая: +10 силы"
elseif idu==heroes_rawcode[Sakura]then
set desc="4 баф для Сакуры: +10 силы"
elseif idu==heroes_rawcode[Sasori]then
set desc="4 баф для Сасори: +10 силы"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="4 баф для Шикамару: +10 силы"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="4 баф для Суйгетсу: +10 силы"
elseif idu==heroes_rawcode[Tobirama]then
set desc="4 баф для Тобирамы: +10 силы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="4 баф для Тсунаде: +10 силы"
elseif idu==heroes_rawcode[Yamato]then
set desc="4 баф для Ямато: +10 силы"
elseif idu==heroes_rawcode[Zabuza]then
set desc="4 баф для Забузы: +10 силы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="4 баф для Зетсу: +10 силы"
endif
elseif value==5 then
if idu==heroes_rawcode[Asuma]then
set desc="5 баф для Асумы: +10 ловкости"
elseif idu==heroes_rawcode[Chiyo]then
set desc="5 баф для Чиё: +10 ловкости"
elseif idu==heroes_rawcode[Danzo]then
set desc="5 баф для Данзо: +10 ловкости"
elseif idu==heroes_rawcode[Darui]then
set desc="5 баф для Даруи: +10 ловкости"
elseif idu==heroes_rawcode[Deidara]then
set desc="5 баф для Дейдары: +10 ловкости"
elseif idu==heroes_rawcode[Ei]then
set desc="5 баф для Эя: +10 ловкости"
elseif idu==heroes_rawcode[Gaara]then
set desc="5 баф для Гаары: +10 ловкости"
elseif idu==heroes_rawcode[Gai]then
set desc="5 баф для Гая: +10 ловкости"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="5 баф для Генгетсу: +10 ловкости"
elseif idu==heroes_rawcode[Haku]then
set desc="5 баф для Хаку: +10 ловкости"
elseif idu==heroes_rawcode[Han]then
set desc="5 баф для Хана: +10 ловкости"
elseif idu==heroes_rawcode[Hanzo]then
set desc="5 баф для Ханзо: +10 ловкости"
elseif idu==heroes_rawcode[Hashirama]then
set desc="5 баф для Хаширамы: +10 ловкости"
elseif idu==heroes_rawcode[Hidan]then
set desc="5 баф для Хидана: +10 ловкости"
elseif idu==heroes_rawcode[Itachi]then
set desc="5 баф для Итачи: +10 ловкости"
elseif idu==heroes_rawcode[Jiraya]then
set desc="5 баф для Джирайи: +10 ловкости"
elseif idu==heroes_rawcode[Jugo]then
set desc="5 баф для Джуго: +10 ловкости"
elseif idu==heroes_rawcode[Kabuto]then
set desc="5 баф для Кабуто: +10 ловкости"
elseif idu==heroes_rawcode[Kakashi]then
set desc="5 баф для Какаши: +10 ловкости"
elseif idu==heroes_rawcode[Mei]then
set desc="5 баф для Мей: +10 ловкости"
elseif idu==heroes_rawcode[Minato]then
set desc="5 баф для Минато: +10 ловкости"
elseif idu==heroes_rawcode[Mu]then
set desc="5 баф для Му: +10 ловкости"
elseif idu==heroes_rawcode[Nagato]then
set desc="5 баф для Нагато: +10 ловкости"
elseif idu==heroes_rawcode[Neji]then
set desc="5 баф для Неджи: +10 ловкости"
elseif idu==heroes_rawcode[Onoki]then
set desc="5 баф для Оноки: +10 ловкости"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="5 баф для Орочимару: +10 ловкости"
elseif idu==heroes_rawcode[Sai]then
set desc="5 баф для Сая: +10 ловкости"
elseif idu==heroes_rawcode[Sakura]then
set desc="5 баф для Сакуры: +10 ловкости"
elseif idu==heroes_rawcode[Sasori]then
set desc="5 баф для Сасори: +10 ловкости"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="5 баф для Шикамару: +10 ловкости"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="5 баф для Суйгетсу: +10 ловкости"
elseif idu==heroes_rawcode[Tobirama]then
set desc="5 баф для Тобирамы: +10 ловкости"
elseif idu==heroes_rawcode[Tsunade]then
set desc="5 баф для Тсунаде: +10 ловкости"
elseif idu==heroes_rawcode[Yamato]then
set desc="5 баф для Ямато: +10 ловкости"
elseif idu==heroes_rawcode[Zabuza]then
set desc="5 баф для Забузы: +10 ловкости"
elseif idu==heroes_rawcode[Zetsu]then
set desc="5 баф для Зетсу: +10 ловкости"
endif
elseif value==6 then
if idu==heroes_rawcode[Asuma]then
set desc="6 баф для Асумы: +10 разума"
elseif idu==heroes_rawcode[Chiyo]then
set desc="6 баф для Чиё: +10 разума"
elseif idu==heroes_rawcode[Danzo]then
set desc="6 баф для Данзо: +10 разума"
elseif idu==heroes_rawcode[Darui]then
set desc="6 баф для Даруи: +10 разума"
elseif idu==heroes_rawcode[Deidara]then
set desc="6 баф для Дейдары: +10 разума"
elseif idu==heroes_rawcode[Ei]then
set desc="6 баф для Эя: +10 разума"
elseif idu==heroes_rawcode[Gaara]then
set desc="6 баф для Гаары: +10 разума"
elseif idu==heroes_rawcode[Gai]then
set desc="6 баф для Гая: +10 разума"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="6 баф для Генгетсу: +10 разума"
elseif idu==heroes_rawcode[Haku]then
set desc="6 баф для Хаку: +10 разума"
elseif idu==heroes_rawcode[Han]then
set desc="6 баф для Хана: +10 разума"
elseif idu==heroes_rawcode[Hanzo]then
set desc="6 баф для Ханзо: +10 разума"
elseif idu==heroes_rawcode[Hashirama]then
set desc="6 баф для Хаширамы: +10 разума"
elseif idu==heroes_rawcode[Hidan]then
set desc="6 баф для Хидана: +10 разума"
elseif idu==heroes_rawcode[Itachi]then
set desc="6 баф для Итачи: +10 разума"
elseif idu==heroes_rawcode[Jiraya]then
set desc="6 баф для Джирайи: +10 разума"
elseif idu==heroes_rawcode[Jugo]then
set desc="6 баф для Джуго: +10 разума"
elseif idu==heroes_rawcode[Kabuto]then
set desc="6 баф для Кабуто: +10 разума"
elseif idu==heroes_rawcode[Kakashi]then
set desc="6 баф для Какаши: +10 разума"
elseif idu==heroes_rawcode[Mei]then
set desc="6 баф для Мей: +10 разума"
elseif idu==heroes_rawcode[Minato]then
set desc="6 баф для Минато: +10 разума"
elseif idu==heroes_rawcode[Mu]then
set desc="6 баф для Му: +10 разума"
elseif idu==heroes_rawcode[Nagato]then
set desc="6 баф для Нагато: +10 разума"
elseif idu==heroes_rawcode[Neji]then
set desc="6 баф для Неджи: +10 разума"
elseif idu==heroes_rawcode[Onoki]then
set desc="6 баф для Оноки: +10 разума"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="6 баф для Орочимару: +10 разума"
elseif idu==heroes_rawcode[Sai]then
set desc="6 баф для Сая: +10 разума"
elseif idu==heroes_rawcode[Sakura]then
set desc="6 баф для Сакуры: +10 разума"
elseif idu==heroes_rawcode[Sasori]then
set desc="6 баф для Сасори: +10 разума"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="6 баф для Шикамару: +10 разума"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="6 баф для Суйгетсу: +10 разума"
elseif idu==heroes_rawcode[Tobirama]then
set desc="6 баф для Тобирамы: +10 разума"
elseif idu==heroes_rawcode[Tsunade]then
set desc="6 баф для Тсунаде: +10 разума"
elseif idu==heroes_rawcode[Yamato]then
set desc="6 баф для Ямато: +10 разума"
elseif idu==heroes_rawcode[Zabuza]then
set desc="6 баф для Забузы: +10 разума"
elseif idu==heroes_rawcode[Zetsu]then
set desc="6 баф для Зетсу: +10 разума"
endif
elseif value==7 then
if idu==heroes_rawcode[Asuma]then
set desc="7 баф для Асумы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="7 баф для Чиё"
elseif idu==heroes_rawcode[Danzo]then
set desc="7 баф для Данзо"
elseif idu==heroes_rawcode[Darui]then
set desc="7 баф для Даруи"
elseif idu==heroes_rawcode[Deidara]then
set desc="7 баф для Дейдары"
elseif idu==heroes_rawcode[Ei]then
set desc="7 баф для Эя"
elseif idu==heroes_rawcode[Gaara]then
set desc="7 баф для Гаары"
elseif idu==heroes_rawcode[Gai]then
set desc="7 баф для Гая"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="7 баф для Генгетсу"
elseif idu==heroes_rawcode[Haku]then
set desc="7 баф для Хаку"
elseif idu==heroes_rawcode[Han]then
set desc="7 баф для Хана"
elseif idu==heroes_rawcode[Hanzo]then
set desc="7 баф для Ханзо"
elseif idu==heroes_rawcode[Hashirama]then
set desc="7 баф для Хаширамы"
elseif idu==heroes_rawcode[Hidan]then
set desc="7 баф для Хидана"
elseif idu==heroes_rawcode[Itachi]then
set desc="7 баф для Итачи"
elseif idu==heroes_rawcode[Jiraya]then
set desc="7 баф для Джирайи"
elseif idu==heroes_rawcode[Jugo]then
set desc="7 баф для Джуго"
elseif idu==heroes_rawcode[Kabuto]then
set desc="7 баф для Кабуто"
elseif idu==heroes_rawcode[Kakashi]then
set desc="7 баф для Какаши"
elseif idu==heroes_rawcode[Madara]then
set desc="7 баф для Мадары"
elseif idu==heroes_rawcode[Mei]then
set desc="7 баф для Мей"
elseif idu==heroes_rawcode[Minato]then
set desc="7 баф для Минато"
elseif idu==heroes_rawcode[Mu]then
set desc="7 баф для Му"
elseif idu==heroes_rawcode[Nagato]then
set desc="7 баф для Нагато"
elseif idu==heroes_rawcode[Naruto]then
set desc="7 баф для Наруто"
elseif idu==heroes_rawcode[Neji]then
set desc="7 баф для Неджи"
elseif idu==heroes_rawcode[Obito]then
set desc="7 баф для Обито"
elseif idu==heroes_rawcode[Onoki]then
set desc="7 баф для Оноки"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="7 баф для Орочимару"
elseif idu==heroes_rawcode[Sai]then
set desc="7 баф для Сая"
elseif idu==heroes_rawcode[Sakura]then
set desc="7 баф для Сакуры"
elseif idu==heroes_rawcode[Sasori]then
set desc="7 баф для Сасори"
elseif idu==heroes_rawcode[Sasuke]then
set desc="7 баф для Саске"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="7 баф для Шикамару"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="7 баф для Суйгетсу"
elseif idu==heroes_rawcode[Tobirama]then
set desc="7 баф для Тобирамы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="7 баф для Тсунаде"
elseif idu==heroes_rawcode[Yamato]then
set desc="7 баф для Ямато"
elseif idu==heroes_rawcode[Zabuza]then
set desc="7 баф для Забузы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="7 баф для Зетсу"
endif
elseif value==8 then
if idu==heroes_rawcode[Asuma]then
set desc="8 баф для Асумы"
elseif idu==heroes_rawcode[Chiyo]then
set desc="8 баф для Чиё"
elseif idu==heroes_rawcode[Danzo]then
set desc="8 баф для Данзо"
elseif idu==heroes_rawcode[Darui]then
set desc="8 баф для Даруи"
elseif idu==heroes_rawcode[Deidara]then
set desc="8 баф для Дейдары"
elseif idu==heroes_rawcode[Ei]then
set desc="8 баф для Эя"
elseif idu==heroes_rawcode[Gaara]then
set desc="8 баф для Гаары"
elseif idu==heroes_rawcode[Gai]then
set desc="8 баф для Гая"
elseif idu==heroes_rawcode[Gengetsu]then
set desc="8 баф для Генгетсу"
elseif idu==heroes_rawcode[Haku]then
set desc="8 баф для Хаку"
elseif idu==heroes_rawcode[Han]then
set desc="8 баф для Хана"
elseif idu==heroes_rawcode[Hanzo]then
set desc="8 баф для Ханзо"
elseif idu==heroes_rawcode[Hashirama]then
set desc="8 баф для Хаширамы"
elseif idu==heroes_rawcode[Hidan]then
set desc="8 баф для Хидана"
elseif idu==heroes_rawcode[Itachi]then
set desc="8 баф для Итачи"
elseif idu==heroes_rawcode[Jiraya]then
set desc="8 баф для Джирайи"
elseif idu==heroes_rawcode[Jugo]then
set desc="8 баф для Джуго"
elseif idu==heroes_rawcode[Kabuto]then
set desc="8 баф для Кабуто"
elseif idu==heroes_rawcode[Kakashi]then
set desc="8 баф для Какаши"
elseif idu==heroes_rawcode[Madara]then
set desc="8 баф для Мадары"
elseif idu==heroes_rawcode[Mei]then
set desc="8 баф для Мей"
elseif idu==heroes_rawcode[Minato]then
set desc="8 баф для Минато"
elseif idu==heroes_rawcode[Mu]then
set desc="8 баф для Му"
elseif idu==heroes_rawcode[Nagato]then
set desc="8 баф для Нагато"
elseif idu==heroes_rawcode[Naruto]then
set desc="8 баф для Наруто"
elseif idu==heroes_rawcode[Neji]then
set desc="8 баф для Неджи"
elseif idu==heroes_rawcode[Obito]then
set desc="8 баф для Обито"
elseif idu==heroes_rawcode[Onoki]then
set desc="8 баф для Оноки"
elseif idu==heroes_rawcode[Orochimaru]then
set desc="8 баф для Орочимару"
elseif idu==heroes_rawcode[Sai]then
set desc="8 баф для Сая"
elseif idu==heroes_rawcode[Sakura]then
set desc="8 баф для Сакуры"
elseif idu==heroes_rawcode[Sasori]then
set desc="8 баф для Сасори"
elseif idu==heroes_rawcode[Sasuke]then
set desc="8 баф для Саске"
elseif idu==heroes_rawcode[Shikamaru]then
set desc="8 баф для Шикамару"
elseif idu==heroes_rawcode[Suigetsu]then
set desc="8 баф для Суйгетсу"
elseif idu==heroes_rawcode[Tobirama]then
set desc="8 баф для Тобирамы"
elseif idu==heroes_rawcode[Tsunade]then
set desc="8 баф для Тсунаде"
elseif idu==heroes_rawcode[Yamato]then
set desc="8 баф для Ямато"
elseif idu==heroes_rawcode[Zabuza]then
set desc="8 баф для Забузы"
elseif idu==heroes_rawcode[Zetsu]then
set desc="8 баф для Зетсу"
endif
endif
return desc
endfunction
function JutsuSystemData_GetDescriptionFour takes integer idp,integer value returns string
local integer idu=GetUnitTypeId(udg_Hero[idp])
local string desc=null
if idu==heroes_rawcode[Asuma]then
set desc="Асума создаёт плотный разрушительный луч из ветра и пыли, который летит с высокой скоростью, нанося урон всем врагам на пути."
elseif idu==heroes_rawcode[Chiyo]then
set desc="«Папа» и «Мама» соединяют руки и создают цепь из проволоки, а затем быстро двигаются вперёд, нанося урон противникам."
elseif idu==heroes_rawcode[Danzo]then
set desc="Позволяет Данзо обращать в иллюзию любые полученные повреждения и даже возвращаться к жизни в случае смерти с исходным запасом здоровья (с которым применил технику) на предыдущее место. Используя эту способность, Данзо жертвует своим Шаринганом на правой руке, который восстановится через 120 секунд."
elseif idu==heroes_rawcode[Darui]then
set desc="Даруи создаёт огромную электрическую пантеру и направляет её на врагов."
elseif idu==heroes_rawcode[Deidara]then
if value==1 then
set desc="Смертельное искусство Дейдары. Он накапливает чакру в своём теле, а затем взрывает сам себя."
elseif value==2 then
set desc="Дейдара создаёт огромного клона, который накапливает энергию, а затем распадается на микроскопические мины."
endif
elseif idu==heroes_rawcode[Ei]then
set desc="Эй хватает врага и вбивает его в почву."
elseif idu==heroes_rawcode[Gaara]then
set desc="Гаара окутывает противников в указанной области песком, который принимает форму пирамиды, а затем сдавливает их."
elseif idu==heroes_rawcode[Gai]then
set desc="Гай молниеносно приближается к врагу и наносит удар немыслимой силы."
elseif idu==heroes_rawcode[Gengetsu]then
set desc="Генгетсу создаёт своего водяного клона в масляной оболочке, который способен взрываться, если будет часто двигаться. Клон хорошо уворачивается от физических атак и вооружён клинком."
elseif idu==heroes_rawcode[Haku]then
set desc="Хаку создаёт несколько ледяных зеркал на 20 секунд. Находясь в зоне действия техники, при нажатии правой кнопкой мыши (ПКМ) на зеркало, Хаку кидает 10 сенбонов в центральную точку и моментально перемещается к зеркалу."
elseif idu==heroes_rawcode[Han]then
set desc="Хан принимает облик Гоби – гигантского пятихвостого зверя, и таранит врагов рогами."
elseif idu==heroes_rawcode[Hanzo]then
set desc="Ханзо призывает ядовитую саламандру для помощи в бою, которая способна закапываться под землю и производить токсичный яд."
elseif idu==heroes_rawcode[Hashirama]then
set desc="Хаширама способен создавать из дерева различных существ для помощи в бою."
elseif idu==heroes_rawcode[Hidan]then
set desc="Хидан рисует особый символ на земле, внутри которого он выступает живой куклой вуду по отношению проклятому врагу, при этом самому Хидану урон не наносится, пока он в пиктограмме."
elseif idu==heroes_rawcode[Itachi]then
set desc="Итачи погружает цель в мощнейшее Гендзюцу, которое решает её дальнейшую судьбу. Цель не может применять техники, атаковать и быть атакованной, но способна передвигаться. Если жертва будет стоять на месте, то потеряет здоровье, иначе – чакру. После окончания действия цель появляется на том же месте, где её поймали в Гендзюцу."
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set desc="Джирайя делает свою гриву твёрдой и использует её как для защиты, так и для нападения."
elseif value==2 then
set desc="Джирайя призывает огромную жабу, вооружённую копьём и щитом. Затем Джирайя залезает ей на голову."
endif
elseif idu==heroes_rawcode[Jugo]then
set desc="Джуго концентрирует чакру в турбинах и выстреливает ею."
elseif idu==heroes_rawcode[Kabuto]then
set desc="Кабуто ловит ближайших врагов в Гендзюцу, не позволяя им что-либо делать."
elseif idu==heroes_rawcode[Kakashi]then
set desc="Какаши создаёт в руке мощный поток электричества, и двигается с утроенной скоростью в указанном направлении, атакуя противников. После каждой атаки проходит сквозь цели, при этом он неуязвим для любых атак."
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set desc="Мадара изрыгает множество огненных шаров в форме драконьих голов, наносящих огромный урон при попадании."
elseif value==2 then
set desc="Мадара создаёт множество цветущих деревьев, пыльца которых токсична для живых существ."
endif
elseif idu==heroes_rawcode[Mei]then
set desc="Мей создаёт огромного водяного дракона, которого обрушивает на противников."
elseif idu==heroes_rawcode[Minato]then
set desc="Минато бросает кунаи на поле боя, и при попадании в цель он телепортируется к каждому с помощью Hiraishin no Jutsu, если она изучена (при этом становится неуязвимым)."
elseif idu==heroes_rawcode[Mu]then
set desc="Используя элементы трёх стихий, Му создаёт цилиндр и направляет его на противников, который разрушает их молекулярную структуру."
elseif idu==heroes_rawcode[Nagato]then
set desc="Нагато воскрешает павших товарищей на поле боя."
elseif idu==heroes_rawcode[Naruto]then
set desc="Наруто становится неподвижным и впитывает в себя энергию природы. Если технику прервать, она не сработает."
elseif idu==heroes_rawcode[Neji]then
set desc="64 Небесных Удара - Неджи наносит 64 удара по тенкетсу врага."
elseif idu==heroes_rawcode[Obito]then
set desc="С помощью Риннегана Обито связывает и ограничивает силу любого противника, который коснётся их."
elseif idu==heroes_rawcode[Onoki]then
set desc="Оноки образует элемент Атома в форме цилиндра, а затем направляет его по желанию в указанную зону, уничтожая всё живое."
elseif idu==heroes_rawcode[Orochimaru]then
set desc="Орочимару преобразовывает своё тело, исцеляясь от полученных травм."
elseif idu==heroes_rawcode[Sai]then
set desc="Сай создаёт двух воинов, которые атакуют вражеских героев. Один воин может атаковать только одного противника."
elseif idu==heroes_rawcode[Sakura]then
set desc="Сакура раскрывает печаль на лбу, которая усиливает все способности и даёт прибавку к чакре."
elseif idu==heroes_rawcode[Sasori]then
set desc="Марионетка выстреливает снарядом, который долетая до указанного места, начинает выпускать десятки игл, разлетающиеся во все стороны с огромной силой."
elseif idu==heroes_rawcode[Sasuke]then
set desc="Саске призывает огромного змея – Аоду, который помогает ему в бою. После призыва залезает ему на голову."
elseif idu==heroes_rawcode[Shikamaru]then
set desc="Шикамару ставит на местность теневую ловушку, которую можно активировать в любой момент."
elseif idu==heroes_rawcode[Suigetsu]then
set desc="Суйгетсу покрывает окружающее его пространство водой и придаёт ей форму монстра, усиливая свои базовые параметры."
elseif idu==heroes_rawcode[Tobirama]then
set desc="Тобирама создаёт теневых клонов и устанавливает на них ловушки из взрывных печатей. Если Тобирама уже применил Suiton, то эта техника автоматически применится и на клонов."
elseif idu==heroes_rawcode[Tsunade]then
set desc="Тсунаде излечивает свои раны и восстанавливает запас чакры с огромной скоростью."
elseif idu==heroes_rawcode[Yamato]then
set desc="Ямато создаёт свою копию из дерева, которая способна использовать все его способности."
elseif idu==heroes_rawcode[Zabuza]then
set desc="Забуза создаёт огромный поток воды, направляя на врагов."
elseif idu==heroes_rawcode[Zetsu]then
set desc="Зетсу разделяет себя на 2 половины – Широ и Куро."
endif
return desc
endfunction
function JutsuSystemData_GetDescriptionThree takes integer idp,integer value returns string
local integer idu=GetUnitTypeId(udg_Hero[idp])
local string desc=null
if idu==heroes_rawcode[Asuma]then
set desc="Асума создаёт перед собой облако пепла. После того, как пепел покрыл нужную область, происходит взрыв."
elseif idu==heroes_rawcode[Chiyo]then
set desc="Чиё призывает особые марионетки – родителей Сасори."
elseif idu==heroes_rawcode[Danzo]then
set desc="Данзо призывает огромную химеру – Баку, который помогает ему в бою."
elseif idu==heroes_rawcode[Darui]then
set desc="Даруи заряжает своей меч Raiton-чакрой и совершает рывок в указанную зону, нанося удар мечом первому попавшемуся противнику."
elseif idu==heroes_rawcode[Deidara]then
if value==1 then
set desc="Дейдара создаёт в воздухе глиняную фигурку в форме матрёшки и направляет на противников. Сооружения получают только половину урона."
elseif value==2 then
set desc="К левому глазу Дейдары прикреплён дальномер, с помощью которого он лучше следит за окружающей обстановкой."
endif
elseif idu==heroes_rawcode[Ei]then
set desc="Эй подпрыгивает вверх и наносит мощный нисходящий удар по земле."
elseif idu==heroes_rawcode[Gaara]then
set desc="Гаара создаёт непроницаемую песчаную стену в указанной точке."
elseif idu==heroes_rawcode[Gai]then
set desc="Гай снимает ограничители потока чакры в теле, существенно увеличивая свою мощь."
elseif idu==heroes_rawcode[Gengetsu]then
set desc="Генгетсу способен превращать любую часть своего тела в воду, игнорируя урон от физических атак, но получая увеличенный урон от Ниндзюцу."
elseif idu==heroes_rawcode[Haku]then
set desc="Хаку создаёт гигантские шипы изо льда."
elseif idu==heroes_rawcode[Han]then
set desc="Броня Хана поглощает любой полученный урон и накапливает его в виде пара."
elseif idu==heroes_rawcode[Hanzo]then
set desc="Ханзо призывает большое количество взрывных печатей и обматывает ими указанного противника."
elseif idu==heroes_rawcode[Hashirama]then
set desc="Хаширама выращивает лес из огромных деревьев на местности."
elseif idu==heroes_rawcode[Hidan]then
set desc="Хидан заключил договор с богом Джашином, вера которого проповедует, что всё, кроме убийства, считается богохульством."
elseif idu==heroes_rawcode[Itachi]then
set desc="Итачи создаёт клона из воронов в указанной зоне. Максимум можно создать 2 клона, с последним из которых можно меняться местами."
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set desc="Джирайя создаёт огромную трясину, в которой тонут противники."
elseif value==2 then
set desc="Джирайя призывает гигантский жабий желудок, который заключает врагов в ловушку."
endif
elseif idu==heroes_rawcode[Jugo]then
set desc="Джуго впадает в бешенство, что позволяет ему прыгать на противников и разрывать их в клочья."
elseif idu==heroes_rawcode[Kabuto]then
set desc="Кабуто создаёт огромного дракона, который летит в указанную точку, ошеломляя противников."
elseif idu==heroes_rawcode[Kakashi]then
set desc="Какаши создаёт пространственно-временной барьер в указанной области, тем самым стягивая противников к одной точке, а затем переносит их в другое измерение."
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set desc="Мадара изрыгает пропитанный чакрой пепел, который обжигает жертву при прикосновении, а сам становится невидимым."
elseif value==2 then
set desc="Мадара создаёт гигантские ветки из дерева, которые направляет на врагов. Ветки хватают противников, не позволяя им двигаться."
endif
elseif idu==heroes_rawcode[Mei]then
set desc="Мей создаёт густой туман, в котором враги намного хуже сражаются."
elseif idu==heroes_rawcode[Minato]then
set desc="Минато призывает на поле боя жабьего босса – Гамабунту."
elseif idu==heroes_rawcode[Mu]then
set desc="Му делит своё тело на две одинаковых части, при этом оригинал сразу же становится невидимым. Клон может применять все техники оригинала, но их сила падает вдвое, как и у самого Му."
elseif idu==heroes_rawcode[Nagato]then
set desc="Нагато превосходный сенсор, он способен обнаружить противника на большом расстоянии."
elseif idu==heroes_rawcode[Naruto]then
set desc="Наруто призывает огромную лягушку – Гамакичи, сына Гамабунты, который помогает ему в бою."
elseif idu==heroes_rawcode[Neji]then
set desc="Бьякуган - Неджи активизирует свои глаза, позволяющие видеть сквозь препятствия, улучшающие обзор местности и использование способностей."
elseif idu==heroes_rawcode[Obito]then
set desc="Обито создаёт огненный шар и направляет его на противников."
elseif idu==heroes_rawcode[Onoki]then
set desc="Оноки создаёт гигантского голема из камня, который оказывает поддержку в бою."
elseif idu==heroes_rawcode[Orochimaru]then
set desc="Орочимару призывает тройные врата демонов, которые принимают любой полученный Орочимару урон на себя."
elseif idu==heroes_rawcode[Sai]then
set desc="Сай запечатывает указанного врага на некоторое время, после чего наносит урон. Если цель НЕ герой, то убивает сразу."
elseif idu==heroes_rawcode[Sakura]then
set desc="Сакура восстанавливает здоровье и чакру указанной цели. Техника прервётся, если цель отошла слишком далеко."
elseif idu==heroes_rawcode[Sasori]then
set desc="Марионетка Сасори очень крепкая, но если ей угрожает опасность, Сасори способен заблокировать поступающий урон хвостом."
elseif idu==heroes_rawcode[Sasuke]then
set desc="Саске погружает цель в кошмарную иллюзию, которая обездвиживает его."
elseif idu==heroes_rawcode[Shikamaru]then
set desc="Шикамару устанавливает на местность невидимую взрывную печать, которая при контакте с врагом взрывается. Если установить в Ninpo: Kage Yose no Jutsu, то на способность сбросится перезарядка."
elseif idu==heroes_rawcode[Suigetsu]then
set desc="Суйгетсу способен превращать любую часть своего тела в воду, игнорируя урон от физических атак, но получая увеличенный урон от Ниндзюцу."
elseif idu==heroes_rawcode[Tobirama]then
set desc="Тобирама пускает мощную водяную волну, которая сметает всё на своём пути."
elseif idu==heroes_rawcode[Tsunade]then
set desc="Тсунаде концентрирует чакру в своих руках, что позволяет ей наносить сокрушительные удары."
elseif idu==heroes_rawcode[Yamato]then
set desc="Ямато создаёт огромную деревянную клетку, в которой заточает противников."
elseif idu==heroes_rawcode[Zabuza]then
set desc="Забуза один из 7 мечников Скрытого тумана, и он искусно владеет своим клинком, который способен впитывать кровь врагов и становится сильнее."
elseif idu==heroes_rawcode[Zetsu]then
set desc="Зетсу преобразует участок леса в паразитических клонов."
endif
return desc
endfunction
function JutsuSystemData_GetDescriptionTwo takes integer idp,integer value returns string
local integer idu=GetUnitTypeId(udg_Hero[idp])
local string desc=null
if idu==heroes_rawcode[Asuma]then
set desc="Асума скрывается от противников, а на своём месте оставляет клона. При получении урона клон превращается в блок древесины с взрывными печатями, а спустя секунду происходит взрыв."
elseif idu==heroes_rawcode[Chiyo]then
set desc="Чиё прикрепляет нити чакры к союзнику, теряя возможность атаковать физически."
elseif idu==heroes_rawcode[Danzo]then
set desc="Данзо оставляет особую метку на указанном противнике, которую может использовать в любой момент, чтобы парализовать жертву."
elseif idu==heroes_rawcode[Darui]then
set desc="Даруи направляет на противников несколько лазерных лучей."
elseif idu==heroes_rawcode[Deidara]then
if value==1 then
set desc="Дейдара создаёт гигантскую сороконожку, которая незаметно движется к указанному противнику и обвивает его, лишая возможности атаковать и блокируя входящий физический урон, но увеличивает получаемый урон от Ниндзюцу."
elseif value==2 then
set desc="Дейдара выстреливает глиняной птицей, направляя её на противников. Птица взрывается и расталкивает врагов в разные стороны."
endif
elseif idu==heroes_rawcode[Ei]then
set desc="Эй покрывает своё тело слоем Raiton-чакры, которая улучшает его боевые навыки."
elseif idu==heroes_rawcode[Gaara]then
set desc="Песок – это абсолютная защита Гаары, которая состоит из щита и брони."
elseif idu==heroes_rawcode[Gai]then
set desc="Гай выполняет мощный и быстрый удар обратным вращением, калеча противников."
elseif idu==heroes_rawcode[Gengetsu]then
set desc="Генгетсу призывает гигантского моллюска – Охамагури, который создаёт иллюзии себя и Мизукаге, а оригиналы делает невидимыми."
elseif idu==heroes_rawcode[Haku]then
set desc="Хаку мгновенно перемещается на небольшое расстояние."
elseif idu==heroes_rawcode[Han]then
set desc="Используя давление пара, Хан способен наносить сокрушительные удары руками."
elseif idu==heroes_rawcode[Hanzo]then
set desc="Ханзо перемещается к указанному противнику, заставая его врасплох."
elseif idu==heroes_rawcode[Hashirama]then
set desc="Хаширама накладывает на противников иллюзию, в которой они теряют ориентацию в пространстве."
elseif idu==heroes_rawcode[Hidan]then
set desc="Хидан впадает в ярость, и совершает множество взмахов своей косой, атакуя противников."
elseif idu==heroes_rawcode[Itachi]then
set desc="Итачи бросает 12 сюрикенов и выдыхает на них чакру Катона."
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set desc="Джирайя выдыхает поток огня, поджигающий противников. Можно использовать на себя во время активного Расенгана."
elseif value==2 then
set desc="Джирайя превращается в маленькую жабу, которую не отличишь от безобидного существа."
endif
elseif idu==heroes_rawcode[Jugo]then
set desc="Джуго отращивает руку-гильотину, которой вбивает противника в землю."
elseif idu==heroes_rawcode[Kabuto]then
set desc="Кабуто высвобождает гигантскую сеть из паутины, в которую ловит врагов."
elseif idu==heroes_rawcode[Kakashi]then
set desc="Какаши создаёт теневого клона из чакры Молний, а сам перемещается в указанную зону."
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set desc="Мадара выдыхает мощный поток огня, который поджигает огромную область."
elseif value==2 then
set desc="Мадара создаёт клонов из дерева, которые помогают ему в бою."
endif
elseif idu==heroes_rawcode[Mei]then
set desc="Мей выпускает струю лавы, разъедающую плоть, а после некоторого времени лава затвердевает, загромождая путь противникам."
elseif idu==heroes_rawcode[Minato]then
set desc="Вне зависимости от расстояния Минато перемещается к своему кунаю, либо к союзному или вражескому шиноби, если на нём есть метка. Наносит урон противнику, либо атакует Rasengan, если он активирован."
elseif idu==heroes_rawcode[Mu]then
set desc="Му облегчает своё тело и получает возможность летать, однако не способен физически атаковать."
elseif idu==heroes_rawcode[Nagato]then
set desc="Простая техника Футона, при которой Нагато создаёт порыв ветра, который калечит противников и замедляет их."
elseif idu==heroes_rawcode[Naruto]then
set desc="Наруто создаёт шарообразный сгусток чакры, вращающийся с большой скоростью, а затем поражает выбранного противника."
elseif idu==heroes_rawcode[Neji]then
set desc="Небесный Вихрь - Неджи высвобождает чакру и вращается со скоростью 1200 км/ч. вокруг своей оси, с высокой вероятностью блокируя поступающий физический урон и снижая урон от Ниндзюцу, также наносит урон врагам и отталкивает их."
elseif idu==heroes_rawcode[Obito]then
set desc="Обито создаёт огненный барьер вокруг себя или союзника."
elseif idu==heroes_rawcode[Onoki]then
set desc="Оноки бросает ближайшего юнита в области 200 ед. в указанную цель. В месте приземления наносится урон по области 250 ед."
elseif idu==heroes_rawcode[Orochimaru]then
set desc="Орочимару достаёт изо рта свой меч и с огромной скоростью летит в указанную зону. Первому противнику на пути наносит критические повреждения. В месте приземления ломает деревья."
elseif idu==heroes_rawcode[Sai]then
set desc="Сай направляет невидимую змею на врага, которая ползёт к нему и обвивает, не позволяя двигаться."
elseif idu==heroes_rawcode[Sakura]then
set desc="Сакура прыгает на врага и наносит удар концентрированной чакрой, временно оглушая."
elseif idu==heroes_rawcode[Sasori]then
set desc="Изо рта марионетки вылетает несколько вперёд летящих сенбонов, смазанных ядом."
elseif idu==heroes_rawcode[Sasuke]then
set desc="Саске применяет одну из четырёх огненных техник в зависимости от ситуации."
elseif idu==heroes_rawcode[Shikamaru]then
set desc="Шикамару кидает световой шар на указанную местность, который взрывается, ослепляя врагов."
elseif idu==heroes_rawcode[Suigetsu]then
set desc="Суйгетсу перекачивает воду в свои руки, увеличивая наносимый физический урон."
elseif idu==heroes_rawcode[Tobirama]then
set desc="Тобирама создаёт вокруг себя воду, которая позволяет ему быстрее двигается и лучше уворачиваться от физических атак. Если Тобирама уже активировал Kage Bunshin no Jutsu, то техника применится и на клонов."
elseif idu==heroes_rawcode[Tsunade]then
set desc="Тсунаде с помощью Катсуи лечит союзников."
elseif idu==heroes_rawcode[Yamato]then
set desc="Ямато создаёт древесину вокруг указанной цели, а затем ответвления хватают противника, не позволяя ему двигаться."
elseif idu==heroes_rawcode[Zabuza]then
set desc="Забуза создаёт несколько своих двойников из воды для помощи в бою."
elseif idu==heroes_rawcode[Zetsu]then
set desc="Зетсу создаёт спирального клона – Тоби, который покрывает тело указанной цели, защищая её."
endif
return desc
endfunction
function JutsuSystemData_GetDescriptionOne takes integer idp,integer value returns string
local integer idu=GetUnitTypeId(udg_Hero[idp])
local string desc=null
if idu==heroes_rawcode[Asuma]then
set desc="Клинки-кастеты позволяют Асуме наносить удары с большего расстояния, а также они способны впитывать чакру владельца, усиливая свои характеристики."
elseif idu==heroes_rawcode[Chiyo]then
set desc="Чиё кидает 10 кунаев в указанную точку, которые ранят противников на пути."
elseif idu==heroes_rawcode[Danzo]then
set desc="Данзо применяет одну из пяти техник Ветра"
elseif idu==heroes_rawcode[Darui]then
set desc="Комбинируя Suiton и Raiton, Даруи сначала создаёт водяную стену, которая отталкивает врагов, а затем по намокшим противникам пускает электрический ток."
elseif idu==heroes_rawcode[Deidara]then
if value==1 then
set desc="Дейдара создаёт маленькие взрывающиеся глиняные фигурки. Фигурки взрываются автоматически, когда подойдут к противнику, но если их уничтожить, они не взорвутся."
elseif value==2 then
set desc="Дейдара раз в четверть секунды создаёт множество глиняных мин и сбрасывает их на землю, после чего происходит взрыв."
endif
elseif idu==heroes_rawcode[Ei]then
set desc="Эй резко сокращает дистанцию с противником, нанося ему удар локтем."
elseif idu==heroes_rawcode[Gaara]then
set desc="Гаара создаёт пустыню на местности."
elseif idu==heroes_rawcode[Gai]then
set desc="Гай наносит удар ногой в полёте по лицу противника."
elseif idu==heroes_rawcode[Gengetsu]then
set desc="Генгетсу концентрирует чакру на кончике пальца, а затем выстреливает ею в точку, где была цель в момент окончания каста."
elseif idu==heroes_rawcode[Haku]then
set desc="Хаку преобразует окружающую воду в острые ледяные иглы и направляет в противников."
elseif idu==heroes_rawcode[Han]then
set desc="Нагнетая давление в паровой броне, Хан совершает мощный удар ногой в прыжке по первой попавшейся цели на пути."
elseif idu==heroes_rawcode[Hanzo]then
set desc="Ханзо пускает цепь с серпом в указанном направлении и если он попадёт в противника, то цепь свяжет врага, а серп нанесёт урон."
elseif idu==heroes_rawcode[Hashirama]then
set desc="Хаширама применяет одну из вариаций древесных техник в зависимости от ситуации."
elseif idu==heroes_rawcode[Hidan]then
set desc="Хидан с помощью троса кидает косу с тремя лезвиями в указанную местность, которая наносит урон противникам."
elseif idu==heroes_rawcode[Itachi]then
set desc="Итачи выдыхает огромный огненный шар, направляя на врагов."
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set desc="Джирайя создаёт спиральнообразную сферу, которая при контакте с противником наносит огромные повреждения."
elseif value==2 then
set desc="Джирайя изрыгает липкое масло, которое замедляет цель."
endif
elseif idu==heroes_rawcode[Jugo]then
set desc="Джуго удлиняет свою руку и притягивает к себе первую попавшуюся цель."
elseif idu==heroes_rawcode[Kabuto]then
set desc="Кабуто передаёт часть своей жизненной энергии неорганической массе, что позволяет ему наносить повреждения противникам."
elseif idu==heroes_rawcode[Kakashi]then
set desc="Какаши призывает стаю собак, которые окружают цель, не позволяя ей двигаться."
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set desc="Мадара выдыхает 5 огромных огненных шаров, формируя стену огня, которую направляет на врагов."
elseif value==2 then
set desc="Мадара окутывает себя в особый барьер, который даёт 100 % снижение урона от Ниндзюцу, а также очищает от некоторых негативных эффектов. Если Мадара уже применил клонов, то барьер автоматически активируется и у них. В момент активации барьера наносит урон рядом стоящим врагам."
endif
elseif idu==heroes_rawcode[Mei]then
set desc="Мей выдыхает белый ядовитый пар, наносящий периодический урон."
elseif idu==heroes_rawcode[Minato]then
set desc="Минато концентрирует чакру в своей руке, преобразовывая её в сферу, а при следующей атаке нанесёт серьёзные повреждения противнику."
elseif idu==heroes_rawcode[Mu]then
set desc="Му через некоторое время полностью стирает следы своего присутствия."
elseif idu==heroes_rawcode[Nagato]then
set desc="Нагато владеет техниками Шести Путей, но из-за своего состояния не может применить их сам. Однако он способен сделать из мёртвого тела марионетку."
elseif idu==heroes_rawcode[Naruto]then
set desc="Ключевая техника Наруто – создание материальных копий для помощи в бою."
elseif idu==heroes_rawcode[Neji]then
set desc="Мягкий кулак - Удары Неджи попадают по тенкетсу – точкам циркуляции чакры, выбивая разум противника и поражая внутренние органы."
elseif idu==heroes_rawcode[Obito]then
set desc="Обито активирует силу своего Мангекё Шарингана, которая позволяет ему применить одну из пространственно-временных техник."
elseif idu==heroes_rawcode[Onoki]then
set desc="Оноки покрывает тела противников слоем камня."
elseif idu==heroes_rawcode[Orochimaru]then
set desc="Орочимару выпускает ядовитых змей из рукава и хватает ими противника."
elseif idu==heroes_rawcode[Sai]then
set desc="Сай рисует четырёх львов, бросающихся на противников."
elseif idu==heroes_rawcode[Sakura]then
set desc="Сакура ударяет мощным ударом в землю, что вызывает разлом в направлении атаки, через который нельзя пройти. При ударе враги получают урон."
elseif idu==heroes_rawcode[Sasori]then
set desc="Марионетка вонзает хвост в землю и атакует противника."
elseif idu==heroes_rawcode[Sasuke]then
set desc="Саске концентрирует большое количество чакры в своей руке и на огромной скорости мчится на оппонента, чтобы ранить его."
elseif idu==heroes_rawcode[Shikamaru]then
set desc="Шикамару ловит врагов в свою тень, при попадании в которую они повторяют все движения Шикамару."
elseif idu==heroes_rawcode[Suigetsu]then
set desc="Суйгетсу выстреливает двумя водяными струями в противника."
elseif idu==heroes_rawcode[Tobirama]then
set desc="Тобирама выстреливает мощным водяным лучом в противника. Луч толкает цель вперёд, ежесекундно нанося урон и снижая защиту."
elseif idu==heroes_rawcode[Tsunade]then
set desc="Тсунаде подпрыгивает в воздух, а затем наносит нисходящий удар ногой."
elseif idu==heroes_rawcode[Yamato]then
set desc="Ямато создаёт дерево и направляет его в указанную точку. При соприкосновении с врагом, его отталкивает на большое расстояние."
elseif idu==heroes_rawcode[Zabuza]then
set desc="Забуза создаёт густой туман на местности."
elseif idu==heroes_rawcode[Zetsu]then
set desc="Зетсу сливается с ландшафтом, становясь недосягаемым, что позволяет ему шпионить за противниками, а также перемещаться в любую точку карты."
endif
return desc
endfunction
function JutsuSystemData_GetModelFourId takes integer idp,integer value returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idModel=0
if idu==heroes_rawcode[Asuma]then
set idModel=0x42303554
elseif idu==heroes_rawcode[Chiyo]then
set idModel=0x42304236
elseif idu==heroes_rawcode[Danzo]then
set idModel=0x42303952
elseif idu==heroes_rawcode[Darui]then
set idModel=0x4230385A
elseif idu==heroes_rawcode[Ei]then
set idModel=0x42303656
elseif idu==heroes_rawcode[Gaara]then
set idModel=0x42303842
elseif idu==heroes_rawcode[Gai]then
set idModel=0x42303933
elseif idu==heroes_rawcode[Gengetsu]then
set idModel=0x42303837
elseif idu==heroes_rawcode[Haku]then
set idModel=0x4230395A
elseif idu==heroes_rawcode[Han]then
set idModel=0x42304133
elseif idu==heroes_rawcode[Hanzo]then
set idModel=0x42304156
elseif idu==heroes_rawcode[Hashirama]then
set idModel=0x42303942
elseif idu==heroes_rawcode[Hidan]then
set idModel=0x4230414A
elseif idu==heroes_rawcode[Itachi]then
set idModel=0x42303946
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set idModel=0x42303937
elseif value==2 then
set idModel=0x4230425A
endif
elseif idu==heroes_rawcode[Jugo]then
set idModel=0x4230415A
elseif idu==heroes_rawcode[Kabuto]then
set idModel=0x4230394A
elseif idu==heroes_rawcode[Kakashi]then
set idModel=0x4230394E
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set idModel=0x42303632
elseif value==2 then
set idModel=0x42303636
endif
elseif idu==heroes_rawcode[Mei]then
set idModel=0x42303846
elseif idu==heroes_rawcode[Minato]then
set idModel=0x42303749
elseif idu==heroes_rawcode[Mu]then
set idModel=0x4230384A
elseif idu==heroes_rawcode[Nagato]then
set idModel=0x4230414E
elseif idu==heroes_rawcode[Naruto]then
set idModel=0x42303249
elseif idu==heroes_rawcode[Neji]then
set idModel=0x4230354F
elseif idu==heroes_rawcode[Obito]then
set idModel=0x42304146
elseif idu==heroes_rawcode[Onoki]then
set idModel=0x42304142
elseif idu==heroes_rawcode[Orochimaru]then
set idModel=0x42304137
elseif idu==heroes_rawcode[Sai]then
set idModel=0x42303752
elseif idu==heroes_rawcode[Sakura]then
set idModel=0x4230374E
elseif idu==heroes_rawcode[Sasori]then
set idModel=0x42304242
elseif idu==heroes_rawcode[Sasuke]then
set idModel=0x42303231
elseif idu==heroes_rawcode[Shikamaru]then
set idModel=0x42303757
elseif idu==heroes_rawcode[Suigetsu]then
set idModel=0x42303853
elseif idu==heroes_rawcode[Tobirama]then
set idModel=0x42303852
elseif idu==heroes_rawcode[Tsunade]then
set idModel=0x4230384E
elseif idu==heroes_rawcode[Yamato]then
set idModel=0x42304233
elseif idu==heroes_rawcode[Zabuza]then
set idModel=0x42304152
elseif idu==heroes_rawcode[Zetsu]then
set idModel=0x42303956
endif
return idModel
endfunction
function JutsuSystemData_GetModelThreeId takes integer idp,integer value returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idModel=0
if idu==heroes_rawcode[Asuma]then
set idModel=0x42303555
elseif idu==heroes_rawcode[Chiyo]then
set idModel=0x42304235
elseif idu==heroes_rawcode[Danzo]then
set idModel=0x42303951
elseif idu==heroes_rawcode[Darui]then
set idModel=0x42303859
elseif idu==heroes_rawcode[Ei]then
set idModel=0x42303653
elseif idu==heroes_rawcode[Gaara]then
set idModel=0x42303841
elseif idu==heroes_rawcode[Gai]then
set idModel=0x42303932
elseif idu==heroes_rawcode[Gengetsu]then
set idModel=0x42303836
elseif idu==heroes_rawcode[Haku]then
set idModel=0x42303959
elseif idu==heroes_rawcode[Han]then
set idModel=0x42304132
elseif idu==heroes_rawcode[Hanzo]then
set idModel=0x42304155
elseif idu==heroes_rawcode[Hashirama]then
set idModel=0x42303941
elseif idu==heroes_rawcode[Hidan]then
set idModel=0x42304149
elseif idu==heroes_rawcode[Itachi]then
set idModel=0x42303945
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set idModel=0x42303936
elseif value==2 then
set idModel=0x42304259
endif
elseif idu==heroes_rawcode[Jugo]then
set idModel=0x42304159
elseif idu==heroes_rawcode[Kabuto]then
set idModel=0x42303949
elseif idu==heroes_rawcode[Kakashi]then
set idModel=0x4230394D
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set idModel=0x42303558
elseif value==2 then
set idModel=0x42303637
endif
elseif idu==heroes_rawcode[Mei]then
set idModel=0x42303845
elseif idu==heroes_rawcode[Minato]then
set idModel=0x42303743
elseif idu==heroes_rawcode[Mu]then
set idModel=0x42303849
elseif idu==heroes_rawcode[Nagato]then
set idModel=0x4230414D
elseif idu==heroes_rawcode[Naruto]then
set idModel=0x4230324A
elseif idu==heroes_rawcode[Neji]then
set idModel=0x4230354D
elseif idu==heroes_rawcode[Obito]then
set idModel=0x42304145
elseif idu==heroes_rawcode[Onoki]then
set idModel=0x42304141
elseif idu==heroes_rawcode[Orochimaru]then
set idModel=0x42304136
elseif idu==heroes_rawcode[Sai]then
set idModel=0x42303751
elseif idu==heroes_rawcode[Sakura]then
set idModel=0x4230374D
elseif idu==heroes_rawcode[Sasori]then
set idModel=0x42304241
elseif idu==heroes_rawcode[Sasuke]then
set idModel=0x42303230
elseif idu==heroes_rawcode[Shikamaru]then
set idModel=0x42303755
elseif idu==heroes_rawcode[Suigetsu]then
set idModel=0x42303854
elseif idu==heroes_rawcode[Tobirama]then
set idModel=0x42303851
elseif idu==heroes_rawcode[Tsunade]then
set idModel=0x4230384D
elseif idu==heroes_rawcode[Yamato]then
set idModel=0x42304232
elseif idu==heroes_rawcode[Zabuza]then
set idModel=0x42304151
elseif idu==heroes_rawcode[Zetsu]then
set idModel=0x42303955
endif
return idModel
endfunction
function JutsuSystemData_GetModelTwoId takes integer idp,integer value returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idModel=0
if idu==heroes_rawcode[Asuma]then
set idModel=0x42303551
elseif idu==heroes_rawcode[Chiyo]then
set idModel=0x42304237
elseif idu==heroes_rawcode[Danzo]then
set idModel=0x42303950
elseif idu==heroes_rawcode[Darui]then
set idModel=0x42303858
elseif idu==heroes_rawcode[Ei]then
set idModel=0x42303650
elseif idu==heroes_rawcode[Gaara]then
set idModel=0x42303839
elseif idu==heroes_rawcode[Gai]then
set idModel=0x42303931
elseif idu==heroes_rawcode[Gengetsu]then
set idModel=0x42303831
elseif idu==heroes_rawcode[Haku]then
set idModel=0x42303958
elseif idu==heroes_rawcode[Han]then
set idModel=0x42304131
elseif idu==heroes_rawcode[Hanzo]then
set idModel=0x42304154
elseif idu==heroes_rawcode[Hashirama]then
set idModel=0x42303939
elseif idu==heroes_rawcode[Hidan]then
set idModel=0x42304148
elseif idu==heroes_rawcode[Itachi]then
set idModel=0x42303944
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set idModel=0x42303934
elseif value==2 then
set idModel=0x42304258
endif
elseif idu==heroes_rawcode[Jugo]then
set idModel=0x42304158
elseif idu==heroes_rawcode[Kabuto]then
set idModel=0x42303948
elseif idu==heroes_rawcode[Kakashi]then
set idModel=0x4230394C
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set idModel=0x42303557
elseif value==2 then
set idModel=0x42303638
endif
elseif idu==heroes_rawcode[Mei]then
set idModel=0x42303844
elseif idu==heroes_rawcode[Minato]then
set idModel=0x42303741
elseif idu==heroes_rawcode[Mu]then
set idModel=0x42303848
elseif idu==heroes_rawcode[Nagato]then
set idModel=0x4230414C
elseif idu==heroes_rawcode[Naruto]then
set idModel=0x42303248
elseif idu==heroes_rawcode[Neji]then
set idModel=0x4230354B
elseif idu==heroes_rawcode[Obito]then
set idModel=0x42304144
elseif idu==heroes_rawcode[Onoki]then
set idModel=0x42304139
elseif idu==heroes_rawcode[Orochimaru]then
set idModel=0x42304135
elseif idu==heroes_rawcode[Sai]then
set idModel=0x42303750
elseif idu==heroes_rawcode[Sakura]then
set idModel=0x4230374C
elseif idu==heroes_rawcode[Sasori]then
set idModel=0x42304239
elseif idu==heroes_rawcode[Sasuke]then
set idModel=0x4230315A
elseif idu==heroes_rawcode[Shikamaru]then
set idModel=0x42303754
elseif idu==heroes_rawcode[Suigetsu]then
set idModel=0x42303855
elseif idu==heroes_rawcode[Tobirama]then
set idModel=0x42303850
elseif idu==heroes_rawcode[Tsunade]then
set idModel=0x4230384C
elseif idu==heroes_rawcode[Yamato]then
set idModel=0x42304231
elseif idu==heroes_rawcode[Zabuza]then
set idModel=0x42304150
elseif idu==heroes_rawcode[Zetsu]then
set idModel=0x42303954
endif
return idModel
endfunction
function JutsuSystemData_GetModelOneId takes integer idp,integer value returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idModel=0
if idu==heroes_rawcode[Asuma]then
set idModel=0x42303550
elseif idu==heroes_rawcode[Chiyo]then
set idModel=0x42304234
elseif idu==heroes_rawcode[Danzo]then
set idModel=0x4230394F
elseif idu==heroes_rawcode[Darui]then
set idModel=0x42303857
elseif idu==heroes_rawcode[Ei]then
set idModel=0x4230364F
elseif idu==heroes_rawcode[Gaara]then
set idModel=0x42303838
elseif idu==heroes_rawcode[Gai]then
set idModel=0x42303930
elseif idu==heroes_rawcode[Gengetsu]then
set idModel=0x42303759
elseif idu==heroes_rawcode[Haku]then
set idModel=0x42303957
elseif idu==heroes_rawcode[Han]then
set idModel=0x42304130
elseif idu==heroes_rawcode[Hanzo]then
set idModel=0x42304153
elseif idu==heroes_rawcode[Hashirama]then
set idModel=0x42303938
elseif idu==heroes_rawcode[Hidan]then
set idModel=0x42304147
elseif idu==heroes_rawcode[Itachi]then
set idModel=0x42303943
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set idModel=0x42303935
elseif value==2 then
set idModel=0x42304257
endif
elseif idu==heroes_rawcode[Jugo]then
set idModel=0x42304157
elseif idu==heroes_rawcode[Kabuto]then
set idModel=0x42303947
elseif idu==heroes_rawcode[Kakashi]then
set idModel=0x4230394B
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set idModel=0x42303556
elseif value==2 then
set idModel=0x42303639
endif
elseif idu==heroes_rawcode[Mei]then
set idModel=0x42303843
elseif idu==heroes_rawcode[Minato]then
set idModel=0x42303739
elseif idu==heroes_rawcode[Mu]then
set idModel=0x42303847
elseif idu==heroes_rawcode[Nagato]then
set idModel=0x4230414B
elseif idu==heroes_rawcode[Naruto]then
set idModel=0x42303247
elseif idu==heroes_rawcode[Neji]then
set idModel=0x42303455
elseif idu==heroes_rawcode[Obito]then
set idModel=0x42304143
elseif idu==heroes_rawcode[Onoki]then
set idModel=0x42304138
elseif idu==heroes_rawcode[Orochimaru]then
set idModel=0x42304134
elseif idu==heroes_rawcode[Sai]then
set idModel=0x4230374F
elseif idu==heroes_rawcode[Sakura]then
set idModel=0x4230374A
elseif idu==heroes_rawcode[Sasori]then
set idModel=0x42304238
elseif idu==heroes_rawcode[Sasuke]then
set idModel=0x42303158
elseif idu==heroes_rawcode[Shikamaru]then
set idModel=0x42303753
elseif idu==heroes_rawcode[Suigetsu]then
set idModel=0x42303856
elseif idu==heroes_rawcode[Tobirama]then
set idModel=0x4230384F
elseif idu==heroes_rawcode[Tsunade]then
set idModel=0x4230384B
elseif idu==heroes_rawcode[Yamato]then
set idModel=0x42304230
elseif idu==heroes_rawcode[Zabuza]then
set idModel=0x4230414F
elseif idu==heroes_rawcode[Zetsu]then
set idModel=0x42303953
endif
return idModel
endfunction
function JutsuSystemData_GetSpellFourId takes integer idp,integer value returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idSpell=0
if idu==heroes_rawcode[Asuma]then
set idSpell=Asuma_FUJIN
elseif idu==heroes_rawcode[Chiyo]then
set idSpell=Chiyo_CHIKAMATSU
elseif idu==heroes_rawcode[Danzo]then
set idSpell=Danzo_ULT
elseif idu==heroes_rawcode[Darui]then
set idSpell=Darui_KURO_PANSA
elseif idu==heroes_rawcode[Ei]then
set idSpell=Ei_ULT
elseif idu==heroes_rawcode[Gaara]then
set idSpell=Gaara_SABAKU_SOTAISO
elseif idu==heroes_rawcode[Gai]then
set idSpell=Gai_ULT
elseif idu==heroes_rawcode[Gengetsu]then
set idSpell=Gengetsu_JOKEY_BOY
elseif idu==heroes_rawcode[Haku]then
set idSpell=Haku_ULT
elseif idu==heroes_rawcode[Han]then
set idSpell=Han_TSUNOORI
elseif idu==heroes_rawcode[Hanzo]then
set idSpell=Hanzo_KUCHIYOSE
elseif idu==heroes_rawcode[Hashirama]then
set idSpell=Hashirama_SUMMON
elseif idu==heroes_rawcode[Hidan]then
set idSpell=Hidan_JUJUTSU
elseif idu==heroes_rawcode[Itachi]then
set idSpell=Itachi_IZANAMI
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set idSpell=Jiraiya_HARI_JIZO
elseif value==2 then
set idSpell=Jiraiya_GAMAKEN
endif
elseif idu==heroes_rawcode[Jugo]then
set idSpell=Jugo_ULT
elseif idu==heroes_rawcode[Kabuto]then
set idSpell=Kabuto_ULT
elseif idu==heroes_rawcode[Kakashi]then
set idSpell=Kakashi_KAMUI_RAIKIRI
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set idSpell=Madara_RYUEN_HOKA
elseif value==2 then
set idSpell=Madara_KAJUKAI
endif
elseif idu==heroes_rawcode[Mei]then
set idSpell=Mei_SUIRYUDAN
elseif idu==heroes_rawcode[Minato]then
set idSpell=Minato_ULT
elseif idu==heroes_rawcode[Mu]then
set idSpell=Mu_ULT
elseif idu==heroes_rawcode[Nagato]then
set idSpell=Nagato_RINNE_TENSEI
elseif idu==heroes_rawcode[Naruto]then
set idSpell=Naruto_SENNIN_MODO
elseif idu==heroes_rawcode[Neji]then
set idSpell=Neji_HAKKE_ROKUJUYON_SHO
elseif idu==heroes_rawcode[Obito]then
set idSpell=Obito_KUSARI
elseif idu==heroes_rawcode[Onoki]then
set idSpell=Onoki_ULT
elseif idu==heroes_rawcode[Orochimaru]then
set idSpell=Orochimaru_ULT
elseif idu==heroes_rawcode[Sai]then
set idSpell=Sai_CHOSHIN_GIGA
elseif idu==heroes_rawcode[Sakura]then
set idSpell=Sakura_BYAKUGO
elseif idu==heroes_rawcode[Sasori]then
set idSpell=Sasori_SENBOMB
elseif idu==heroes_rawcode[Sasuke]then
set idSpell=Sasuke_KUCHIYOSE
elseif idu==heroes_rawcode[Shikamaru]then
set idSpell=Shikamaru_ULT
elseif idu==heroes_rawcode[Suigetsu]then
set idSpell=Suigetsu_ULT
elseif idu==heroes_rawcode[Tobirama]then
set idSpell=Tobirama_KAGEBUNSHIN
elseif idu==heroes_rawcode[Tsunade]then
set idSpell=Tsunade_ULT
elseif idu==heroes_rawcode[Yamato]then
set idSpell=Yamato_ULT
elseif idu==heroes_rawcode[Zabuza]then
set idSpell=Zabuza_ULT
elseif idu==heroes_rawcode[Zetsu]then
set idSpell=Zetsu_ULT
endif
return idSpell
endfunction
function JutsuSystemData_GetSpellThreeId takes integer idp,integer value returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idSpell=0
if idu==heroes_rawcode[Asuma]then
set idSpell=Asuma_HAISEKISHOU
elseif idu==heroes_rawcode[Chiyo]then
set idSpell=Chiyo_PAPA_MAMA
elseif idu==heroes_rawcode[Danzo]then
set idSpell=Danzo_BAKU
elseif idu==heroes_rawcode[Darui]then
set idSpell=Darui_ZANBATO
elseif idu==heroes_rawcode[Ei]then
set idSpell=Ei_GIROCHIN
elseif idu==heroes_rawcode[Gaara]then
set idSpell=Gaara_SABAKUHA
elseif idu==heroes_rawcode[Gai]then
set idSpell=Gai_HT
elseif idu==heroes_rawcode[Gengetsu]then
set idSpell=Gengetsu_SUIKA
elseif idu==heroes_rawcode[Haku]then
set idSpell=Haku_HISSATSU
elseif idu==heroes_rawcode[Han]then
set idSpell=Han_YOROI
elseif idu==heroes_rawcode[Hanzo]then
set idSpell=Hanzo_KATON
elseif idu==heroes_rawcode[Hashirama]then
set idSpell=Hashirama_JUKAI_KOTAN
elseif idu==heroes_rawcode[Hidan]then
set idSpell=Hidan_JASHINKYO
elseif idu==heroes_rawcode[Itachi]then
set idSpell=Itachi_BUNSHIN
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set idSpell=Jiraiya_YOMI_NUMA
elseif value==2 then
set idSpell=Jiraiya_GAMAGUCHI
endif
elseif idu==heroes_rawcode[Jugo]then
set idSpell=Jugo_JUMP
elseif idu==heroes_rawcode[Kabuto]then
set idSpell=Kabuto_HAKUGEKI
elseif idu==heroes_rawcode[Kakashi]then
set idSpell=Kakashi_KAMUI
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set idSpell=Madara_HAIJINGAKURE
elseif value==2 then
set idSpell=Madara_MOKTON
endif
elseif idu==heroes_rawcode[Mei]then
set idSpell=Mei_KIRIGAKURE
elseif idu==heroes_rawcode[Minato]then
set idSpell=Minato_KUCHIYOSE
elseif idu==heroes_rawcode[Mu]then
set idSpell=Mu_BUNRETSU
elseif idu==heroes_rawcode[Nagato]then
set idSpell=Nagato_KANCHI
elseif idu==heroes_rawcode[Naruto]then
set idSpell=Naruto_KUCHIYOSE
elseif idu==heroes_rawcode[Neji]then
set idSpell=Neji_BYAKUGAN
elseif idu==heroes_rawcode[Obito]then
set idSpell=Obito_GOKAKYU
elseif idu==heroes_rawcode[Onoki]then
set idSpell=Onoki_GOREMU
elseif idu==heroes_rawcode[Orochimaru]then
set idSpell=Orochimaru_RASHOMON
elseif idu==heroes_rawcode[Sai]then
set idSpell=Sai_TORA
elseif idu==heroes_rawcode[Sakura]then
set idSpell=Sakura_SHOSEN
elseif idu==heroes_rawcode[Sasori]then
set idSpell=Sasori_GANJONA_KESU
elseif idu==heroes_rawcode[Sasuke]then
set idSpell=Sasuke_SHARINGAN
elseif idu==heroes_rawcode[Shikamaru]then
set idSpell=Shikamaru_KIBAKUFUDA
elseif idu==heroes_rawcode[Suigetsu]then
set idSpell=Suigetsu_SUIKA
elseif idu==heroes_rawcode[Tobirama]then
set idSpell=Tobirama_SUISHOHA
elseif idu==heroes_rawcode[Tsunade]then
set idSpell=Tsunade_TAIRYOKU
elseif idu==heroes_rawcode[Yamato]then
set idSpell=Yamato_SHICHURO
elseif idu==heroes_rawcode[Zabuza]then
set idSpell=Zabuza_KUBIKIRIBOCHO
elseif idu==heroes_rawcode[Zetsu]then
set idSpell=Zetsu_BUNSHIN
endif
return idSpell
endfunction
function JutsuSystemData_GetSpellTwoId takes integer idp,integer value returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idSpell=0
if idu==heroes_rawcode[Asuma]then
set idSpell=Asuma_KAWARIMI
elseif idu==heroes_rawcode[Chiyo]then
set idSpell=Chiyo_CHAKRA_NO_ITO
elseif idu==heroes_rawcode[Danzo]then
set idSpell=Danzo_FUINJUTSU
elseif idu==heroes_rawcode[Darui]then
set idSpell=Darui_REIZAA_SAAKASU
elseif idu==heroes_rawcode[Ei]then
set idSpell=Ei_ARMOR
elseif idu==heroes_rawcode[Gaara]then
set idSpell=Gaara_ZETTAI_BOGYO
elseif idu==heroes_rawcode[Gai]then
set idSpell=Gai_GORIKI
elseif idu==heroes_rawcode[Gengetsu]then
set idSpell=Gengetsu_OHAMAGURI
elseif idu==heroes_rawcode[Haku]then
set idSpell=Haku_SHUNSHIN
elseif idu==heroes_rawcode[Han]then
set idSpell=Han_FUNSUIKEN
elseif idu==heroes_rawcode[Hanzo]then
set idSpell=Hanzo_SHUNSHIN
elseif idu==heroes_rawcode[Hashirama]then
set idSpell=Hashirama_KOKUANGYO
elseif idu==heroes_rawcode[Hidan]then
set idSpell=Hidan_KYOKENBYO
elseif idu==heroes_rawcode[Itachi]then
set idSpell=Itachi_TSUMABENI
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set idSpell=Jiraiya_KATON_ENDAN
elseif value==2 then
set idSpell=Jiraiya_GAMAGAKURE
endif
elseif idu==heroes_rawcode[Jugo]then
set idSpell=Jugo_ISHIKKI
elseif idu==heroes_rawcode[Kabuto]then
set idSpell=Kabuto_KUMO_SOKAI
elseif idu==heroes_rawcode[Kakashi]then
set idSpell=Kakashi_BUNSHIN
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set idSpell=Madara_GOKA_MESSHITSU
elseif value==2 then
set idSpell=Madara_MOKUBUNSHIN
endif
elseif idu==heroes_rawcode[Mei]then
set idSpell=Mei_YOKAI
elseif idu==heroes_rawcode[Minato]then
set idSpell=Minato_HIRAISHIN
elseif idu==heroes_rawcode[Mu]then
set idSpell=Mu_KEIJUGAN
elseif idu==heroes_rawcode[Nagato]then
set idSpell=Nagato_FUTON
elseif idu==heroes_rawcode[Naruto]then
set idSpell=Naruto_RASENGAN
elseif idu==heroes_rawcode[Neji]then
set idSpell=Neji_KAITEN
elseif idu==heroes_rawcode[Obito]then
set idSpell=Obito_UCHIHA_KAENJIN
elseif idu==heroes_rawcode[Onoki]then
set idSpell=Onoki_KEIJUGAN
elseif idu==heroes_rawcode[Orochimaru]then
set idSpell=Orochimaru_KUSANAGI
elseif idu==heroes_rawcode[Sai]then
set idSpell=Sai_HEBI
elseif idu==heroes_rawcode[Sakura]then
set idSpell=Sakura_GOCKEN
elseif idu==heroes_rawcode[Sasori]then
set idSpell=Sasori_SENBONS
elseif idu==heroes_rawcode[Sasuke]then
set idSpell=Sasuke_KATON
elseif idu==heroes_rawcode[Shikamaru]then
set idSpell=Shikamaru_HIKARIDAMA
elseif idu==heroes_rawcode[Suigetsu]then
set idSpell=Suigetsu_GOSUIWAN
elseif idu==heroes_rawcode[Tobirama]then
set idSpell=Tobirama_SUITON
elseif idu==heroes_rawcode[Tsunade]then
set idSpell=Tsunade_ENKAKU_CHIYU
elseif idu==heroes_rawcode[Yamato]then
set idSpell=Yamato_SHIBARI
elseif idu==heroes_rawcode[Zabuza]then
set idSpell=Zabuza_MIZU_BUNSHIN
elseif idu==heroes_rawcode[Zetsu]then
set idSpell=Zetsu_TOBI
endif
return idSpell
endfunction
function JutsuSystemData_GetSpellOneId takes integer idp,integer value returns integer
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idSpell=0
if idu==heroes_rawcode[Asuma]then
set idSpell=Asuma_TEKKO
elseif idu==heroes_rawcode[Chiyo]then
set idSpell=Chiyo_SOSHUHA
elseif idu==heroes_rawcode[Danzo]then
set idSpell=Danzo_FUTON
elseif idu==heroes_rawcode[Darui]then
set idSpell=Darui_SUIJINHEKI
elseif idu==heroes_rawcode[Ei]then
set idSpell=Ei_ERUBO
elseif idu==heroes_rawcode[Gaara]then
set idSpell=Gaara_SABAKU
elseif idu==heroes_rawcode[Gai]then
set idSpell=Gai_ENTRY
elseif idu==heroes_rawcode[Gengetsu]then
set idSpell=Gengetsu_MIZUDEPPO
elseif idu==heroes_rawcode[Haku]then
set idSpell=Haku_SENSATSU
elseif idu==heroes_rawcode[Han]then
set idSpell=Han_FUNGOKYAKU
elseif idu==heroes_rawcode[Hanzo]then
set idSpell=Hanzo_HAGAMA
elseif idu==heroes_rawcode[Hashirama]then
set idSpell=Hashirama_MOKUTON_NO_JUTSU
elseif idu==heroes_rawcode[Hidan]then
set idSpell=Hidan_SANJIN_NO_OGAMA
elseif idu==heroes_rawcode[Itachi]then
set idSpell=Itachi_GOKAKYU
elseif idu==heroes_rawcode[Jiraya]then
if value==1 then
set idSpell=Jiraiya_RASENGAN
elseif value==2 then
set idSpell=Jiraiya_GAMAYUDAN
endif
elseif idu==heroes_rawcode[Jugo]then
set idSpell=Jugo_KUSARI
elseif idu==heroes_rawcode[Kabuto]then
set idSpell=Kabuto_MUKI_TENSEI
elseif idu==heroes_rawcode[Kakashi]then
set idSpell=Kakashi_TSUIGA
elseif idu==heroes_rawcode[Madara]then
if value==1 then
set idSpell=Madara_GOKA_MEKKYAKU
elseif value==2 then
set idSpell=Madara_KYUIN
endif
elseif idu==heroes_rawcode[Mei]then
set idSpell=Mei_KOMO
elseif idu==heroes_rawcode[Minato]then
set idSpell=Minato_RASENGAN
elseif idu==heroes_rawcode[Mu]then
set idSpell=Mu_MEISAI
elseif idu==heroes_rawcode[Nagato]then
set idSpell=Nagato_GEDO
elseif idu==heroes_rawcode[Naruto]then
set idSpell=Naruto_KAGE_BUNSHIN
elseif idu==heroes_rawcode[Neji]then
set idSpell=Neji_JUKEN
elseif idu==heroes_rawcode[Obito]then
set idSpell=Obito_MS
elseif idu==heroes_rawcode[Onoki]then
set idSpell=Onoki_KAIJUGAN
elseif idu==heroes_rawcode[Orochimaru]then
set idSpell=Orochimaru_SNAKE
elseif idu==heroes_rawcode[Sai]then
set idSpell=Sai_SHISHI
elseif idu==heroes_rawcode[Sakura]then
set idSpell=Sakura_OKASHO
elseif idu==heroes_rawcode[Sasori]then
set idSpell=Sasori_AIANTERU
elseif idu==heroes_rawcode[Sasuke]then
set idSpell=Sasuke_CHIDORI
elseif idu==heroes_rawcode[Shikamaru]then
set idSpell=Shikamaru_KAGE_MANE
elseif idu==heroes_rawcode[Suigetsu]then
set idSpell=Suigetsu_MIZUDEPPO
elseif idu==heroes_rawcode[Tobirama]then
set idSpell=Tobirama_SUIDANHA
elseif idu==heroes_rawcode[Tsunade]then
set idSpell=Tsunade_TSUTEN_KYAKU
elseif idu==heroes_rawcode[Yamato]then
set idSpell=Yamato_DAIJURIN
elseif idu==heroes_rawcode[Zabuza]then
set idSpell=Zabuza_KIRIGAKURE
elseif idu==heroes_rawcode[Zetsu]then
set idSpell=Zetsu_KAGERO
endif
return idSpell
endfunction
function cj_anonym__147 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(Hash,h,0)
if not udg_GameEnd then
if GetWidgetLife(u)>.405 then
call SetWidgetLife(u,GetWidgetLife(u)+(GetUnitAbilityLevel(u,0x41313556)*2.5)/2.)
endif
else
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function JutsuSystem___VitalForceStartRegenHP takes unit u returns nothing
local timer t=CreateTimer()
call SaveAgentHandle(Hash,GetHandleId(t),0,u)
call TimerStart(t,.5,true,function cj_anonym__147)
set t=null
endfunction
function JutsuSystem___BijuRikudoFormStart takes player p,integer idp,integer new_id returns nothing
local integer i=0
local real x=GetWidgetX(udg_Hero[idp])
local real y=GetWidgetY(udg_Hero[idp])
local real f=GetUnitFacing(udg_Hero[idp])
local integer exp=GetHeroXP(udg_Hero[idp])
local unit u=udg_Hero[idp]
call ShowUnit(udg_Hero[idp],false)
set udg_Hero[idp]=CreateUnit(p,new_id,x,y,f)
loop
exitwhen i>5
call UnitAddItem(udg_Hero[idp],UnitItemInSlot(u,i))
set i=i+1
endloop
call SetHeroXP(udg_Hero[idp],exp,false)
if new_id==heroes_rikudo_rawcode[Madara]then
call Sound("Madara Rikudo no Chikara.mp3")
set Madara_c=udg_Hero[idp]
set Madara_p=GetOwningPlayer(Madara_c)
call UnitAddAbility(udg_Hero[idp],Madara_SENPO)
call UnitAddAbility(udg_Hero[idp],Madara_RINBO)
call UnitAddAbility(udg_Hero[idp],Madara_CHIBAKU_TENSEI)
call UnitAddAbility(udg_Hero[idp],Madara_MUGEN_TSUKUYOMI)
call UnitAddAbility(udg_Hero[idp],Madara_GUDODAMA)
call ExecuteFunc("Madara_GudodamaRegenCast")
call TriggerRegisterUnitEvent(Madara_trgRinboDamage,Madara_c,EVENT_UNIT_DAMAGED)
elseif new_id==heroes_rikudo_rawcode[Naruto]then
call Sound("Naruto Rikudo no Chikara.mp3")
set Naruto_c=udg_Hero[idp]
set Naruto_p=GetOwningPlayer(Naruto_c)
set Naruto_EffGudodama=AddSpecialEffectTarget("Naruto Rikudo Gudodama.mdx",Naruto_c,"chest")
call UnitAddAbility(udg_Hero[idp],Naruto_GUDODAMA)
call UnitAddAbility(udg_Hero[idp],Naruto_RIKUDO_KAGE_BUNSHIN)
call UnitAddAbility(udg_Hero[idp],Naruto_RIKUDO_SENNIN_MODO)
call UnitAddAbility(udg_Hero[idp],Naruto_SENPO_CHO_BIJU_RASEN_SHURIKEN)
call UnitAddAbility(udg_Hero[idp],Naruto_RIKUDO_BIJU_MODO)
call UnitAddAbility(udg_Hero[idp],Naruto_RIKUDO_SENNIN_MODO_SPELLBOOK)
call ExecuteFunc("AddAbility_RikudoSenninModoStart")
elseif new_id==heroes_rikudo_rawcode[Obito]then
call Sound("Obito Rikudo no Chikara.mp3")
set Obito_c=udg_Hero[idp]
set Obito_p=GetOwningPlayer(Obito_c)
call UnitAddAbility(udg_Hero[idp],Obito_GUDODAMA)
call UnitAddAbility(udg_Hero[idp],Obito_MUSEKI_YOJIN)
call UnitAddAbility(udg_Hero[idp],Obito_BIJUDAMA)
call UnitAddAbility(udg_Hero[idp],Obito_NUNOBOKO)
call UnitAddAbility(udg_Hero[idp],Obito_SENJUTSU)
call UnitAddAbility(udg_Hero[idp],Obito_SENJUTSU_SPELLBOOK)
call TriggerRegisterUnitEvent(Obito_trgRikudoSenjutsuDamage,udg_Hero[idp],EVENT_UNIT_DAMAGED)
call TriggerRegisterUnitEvent(Obito_trgGudodamaSphereDamage,udg_Hero[idp],EVENT_UNIT_DAMAGED)
call EnableTrigger(Obito_trgRikudoSenjutsuDamage)
elseif new_id==heroes_rikudo_rawcode[Sasuke]then
call Sound("Sasuke Rikudo no Chikara.mp3")
set Sasuke_c=udg_Hero[idp]
set Sasuke_p=GetOwningPlayer(Sasuke_c)
call UnitAddAbility(udg_Hero[idp],Sasuke_RIKUDO_CHIDORI)
call UnitAddAbility(udg_Hero[idp],Sasuke_ENTON_KAGUTSUCHI)
call UnitAddAbility(udg_Hero[idp],Sasuke_RINNEGAN)
call UnitAddAbility(udg_Hero[idp],Sasuke_CHIBAKU_TENSEI)
call UnitAddAbility(udg_Hero[idp],Sasuke_BIJU_SUSANOO)
endif
call RemoveUnit(u)
if GetLocalPlayer()==p then
call ClearSelection()
call SelectUnit(udg_Hero[idp],true)
endif
set u=null
endfunction
function JutsuSystem___BijuBuffStart takes integer idp,integer id_spell returns nothing
call UnitAddAbility(udg_Hero[idp],id_spell)
endfunction
function JutsuSystem___Exit takes player p,integer idp,integer new_id returns nothing
local integer idSpell
local integer i=1
local integer spellMax=4
local integer value=1
local integer Vmax=JutsuSystemData_GetValueMax(idp)
local destructable desModel
call DestroyEffect(JSeff[idp])
call DestroyTextTag(JStextSP[idp])
call DestroyTextTag(JStextName[idp])
call DestroyTextTag(JStextDesc[idp])
loop
loop
if i==1 then
set idSpell=JutsuSystemData_GetSpellOneId(idp,value)
elseif i==2 then
set idSpell=JutsuSystemData_GetSpellTwoId(idp,value)
elseif i==3 then
set idSpell=JutsuSystemData_GetSpellThreeId(idp,value)
elseif i==4 then
set idSpell=JutsuSystemData_GetSpellFourId(idp,value)
endif
set desModel=LoadDestructableHandle(Hash,idSpell,0)
call RemoveDestructable(desModel)
call FlushChildHashtable(Hash,idSpell)
set i=i+1
exitwhen i>spellMax
endloop
set i=1
set value=value+1
exitwhen value>Vmax
endloop
if JutsuSystemData_IsExistsRTN(idp)then
set i=1
loop
set idSpell=JutsuSystemData_GetRTNId(i)
set desModel=LoadDestructableHandle(Hash,idSpell,0)
call RemoveDestructable(desModel)
call FlushChildHashtable(Hash,idSpell)
set i=i+1
exitwhen i>spellMax
endloop
endif
set idSpell=JutsuSystemData_GetBijuSpellId(i)
set desModel=LoadDestructableHandle(Hash,idSpell,0)
call RemoveDestructable(desModel)
call FlushChildHashtable(Hash,idSpell)
if JutsuSystemData_HasUnitBijuBuffId(idp)then
set i=1
set spellMax=8
loop
set idSpell=JutsuSystemData_GetBijuBuffSpellId(i)
set desModel=LoadDestructableHandle(Hash,idSpell,0)
if JutsuSystemData_IsGetBijuBuffMarked(idp,i)then
call RemoveDestructable(LoadDestructableHandle(Hash,GetHandleId(desModel),0))
call FlushChildHashtable(Hash,GetHandleId(desModel))
endif
call RemoveDestructable(desModel)
call FlushChildHashtable(Hash,idSpell)
set i=i+1
exitwhen i>spellMax
endloop
endif
set idSpell=JutsuSystemData_GetBijuBuffFuinSpellId()
set desModel=LoadDestructableHandle(Hash,idSpell,0)
call RemoveDestructable(desModel)
call FlushChildHashtable(Hash,idSpell)
set i=1
set spellMax=JutsuSystemData_GetEventNumber(idp)
loop
set idSpell=JutsuSystemData_GetEventSpellId(i)
set desModel=LoadDestructableHandle(Hash,idSpell,0)
call RemoveDestructable(desModel)
call FlushChildHashtable(Hash,idSpell)
set i=i+1
exitwhen i>spellMax
endloop
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call PanCameraToTimed(GetWidgetX(udg_Hero[idp]),GetWidgetY(udg_Hero[idp]),0.)
call ClearSelection()
call SelectUnit(udg_Hero[idp],true)
endif
if DuelHeroOn[idp]then
if GetLocalPlayer()==p then
call SetCameraBounds(GetRectMinX(gg_rct_Duel),GetRectMinY(gg_rct_Duel),GetRectMinX(gg_rct_Duel),GetRectMaxY(gg_rct_Duel),GetRectMaxX(gg_rct_Duel),GetRectMaxY(gg_rct_Duel),GetRectMaxX(gg_rct_Duel),GetRectMinY(gg_rct_Duel))
endif
endif
if new_id!=0 then
call JutsuSystem___BijuRikudoFormStart(p,idp,new_id)
endif
set desModel=null
endfunction
function JutsuSystem___BijuRikudoFormCheck takes integer idp returns nothing
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer new_id
if idu==heroes_rawcode[Madara]then
set new_id=heroes_rikudo_rawcode[Madara]
elseif idu==heroes_rawcode[Naruto]then
set new_id=heroes_rikudo_rawcode[Naruto]
elseif idu==heroes_rawcode[Obito]then
set new_id=heroes_rikudo_rawcode[Obito]
elseif idu==heroes_rawcode[Sasuke]then
set new_id=heroes_rikudo_rawcode[Sasuke]
endif
set JSonlog[idp]=false
call JutsuSystem___Exit(GetOwningPlayer(udg_Hero[idp]),idp,new_id)
endfunction
function JutsuSystem___BijuBuffChangeState takes integer idp,integer idDes,boolean log returns nothing
if idDes==0x42303335 then
if log then
set JSbijuBuffOne[idp]=true
else
set JSbijuBuffOne[idp]=false
endif
elseif idDes==0x42303344 then
if log then
set JSbijuBuffTwo[idp]=true
else
set JSbijuBuffTwo[idp]=false
endif
elseif idDes==0x42303345 then
if log then
set JSbijuBuffThree[idp]=true
else
set JSbijuBuffThree[idp]=false
endif
elseif idDes==0x42303346 then
if log then
set JSbijuBuffFour[idp]=true
else
set JSbijuBuffFour[idp]=false
endif
elseif idDes==0x42303347 then
if log then
set JSbijuBuffFive[idp]=true
else
set JSbijuBuffFive[idp]=false
endif
elseif idDes==0x4230334B then
if log then
set JSbijuBuffSix[idp]=true
else
set JSbijuBuffSix[idp]=false
endif
elseif idDes==0x42303445 then
if log then
set JSbijuBuffSeven[idp]=true
else
set JSbijuBuffSeven[idp]=false
endif
elseif idDes==0x42303446 then
if log then
set JSbijuBuffEight[idp]=true
else
set JSbijuBuffEight[idp]=false
endif
endif
endfunction
function JutsuSystem___Click takes nothing returns nothing
local trackable tr=GetTriggeringTrackable()
local player p=GetTrackableOwner(tr)
local integer idp=GetPlayerId(p)
local integer idu=GetUnitTypeId(udg_Hero[idp])
local integer idSpell=GetTrackableRawcode(tr)
local integer Vmax=JutsuSystemData_GetValueMax(idp)
local integer sp=JutsuSystemData_GetSkillPoint(idp)
local integer pp=JutsuSystemData_GetRTNPoint(idp)
local destructable desModel=LoadDestructableHandle(Hash,idSpell,0)
local integer jutsu=LoadInteger(Hash,idSpell,1)
local integer path=LoadInteger(Hash,idSpell,2)
local string strTextName="Вы изучили "+LoadStr(Hash,idSpell,4)
local string strTextDesc=LoadStr(Hash,idSpell,5)
local string strTextSP="ОЧКИ УЛУЧШЕНИЯ: "+I2S(sp)+" | "+I2S(pp)
local integer idDes=GetDestructableTypeId(desModel)
local integer i=1
local integer spellMax=4
local real x
local real y
local boolean log=false
if JSonlog[idp]then
if GetDestructableTypeId(desModel)!=DesEmptyID then
call DestroyEffect(JSeff[idp])
if not JutsuSystemData_IsTrackableEqualsEvent(idDes)then
if not JutsuSystemData_IsTrackableEqualsBiju(idDes)then
if not JutsuSystemData_IsTrackableEqualsBijuBuffFuin(idDes)then
if not JutsuSystemData_IsTrackableEqualsBijuBuff(idDes)then
if idSpell!=0x4130495A and idSpell!=0x41304D53 and idSpell!=0x41305634 and idSpell!=0x4130354B then
if sp>0 then
if not JSspellOne[idp]and jutsu==1 then
set JSspellOne[idp]=true
set log=true
elseif not JSspellTwo[idp]and jutsu==2 then
set JSspellTwo[idp]=true
set log=true
elseif not JSspellThree[idp]and jutsu==3 then
if GetHeroLevel(udg_Hero[idp])>=2 then
set JSspellThree[idp]=true
set log=true
else
set strTextName=AttantionTextColored+"Недостаточный уровень, необходим 2-ой или выше!|r"
endif
elseif not JSspellFour[idp]and jutsu==4 then
if GetHeroLevel(udg_Hero[idp])>=4 then
set JSspellFour[idp]=true
set log=true
else
set strTextName=AttantionTextColored+"Недостаточный уровень, необходим 4-ый или выше!|r"
endif
endif
else
set strTextName=AttantionTextColored+"Недостаточно очков улучшения!|r"
endif
if log then
set JSSP[idp]=JSSP[idp]+1
set sp=JutsuSystemData_GetSkillPoint(idp)
set strTextSP="ОЧКИ УЛУЧШЕНИЯ: "+I2S(sp)+" | "+I2S(pp)
call RemoveDestructable(desModel)
set desModel=CreateDestructable(DesEmptyID,GetTrackableX(tr),GetTrackableY(tr),0,1,0)
if GetLocalPlayer()!=p then
call ShowDestructable(desModel,false)
endif
call SaveDestructableHandle(Hash,idSpell,0,desModel)
call UnitAddAbility(udg_Hero[idp],idSpell)
if idu==heroes_rawcode[Asuma]and idSpell==Asuma_TEKKO then
call ExecuteFunc("Asuma_AddAbility")
elseif idu==heroes_rawcode[Danzo]then
if idSpell==Danzo_FUINJUTSU then
call ExecuteFunc("Danzo_AddFuinjutsu")
elseif idSpell==Danzo_ULT then
call ExecuteFunc("Danzo_AddIzanagi")
endif
elseif idu==heroes_rawcode[Han]and idSpell==Han_YOROI then
call ExecuteFunc("Han_AddAbility")
elseif idu==heroes_rawcode[Hidan]then
if idSpell==Hidan_SANJIN_NO_OGAMA then
call ExecuteFunc("Hidan_AddSanjinNoOgama")
elseif idSpell==Hidan_JASHINKYO then
call ExecuteFunc("Hidan_AddJashinkyo")
endif
elseif idu==heroes_rawcode[Minato]and idSpell==Minato_HIRAISHIN then
call ExecuteFunc("Minato_AddAbility")
elseif idu==heroes_rawcode[Mu]and idSpell==Mu_MEISAI then
call ExecuteFunc("Mu_AddAbility")
elseif idu==heroes_rawcode[Nagato]and idSpell==Nagato_KANCHI then
call ExecuteFunc("Nagato_AddAbility")
elseif idu==heroes_rawcode[Sasori]then
call ExecuteFunc("Sasori_AddAbility")
elseif idu==heroes_rawcode[Zabuza]and idSpell==Zabuza_KUBIKIRIBOCHO then
call ExecuteFunc("Zabuza_AddAbility_Kubikiribocho")
elseif idu==heroes_rawcode[Zetsu]and GetUnitAbilityLevel(udg_Hero[idp],0x42303344)>0 then
call SetPlayerAbilityAvailable(p,idSpell,false)
endif
if Vmax>1 then
if path==1 then
set path=2
elseif path==2 then
set path=1
endif
if JSspellOne[idp]and jutsu==1 then
set idSpell=JutsuSystemData_GetSpellOneId(idp,path)
elseif JSspellTwo[idp]and jutsu==2 then
set idSpell=JutsuSystemData_GetSpellTwoId(idp,path)
elseif JSspellThree[idp]and jutsu==3 then
set idSpell=JutsuSystemData_GetSpellThreeId(idp,path)
elseif JSspellFour[idp]and jutsu==4 then
set idSpell=JutsuSystemData_GetSpellFourId(idp,path)
endif
set desModel=LoadDestructableHandle(Hash,idSpell,0)
set x=GetWidgetX(desModel)
set y=GetWidgetY(desModel)
call RemoveDestructable(desModel)
set desModel=CreateDestructable(DesEmptyID,x,y,0,1,0)
if GetLocalPlayer()!=p then
call ShowDestructable(desModel,false)
endif
call SaveDestructableHandle(Hash,idSpell,0,desModel)
endif
endif
else
if JutsuSystemData_IsExistsRTN(idp)then
if JS_RTN_CurLevel[idp]<JS_RTN_MaxLevel then
if GetHeroLevel(udg_Hero[idp])>=5 then
if JS_RTN_PossibleLevel[idp]>0 then
set log=true
else
set strTextName=AttantionTextColored+"Требуется следующий уровень героя!|r"
endif
else
set strTextName=AttantionTextColored+"Недостаточный уровень, необходим 5-ый или выше!|r"
endif
if log then
if idSpell==0x4130495A then
if GetUnitAbilityLevel(udg_Hero[idp],idSpell)==0 then
call UnitAddAbility(udg_Hero[idp],idSpell)
else
call SetUnitAbilityLevel(udg_Hero[idp],0x41313630,GetUnitAbilityLevel(udg_Hero[idp],0x41313630)+1)
call SetUnitAbilityLevel(udg_Hero[idp],0x41305541,GetUnitAbilityLevel(udg_Hero[idp],0x41305541)+1)
endif
call DisplayTimedTextToPlayer(p,0.,0.,5.,"Вы развили путь |cFFFFCC00ВЫНОСЛИВОСТИ|r!")
elseif idSpell==0x41304D53 then
if GetUnitAbilityLevel(udg_Hero[idp],idSpell)==0 then
call UnitAddAbility(udg_Hero[idp],idSpell)
call JutsuSystem___VitalForceStartRegenHP(udg_Hero[idp])
else
call SetUnitAbilityLevel(udg_Hero[idp],0x41313556,GetUnitAbilityLevel(udg_Hero[idp],0x41313556)+1)
endif
call DisplayTimedTextToPlayer(p,0.,0.,5.,"Вы развили путь |cFFFFCC00ЖИЗНЕННОЙ СИЛЫ|r!")
elseif idSpell==0x41305634 then
if GetUnitAbilityLevel(udg_Hero[idp],idSpell)==0 then
call UnitAddAbility(udg_Hero[idp],idSpell)
else
call SetUnitAbilityLevel(udg_Hero[idp],0x41304735,GetUnitAbilityLevel(udg_Hero[idp],0x41304735)+1)
endif
call DisplayTimedTextToPlayer(p,0.,0.,5.,"Вы развили путь |cFFFFCC00СКОРОСТИ|r!")
elseif idSpell==0x4130354B then
if GetUnitAbilityLevel(udg_Hero[idp],idSpell)==0 then
call UnitAddAbility(udg_Hero[idp],idSpell)
else
call SetUnitAbilityLevel(udg_Hero[idp],0x41313343,GetUnitAbilityLevel(udg_Hero[idp],0x41313343)+1)
endif
call DisplayTimedTextToPlayer(p,0.,0.,5.,"Вы развили путь |cFFFFCC00УПРАВЛЕНИЯ ЧАКРОЙ|r!")
endif
set JS_RTN_PossibleLevel[idp]=JS_RTN_PossibleLevel[idp]-1
set JS_RTN_CurLevel[idp]=JS_RTN_CurLevel[idp]+1
set pp=JutsuSystemData_GetRTNPoint(idp)
set strTextSP="ОЧКИ УЛУЧШЕНИЯ: "+I2S(sp)+" | "+I2S(pp)
if JS_RTN_CurLevel[idp]==JS_RTN_MaxLevel then
loop
set idSpell=JutsuSystemData_GetRTNId(i)
set desModel=LoadDestructableHandle(Hash,idSpell,0)
set x=GetWidgetX(desModel)
set y=GetWidgetY(desModel)
call RemoveDestructable(desModel)
set desModel=CreateDestructable(DesEmptyID,x,y,0,1,0)
if GetLocalPlayer()!=p then
call ShowDestructable(desModel,false)
endif
call SaveDestructableHandle(Hash,idSpell,0,desModel)
set i=i+1
exitwhen i>spellMax
endloop
endif
endif
else
set strTextName=AttantionTextColored+"Недостаточно очков улучшения!|r"
endif
endif
endif
else
if LoadDestructableHandle(Hash,GetHandleId(desModel),0)==null then
if JS_bijuBuff_CurLevel[idp]<JS_bijuBuff_MaxLevel then
set JS_bijuBuff_CurLevel[idp]=JS_bijuBuff_CurLevel[idp]+1
call SaveDestructableHandle(Hash,GetHandleId(desModel),0,CreateDestructable(BijuBuffDesMarkID,GetTrackableX(tr),GetTrackableY(tr),0,1,0))
set strTextName="Вы выбрали "+LoadStr(Hash,idSpell,4)
call JutsuSystem___BijuBuffChangeState(idp,idDes,true)
else
set strTextName=AttantionTextColored+"Лимит выбора достигнут!|r"
endif
else
set JS_bijuBuff_CurLevel[idp]=JS_bijuBuff_CurLevel[idp]-1
call RemoveDestructable(LoadDestructableHandle(Hash,GetHandleId(desModel),0))
call FlushChildHashtable(Hash,GetHandleId(desModel))
set strTextName="Вы убрали "+LoadStr(Hash,idSpell,4)
call JutsuSystem___BijuBuffChangeState(idp,idDes,false)
endif
endif
else
if JSbijuFuin[idp]then
if JutsuSystemData_HasUnitBijuBuffId(idp)then
if JS_bijuBuff_CurLevel[idp]==JS_bijuBuff_MaxLevel then
set JSbijuBuffFuin[idp]=true
set spellMax=JutsuSystemData_GetBijuBuffNumber(idp)
set desModel=LoadDestructableHandle(Hash,idSpell,0)
set x=GetWidgetX(desModel)
set y=GetWidgetY(desModel)
call RemoveDestructable(desModel)
set desModel=CreateDestructable(DesEmptyID,x,y,0,1,0)
if GetLocalPlayer()!=p then
call ShowDestructable(desModel,false)
endif
call SaveDestructableHandle(Hash,idSpell,0,desModel)
loop
set idSpell=JutsuSystemData_GetBijuBuffSpellId(i)
set desModel=LoadDestructableHandle(Hash,idSpell,0)
if GetDestructableTypeId(desModel)!=DesEmptyID then
set x=GetWidgetX(desModel)
set y=GetWidgetY(desModel)
if JutsuSystemData_IsGetBijuBuffMarked(idp,i)then
call JutsuSystem___BijuBuffStart(idp,JutsuSystemData_GetBijuBuffSpellAddId(i))
call RemoveDestructable(LoadDestructableHandle(Hash,GetHandleId(desModel),0))
call FlushChildHashtable(Hash,GetHandleId(desModel))
endif
call RemoveDestructable(desModel)
set desModel=CreateDestructable(DesEmptyID,x,y,0,1,0)
if GetLocalPlayer()!=p then
call ShowDestructable(desModel,false)
endif
call SaveDestructableHandle(Hash,idSpell,0,desModel)
endif
set i=i+1
exitwhen i>spellMax
endloop
set strTextName=AttantionTextColored+"Вы запечатали выбранные бафы!|r"
call StartSound(gg_snd_ArcaneSanctumWhat1)
set JSonlog[idp]=false
call JutsuSystem___Exit(p,idp,0)
else
set strTextName=AttantionTextColored+"Выберите достаточное количество бафов для запечатывания!|r"
endif
else
set JSbijuBuffFuin[idp]=true
set desModel=LoadDestructableHandle(Hash,idSpell,0)
set x=GetWidgetX(desModel)
set y=GetWidgetY(desModel)
call RemoveDestructable(desModel)
set desModel=CreateDestructable(DesEmptyID,x,y,0,1,0)
if GetLocalPlayer()!=p then
call ShowDestructable(desModel,false)
endif
call SaveDestructableHandle(Hash,idSpell,0,desModel)
set strTextName=AttantionTextColored+"Вы запечатали Биджу!|r"
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"\n"+GetPlayerNameColored(p)+" запечатывает в себе "+BossName+" и получает немыслимую силу!")
call StartSound(gg_snd_ArcaneSanctumWhat1)
call JutsuSystem___BijuRikudoFormCheck(idp)
endif
else
set strTextName=AttantionTextColored+"Неудача! Требуется запечатанная чакра хвостатого зверя! (добейте Биджу последним ударом)|r"
endif
endif
else
set strTextName=JutsuSystemData_GetBijuNameId(idp)
endif
else
set strTextName=LoadStr(Hash,idSpell,4)
endif
call SetTextTagText(JStextSP[idp],strTextSP,.025)
call SetTextTagText(JStextName[idp],strTextName,.025)
call SetTextTagText(JStextDesc[idp],strTextDesc,.0195)
endif
endif
set strTextDesc=null
set strTextName=null
set strTextSP=null
set p=null
set tr=null
set desModel=null
endfunction
function JutsuSystem___Track takes nothing returns nothing
local trackable tr=GetTriggeringTrackable()
local player p=GetTrackableOwner(tr)
local integer idp=GetPlayerId(p)
local integer idSpell=GetTrackableRawcode(tr)
local integer sp=JutsuSystemData_GetSkillPoint(idp)
local integer pp=JutsuSystemData_GetRTNPoint(idp)
local destructable desModel=LoadDestructableHandle(Hash,idSpell,0)
local string strTextName=LoadStr(Hash,idSpell,4)
local string strTextDesc=LoadStr(Hash,idSpell,5)
local string strTextSP="ОЧКИ УЛУЧШЕНИЯ: "+I2S(sp)+" | "+I2S(pp)
local string s=null
if JSonlog[idp]then
if GetDestructableTypeId(desModel)!=DesEmptyID then
call DestroyEffect(JSeff[idp])
if GetLocalPlayer()==p then
set s="BTNselection.mdx"
endif
set JSeff[idp]=AddSpecialEffect(s,GetTrackableX(tr),GetTrackableY(tr))
call SetTextTagText(JStextSP[idp],strTextSP,.025)
call SetTextTagText(JStextName[idp],strTextName,.025)
call SetTextTagText(JStextDesc[idp],strTextDesc,.0195)
endif
endif
set desModel=null
set strTextSP=null
set strTextName=null
set strTextDesc=null
set s=null
set p=null
set tr=null
endfunction
function cj_anonym__148 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local player p=LoadPlayerHandle(Hash,h,0)
local integer id=GetPlayerId(p)
if JSonlog[id]and not udg_GameEnd then
if GetLocalPlayer()==p then
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
call CameraSetupApplyForceDuration(gg_cam_CamJutsu,true,0.)
endif
else
call DestroyFogModifier(LoadFogModifierHandle(Hash,h,1))
call FlushChildHashtable(Hash,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p=null
set t=null
endfunction
function JutsuSystem___Start takes player p,integer idp returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=-3381.
local real y=3602.
local integer placex=0
local integer placey=0
local integer i=1
local integer spellMax=4
local integer idSpell
local integer idModel
local integer sp=JutsuSystemData_GetSkillPoint(idp)
local integer pp=JutsuSystemData_GetRTNPoint(idp)
local integer value=1
local integer Vmax=JutsuSystemData_GetValueMax(idp)
local destructable desModel
local string strTextSP="ОЧКИ УЛУЧШЕНИЯ: "+I2S(sp)+" | "+I2S(pp)
local string strTextName=null
local string strTextDesc=null
if JutsuSystemData_IsHeroUseSpells(idp)then
loop
loop
if i==1 then
set idSpell=JutsuSystemData_GetSpellOneId(idp,value)
if not JSspellOne[idp]then
set idModel=JutsuSystemData_GetModelOneId(idp,value)
else
set idModel=DesEmptyID
endif
set strTextDesc=JutsuSystemData_GetDescriptionOne(idp,value)
elseif i==2 then
set idSpell=JutsuSystemData_GetSpellTwoId(idp,value)
if not JSspellTwo[idp]then
set idModel=JutsuSystemData_GetModelTwoId(idp,value)
else
set idModel=DesEmptyID
endif
set strTextDesc=JutsuSystemData_GetDescriptionTwo(idp,value)
elseif i==3 then
set idSpell=JutsuSystemData_GetSpellThreeId(idp,value)
if not JSspellThree[idp]then
set idModel=JutsuSystemData_GetModelThreeId(idp,value)
else
set idModel=DesEmptyID
endif
set strTextDesc=JutsuSystemData_GetDescriptionThree(idp,value)
elseif i==4 then
set idSpell=JutsuSystemData_GetSpellFourId(idp,value)
if not JSspellFour[idp]then
set idModel=JutsuSystemData_GetModelFourId(idp,value)
else
set idModel=DesEmptyID
endif
set strTextDesc=JutsuSystemData_GetDescriptionFour(idp,value)
endif
set desModel=CreateDestructable(idModel,x+64.*placex,y+64.*placey,0,1,0)
set strTextName=StringCase(GetDestructableName(desModel),true)
call SaveDestructableHandle(Hash,idSpell,0,desModel)
call SaveInteger(Hash,idSpell,1,i)
call SaveInteger(Hash,idSpell,2,value)
call SaveInteger(Hash,idSpell,3,sp)
call SaveStr(Hash,idSpell,4,strTextName)
call SaveStr(Hash,idSpell,5,strTextDesc)
if not JSfirst[idp]then
call CreateTrackOnce("4x4Trackable.MDX",x+64.*placex,y+64.*placey,p,idSpell,JStrack,JSclick)
endif
call ShowDestructable(desModel,false)
if GetLocalPlayer()==p then
call ShowDestructable(desModel,true)
endif
set placey=placey+1
set i=i+1
exitwhen i>spellMax
endloop
set i=1
set value=value+1
set placex=1*value
set placey=0
exitwhen value>Vmax
endloop
endif
if JutsuSystemData_IsExistsRTN(idp)then
set i=1
set x=-3381.
set y=3442.
set placex=0
set placey=0
loop
set idSpell=JutsuSystemData_GetRTNId(i)
if JS_RTN_CurLevel[idp]<JS_RTN_MaxLevel then
if idSpell==0x4130495A then
set idModel=JutsuSystemData_GetRTNModelId(i)
elseif idSpell==0x41304D53 then
set idModel=JutsuSystemData_GetRTNModelId(i)
elseif idSpell==0x41305634 then
set idModel=JutsuSystemData_GetRTNModelId(i)
elseif idSpell==0x4130354B then
set idModel=JutsuSystemData_GetRTNModelId(i)
endif
set strTextDesc=JutsuSystemData_GetRTNDescription(i)
else
set idModel=DesEmptyID
endif
set desModel=CreateDestructable(idModel,x+64.*placex,y+64.*placey,0,1,0)
set strTextName=StringCase(GetDestructableName(desModel),true)
call SaveDestructableHandle(Hash,idSpell,0,desModel)
call SaveInteger(Hash,idSpell,1,i)
call SaveInteger(Hash,idSpell,2,value)
call SaveInteger(Hash,idSpell,3,sp)
call SaveStr(Hash,idSpell,4,strTextName)
call SaveStr(Hash,idSpell,5,strTextDesc)
if not JSfirst[idp]then
call CreateTrackOnce("4x4Trackable.MDX",x+64.*placex,y+64.*placey,p,idSpell,JStrack,JSclick)
endif
if i==1 then
set placex=placex+2
elseif i==2 then
set placex=0
set placey=placey-2
elseif i==3 then
set placex=placex+2
endif
set i=i+1
exitwhen i>spellMax
endloop
endif
set placex=0
set placey=0
set x=-3809.
set y=3804.
set idSpell=JutsuSystemData_GetBijuSpellId(idp)
set idModel=JutsuSystemData_GetBijuModelId(idp)
set desModel=CreateDestructable(idModel,x,y,0,1,0)
set strTextName=StringCase(GetDestructableName(desModel),true)
set strTextDesc=JutsuSystemData_GetBijuBuffFuinDescriptionId(idp)
call SaveDestructableHandle(Hash,idSpell,0,desModel)
call SaveStr(Hash,idSpell,4,strTextName)
call SaveStr(Hash,idSpell,5,strTextDesc)
if not JSfirst[idp]then
call CreateTrackOnce("4x4Trackable.MDX",x,y,p,idSpell,JStrack,JSclick)
endif
if JutsuSystemData_HasUnitBijuBuffId(idp)then
set i=1
set spellMax=8
set placex=0
set placey=0
set value=JutsuSystemData_GetBijuBuffNumber(idp)
set x=-3873.
set y=3442.
loop
set idSpell=JutsuSystemData_GetBijuBuffSpellId(i)
set idModel=JutsuSystemData_GetBijuBuffModelId(idp,i,value)
set desModel=CreateDestructable(idModel,x+64.*placex,y+64.*placey,0,1,0)
call SaveDestructableHandle(Hash,idSpell,0,desModel)
if idModel!=DesEmptyID then
set strTextName=StringCase(GetDestructableName(desModel),true)
set strTextDesc=JutsuSystemData_GetBijuBuffDescriptionId(idp,i)
call SaveStr(Hash,idSpell,4,strTextName)
call SaveStr(Hash,idSpell,5,strTextDesc)
if not JSfirst[idp]then
call CreateTrackOnce("4x4Trackable.MDX",x+64.*placex,y+64.*placey,p,idSpell,JStrack,JSclick)
endif
if not JSbijuBuffFuin[idp]then
if JutsuSystemData_IsGetBijuBuffMarked(idp,i)then
call SaveDestructableHandle(Hash,GetHandleId(desModel),0,CreateDestructable(BijuBuffDesMarkID,x+64.*placex,y+64.*placey,0,1,0))
endif
endif
endif
set placex=placex+1
if i==3 then
set placex=0
set placey=placey-1
elseif i==4 then
set placex=placex+1
elseif i==5 then
set placex=0
set placey=placey-1
endif
set i=i+1
exitwhen i>spellMax
endloop
endif
set placex=0
set placey=0
set x=-3809.
set y=3378.
set idSpell=JutsuSystemData_GetBijuBuffFuinSpellId()
set idModel=JutsuSystemData_GetBijuBuffFuinModelId(idp)
set desModel=CreateDestructable(idModel,x,y,0,1,0)
set strTextName=StringCase(GetDestructableName(desModel),true)
set strTextDesc=JutsuSystemData_GetBijuBuffFuinDescriptionId(idp)
call SaveDestructableHandle(Hash,idSpell,0,desModel)
call SaveStr(Hash,idSpell,4,strTextName)
call SaveStr(Hash,idSpell,5,strTextDesc)
if not JSfirst[idp]then
call CreateTrackOnce("4x4Trackable.MDX",x,y,p,idSpell,JStrack,JSclick)
endif
set i=1
set spellMax=JutsuSystemData_GetEventNumber(idp)
set placex=0
set placey=0
set x=-2884.
set y=3794.
loop
set idSpell=JutsuSystemData_GetEventSpellId(i)
set idModel=JutsuSystemData_GetEventModelId(idp,i)
set desModel=CreateDestructable(idModel,x+64.*placex,y+64.*placey,0,1,0)
set strTextName=StringCase(GetDestructableName(desModel),true)
set strTextDesc=JutsuSystemData_GetEventDescriptionId(idp,i)
call SaveDestructableHandle(Hash,idSpell,0,desModel)
call SaveStr(Hash,idSpell,4,strTextName)
call SaveStr(Hash,idSpell,5,strTextDesc)
if not JSfirst[idp]then
call CreateTrackOnce("4x4Trackable.MDX",x+64.*placex,y+64.*placey,p,idSpell,JStrack,JSclick)
endif
set placex=placex+1
set i=i+1
exitwhen i>spellMax
endloop
if not JSfirst[idp]then
set JSSP[idp]=0
set JSfirst[idp]=true
endif
set strTextName="НАЗВАНИЕ"
set strTextDesc="Описание"
set JStextSP[idp]=CreateTextTag()
call SetTextTagText(JStextSP[idp],strTextSP,.025)
call SetTextTagPos(JStextSP[idp],GetRectCenterX(gg_rct_HeroJutsuSP),GetRectCenterY(gg_rct_HeroJutsuSP),10.)
call SetTextTagColor(JStextSP[idp],255,255,255,0)
set JStextName[idp]=CreateTextTag()
call SetTextTagText(JStextName[idp],strTextName,.025)
call SetTextTagPos(JStextName[idp],GetRectCenterX(gg_rct_HeroJutsuName),GetRectCenterY(gg_rct_HeroJutsuName),10.)
call SetTextTagColor(JStextName[idp],255,255,255,0)
set JStextDesc[idp]=CreateTextTag()
call SetTextTagText(JStextDesc[idp],strTextDesc,.02)
call SetTextTagPos(JStextDesc[idp],GetRectCenterX(gg_rct_HeroJutsuDesc),GetRectCenterY(gg_rct_HeroJutsuDesc),10.)
call SetTextTagColor(JStextDesc[idp],255,255,255,0)
call SetTextTagVisibility(JStextSP[idp],false)
call SetTextTagVisibility(JStextName[idp],false)
call SetTextTagVisibility(JStextDesc[idp],false)
if GetLocalPlayer()==p then
call SetTextTagVisibility(JStextSP[idp],true)
call SetTextTagVisibility(JStextName[idp],true)
call SetTextTagVisibility(JStextDesc[idp],true)
call MultiboardMinimize(gamestat_mb,true)
call ResetToGameCamera(0.)
call CameraSetupApplyForceDuration(gg_cam_CamJutsu,true,0.)
endif
if DuelHeroOn[idp]then
if GetLocalPlayer()==p then
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
endif
endif
set bj_lastCreatedFogModifier=CreateFogModifierRect(p,FOG_OF_WAR_VISIBLE,gg_rct_HeroJutsu,true,false)
call FogModifierStart(bj_lastCreatedFogModifier)
call SavePlayerHandle(Hash,h,0,p)
call SaveFogModifierHandle(Hash,h,1,bj_lastCreatedFogModifier)
call TimerStart(t,.01,true,function cj_anonym__148)
set strTextName=null
set strTextDesc=null
set strTextSP=null
set desModel=null
set t=null
endfunction
function JutsuSystem___JutsuSystemActions takes nothing returns nothing
local player p=GetTriggerPlayer()
local integer idp=GetPlayerId(p)
if not udg_ShopCam[idp]and not Obito_logKamui[idp]and not udg_GameEnd and IsUnitHeroOnly(udg_Hero[idp])then
if not JSonlog[idp]then
set JSonlog[idp]=true
call JutsuSystem___Start(p,idp)
elseif JSonlog[idp]then
set JSonlog[idp]=false
call JutsuSystem___Exit(p,idp,0)
endif
else
call DisplayTimedTextToPlayer(p,0.,0.,5.,"|cFFFFCC00В данной ситуации невозможно открыть свиток с техниками.|r")
endif
set p=null
endfunction
function JutsuSystem_Init takes nothing returns nothing
local trigger trig=CreateTrigger()
local integer i=0
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(Player(i))==MAP_CONTROL_USER then
call TriggerRegisterPlayerEvent(trig,Player(i),EVENT_PLAYER_END_CINEMATIC)
call TriggerRegisterPlayerChatEvent(trig,Player(i),"-j",true)
endif
set i=i+1
exitwhen i>10
endloop
call TriggerAddAction(trig,function JutsuSystem___JutsuSystemActions)
call TriggerAddAction(JStrack,function JutsuSystem___Track)
call TriggerAddAction(JSclick,function JutsuSystem___Click)
set trig=null
endfunction
function ShopInit takes nothing returns nothing
local unit preloader=CreateUnit(Player(14),0x6E303042,0.,0.,0.)
local integer array IconItems
local string array ItemsName
local integer array ItemsCost
local string array ItemsText
local real x=-1455.
local real y=2675.
local real xOther=x+64.
local real yOther=y*1.425
local real step=32.
local integer i=0
local integer placex=0
local integer placey=-1
local string color="|cFFFFCC00"
local string colorAct="|cFFA5FD00"
local string colorCost="|cFF0090D4"
call UnitAddAbility(preloader,0x41496E76)
loop
if i!=5 then
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(Player(i))==MAP_CONTROL_USER then
set udg_ShopCam[i]=false
endif
endif
set i=i+1
exitwhen i>10
endloop
set i=0
set udg_Items[RAMEN]=RAMEN_ID
set IconItems[RAMEN]=0x4230344C
set ItemsName[RAMEN]=color+"Рамен|r"
set ItemsCost[RAMEN]=100
set ItemsText[RAMEN]=colorAct+"Восстанавливает себе 500 ед. здоровья и 260 ед. чакры за 20 секунд.|r|n- |cFFE5BC971 шт.|r|n- |cFF83839AЕсли герой получает урон, восстановление прекращается|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[RAMEN])
set udg_Items[SAND_WARD]=SAND_WARD_ID
set IconItems[SAND_WARD]=0x42303651
set ItemsName[SAND_WARD]=color+"Песчаный глаз|r"
set ItemsCost[SAND_WARD]=50
set ItemsText[SAND_WARD]=colorAct+"Даёт круговой обзор местности в области 1600 ед. днём и 1600 ед. ночью на 6 минут.|r|n- |cFFE5BC971 шт.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SAND_WARD])
set udg_Items[CHAKRA_WARD]=CHAKRA_WARD_ID
set IconItems[CHAKRA_WARD]=0x42303738
set ItemsName[CHAKRA_WARD]=color+"Сгусток Чакры|r"
set ItemsCost[CHAKRA_WARD]=100
set ItemsText[CHAKRA_WARD]=colorAct+"Видит невидимых юнитов области 600 ед. в течение 4 минуты.|r|n- |cFFE5BC971 шт.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[CHAKRA_WARD])
set udg_Items[HEALING_WARD]=HEALING_WARD_ID
set IconItems[HEALING_WARD]=0x42303159
set ItemsName[HEALING_WARD]=color+"Целительный вард|r"
set ItemsCost[HEALING_WARD]=125
set ItemsText[HEALING_WARD]=colorAct+"Союзникам в области 300 ед. ежесекундно восстанавливает 10 ед. здоровья и 8 ед. чакры в течение 20 секунд.|r|n- |cFFE5BC971 шт.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[HEALING_WARD])
set udg_Items[GAS_CHECKER]=GAS_CHECKER_ID
set IconItems[GAS_CHECKER]=0x4230344D
set ItemsName[GAS_CHECKER]=color+"Газовая шашка|r"
set ItemsCost[GAS_CHECKER]=100
set ItemsText[GAS_CHECKER]=colorAct+"Усыпляет вражеских шиноби в области 300 ед. на 6 сек.|r|n- |cFFE5BC972 шт.|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[GAS_CHECKER])
set udg_Items[KEMURIDAMA]=KEMURIDAMA_ID
set IconItems[KEMURIDAMA]=0x42303353
set ItemsName[KEMURIDAMA]=color+"Дымовая шашка|r"
set ItemsCost[KEMURIDAMA]=100
set ItemsText[KEMURIDAMA]=colorAct+"Вражеские шиноби в области 600 ед. промахиваются в бою с шансом 17 % и их область обзора снижена на 500 ед. в течение 6 сек.|r|n- |cFFE5BC972 шт.|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KEMURIDAMA])
set udg_Items[DAZZLING_GRENADE]=DAZZLING_GRENADE_ID
set IconItems[DAZZLING_GRENADE]=0x42303742
set ItemsName[DAZZLING_GRENADE]=color+"Световая граната|r"
set ItemsCost[DAZZLING_GRENADE]=100
set ItemsText[DAZZLING_GRENADE]=colorAct+"Вражеским шиноби в области 600 ед. снижает скорость боя на 20 % и передвижения на 13 % на 6 секунд., а также открывает невидимых юнитов.|r|n- |cFFE5BC972 шт.|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[DAZZLING_GRENADE])
set udg_Items[SHUKAKU_CHAKRA_SEALED_SCROLL]=SHUKAKU_CHAKRA_SEALED_SCROLL_ID
set IconItems[SHUKAKU_CHAKRA_SEALED_SCROLL]=0x42303239
set ItemsName[SHUKAKU_CHAKRA_SEALED_SCROLL]=color+"Свиток запечатанной Чакры Шукаку|r"
set ItemsCost[SHUKAKU_CHAKRA_SEALED_SCROLL]=50
set ItemsText[SHUKAKU_CHAKRA_SEALED_SCROLL]=colorAct+"Увеличивает указанному герою физический урон на 15 ед. и скорость боя на 20 % на 15 секунд.|r|n- |cFFC6D2FFДальность применения: 500|r|n- |cFFE5BC971 шт.|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SHUKAKU_CHAKRA_SEALED_SCROLL])
set udg_Items[ISOBU_CHAKRA_SEALED_SCROLL]=ISOBU_CHAKRA_SEALED_SCROLL_ID
set IconItems[ISOBU_CHAKRA_SEALED_SCROLL]=0x42303241
set ItemsName[ISOBU_CHAKRA_SEALED_SCROLL]=color+"Свиток запечатанной Чакры Исобу|r"
set ItemsCost[ISOBU_CHAKRA_SEALED_SCROLL]=50
set ItemsText[ISOBU_CHAKRA_SEALED_SCROLL]=colorAct+"Мгновенно восстанавливает указанному герою 125 ед. здоровья и повышает его регенерацию на 12 ед. на 15 секунд.|r|n- |cFFE5BC971 шт.|r|n- |cFFC6D2FFДальность применения: 500|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[ISOBU_CHAKRA_SEALED_SCROLL])
set udg_Items[SON_GOKU_CHAKRA_SEALED_SCROLL]=SON_GOKU_CHAKRA_SEALED_SCROLL_ID
set IconItems[SON_GOKU_CHAKRA_SEALED_SCROLL]=0x42303237
set ItemsName[SON_GOKU_CHAKRA_SEALED_SCROLL]=color+"Свиток запечатанной Чакры Сон-Гоку|r"
set ItemsCost[SON_GOKU_CHAKRA_SEALED_SCROLL]=50
set ItemsText[SON_GOKU_CHAKRA_SEALED_SCROLL]=colorAct+"Увеличивает указанному герою физическую защиту на 10 ед. и даёт блок до 20 ед. физического урона на 15 секунд.|r|n- |cFFE5BC971 шт.|r|n- |cFFC6D2FFДальность применения: 500|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SON_GOKU_CHAKRA_SEALED_SCROLL])
set udg_Items[SAIKEN_CHAKRA_SEALED_SCROLL]=SAIKEN_CHAKRA_SEALED_SCROLL_ID
set IconItems[SAIKEN_CHAKRA_SEALED_SCROLL]=0x42303657
set ItemsName[SAIKEN_CHAKRA_SEALED_SCROLL]=color+"Свиток запечатанной Чакры Сайкена|r"
set ItemsCost[SAIKEN_CHAKRA_SEALED_SCROLL]=50
set ItemsText[SAIKEN_CHAKRA_SEALED_SCROLL]=colorAct+"Мгновенно восстанавливает указанному герою 65 ед. чакры и повышает её регенерацию на 9 ед. на 15 секунд.|r|n- |cFFC6D2FFДальность применения: 500|r|n- |cFFE5BC971 шт.|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SAIKEN_CHAKRA_SEALED_SCROLL])
set udg_Items[KURAMA_CHAKRA_SEALED_SCROLL]=KURAMA_CHAKRA_SEALED_SCROLL_ID
set IconItems[KURAMA_CHAKRA_SEALED_SCROLL]=0x42303357
set ItemsName[KURAMA_CHAKRA_SEALED_SCROLL]=color+"Свиток запечатанной Чакры Курамы|r"
set ItemsCost[KURAMA_CHAKRA_SEALED_SCROLL]=50
set ItemsText[KURAMA_CHAKRA_SEALED_SCROLL]=colorAct+"Окутывает указанного героя огненным щитом на 15 секунд, который увеличивает скорость передвижения на 40 ед. и наносит ближайшему врагу в области 250 ед. 12 ед. урона.|r|n- |cFFC6D2FFДальность применения: 500|r|n- |cFFE5BC971 шт.|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KURAMA_CHAKRA_SEALED_SCROLL])
set udg_Items[EDOTENSEI_SCROLL]=EDOTENSEI_SCROLL_ID
set IconItems[EDOTENSEI_SCROLL]=0x42303652
set ItemsName[EDOTENSEI_SCROLL]=color+"Свиток Эдо-Тенсей|r"
set ItemsCost[EDOTENSEI_SCROLL]=200
set ItemsText[EDOTENSEI_SCROLL]=colorAct+"Вешает баф на союзных и вражеских крипов в области 600 ед. на 25 секунд, позволяющий павшим шиноби воскреснуть и сражаться за вас в течение 15 секунд.|r|n- |cFFE5BC971 шт.|r|n- |cFF959697Перезарядка: 30|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[EDOTENSEI_SCROLL])
set udg_Items[KUNAI]=KUNAI_ID
set IconItems[KUNAI]=0x42303744
set ItemsName[KUNAI]=color+"Кунай|r"
set ItemsCost[KUNAI]=250
set ItemsText[KUNAI]=colorAct+"Кидает кунай в указанном направлении, который, сталкиваясь с любым противником в области 50 ед., нанесёт 60 ед. физического урона и снизит скорость передвижения на 25 % на 4 секунды.|r|n- |cFFE5BC9710 шт., пополняется на базе|r|n- |cFFA5FDA9Можно сбить любым подобным оружием|r|n- |cFF959697Перезарядка: 4|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KUNAI])
set udg_Items[SHURIKEN]=SHURIKEN_ID
set IconItems[SHURIKEN]=0x42303745
set ItemsName[SHURIKEN]=color+"Сюрикен|r"
set ItemsCost[SHURIKEN]=250
set ItemsText[SHURIKEN]=colorAct+"Кидает сюрикен в указанном направлении, который, сталкиваясь с любым противником в области 50 ед., нанесёт 60 ед. физического урона и снизит скорость боя на 40 % на 4 секунды.|r|n- |cFFE5BC9710 шт., пополняется на базе|r|n- |cFFA5FDA9Можно сбить любым подобным оружием|r|n- |cFF959697Перезарядка: 4|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SHURIKEN])
set udg_Items[FUMA_SHURIKEN]=FUMA_SHURIKEN_ID
set IconItems[FUMA_SHURIKEN]=0x42303746
set ItemsName[FUMA_SHURIKEN]=color+"Фума сюрикен|r"
set ItemsCost[FUMA_SHURIKEN]=500
set ItemsText[FUMA_SHURIKEN]=colorAct+"Кидает теневой сюрикен в указанном направлении, который, сталкиваясь с противниками в области 125 ед., нанесёт (сила применяющего*3) чистого урона и снизит скорость передвижения на 40 % на 4 секунды.|r|n- |cFFE5BC975 шт., пополняется на базе|r|n- |cFFA5FDA9Можно сбить любым подобным оружием|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[FUMA_SHURIKEN])
set udg_Items[SENBON]=SENBON_ID
set IconItems[SENBON]=0x42303747
set ItemsName[SENBON]=color+"Сенбон|r"
set ItemsCost[SENBON]=500
set ItemsText[SENBON]=colorAct+"Кидает острую иглу во вражеского героя, которая, сталкиваясь с ним, нанесёт (ловкость применяющего*4) чистого урона и снизит скорость боя на 60 % на 4 секунды.|r|n- |cFFE5BC975 шт., пополняется на базе|r|n- |cFFA5FDA9Можно сбить любым подобным оружием|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SENBON])
set udg_Items[KIBAKU_KUNAI]=KIBAKU_KUNAI_ID
set IconItems[KIBAKU_KUNAI]=0x42303748
set ItemsName[KIBAKU_KUNAI]=color+"Взрыв-кунай|r"
set ItemsCost[KIBAKU_KUNAI]=500
set ItemsText[KIBAKU_KUNAI]=colorAct+"Кидает кунай с взрывной печатью в указанную местность, которая, долетев до нужного места, детонирует спустя 1,2 сек., нанося (разум применяющего*5) физического урона и отталкивает противников в области 250 ед. на 150 ед. в разные стороны.|r|n- |cFFE5BC975 шт., пополняется на базе|r|n- |cFFA5FDA9Можно сбить любым подобным оружием|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KIBAKU_KUNAI])
set udg_Items[EIYU_NO_MIZU]=EIYU_NO_MIZU_ID
set IconItems[EIYU_NO_MIZU]=0x42303151
set ItemsName[EIYU_NO_MIZU]=color+"Вода героев|r"
set ItemsCost[EIYU_NO_MIZU]=1000
set ItemsText[EIYU_NO_MIZU]=colorAct+"Увеличивает максимальный запас чакры на 400 ед., а также повышает регенерацию здоровья на 7 ед. и чакры на 14 ед. на 10 секунд|r|n- |cFFE5BC975 шт., пополняется на базе|r|n- |cFF959697Перезарядка: 30|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[EIYU_NO_MIZU])
set udg_Items[KUCHIYOSE_SCROLL]=KUCHIYOSE_SCROLL_ID
set IconItems[KUCHIYOSE_SCROLL]=0x4230334C
set ItemsName[KUCHIYOSE_SCROLL]=color+"Свиток призыва|r"
set ItemsCost[KUCHIYOSE_SCROLL]=500
set ItemsText[KUCHIYOSE_SCROLL]=colorAct+"Призывает определённое животное (черепаха, ястреб, дракон) на 30 секунд, в зависимости от выбора игрока.|r|n- |cFF7EBFF1Расход чакры: 100|r|n- |cFF959697Перезарядка: 45|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KUCHIYOSE_SCROLL])
set udg_Items[HI_NO_ISHI]=HI_NO_ISHI_ID
set IconItems[HI_NO_ISHI]=0x42303242
set ItemsName[HI_NO_ISHI]=color+"Воля Страны огня|r"
set ItemsCost[HI_NO_ISHI]=1000
set ItemsText[HI_NO_ISHI]="- |cFFFE8A0EУвеличивает здоровье на 150 ед. и чакру на 250 ед.|r|n"+colorAct+"При использовании на союзника увеличивает его физическую защиту на 7 ед., на врага – снижает его физическую защиту на 7 ед. на 7 секунд|r|n- |cFFC6D2FFДальность применения: 500|r|n- |cFF959697Перезарядка: 13|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[HI_NO_ISHI])
set udg_Items[ROSARY_MONK]=ROSARY_MONK_ID
set IconItems[ROSARY_MONK]=0x4230364A
set ItemsName[ROSARY_MONK]=color+"Чётки монаха|r"
set ItemsCost[ROSARY_MONK]=1250
set ItemsText[ROSARY_MONK]="- |cFFFE8A0EУвеличивает чакру на 250 ед. и повышает её регенерацию на 4 ед.|r|n"+colorAct+"Повышает указанному шиноби сопротивление к Ниндзюцу на 45 % на 4 секунды|r|n- |cFFC6D2FFДальность применения: 650|r|n- |cFF959697Перезарядка: 12|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[ROSARY_MONK])
set udg_Items[KATON]=KATON_ID
set IconItems[KATON]=0x42303337
set ItemsName[KATON]=color+"Катон|r"
set ItemsCost[KATON]=1250
set ItemsText[KATON]="- |cFFFE8A0EУвеличивает владельцу силу, ловкость и разум на 5 ед. и даёт союзникам в области 600 ед. отражение 15 % полученного урона|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KATON])
set udg_Items[FUTON]=FUTON_ID
set IconItems[FUTON]=0x42303341
set ItemsName[FUTON]=color+"Футон|r"
set ItemsCost[FUTON]=1250
set ItemsText[FUTON]="- |cFFFE8A0EУвеличивает владельцу силу, ловкость и разум на 5 ед. и даёт союзникам в области 600 ед. 20 % скорость боя|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[FUTON])
set udg_Items[RAITON]=RAITON_ID
set IconItems[RAITON]=0x42303342
set ItemsName[RAITON]=color+"Райтон|r"
set ItemsCost[RAITON]=1250
set ItemsText[RAITON]="- |cFFFE8A0EУвеличивает владельцу силу, ловкость и разум на 5 ед. и даёт союзникам в области 600 ед. 25 % дополнительного урона от базового|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[RAITON])
set udg_Items[DOTON]=DOTON_ID
set IconItems[DOTON]=0x42303339
set ItemsName[DOTON]=color+"Дотон|r"
set ItemsCost[DOTON]=1250
set ItemsText[DOTON]="- |cFFFE8A0EУвеличивает владельцу силу, ловкость и разум на 5 ед. и даёт союзникам в области 600 ед. 8 ед. физической защиты|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[DOTON])
set udg_Items[SUITON]=SUITON_ID
set IconItems[SUITON]=0x42303338
set ItemsName[SUITON]=color+"Суйтон|r"
set ItemsCost[SUITON]=1250
set ItemsText[SUITON]="- |cFFFE8A0EУвеличивает владельцу силу, ловкость и разум на 5 ед. и даёт союзникам в области 600 ед. 13 % скорость передвижения|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SUITON])
set udg_Items[HOSHI]=HOSHI_ID
set IconItems[HOSHI]=0x42303358
set ItemsName[HOSHI]=color+"Метеорит Хошигакуре|r"
set ItemsCost[HOSHI]=1500
set ItemsText[HOSHI]="- |cFFFE8A0EУвеличивает здоровье на 200 ед. и чакру на 350 ед.|r|n"+colorAct+"Наносит противнику 15 % урона от его максимального здоровья, снижает скорость передвижения на 33 %, отталкивает на 400 ед., лишает возможности применять способности и атаковать, а также ежесекундно оглушает на 0,33 секунды в течение 4 секунд.|r|n- |cFFC6D2FFДальность применения: 800|r|n- |cFF7EBFF1Расход чакры: 250|r|n- |cFF959697Перезарядка: 60|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[HOSHI])
set udg_Items[SENNIN_STAFF]=SENNIN_STAFF_ID
set IconItems[SENNIN_STAFF]=0x42303333
set ItemsName[SENNIN_STAFF]=color+"Посох мудреца|r"
set ItemsCost[SENNIN_STAFF]=1500
set ItemsText[SENNIN_STAFF]="- |cFFFE8A0EУвеличивает разум на 12 ед. и повышает урон от Ниндзюцу на 22 %|r|n"+colorAct+"Толкает указанного героя на расстояние 600 ед. в направлении его взгляда.|r|n- |cFFC6D2FFДальность применения: 600|r|n- |cFF7EBFF1Расход чакры: 25|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SENNIN_STAFF])
set udg_Items[SHINIGAMI_OFFERING]=SHINIGAMI_OFFERING_ID
set IconItems[SHINIGAMI_OFFERING]=0x42303654
set ItemsName[SHINIGAMI_OFFERING]=color+"Маска Шинигами|r"
set ItemsCost[SHINIGAMI_OFFERING]=2000
set ItemsText[SHINIGAMI_OFFERING]="- |cFFFE8A0EУвеличивает силу и разум на 12 ед.|r|n"+colorAct+"Увеличивает противникам в области 600 ед. получаемый урон от Ниндзюцу на 30 % на 10 секунд.|r|n- |cFFC6D2FFДальность применения: 600|r|n- |cFF959697Перезарядка: 20|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SHINIGAMI_OFFERING])
set udg_Items[TENSEIGAN]=TENSEIGAN_ID
set IconItems[TENSEIGAN]=0x4230335A
set ItemsName[TENSEIGAN]=color+"Тенсейган|r"
set ItemsCost[TENSEIGAN]=2000
set ItemsText[TENSEIGAN]="- |cFFFE8A0EУвеличивает здоровье на 200 ед., чакру на 350 ед. и даёт 8 % шанс увернуться от физической атаки|r|n"+colorAct+"Крадёт у вражеских героев в области 600 ед. 6 ед. атаки, 8 % скорости боя, 5 % скорости передвижения, 3 ед. физической защиты, 6 % сопротивления к Ниндзюцу, 2 ед. регенерации здоровья, 1,6 ед. регенерации чакры и передаёт себе на 8 секунд.|r|n- |cFFC6D2FFДальность применения: 800|r|n- |cFF959697Перезарядка: 60|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[TENSEIGAN])
set udg_Items[BENIHISAGO]=BENIHISAGO_ID
set IconItems[BENIHISAGO]=0x42303649
set ItemsName[BENIHISAGO]=color+"Малиновая тыква|r"
set ItemsCost[BENIHISAGO]=3000
set ItemsText[BENIHISAGO]="- |cFFFE8A0EУвеличивает разум на 30 ед.|r|n"+colorAct+"Сжигает вражескому герою половину запаса его чакры и столько же себе, и если у цели было меньше чакры, то накладывает ей дебаф, увеличивающий получаемый урон от Ниндзюцу на 30 % на 12 секунд.|r|n- |cFF959697Перезарядка: 60|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[BENIHISAGO])
set udg_Items[SHODAI_HOKAGE_NO_KUBIKAZARI]=SHODAI_HOKAGE_NO_KUBIKAZARI_ID
set IconItems[SHODAI_HOKAGE_NO_KUBIKAZARI]=0x4230374B
set ItemsName[SHODAI_HOKAGE_NO_KUBIKAZARI]=color+"Ожерелье первого Хокаге|r"
set ItemsCost[SHODAI_HOKAGE_NO_KUBIKAZARI]=3250
set ItemsText[SHODAI_HOKAGE_NO_KUBIKAZARI]="- |cFFFE8A0EПовышает регенерацию здоровья на 8 ед., сопротивление к Ниндзюцу на 30 %, а также союзникам в области 600 ед. повышает регенерацию здоровья на 4 ед. и сопротивление к Ниндзюцу на 10 %|r|n"+colorAct+"Создаёт барьер в области 600 ед. на 12 секунд, который поглощает 400 ед. урона от Ниндзюцу.|r|n- |cFF7EBFF1Расход чакры: 100|r|n- |cFF959697Перезарядка: 55|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SHODAI_HOKAGE_NO_KUBIKAZARI])
set udg_Items[KOKINJO]=KOKINJO_ID
set IconItems[KOKINJO]=0x42303832
set ItemsName[KOKINJO]=color+"Золотая верёвка ясности|r"
set ItemsCost[KOKINJO]=3500
set ItemsText[KOKINJO]="- |cFFFE8A0EУвеличивает ловкость на 25 ед. и разум на 10 ед.|r|n"+colorAct+"Превращает цель в безобидную зверюшку на 3,5 секунды.|r|n- |cFFC6D2FFДальность применения: 500|r|n- |cFF7EBFF1Расход чакры: 100|r|n- |cFF959697Перезарядка: 35|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KOKINJO])
set udg_Items[KONOHA_JACKET]=KONOHA_JACKET_ID_1
set IconItems[KONOHA_JACKET]=0x42303157
set ItemsName[KONOHA_JACKET]=color+"Жилет Конохи|r"
set ItemsCost[KONOHA_JACKET]=500
set ItemsText[KONOHA_JACKET]="- |cFFFE8A0EУвеличивает физическую защиту на 4 ед. и сопротивление к Ниндзюцу на 8 %|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KONOHA_JACKET])
set udg_Items[NUKENIN_GLOVES]=NUKENIN_GLOVES_ID_1
set IconItems[NUKENIN_GLOVES]=0x4230344B
set ItemsName[NUKENIN_GLOVES]=color+"Перчатки нукенина|r"
set ItemsCost[NUKENIN_GLOVES]=500
set ItemsText[NUKENIN_GLOVES]="- |cFFFE8A0EУвеличивает скорость боя на 15 % и даёт дополнительно 4 рё за убийство вражеского крипа на линии и 2 рё за нейтрального крипа|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[NUKENIN_GLOVES])
set udg_Items[WAIST_POUCH]=WAIST_POUCH_ID_1
set IconItems[WAIST_POUCH]=0x4230364C
set ItemsName[WAIST_POUCH]=color+"Сумка|r"
set ItemsCost[WAIST_POUCH]=500
set ItemsText[WAIST_POUCH]="- |cFFFE8A0EУвеличивает силу, ловкость и разум на 2 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[WAIST_POUCH])
set udg_Items[HITAIATE]=HITAIATE_ID_1
set IconItems[HITAIATE]=0x42303244
set ItemsName[HITAIATE]=color+"Повязка шиноби|r"
set ItemsCost[HITAIATE]=500
set ItemsText[HITAIATE]="- |cFFFE8A0EПовышает регенерацию здоровья на 2,50 ед. и регенерацию чакры на 2 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[HITAIATE])
set udg_Items[AKATSUKI_HAT]=AKATSUKI_HAT_ID
set IconItems[AKATSUKI_HAT]=0x42303243
set ItemsName[AKATSUKI_HAT]=color+"Шляпа Акацки|r"
set ItemsCost[AKATSUKI_HAT]=500
set ItemsText[AKATSUKI_HAT]="- |cFFFE8A0EУвеличивает область обзора на 600 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[AKATSUKI_HAT])
set udg_Items[ROBBER_MACE]=ROBBER_MACE_ID_1
set IconItems[ROBBER_MACE]=0x42304244
set ItemsName[ROBBER_MACE]=color+"Булава грабителя|r"
set ItemsCost[ROBBER_MACE]=500
set ItemsText[ROBBER_MACE]="- |cFFFE8A0EУвеличивает силу на 5 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[ROBBER_MACE])
set udg_Items[SAMURAI_CETTO]=SAMURAI_CETTO_ID_1
set IconItems[SAMURAI_CETTO]=0x42304245
set ItemsName[SAMURAI_CETTO]=color+"Вакидзаси самурая|r"
set ItemsCost[SAMURAI_CETTO]=500
set ItemsText[SAMURAI_CETTO]="- |cFFFE8A0EУвеличивает ловкость на 5 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SAMURAI_CETTO])
set udg_Items[YUKIGAKURE_GHOST]=YUKIGAKURE_GHOST_ID_1
set IconItems[YUKIGAKURE_GHOST]=0x42304246
set ItemsName[YUKIGAKURE_GHOST]=color+"Душа Страны снега|r"
set ItemsCost[YUKIGAKURE_GHOST]=500
set ItemsText[YUKIGAKURE_GHOST]="- |cFFFE8A0EУвеличивает разум на 5 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[YUKIGAKURE_GHOST])
set udg_Items[HIRAISHIN_BOOTS]=HIRAISHIN_BOOTS_ID
set IconItems[HIRAISHIN_BOOTS]=0x42303830
set ItemsName[HIRAISHIN_BOOTS]=color+"Сапоги летающего Бога грома|r"
set ItemsCost[HIRAISHIN_BOOTS]=1200
set ItemsText[HIRAISHIN_BOOTS]="- |cFFFE8A0EУвеличивает скорость передвижения на 60 ед.|r|n"+colorAct+"Телепортирует к любому союзному шиноби или сооружению в течение 3 секунд|r|n- |cFF7EBFF1Расход чакры: 75|r|n- |cFF959697Перезарядка: 45|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[HIRAISHIN_BOOTS])
set udg_Items[OMORI]=OMORI_ID
set IconItems[OMORI]=0x4230334A
set ItemsName[OMORI]=color+"Утяжелители|r"
set ItemsCost[OMORI]=1250
set ItemsText[OMORI]="- |cFFFE8A0EУвеличивает силу и ловкость на 8 ед.|r|n"+colorAct+"Увеличивает скорость передвижения героя на 40 % на 6 секунд.|r|n- |cFF959697Перезарядка: 22|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[OMORI])
set udg_Items[AKATSUKI_ROBE]=AKATSUKI_ROBE_ID
set IconItems[AKATSUKI_ROBE]=0x42303349
set ItemsName[AKATSUKI_ROBE]=color+"Плащ Акацки|r"
set ItemsCost[AKATSUKI_ROBE]=1500
set ItemsText[AKATSUKI_ROBE]="- |cFFFE8A0EУвеличивает разум на 14 ед. и сопротивление к Ниндзюцу на 12 %|r|n"+colorAct+"Делает цель невидимой на 5 секунд.|r|n- |cFF7EBFF1Расход чакры: 130|r|n- |cFF959697Перезарядка: 15|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[AKATSUKI_ROBE])
set udg_Items[HOGO_TETSU_NO_KUNI]=HOGO_TETSU_NO_KUNI_ID
set IconItems[HOGO_TETSU_NO_KUNI]=0x42303332
set ItemsName[HOGO_TETSU_NO_KUNI]=color+"Защита Страны железа|r"
set ItemsCost[HOGO_TETSU_NO_KUNI]=2165
set ItemsText[HOGO_TETSU_NO_KUNI]="- |cFFFE8A0EУвеличивает здоровье на 250 ед. и повышает его регенерацию на 10 ед.|r|n"+colorAct+"Отражает любой полученный урон обратно врагу в течение 6 секунд.|r|n- |cFF959697Перезарядка: 16|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[HOGO_TETSU_NO_KUNI])
set udg_Items[ANBU_AMMUNITION]=ANBU_AMMUNITION_ID
set IconItems[ANBU_AMMUNITION]=0x42303655
set ItemsName[ANBU_AMMUNITION]=color+"Амуниция АНБУ|r"
set ItemsCost[ANBU_AMMUNITION]=2350
set ItemsText[ANBU_AMMUNITION]="- |cFFFE8A0EУвеличивает ловкость, разум на 12 ед., скорость передвижения на 40 ед. и даёт 25 % шанс заблокировать до 45 ед. физического урона|r|n"+colorAct+"Пингует всех вражеских героев на мини-карте в течение 5 секунд.|r|n- |cFF959697Перезарядка: 60|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[ANBU_AMMUNITION])
set udg_Items[CHAKRA_NO_YOROI]=CHAKRA_NO_YOROI_ID
set IconItems[CHAKRA_NO_YOROI]=0x42303336
set ItemsName[CHAKRA_NO_YOROI]=color+"Доспехи Чакры|r"
set ItemsCost[CHAKRA_NO_YOROI]=2400
set ItemsText[CHAKRA_NO_YOROI]="- |cFFFE8A0EУвеличивает здоровье на 300 ед.|r|n"+colorAct+"Даёт полное сопротивление к Ниндзюцу на некоторое время.|r|n- |cFF65A100Длительность: 10|r|n- |cFF959697Перезарядка: 80|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[CHAKRA_NO_YOROI])
set udg_Items[SHITENSHOIN]=SHITENSHOIN_ID
set IconItems[SHITENSHOIN]=0x42303756
set ItemsName[SHITENSHOIN]=color+"Доспехи команды Шитеншоин|r"
set ItemsCost[SHITENSHOIN]=2500
set ItemsText[SHITENSHOIN]="- |cFFFE8A0EУвеличивает владельцу здоровье на 250 ед., повышает его регенерацию на 9 ед. и даёт 6 ед. физической защиты|r|n"+colorAct+"Союзникам в области 600 ед. сокращает до 50 ед. физического урона в течение 10 секунд.|r|n- |cFF959697Перезарядка: 60|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SHITENSHOIN])
set udg_Items[TRAINING_SUIT]=TRAINING_SUIT_ID
set IconItems[TRAINING_SUIT]=0x42303156
set ItemsName[TRAINING_SUIT]=color+"Тренировочный костюм|r"
set ItemsCost[TRAINING_SUIT]=2500
set ItemsText[TRAINING_SUIT]="- |cFFFE8A0EДаёт 25 % шанс увернуться от физической атаки и увеличивает урон от Тайдзюцу на 20 %|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[TRAINING_SUIT])
set udg_Items[LUMBERJACK_AXE]=LUMBERJACK_AXE_ID
set IconItems[LUMBERJACK_AXE]=0x42304254
set ItemsName[LUMBERJACK_AXE]=color+"Топор лесоруба|r"
set ItemsCost[LUMBERJACK_AXE]=250
set ItemsText[LUMBERJACK_AXE]=colorAct+"Собирает от 1 до 10 ед. древесины при каждом ударе по отмеченному дереву.|r|n- |cFF959697Перезарядка: 2|r|n- |cFFE5BC97Каждые 1000 ед. древесины дают возможность автоматического создания катапульт на линиях|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[LUMBERJACK_AXE])
set udg_Items[BATTLE_CLAW]=BATTLE_CLAW_ID_1
set IconItems[BATTLE_CLAW]=0x42304247
set ItemsName[BATTLE_CLAW]=color+"Боевой коготь|r"
set ItemsCost[BATTLE_CLAW]=500
set ItemsText[BATTLE_CLAW]="- |cFFFE8A0EУвеличивает физический урон на 15 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[BATTLE_CLAW])
set udg_Items[SAMURAI_KATANA]=SAMURAI_KATANA_ID
set IconItems[SAMURAI_KATANA]=0x42304249
set ItemsName[SAMURAI_KATANA]=color+"Катана самурая|r"
set ItemsCost[SAMURAI_KATANA]=750
set ItemsText[SAMURAI_KATANA]="- |cFFFE8A0EУвеличивает физический урон на 15 ед. и даёт 15 % шанс выпустить Чакру на расстояние 800 ед., которая наносит 60 ед. урона первому попавшемуся противнику в области 125 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SAMURAI_KATANA])
set udg_Items[ANBU_TANTO]=ANBU_TANTO_ID
set IconItems[ANBU_TANTO]=0x4230424A
set ItemsName[ANBU_TANTO]=color+"Танто АНБУ|r"
set ItemsCost[ANBU_TANTO]=1300
set ItemsText[ANBU_TANTO]="- |cFFFE8A0EУвеличивает физический урон на 20 ед. и даёт 15 % шанс вместо физического урона нанести чистый|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[ANBU_TANTO])
set udg_Items[KUROSAVA]=KUROSAVA_ID
set IconItems[KUROSAVA]=0x4230325A
set ItemsName[KUROSAVA]=color+"Куросава|r"
set ItemsCost[KUROSAVA]=1500
set ItemsText[KUROSAVA]="- |cFFFE8A0EУвеличивает физический урон на 20 ед.|r|n"+colorAct+"Мгновенно перемещает героя в указанную местность.|r|n- |cFFC6D2FFДальность применения: 900|r|n- |cFF959697Перезарядка: 12|r|n- |cFFE5BC97Если герой получает урон, то он не сможет телепортироваться в течение 3-х сек.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KUROSAVA])
set udg_Items[BATORUGUROBU]=BATORUGUROBU_ID
set IconItems[BATORUGUROBU]=0x42303030
set ItemsName[BATORUGUROBU]=color+"Когти братьев-демонов|r"
set ItemsCost[BATORUGUROBU]=1700
set ItemsText[BATORUGUROBU]="- |cFFFE8A0EУвеличивает физический урон на 20 ед., скорость боя на 25 % и отравляет при атаке: -15 % скорости боя на 1 сек.|r|n"+colorAct+"Кидает железную цепь на дерево и притягивается к нему.|r|n- |cFFC6D2FFДальность применения: 600|r|n- |cFF959697Перезарядка: 14|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[BATORUGUROBU])
set udg_Items[FURIDO_STAFF]=FURIDO_STAFF_ID
set IconItems[FURIDO_STAFF]=0x42303343
set ItemsName[FURIDO_STAFF]=color+"Посох Фуридо|r"
set ItemsCost[FURIDO_STAFF]=1700
set ItemsText[FURIDO_STAFF]="- |cFFFE8A0EУвеличивает ловкость на 14 ед. и физический урон на 14 ед.|r|n"+colorAct+"За каждого крипа в области 400 ед. применяющему даётся 10 ед. физического урона (до 6 крипов), а за героя – 20 ед. (до 2 героев) на 8 секунд.|r|n- |cFF959697Перезарядка: 55|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[FURIDO_STAFF])
set udg_Items[KIHOU_BLASTER]=KIHOU_BLASTER_ID
set IconItems[KIHOU_BLASTER]=0x42303235
set ItemsName[KIHOU_BLASTER]=color+"Бластер Кихо|r"
set ItemsCost[KIHOU_BLASTER]=1850
set ItemsText[KIHOU_BLASTER]="- |cFFFE8A0EУвеличивает разум на 15 ед., даёт 15 % (от героев) и 5 % (от крипов) вампиризм здоровья при нанесении урона от способностей Ниндзюцу|r|n"+colorAct+"Выстреливает снарядом, который наносит 400 ед. урона Ниндзюцу первому попавшемуся вражескому шиноби.|r|n- |cFFC6D2FFДальность применения: 600|r|n- |cFF7EBFF1Расход чакры: 130|r|n- |cFF959697Перезарядка: 14|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KIHOU_BLASTER])
set udg_Items[SOSHUGA]=SOSHUGA_ID
set IconItems[SOSHUGA]=0x42303236
set ItemsName[SOSHUGA]=color+"Сошуга|r"
set ItemsCost[SOSHUGA]=1920
set ItemsText[SOSHUGA]="- |cFFFE8A0EУвеличивает физический урон на 12 ед. и скорость боя на 60 %|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SOSHUGA])
set udg_Items[BASHOSEN]=BASHOSEN_ID
set IconItems[BASHOSEN]=0x4230375A
set ItemsName[BASHOSEN]=color+"Банановый веер|r"
set ItemsCost[BASHOSEN]=2050
set ItemsText[BASHOSEN]="- |cFFFE8A0EУвеличивает физический урон на 40 ед. и дополнительно наносит противнику 30 % от нанесённого физического урона выбранной стихийной чакрой Ниндзюцу|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[BASHOSEN])
set udg_Items[KUSANAGI_NO_TSURUGI]=KUSANAGI_NO_TSURUGI_ID
set IconItems[KUSANAGI_NO_TSURUGI]=0x42303433
set ItemsName[KUSANAGI_NO_TSURUGI]=color+"Меч Кусанаги|r"
set ItemsCost[KUSANAGI_NO_TSURUGI]=2100
set ItemsText[KUSANAGI_NO_TSURUGI]="- |cFFFE8A0EУвеличивает физический урон на 40 ед. и отравляет врага при атаках, нанося 30 ед. урона в сек. и снижает его скорость передвижения на 45 % на 2 сек.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KUSANAGI_NO_TSURUGI])
set udg_Items[HIRAMEKAREI]=HIRAMEKAREI_ID
set IconItems[HIRAMEKAREI]=0x42303253
set ItemsName[HIRAMEKAREI]=color+"Хирамекарей|r"
set ItemsCost[HIRAMEKAREI]=2450
set ItemsText[HIRAMEKAREI]="- |cFFFE8A0EУвеличивает физический урон на 50 ед.|r|n"+colorAct+"Увеличивает наносимый физический урон на 150 ед. на одну атаку в течение 6 секунд.|r|n- |cFF7EBFF1Расход чакры: 50|r|n- |cFF959697Перезарядка: 10|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[HIRAMEKAREI])
set udg_Items[KABUTOWARI]=KABUTOWARI_ID
set IconItems[KABUTOWARI]=0x42303035
set ItemsName[KABUTOWARI]=color+"Кабутовари|r"
set ItemsCost[KABUTOWARI]=2450
set ItemsText[KABUTOWARI]="- |cFFFE8A0EУвеличивает физический урон на 50 ед. и при атаках снижает физическую защиту врага на 10 ед. на 15 сек.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[KABUTOWARI])
set udg_Items[SHIBUKI]=SHIBUKI_ID
set IconItems[SHIBUKI]=0x42303038
set ItemsName[SHIBUKI]=color+"Шибуки|r"
set ItemsCost[SHIBUKI]=2750
set ItemsText[SHIBUKI]="- |cFFFE8A0EУвеличивает физический урон на 50 ед. и даёт 20 % сплеш-урона по области 300 ед.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SHIBUKI])
set udg_Items[NUIBARI]=NUIBARI_ID
set IconItems[NUIBARI]=0x42303834
set ItemsName[NUIBARI]=color+"Нуибари|r"
set ItemsCost[NUIBARI]=2950
set ItemsText[NUIBARI]="- |cFFFE8A0EУвеличивает физический урон на 50 ед. и даёт 30 % шанс нанести 2,00 x физического урона при атаке|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[NUIBARI])
set udg_Items[TOBIRAMA_RAIJIN]=TOBIRAMA_RAIJIN_ID
set IconItems[TOBIRAMA_RAIJIN]=0x42303430
set ItemsName[TOBIRAMA_RAIJIN]=color+"Райджин Тобирамы|r"
set ItemsCost[TOBIRAMA_RAIJIN]=3690
set ItemsText[TOBIRAMA_RAIJIN]="- |cFFFE8A0EУвеличивает силу на 25 ед., даёт 15 % шанс нанести дополнительно 50 ед. урона и оглушить цель на 1,4 сек.|r|n"+colorAct+"Оглушает вражеского героя на 2 секунды.|r|n- |cFFC6D2FFДальность применения: 250|r|n- |cFF959697Перезарядка: 60|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[TOBIRAMA_RAIJIN])
set udg_Items[SHICHISEIKEN]=SHICHISEIKEN_ID
set IconItems[SHICHISEIKEN]=0x42303833
set ItemsName[SHICHISEIKEN]=color+"Меч семи звёзд|r"
set ItemsCost[SHICHISEIKEN]=3775
set ItemsText[SHICHISEIKEN]="- |cFFFE8A0EУвеличивает физический урон на 65 ед., исключает шанс промаха при атаке, даёт 30 % шанс нанести дополнительно 100 ед. урона и оглушить цель на 0,1 сек.|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[SHICHISEIKEN])
set udg_Items[NUNOBOKO_NO_KEN]=NUNOBOKO_NO_KEN_ID
set IconItems[NUNOBOKO_NO_KEN]=0x42303648
set ItemsName[NUNOBOKO_NO_KEN]=color+"Меч Нунобоко|r"
set ItemsCost[NUNOBOKO_NO_KEN]=5500
set ItemsText[NUNOBOKO_NO_KEN]="- |cFFFE8A0EДаёт 25 % вампиризма здоровья при атаке, а также наносит 1 % чистого урона от максимального здоровья противника|r|n|n|cffffcc00Стоимость:|r "+colorCost+I2S(ItemsCost[NUNOBOKO_NO_KEN])
loop
exitwhen i>art_number
if i==1 then
set placex=1
set placey=0
call CreateDestructable(0x42303037,x-step,y+(64.+step)*placey,0,1,0)
call CreateTrack("4x4Trackable.MDX",x-step,y+(64.+step)*placey,-5,gg_trg_Shop_Track,gg_trg_Shop_Hit)
elseif i==11 then
set placex=1
set placey=1
call CreateDestructable(0x42303037,x-step,y+(64.+step)*placey,0,1,0)
call CreateTrack("4x4Trackable.MDX",x-step,y+(64.+step)*placey,-6,gg_trg_Shop_Track,gg_trg_Shop_Hit)
elseif i==20 then
set placex=1
set placey=3
call CreateDestructable(0x42303154,x-step,y+(64.+step)*placey,0,1,0)
call CreateTrack("4x4Trackable.MDX",x-step,y+(64.+step)*placey,-7,gg_trg_Shop_Track,gg_trg_Shop_Hit)
elseif i==30 then
set placex=1
set placey=4
call CreateDestructable(0x42303154,x-step,y+(64.+step)*placey,0,1,0)
call CreateTrack("4x4Trackable.MDX",x-step,y+(64.+step)*placey,-8,gg_trg_Shop_Track,gg_trg_Shop_Hit)
elseif i==35 then
set placex=1
set placey=5
call CreateDestructable(0x42303036,x-step,y+(64.+step)*placey,0,1,0)
call CreateTrack("4x4Trackable.MDX",x-step,y+(64.+step)*placey,-9,gg_trg_Shop_Track,gg_trg_Shop_Hit)
elseif i==45 then
set placex=1
set placey=6
call CreateDestructable(0x42303036,x-step,y+(64.+step)*placey,0,1,0)
call CreateTrack("4x4Trackable.MDX",x-step,y+(64.+step)*placey,-10,gg_trg_Shop_Track,gg_trg_Shop_Hit)
elseif i==51 then
set placex=1
set placey=7
call CreateDestructable(0x42303155,x-step,y+(64.+step)*placey,0,1,0)
call CreateTrack("4x4Trackable.MDX",x-step,y+(64.+step)*placey,-11,gg_trg_Shop_Track,gg_trg_Shop_Hit)
elseif i==61 then
set placex=1
set placey=8
call CreateDestructable(0x42303155,x-step,y+(64.+step)*placey,0,1,0)
call CreateTrack("4x4Trackable.MDX",x-step,y+(64.+step)*placey,-12,gg_trg_Shop_Track,gg_trg_Shop_Hit)
endif
if i>0 then
set udg_ShopDes[i]=CreateDestructable(IconItems[i],x+64.*placex,y+(64.+step)*placey,0,1,0)
call SaveStr(Hash,udg_Items[i],4,ItemsText[i])
call SaveStr(Hash,udg_Items[i],5,ItemsName[i])
call SaveInteger(Hash,udg_Items[i],6,ItemsCost[i])
call CreateTrack("4x4Trackable.MDX",x+64.*placex,y+(64.+step)*placey,udg_Items[i],gg_trg_Shop_Track,gg_trg_Shop_Hit)
call UnitAddItem(preloader,CreateItem(udg_Items[i],0.,0.))
call RemoveItem(UnitItemInSlot(preloader,0))
endif
set placex=placex+1
set i=i+1
endloop
call CreateDestructable(0x42303456,xOther,yOther,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther,0,gg_trg_Shop_Track,gg_trg_Shop_Hit)
set xOther=xOther+100.
call CreateDestructable(0x42303457,xOther,yOther,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther,-1,gg_trg_Shop_Track,gg_trg_Shop_Hit)
set xOther=xOther+100.
call CreateDestructable(0x42303436,xOther,yOther,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther,-2,gg_trg_Shop_Track,gg_trg_Shop_Hit)
set xOther=xOther-200.
call CreateDestructable(0x42303553,xOther,yOther+100.,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther+100.,-3,gg_trg_Shop_Track,gg_trg_Shop_Hit)
set xOther=xOther+100.
call CreateDestructable(0x42303152,xOther,yOther+100.,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther+100.,-4,gg_trg_Shop_Track,gg_trg_Shop_Hit)
set xOther=xOther-100.
set yOther=yOther-200.
call CreateDestructable(0x42304255,xOther,yOther,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther,-13,gg_trg_Shop_Track,gg_trg_Shop_Hit)
call CreateDestructable(0x42304255,xOther,yOther+100.,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther+100.,-14,gg_trg_Shop_Track,gg_trg_Shop_Hit)
set xOther=xOther+100.
call CreateDestructable(0x42304255,xOther,yOther,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther,-15,gg_trg_Shop_Track,gg_trg_Shop_Hit)
call CreateDestructable(0x42304255,xOther,yOther+100.,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther+100.,-16,gg_trg_Shop_Track,gg_trg_Shop_Hit)
set xOther=xOther+100.
call CreateDestructable(0x42304255,xOther,yOther,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther,-17,gg_trg_Shop_Track,gg_trg_Shop_Hit)
call CreateDestructable(0x42304255,xOther,yOther+100.,0,1,0)
call CreateTrack("4x4Trackable.MDX",xOther,yOther+100.,-18,gg_trg_Shop_Track,gg_trg_Shop_Hit)
call RemoveUnit(preloader)
call TheSpecularRandomGetList()
set preloader=null
endfunction
function PreloadAll takes integer max returns nothing
local real x=GetRectCenterX(gg_rct_MainRect)
local real y=GetRectCenterY(gg_rct_MainRect)
local integer i=1
local unit d
loop
exitwhen i>max
if i<=hero_number then
set d=CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),heroes_rawcode[i],x,y,0.)
set mb_heroesMS[i]=GetUnitMoveSpeed(d)
set mb_heroesHP[i]=GetWidgetLife(d)
set mb_heroesMP[i]=GetUnitState(d,UNIT_STATE_MANA)
set AverageHP=AverageHP+mb_heroesHP[i]
set AverageMP=AverageMP+mb_heroesMP[i]
set AverageMS=AverageMS+mb_heroesMS[i]
call SetHeroLevel(d,10,true)
call RemoveUnit(d)
endif
call RemoveUnit(CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),units_rawcode[i],x,y,0.))
set i=i+1
endloop
set AverageHP=AverageHP/hero_number
set AverageMP=AverageMP/hero_number
set AverageMS=AverageMS/hero_number
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl",x,y))
call DestroyEffect(AddSpecialEffect("NewDirtEXNofire.mdx",x,y))
call DestroyEffect(AddSpecialEffect("IceSparks.mdx",x,y))
set d=CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),0x6E303042,x,y,0.)
call UnitAddAbility(d,0x41313248)
call UnitAddAbility(d,0x4130564C)
call UnitAddAbility(d,0x41304337)
call UnitAddAbility(d,0x41304553)
call UnitAddAbility(d,0x4130474B)
call UnitAddAbility(d,0x4130504C)
call UnitAddAbility(d,0x4130495A)
call UnitAddAbility(d,0x41304D53)
call UnitAddAbility(d,0x41305634)
call UnitAddAbility(d,0x4130354B)
call UnitAddAbility(d,0x414F5459)
call UnitAddAbility(d,0x414F3155)
call UnitAddAbility(d,0x41313157)
call UnitAddAbility(d,0x414F4F33)
call UnitAddAbility(d,0x41313252)
call UnitAddAbility(d,0x4130594D)
call UnitAddAbility(d,0x41303338)
call UnitAddAbility(d,0x41304E31)
call UnitAddAbility(d,0x41305657)
call UnitAddAbility(d,0x4131304E)
call UnitAddAbility(d,0x41304E36)
call UnitAddAbility(d,0x4130524E)
call UnitAddAbility(d,0x414F5947)
call UnitAddAbility(d,0x414F5944)
call UnitAddAbility(d,0x41304153)
call UnitAddAbility(d,0x41303237)
call UnitAddAbility(d,0x41305752)
call UnitAddAbility(d,0x41305942)
call UnitAddAbility(d,0x41303536)
call UnitAddAbility(d,0x41305749)
call UnitAddAbility(d,0x41305937)
call UnitAddAbility(d,0x41305355)
call UnitAddAbility(d,0x41304330)
call UnitAddAbility(d,0x41304C48)
call UnitAddAbility(d,0x4130564A)
call UnitAddAbility(d,0x41313458)
call UnitAddAbility(d,0x41304F4B)
call UnitAddAbility(d,0x41304632)
call UnitAddAbility(d,0x41304B58)
call UnitAddAbility(d,0x41305233)
call RemoveUnit(d)
call ShopInit()
set d=null
endfunction
function SetRawcodes takes nothing returns nothing
set mb_iconBTN[Asuma]="BTNAsuma.blp"
set mb_iconDISBTN[Asuma]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNAsuma.blp"
set mb_iconBTN[Ei]="BTNEi.blp"
set mb_iconDISBTN[Ei]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNEi.blp"
set mb_iconBTN[Gai]="BTNGai.blp"
set mb_iconDISBTN[Gai]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNGai.blp"
set mb_iconBTN[Han]="BTNHan.blp"
set mb_iconDISBTN[Han]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNHan.blp"
set mb_iconBTN[Hanzo]="BTNHanzo.blp"
set mb_iconDISBTN[Hanzo]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNHanzo.blp"
set mb_iconBTN[Jiraya]="BTNJiraya.blp"
set mb_iconDISBTN[Jiraya]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNJiraya.blp"
set mb_iconBTN[Jugo]="BTNJugo V2.blp"
set mb_iconDISBTN[Jugo]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNJugo V2.blp"
set mb_iconBTN[Naruto]="BTNNaruto.blp"
set mb_iconDISBTN[Naruto]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNNaruto.blp"
set mb_iconBTN[Sasori]="BTNSasori V2.blp"
set mb_iconDISBTN[Sasori]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNSasori V2.blp"
set mb_iconBTN[Tsunade]="BTNTsunade.blp"
set mb_iconDISBTN[Tsunade]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNTsunade.blp"
set mb_iconBTN[Zabuza]="BTNZabuza.blp"
set mb_iconDISBTN[Zabuza]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNZabuza.blp"
set mb_iconBTN[Haku]="BTNHaku V1.blp"
set mb_iconDISBTN[Haku]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNHaku V1.blp"
set mb_iconBTN[Hidan]="BTNHidan.blp"
set mb_iconDISBTN[Hidan]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNHidan.blp"
set mb_iconBTN[Itachi]="BTNItachi.blp"
set mb_iconDISBTN[Itachi]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNItachi.blp"
set mb_iconBTN[Kakashi]="BTNKakashi.blp"
set mb_iconDISBTN[Kakashi]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNKakashi.blp"
set mb_iconBTN[Minato]="BTNMinato.blp"
set mb_iconDISBTN[Minato]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNMinato.blp"
set mb_iconBTN[Mu]="BTNMu.blp"
set mb_iconDISBTN[Mu]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNMu.blp"
set mb_iconBTN[Neji]="BTNNeji.blp"
set mb_iconDISBTN[Neji]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNNeji.blp"
set mb_iconBTN[Orochimaru]="BTNOrochimaru.blp"
set mb_iconDISBTN[Orochimaru]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNOrochimaru.blp"
set mb_iconBTN[Sai]="BTNSai.blp"
set mb_iconDISBTN[Sai]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNSai.blp"
set mb_iconBTN[Sasuke]="BTNSasuke.blp"
set mb_iconDISBTN[Sasuke]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNSasuke.blp"
set mb_iconBTN[Suigetsu]="BTNSuigetsu V2.blp"
set mb_iconDISBTN[Suigetsu]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNSuigetsu V2.blp"
set mb_iconBTN[Chiyo]="BTNChiyo.blp"
set mb_iconDISBTN[Chiyo]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNChiyo.blp"
set mb_iconBTN[Danzo]="BTNDanzo.blp"
set mb_iconDISBTN[Danzo]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNDanzo.blp"
set mb_iconBTN[Darui]="BTNDarui V2.blp"
set mb_iconDISBTN[Darui]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNDarui V2.blp"
set mb_iconBTN[Deidara]="BTNDeidara V2.blp"
set mb_iconDISBTN[Deidara]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNDeidara V2.blp"
set mb_iconBTN[Gaara]="BTNGaara Portret.blp"
set mb_iconDISBTN[Gaara]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNGaara Portret.blp"
set mb_iconBTN[Gengetsu]="BTNGengetsu.blp"
set mb_iconDISBTN[Gengetsu]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNGengetsu.blp"
set mb_iconBTN[Hashirama]="BTNHashirama.blp"
set mb_iconDISBTN[Hashirama]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNHashirama.blp"
set mb_iconBTN[Kabuto]="BTNKabuto.blp"
set mb_iconDISBTN[Kabuto]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNKabuto.blp"
set mb_iconBTN[Madara]="BTNMadara V1.blp"
set mb_iconDISBTN[Madara]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNMadara V1.blp"
set mb_iconBTN[Mei]="BTNMei.blp"
set mb_iconDISBTN[Mei]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNMei.blp"
set mb_iconBTN[Nagato]="BTNNagato V1.blp"
set mb_iconDISBTN[Nagato]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNNagato V1.blp"
set mb_iconBTN[Obito]="BTNObito.blp"
set mb_iconDISBTN[Obito]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNObito.blp"
set mb_iconBTN[Onoki]="BTNOonoki.blp"
set mb_iconDISBTN[Onoki]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNOonoki.blp"
set mb_iconBTN[Sakura]="BTNSakura.blp"
set mb_iconDISBTN[Sakura]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNSakura.blp"
set mb_iconBTN[Shikamaru]="BTNShikamaru.blp"
set mb_iconDISBTN[Shikamaru]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNShikamaru.blp"
set mb_iconBTN[Tobirama]="BTNTobirama.blp"
set mb_iconDISBTN[Tobirama]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNTobirama.blp"
set mb_iconBTN[Zetsu]="BTNZetsu.blp"
set mb_iconDISBTN[Zetsu]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNZetsu.blp"
set mb_iconBTN[Yamato]="BTNYamato.blp"
set mb_iconDISBTN[Yamato]="ReplaceableTextures\\CommandButtonsDisabled\\DISBTNYamato.blp"
set heroes_rawcode[Asuma]=0x45303048
set heroes_pick[Asuma]=0x45303048
set heroes_rawcode[Ei]=0x48303157
set heroes_pick[Ei]=0x48303157
set heroes_rawcode[Gai]=0x45303041
set heroes_pick[Gai]=0x45303041
set heroes_rawcode[Han]=0x4F303138
set heroes_pick[Han]=0x4F303138
set heroes_rawcode[Hanzo]=0x4F303042
set heroes_pick[Hanzo]=0x4F303042
set heroes_rawcode[Jiraya]=0x45303036
set heroes_pick[Jiraya]=0x45303036
set heroes_rawcode[Jugo]=0x4F303051
set heroes_pick[Jugo]=0x4F303051
set heroes_rawcode[Naruto]=0x45303038
set heroes_pick[Naruto]=0x45303038
set heroes_rawcode[Sasori]=0x4F30304F
set heroes_pick[Sasori]=0x4F30304F
set heroes_rawcode[Tsunade]=0x45303033
set heroes_pick[Tsunade]=0x45303033
set heroes_rawcode[Zabuza]=0x4F303146
set heroes_pick[Zabuza]=0x4F303146
set heroes_rawcode[Haku]=0x4F303057
set heroes_pick[Haku]=0x4F303057
set heroes_rawcode[Hidan]=0x4F303056
set heroes_pick[Hidan]=0x4F303056
set heroes_rawcode[Itachi]=0x4F303043
set heroes_pick[Itachi]=0x4F303043
set heroes_rawcode[Kakashi]=0x4F303031
set heroes_pick[Kakashi]=0x4F303031
set heroes_rawcode[Minato]=0x4F303142
set heroes_pick[Minato]=0x4F303142
set heroes_rawcode[Mu]=0x4F303141
set heroes_pick[Mu]=0x4F303141
set heroes_rawcode[Neji]=0x4F303039
set heroes_pick[Neji]=0x4F303039
set heroes_rawcode[Orochimaru]=0x4F30304B
set heroes_pick[Orochimaru]=0x4F30304B
set heroes_rawcode[Sai]=0x4F30304A
set heroes_pick[Sai]=0x4F30304A
set heroes_rawcode[Sasuke]=0x4F303030
set heroes_pick[Sasuke]=0x4F303030
set heroes_rawcode[Suigetsu]=0x4F303055
set heroes_pick[Suigetsu]=0x4F303055
set heroes_rawcode[Chiyo]=0x4F303136
set heroes_pick[Chiyo]=0x4F303136
set heroes_rawcode[Danzo]=0x4F303130
set heroes_pick[Danzo]=0x4F303130
set heroes_rawcode[Darui]=0x4F303058
set heroes_pick[Darui]=0x4F303058
set heroes_rawcode[Deidara]=0x4F303133
set heroes_pick[Deidara]=0x4F303133
set heroes_rawcode[Gaara]=0x4F303047
set heroes_pick[Gaara]=0x4F303047
set heroes_rawcode[Gengetsu]=0x4F303149
set heroes_pick[Gengetsu]=0x4F303149
set heroes_rawcode[Hashirama]=0x45303031
set heroes_pick[Hashirama]=0x45303031
set heroes_rawcode[Kabuto]=0x4F30314B
set heroes_pick[Kabuto]=0x4F30314B
set heroes_rawcode[Madara]=0x4F30304C
set heroes_pick[Madara]=0x4F30304C
set heroes_rawcode[Nagato]=0x4F303134
set heroes_pick[Nagato]=0x4F303134
set heroes_rawcode[Mei]=0x4F303059
set heroes_pick[Mei]=0x4F303059
set heroes_rawcode[Obito]=0x4F303038
set heroes_pick[Obito]=0x4F303038
set heroes_rawcode[Onoki]=0x4F303054
set heroes_pick[Onoki]=0x4F303054
set heroes_rawcode[Sakura]=0x45303030
set heroes_pick[Sakura]=0x45303030
set heroes_rawcode[Shikamaru]=0x4F303033
set heroes_pick[Shikamaru]=0x4F303033
set heroes_rawcode[Tobirama]=0x4F303135
set heroes_pick[Tobirama]=0x4F303135
set heroes_rawcode[Zetsu]=0x4F303045
set heroes_pick[Zetsu]=0x4F303045
set heroes_rawcode[Yamato]=0x48303057
set heroes_pick[Yamato]=0x48303057
set heroes_rikudo_rawcode[Madara]=0x4F303034
set heroes_rikudo_rawcode[Naruto]=0x45303032
set heroes_rikudo_rawcode[Obito]=0x4F303035
set heroes_rikudo_rawcode[Sasuke]=0x4F303032
set morph_rawcode[1]=0x4F303049
set morph_rawcode[2]=0x4F303148
set morph_rawcode[3]=0x4F303050
set morph_rawcode[4]=0x45303035
set morph_rawcode[5]=0x6830334F
set morph_rawcode[6]=0x68303350
set units_rawcode[1]=0x68303358
set units_rawcode[2]=0x68303253
set units_rawcode[3]=0x68303330
set units_rawcode[4]=0x68303130
set units_rawcode[5]=0x68303049
set units_rawcode[6]=0x6830304C
set units_rawcode[7]=0x68303053
set units_rawcode[8]=0x68303342
set units_rawcode[9]=0x68303834
set units_rawcode[10]=0x68303343
set units_rawcode[11]=0x68303151
set units_rawcode[12]=0x68303050
set units_rawcode[13]=0x68303833
set units_rawcode[14]=0x68303058
set units_rawcode[15]=0x68303350
set units_rawcode[16]=0x68303351
set units_rawcode[17]=0x68303152
set units_rawcode[18]=0x68303630
set units_rawcode[19]=0x68303531
set units_rawcode[20]=0x68303046
set units_rawcode[21]=0x68303742
set units_rawcode[22]=0x68303438
set units_rawcode[23]=0x68303832
set units_rawcode[24]=0x68303135
set units_rawcode[25]=0x68303145
set units_rawcode[26]=0x6830374D
set units_rawcode[27]=0x6830335A
set units_rawcode[28]=0x68303242
set units_rawcode[29]=0x68303243
set units_rawcode[30]=0x68303154
set units_rawcode[31]=0x68303331
set units_rawcode[32]=0x6830375A
set units_rawcode[33]=0x6E303757
set units_rawcode[34]=0x68303756
set units_rawcode[35]=0x68303754
set units_rawcode[36]=0x68303751
set units_rawcode[37]=0x68303755
set units_rawcode[38]=0x68303153
set units_rawcode[39]=0x6830304E
set units_rawcode[40]=0x68303146
set units_rawcode[41]=0x68303147
set units_rawcode[42]=0x68303245
set units_rawcode[43]=0x68303259
set units_rawcode[44]=0x68303432
set units_rawcode[45]=0x68303735
set units_rawcode[46]=0x68303642
set units_rawcode[47]=0x68303458
set units_rawcode[48]=0x6830344D
set units_rawcode[49]=0x6830344E
set units_rawcode[50]=0x68303142
set units_rawcode[51]=0x68303136
set units_rawcode[52]=0x68303339
set units_rawcode[53]=0x68303651
set units_rawcode[54]=0x68303558
set units_rawcode[55]=0x68303257
set units_rawcode[56]=0x68303048
set units_rawcode[57]=0x68303059
set units_rawcode[58]=0x6830344B
set units_rawcode[59]=0x6830305A
set units_rawcode[60]=0x68303150
set units_rawcode[61]=0x6830314D
set units_rawcode[62]=0x6830304F
set units_rawcode[63]=0x68303148
set units_rawcode[64]=0x68303056
set units_rawcode[65]=0x68303647
set units_rawcode[66]=0x68303644
set units_rawcode[67]=0x6830364E
set units_rawcode[68]=0x6830364C
set units_rawcode[69]=0x6830364D
set units_rawcode[70]=0x68303134
set units_rawcode[71]=0x68303459
set units_rawcode[72]=0x68303354
set units_rawcode[73]=0x68303552
set units_rawcode[74]=0x68303141
set units_rawcode[75]=0x68303836
set units_rawcode[76]=0x68303258
set units_rawcode[77]=0x68303037
set units_rawcode[78]=0x68303334
set units_rawcode[79]=0x68303748
set units_rawcode[80]=0x68303533
set units_rawcode[81]=0x68303054
set units_rawcode[82]=0x68303551
set units_rawcode[83]=0x68303143
set units_rawcode[84]=0x68303237
set units_rawcode[85]=0x6E303134
set units_rawcode[86]=0x6E303035
set units_rawcode[87]=0x6E30304A
set units_rawcode[88]=0x6E303054
set units_rawcode[89]=0x6E303041
set units_rawcode[90]=0x6830344F
set units_rawcode[91]=0x6E303043
set units_rawcode[92]=0x6E303044
set units_rawcode[93]=0x6E303135
set units_rawcode[94]=0x6E303136
set units_rawcode[95]=0x6E303137
set units_rawcode[96]=0x6E303049
set units_rawcode[97]=0x6E303138
set units_rawcode[98]=0x6E303141
set units_rawcode[99]=0x6E303139
set units_rawcode[100]=0x6E30314C
set units_rawcode[101]=0x6E303142
set units_rawcode[102]=0x6E303031
set units_rawcode[103]=0x6E303143
set units_rawcode[104]=0x6E30314E
set units_rawcode[105]=0x6E30314D
set units_rawcode[106]=0x6E303150
set units_rawcode[107]=0x6E30314F
set units_rawcode[108]=0x6E303148
set units_rawcode[109]=0x6E30314B
set units_rawcode[110]=0x6E30314A
set units_rawcode[111]=0x6E303149
set units_rawcode[112]=0x6E303147
set units_rawcode[113]=0x6E303145
set units_rawcode[114]=0x6E303232
set units_rawcode[115]=0x6E303132
set units_rawcode[116]=0x6E303153
set units_rawcode[117]=0x6E303133
set units_rawcode[118]=0x6E303032
set units_rawcode[119]=0x6E303036
set units_rawcode[120]=0x6E303030
set units_rawcode[121]=0x6E30304E
set units_rawcode[122]=0x6E30304D
set units_rawcode[123]=0x6E303042
set units_rawcode[124]=0x6E303131
set units_rawcode[125]=0x6E30304C
set units_rawcode[126]=0x6E303048
set units_rawcode[127]=0x6E303038
set units_rawcode[128]=0x6E303050
set units_rawcode[129]=0x6E303146
set units_rawcode[130]=0x6E30304B
set units_rawcode[131]=0x6E30304F
set units_rawcode[132]=0x6E303056
set units_rawcode[133]=0x6E303057
set units_rawcode[134]=0x6E303033
set units_rawcode[135]=0x6E303039
set units_rawcode[136]=0x6E30305A
set units_rawcode[137]=0x6E303130
set units_rawcode[138]=0x6E303046
set units_rawcode[139]=0x6E303045
set units_rawcode[140]=0x6E303051
set units_rawcode[141]=0x6E303052
set units_rawcode[142]=0x6E303053
set units_rawcode[143]=0x68303450
set units_rawcode[144]=0x68303139
set units_rawcode[145]=0x68303252
set units_rawcode[146]=0x68303543
set units_rawcode[147]=0x68303137
set units_rawcode[190]=0x6E303243
set units_rawcode[191]=0x6E303244
set units_rawcode[192]=0x6E303245
set units_rawcode[193]=0x6E303246
set units_rawcode[194]=0x68303337
set units_rawcode[195]=0x6E303058
set units_rawcode[196]=0x6E303059
set units_rawcode[197]=0x6E303154
set units_rawcode[198]=0x6E303156
set units_rawcode[199]=0x6E303157
set units_rawcode[200]=0x6E303158
set units_rawcode[201]=0x6E303159
set units_rawcode[202]=0x6E30315A
set units_rawcode[203]=0x6E303230
set units_rawcode[204]=0x6E303231
set units_rawcode[205]=0x6E303144
set units_rawcode[206]=0x6E303234
set units_rawcode[207]=0x6E303235
set units_rawcode[208]=0x6E303236
set units_rawcode[209]=0x6E303237
set units_rawcode[210]=0x6E303238
set units_rawcode[211]=0x6E303239
set units_rawcode[212]=0x6E303241
set units_rawcode[213]=0x6E303242
set units_rawcode[148]=0x68303648
set units_rawcode[149]=0x68303649
set units_rawcode[150]=0x6830364B
set units_rawcode[151]=0x6830364A
set units_rawcode[152]=0x68303144
set units_rawcode[153]=0x68303534
set units_rawcode[154]=0x6830324D
set units_rawcode[155]=0x68303138
set units_rawcode[156]=0x68303336
set units_rawcode[157]=0x68303039
set units_rawcode[158]=0x68303535
set units_rawcode[159]=0x68303556
set units_rawcode[160]=0x68303051
set units_rawcode[161]=0x68303238
set units_rawcode[162]=0x68303047
set units_rawcode[163]=0x68303835
set units_rawcode[164]=0x6830304B
set units_rawcode[165]=0x6E303047
set units_rawcode[166]=0x6E303037
set units_rawcode[167]=0x6E303055
set units_rawcode[168]=0x6E303034
set units_rawcode[169]=0x68303349
set units_rawcode[170]=0x6830314A
set units_rawcode[171]=0x68303031
set units_rawcode[172]=0x68303335
set units_rawcode[173]=0x68303038
set units_rawcode[174]=0x6830324F
set units_rawcode[175]=0x68303055
set units_rawcode[176]=0x6830315A
set units_rawcode[177]=0x6830314F
set units_rawcode[178]=0x6830314E
set units_rawcode[179]=0x4F30314F
set units_rawcode[180]=0x4F30314D
set units_rawcode[181]=0x4F303037
set units_rawcode[182]=0x48303132
set units_rawcode[183]=0x45303034
set units_rawcode[184]=0x45303039
set units_rawcode[185]=0x4F303131
set units_rawcode[186]=0x4F303137
set units_rawcode[187]=0x4F303143
set units_rawcode[188]=0x4F303044
set units_rawcode[189]=0x4F303041
set units_rawcode[214]=AllianceSpecialID
set units_rawcode[215]=AkatsukiForwardID
set units_rawcode[216]=AkatsukiSupportID
set units_rawcode[217]=AkatsukiHealerID
set units_rawcode[218]=AkatsukiSpecialID
set units_rawcode[219]=AllianceKonohaForwardID
set units_rawcode[220]=AllianceIwaForwardID
set units_rawcode[221]=AllianceKiriForwardID
set units_rawcode[222]=AllianceTetsuForwardID
set units_rawcode[223]=AllianceSunaSupportID
set units_rawcode[224]=AllianceKumoSupportID
set units_rawcode[225]=AllianceHealerID
set units_rawcode[226]=0x68303248
set units_rawcode[227]=0x68303430
set units_rawcode[228]=0x68303348
set units_rawcode[229]=0x68303355
set units_rawcode[230]=0x68303356
set units_rawcode[231]=0x68303347
set units_rawcode[232]=0x68303346
set units_rawcode[233]=0x68303345
set units_rawcode[234]=0x68303344
set units_rawcode[235]=0x68303741
set units_rawcode[236]=0x68303341
set units_rawcode[237]=0x68303230
call PreloadAll(237)
endfunction
function Init takes nothing returns nothing
local unit d
local player p
local integer i=0
local string s1="«-ses on/off»: включает/выключает показ спецэффектов большинства способностей для регулирования нагрузки на игру (вводится хостом)\n«-wtf»: даёт 50 000 рьё и 10-ый уровень каждому герою (вводится хостом)\n«-c»: очищает экран от любых сообщений\n«-w on/off»: выключает/отключает погоду (вводится хостом)\n«-mo»: выключает музыку в игре (вводится хостом)\n«-airemove»: удаляет ботов из игры (вводится хостом)\n«-repick»: замена героя, попавшегося случайно\n«-revive»: воскрешает мёртвого героя (цена - уровень героя * 40)\n«-kill»: убивает героя через минуту\n"
local string s2="«-ms»: показывает текущую скорость передвижения героя\n«-nkc»: фан-команда, которая работает в одиночном режиме и даёт 10 000 Чакры Курамы для Наруто\n«-sasori on/off»: показать/скрыть табличку с «Телами» [Сасори]\n"
local string s3="\n\nВ игре Вы управляете одним героем. Ваш герой - бессмертен: если вас убьют, Вы воскреснете на месте своей стартовой локации (где Вы появились после выбора героя). Максимальный уровень героя – 10. Способности сделаны таким образом, что можно проводить очень хитрые и необычные комбинации, удивляя соперника и одерживая над ним победу. В карте имеется интересный и удобный магазин, в котором Вы сможете приобрести предметы на свой вкус для упрощения игры."
local string s4="\n\nИграть Вы можете максимум 4х4. 2 слота (жёлтый и тёмно-зелёный) предназначены для зрителей и ещё 2 игрока (оранжевый и коричневый) находятся под контролем компьютера, который управляет крипами - шиноби, что пытаются прорвать вражескую оборону. Самая длинная линия для вашей команды называется Hard Lane, средняя - Middle Lane, короткая - Safe Lane. Когда герой не привязан к какой-либо линии, это называется Off Lane. Особое внимание в игре занимают классы героев. Правильный выбор героев, полный набор классов в команде - залог победы!"
local string s5="Приветствуем Вас в |cFFFFCC00Naruto Wild Hurricane Chronicles: Road to Ninja|r\n\nМы рады, что Вы решили сыграть в наш проект, он не оставит Вас равнодушными и подарит самые позитивные эмоции!"
local string s6="|cFFFFCC00Наруто и Саске|r\nВо время применения Расенгана, Саске, стоя рядом, нужно применить на Наруто (или на область рядом с ним) Аматерасу; по окончании каста Расенгана, шиноби двигаются вперёд, нанося всем противникам на линии урон, и поджигая их Аматерасу.\n\n|cFFFFCC00Мадара и Кьюби|r\nВо время применения Завершённого Сусаноо, если рядом есть Кьюби, призванный с помощью предмета, то Мадара покрывает его защитой Сусаноо и берёт под контроль."
local string sHelp="Дорогой друг, для твоего удовольствия и комфортной игры мы приложили максимум усилий! Разрабатывать карту невероятно тяжело, и чтобы повысить качество карты, переведи на какой-либо указанный ниже счёт любые денежные средства. Того, кто переведёт крупную сумму, ожидает награда (подробности в группе VK)!\n\nС уважением, команда NWHC.\n\n1) Карта Сбербанка: 4276 2600 2479 0999\n2) Яндекс-Деньги: 410013083287934\n3) PayPal: mrv16195@mail.ru\n4) WebMoney: R265104897839\n5) QIWI: +79134102602\n6) OKPAY: OK679339007\n7) PerfectMoney: U5428031\n8) PayToo: 04555799"
call StopMusic(true)
call SetMusicVolume(0)
loop
set p=Player(i)
call SetPlayerState(p,PLAYER_STATE_GIVES_BOUNTY,1)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,0)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_LUMBER,0)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_HERO_TOKENS,1)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_FOOD_CAP,9)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_FOOD_USED,0)
call SetPlayerState(p,PLAYER_STATE_FOOD_CAP_CEILING,0)
call SetPlayerAllianceStateBJ(p,Player(PLAYER_NEUTRAL_PASSIVE),bj_ALLIANCE_ALLIED_ADVUNITS)
call SetPlayerAllianceStateBJ(Player(PLAYER_NEUTRAL_PASSIVE),p,bj_ALLIANCE_ALLIED_ADVUNITS)
call SetPlayerAllianceStateBJ(p,Player(PLAYER_NEUTRAL_AGGRESSIVE),bj_ALLIANCE_UNALLIED)
call SetPlayerAllianceStateBJ(Player(PLAYER_NEUTRAL_AGGRESSIVE),p,bj_ALLIANCE_UNALLIED)
if i<6 then
call SetUnitOwner(gg_unit_h046_0002,Player(bj_PLAYER_NEUTRAL_VICTIM),true)
call SetPlayerAllianceStateBJ(p,Player(bj_PLAYER_NEUTRAL_VICTIM),bj_ALLIANCE_ALLIED_ADVUNITS)
call SetPlayerAllianceStateBJ(Player(bj_PLAYER_NEUTRAL_VICTIM),p,bj_ALLIANCE_ALLIED_ADVUNITS)
elseif i>5 then
call SetUnitOwner(gg_unit_h046_0005,Player(bj_PLAYER_NEUTRAL_EXTRA),true)
call SetPlayerAllianceStateBJ(p,Player(bj_PLAYER_NEUTRAL_EXTRA),bj_ALLIANCE_ALLIED_ADVUNITS)
call SetPlayerAllianceStateBJ(Player(bj_PLAYER_NEUTRAL_EXTRA),p,bj_ALLIANCE_ALLIED_ADVUNITS)
endif
call SetPlayerAbilityAvailable(p,0x41304457,false)
call SetPlayerAbilityAvailable(p,0x41304942,false)
if i!=5 and i!=11 then
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set udg_Repick_Log[i]=false
if i==4 or i==10 then
set udg_VM_Log[i]=true
if GetLocalPlayer()==p then
call ResetToGameCamera(0.)
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
endif
else
set udg_VM_Log[i]=false
endif
set udg_Hero[i]=null
set udg_CamT[i]=false
set udg_CamMod[i]=true
set playerCanPick[i]=true
set reviveblocklog[i]=false
set reviveOnLog[i]=false
set shopHelp1[i]=false
set shopHelp2[i]=false
set shopHelp3[i]=false
set frAssistersAdd[i]=CreateForce()
set gamestat_Place[i]=0
set gamestat_KillsNumber[i]=0
set gamestat_StrickNumber[i]=0
set gamestat_L[i]=0
set gamestat_K[i]=0
set gamestat_D[i]=0
set gamestat_A[i]=0
set gamestat_LH[i]=0
set gamestat_LD[i]=0
set gamestat_NW_Old[i]=0
set gamestat_NW_Cur[i]=0
set gamestat_NW_New[i]=0
set ninjutsublockNumber[i]=0.
set rankFarmila[i]=0
set rankExecutioner[i]=0
set rankDamager[i]=0.
set rankHealer[i]=0.
set rankClicker[i]=0
set rankMarathoner[i]=0.
set rankSturdy[i]=0.
set rankNagibator[i]=0.
call SetPlayerAbilityAvailable(p,0x41304337,false)
call SetPlayerAbilityAvailable(p,0x4130495A,false)
call SetPlayerAbilityAvailable(p,0x41304D53,false)
call SetPlayerAbilityAvailable(p,0x41305634,false)
call SetPlayerAbilityAvailable(p,0x4130354B,false)
endif
endif
set i=i+1
exitwhen i>11
endloop
set NeituralUnitDestructable=CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),0x6E303042,GetRectCenterX(gg_rct_NeituralUnitRect),GetRectCenterY(gg_rct_NeituralUnitRect),0.)
call FogEnable(false)
call FogEnable(true)
set udg_GameEnd=false
set gameText[0]=CreateTextTag()
call SetTextTagText(gameText[0],"Магазин",.0276)
call SetTextTagPos(gameText[0],GetRectCenterX(gg_rct_ShopOpenAlliance),GetRectCenterY(gg_rct_ShopOpenAlliance),heightGameText*14.)
call SetTextTagColor(gameText[0],255,255,255,0)
set gameText[1]=CreateTextTag()
call SetTextTagText(gameText[1],"          Магазин",.0276)
call SetTextTagPos(gameText[1],GetRectCenterX(gg_rct_ShopOpenAkatsuki),GetRectCenterY(gg_rct_ShopOpenAkatsuki),heightGameText*14.)
call SetTextTagColor(gameText[1],255,255,255,0)
set gameText[2]=CreateTextTag()
call SetTextTagText(gameText[2],"     Рикудо Сеннин",.0276)
call SetTextTagPos(gameText[2],GetRectCenterX(gg_rct_LeaderHelpAlliance),GetRectCenterY(gg_rct_LeaderHelpAlliance),heightGameText*14.)
call SetTextTagColor(gameText[2],255,255,255,0)
set gameText[3]=CreateTextTag()
call SetTextTagText(gameText[3],"     Рикудо Сеннин",.0276)
call SetTextTagPos(gameText[3],GetRectCenterX(gg_rct_LeaderHelpAkatsuki),GetRectCenterY(gg_rct_LeaderHelpAkatsuki),heightGameText*14.)
call SetTextTagColor(gameText[3],255,255,255,0)
call GroupEnumUnitsInRect(bj_lastCreatedGroup,bj_mapInitialPlayableArea,null)
loop
set d=FirstOfGroup(bj_lastCreatedGroup)
exitwhen d==null
if IsUnitGakureBuilding(d)then
set i=GetUnitTypeId(d)
if d==gg_unit_n01Q_0065 or i==0x68303036 or i==0x68303043 or i==0x68303042 or i==0x68303041 then
call GroupAddUnit(gakureSunaBuildings,d)
elseif d==gg_unit_n01Q_0064 or i==0x68303045 or i==0x68303052 or i==0x6830304D or i==0x6830304A then
call GroupAddUnit(gakureIwaBuildings,d)
elseif d==gg_unit_n01Q_0067 or i==0x68303155 or i==0x68303231 or i==0x68303159 or i==0x68303156 then
call GroupAddUnit(gakureKumoBuildings,d)
elseif d==gg_unit_n01Q_0066 or i==0x68303133 or i==0x6830314C or i==0x6830314B or i==0x68303149 then
call GroupAddUnit(gakureKiriBuildings,d)
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,d)
endloop
set gakureCaptureLog[1]=false
set gakureCaptureLog[2]=false
set gakureCaptureLog[3]=false
set gakureCaptureLog[4]=false
set gakureCaptureBanLog[1]=false
set gakureCaptureBanLog[2]=false
set gakureCaptureBanLog[3]=false
set gakureCaptureBanLog[4]=false
call CreateQuestBJ(bj_QUESTTYPE_REQ_DISCOVERED,"|cFFFFCC00ГЕЙМПЛЕЙ|r",s5+s3+s4,"ReplaceableTextures\\CommandButtons\\BTNStaffOfSilence.blp")
call CreateQuestBJ(bj_QUESTTYPE_REQ_DISCOVERED,"|cFFFFCC00МОДЫ|r",s1+s2,"ReplaceableTextures\\CommandButtons\\BTNSelectHeroOn.blp")
call CreateQuestBJ(bj_QUESTTYPE_REQ_DISCOVERED,"|cFFFFCC00НАША КОМАНДА|r","Геймдизайн: |cFF0090D4Sannin|r, |cFF0090D4KsanderVine|r\nПрограммирование: |cFF0090D4Sannin|r\nГрафика: |cFF0090D4Sannin|r, |cFF0090D4KsanderVine|r\nМузыка: |cFF0090D4Sannin|r, |cFF0090D4KsanderVine|r\nТестирование: |cFF0090D4Sannin|r, |cFF0090D4KsanderVine|r, |cFF0090D4Berd|r, |cFF0090D4megabait|r\nМаркетинг: |cFF0090D4Sannin|r\nКомьюнити-менеджмент: |cFF0090D4KsanderVine|r\n\nE-mail: |cFF0090D4NWHC-Sannin@yandex.ru|r\nОфициальная группа VK и Facebook: |cFF0090D4NWHC|r\nОфициальный канал на YouTube: |cFF0090D4NWHC Sannin|r","ReplaceableTextures\\CommandButtons\\BTNSentryWard.blp")
call CreateQuestBJ(bj_QUESTTYPE_OPT_DISCOVERED,"|cFFFFCC00ПОМОЩЬ|r",sHelp,"ReplaceableTextures\\CommandButtons\\BTNStatUp.blp")
call CreateQuestBJ(bj_QUESTTYPE_OPT_DISCOVERED,"|cFFFFCC00НИЗКИЙ ПОКЛОН|r","|cFFFFCC00ОСОБАЯ БЛАГОДАРНОСТЬ|r\n|cFF20C000Sabako_no_Gaara|r - за вдохновение и помощь с идеями!\n|cFF959697U_Madara((|r - за огромное количество уникальных идей!\n|cFFE5BC97WolSai|r - за огромное количество уникальных моделей!\n|cFF7EBFF1Vovamaru|r - за реплики героев!\n|cFFABA8FFORELGRIZLI|r - за особый вклад в развитие проекта!\n|cFF0090D4Muvvekk|r - за администрирование сайта AniVita!\n|cFFB56B72Rodster|r - за администрирование сайта naruto-chronics!\n\n|cFFFFCC00ТАКЖЕ БОЛЬШОЕ СПАСИБО|r\n|cFFC6D2FFAl12, LazeR, Ty3uK, Hezashi, velmir, GoJustGo, Director, max_xxx, SultanGOD, Nightcrawler, Simayi, Unikal, Lammirage, Sinim, ralfpro5, RexOK, LightenWhite! Отдельно благодарность D.ClirK за дизайн логотипа!|r","ReplaceableTextures\\CommandButtons\\BTNTemp.blp")
call CreateQuestBJ(bj_QUESTTYPE_OPT_DISCOVERED,"|cFFFFCC00КОМБО|r",s6,"OTHER Glyph of Courage\\Icon.blp")
call SetFloatGameState(GAME_STATE_TIME_OF_DAY,6.)
call SuspendTimeOfDay(true)
call SetSkyModel(null)
call SetRawcodes()
call CameraSetupApplyForceDuration(gg_cam_CamMod,true,0.)
set d=null
set p=null
endfunction
function InitTrig_Init takes nothing returns nothing
set gg_trg_Init=CreateTrigger()
call TriggerAddAction(gg_trg_Init,function Init)
endfunction
function InitGameSettings takes nothing returns nothing
local real x=2580.
local real y=4140.
local real xPosGO=2644.
local real yPosGO=3617.
local real xOffset=0.
local real yOffset=0.
local integer placex=0
local integer placey=0
local integer i=1
local integer which
local string s="|cFFFFCC00В данном окне вы сможете \nувидеть информацию о различных \nнастройках игры. Для получения\nинформации наведите мышкой\nна любую настройку.|r"
set gs_mb=CreateMultiboard()
call MultiboardSetTitleText(gs_mb,"|cFFFF0303ВЫБЕРИТЕ НАСТРОЙКИ|r")
call MultiboardSetColumnCount(gs_mb,1)
call MultiboardSetRowCount(gs_mb,6)
call mbiVal(gs_mb,0,0,null,null)
call mbiStyle(gs_mb,0,0,false,false)
call mbiWidth(gs_mb,0,0,.18)
call mbiVal(gs_mb,1,0,null,null)
call mbiStyle(gs_mb,1,0,false,false)
call mbiWidth(gs_mb,1,0,.18)
call mbiVal(gs_mb,2,0,null,s)
call mbiStyle(gs_mb,2,0,true,false)
call mbiWidth(gs_mb,2,0,.18)
call mbiVal(gs_mb,3,0,null,null)
call mbiStyle(gs_mb,3,0,false,false)
call mbiWidth(gs_mb,3,0,.18)
call mbiVal(gs_mb,4,0,null,null)
call mbiStyle(gs_mb,4,0,false,false)
call mbiWidth(gs_mb,4,0,.18)
call mbiVal(gs_mb,5,0,null,null)
call mbiStyle(gs_mb,5,0,false,false)
call mbiWidth(gs_mb,5,0,.18)
if GetLocalPlayer()==udg_Host then
call MultiboardDisplay(gs_mb,true)
endif
call MultiboardMinimize(gs_mb,false)
loop
exitwhen i>8
if i==1 then
set which=0x4230355A
elseif i==2 then
set which=0x42303630
set placex=placex+1
elseif i==3 then
set which=0x42303246
set placex=placex+1
elseif i==4 then
set which=0x42303559
set placex=0
set placey=placey+2
set yOffset=8.
elseif i==5 then
set which=0x42303257
set placex=placex+1
set yOffset=8.
elseif i==6 then
set which=0x42303631
set placex=placex+1
set yOffset=8.
elseif i==7 then
set which=0x42303359
set placex=0
set placey=placey+2
set xOffset=32.
set yOffset=12.
elseif i==8 then
set which=0x42303251
set placex=placex+1
set xOffset=32.
set yOffset=12.
endif
set gs_des[i]=CreateDestructable(which,x+64.*placex+xOffset,y-64.*placey+yOffset,0,1.,0)
call CreateTrackForHost("4x4Trackable.MDX",x+64.*placex+xOffset,y-64.*placey+yOffset,i,gg_trg_Settings_Track,gg_trg_Settings_Click)
set xOffset=0.
set yOffset=0.
set i=i+1
endloop
set gs_des[9]=CreateDestructable(0x42303633,xPosGO,yPosGO,0,1.,0)
call CreateTrackForHost("4x4Trackable.MDX",xPosGO,yPosGO,9,gg_trg_Settings_Track,gg_trg_Settings_Click)
call EnableTrigger(gg_trg_Settings_Track)
call EnableTrigger(gg_trg_Settings_Click)
call InitGameSettingsCreateNeedEffects(1,0,0,4,0,0,7,0)
endfunction
function PrSound takes string name returns nothing
local sound snd=CreateSound(name,false,false,true,12700,12700,"")
call SetSoundVolume(snd,0)
call StartSound(snd)
call KillSoundWhenDone(snd)
set snd=null
endfunction
function PreloadS takes nothing returns nothing
local string array str
local integer i=1
set str[1]="First Blood.mp3"
set str[2]="Kills 2 Double Kill.mp3"
set str[3]="Kills 3 Tripple Kill.mp3"
set str[4]="Kills 4 Ultra Kill.mp3"
set str[5]="Kills 5 Rampage.mp3"
set str[6]="First Blood.mp3"
set str[7]="Streak 3 Killing Spree.mp3"
set str[8]="Streak 4 Dominating.mp3"
set str[9]="Streak 5 Mega Kill.mp3"
set str[10]="Streak 6 Unstoppable.mp3"
set str[11]="Streak 7 Wicked Sick.mp3"
set str[12]="Streak 8 Monster Kill.mp3"
set str[13]="Streak 9 GodLike.mp3"
set str[14]="Streak 10 Holyshit.mp3"
set str[15]="Denied.wav"
set str[16]="Ping.mp3"
set str[17]="Blink.mp3"
set str[18]="Bunshin Poff.wav"
set str[19]="Akatsuki Jutsu.mp3"
set str[20]="Sharingan Copy.mp3"
set str[21]="Itachi Tsukuyomi.mp3"
set str[22]="Itachi Katon Gokakyu no Jutsu.mp3"
set str[23]="Itachi_Genjutsu.mp3"
set str[24]="Itachi_Susanoo 1.mp3"
set str[25]="Itachi_Susanoo 4.mp3"
set str[26]="Kakashi Shinju Zanshuu no Jutsu.mp3"
set str[27]="kakashi Kuchiyose.mp3"
set str[28]="Kakashi Dog-Raikiri.mp3"
set str[29]="Obito Kamui.mp3"
set str[30]="Obito Katon Bakufu Ranbu.mp3"
set str[31]="Obito Uchiha Kaenjin.mp3"
set str[32]="Asuma Amida.mp3"
set str[33]="Asuma Fuuton.mp3"
set str[34]="Asuma Katon Haisekishou.mp3"
set str[35]="Danzo Fuinjutsu.mp3"
set str[36]="Danzo Izanagi Off.mp3"
set str[37]="Danzo Kuchiyose.mp3"
set str[38]="Darui Raiton Kangekiha.mp3"
set str[39]="Darui Ranton Reizaa Saakasu.mp3"
set str[40]="Darui Suiton Suijinheki.mp3"
set str[41]="Darui Raiton Kuro Pansa.mp3"
set str[42]="Deidara C0.mp3"
set str[43]="Katsu.mp3"
set str[44]="Ei Erubo.mp3"
set str[45]="Ei Girochin Doroppu.mp3"
set str[46]="Ei Raiga Bomu.mp3"
set str[47]="Ei Raiton no Yoroi.mp3"
set str[48]="Ei.mp3"
set str[49]="Gaara Sabaku Sotaiso.mp3"
set str[50]="Gai 8 Gate.mp3"
set str[51]="Gai Hachimon Tonkou.mp3"
set str[52]="Gai Kaaaaaaii.mp3"
set str[53]="Oonoki Kajugan no Jutsu.mp3"
set str[54]="Oonoki Cube.mp3"
set str[55]="Gocken no Jutsu.mp3"
set str[56]="Tsuutenkaky.mp3"
set str[57]="Sasuke Chidori Attack.mp3"
set str[58]="Sasuke Chidori Nagashi.mp3"
set str[59]="Sasuke Chidori.mp3"
set str[60]="Sasuke Katon Goriyuka.mp3"
set str[61]="Sasuke Kirin 1.mp3"
set str[62]="Sasuke Kirin 2.mp3"
set str[63]="Yamato Mokuton Daijurin no Jutsu.mp3"
set str[64]="Yamato Mokuton Mokusatsu Shibari no Jutsu.mp3"
set str[65]="Kisame Samehada.mp3"
set str[66]="Neji Hakke Rokujuyon Sho.mp3"
set str[67]="Kaiten.mp3"
set str[68]="Neji Byakugan.mp3"
set str[69]="Hidan Range Attack.mp3"
set str[70]="Hidan Ritual 1.mp3"
set str[71]="Hidan Ritual 2.mp3"
set str[72]="Hidan Ritual Arm.mp3"
set str[73]="Hidan Ritual Heart.mp3"
set str[74]="Hidan Ritual Leg.mp3"
set str[75]="Kakuzu Monster Fuuton.mp3"
set str[76]="Kakuzu Monster Katon.mp3"
set str[77]="Kakuzu Monster Raiton.mp3"
set str[78]="Killer Bee Mai 2.mp3"
set str[79]="Killer Bee Mai.mp3"
set str[80]="Killer Bee Rariratto.mp3"
set str[81]="Killer Bee Uuiiii.mp3"
set str[82]="Kimimaro Sawarabi no Mai.mp3"
set str[83]="Kimimaro Tsubaki no Mai.mp3"
set str[84]="Kimimaro Yanagi no Mai.mp3"
set str[85]="Naruto Shuriken Act .mp3"
set str[86]="Naruto Yarost.mp3"
set str[87]="Naruto_Kage_Bunshin.mp3"
set str[88]="Uzumaki Naruto Rendan.mp3"
set str[89]="NM Mizudeppo Shot.mp3"
set str[90]="Kisame Bakusui Shouha.mp3"
set str[91]="Kisame Dai.mp3"
set str[92]="Kisame Suiro no Jutsu.mp3"
set str[93]="Kisame Mizu Bunshin"
set str[94]="Kisame Suiton.mp3"
set str[95]="Orochimaru Sennei TaJashu.mp3"
set str[96]="Orochimaru.mp3"
set str[97]="Orochimaru_Bueeeeee xD.mp3"
set str[98]="Sai Choujuu Giga.mp3"
set str[99]="Sai Four Falling Wolves.mp3"
set str[100]="Sai Ninpou.mp3"
set str[101]="Sai Koshi Tandan.mp3"
set str[102]="Minato Rasengan.mp3"
set str[103]="Tora Sound 6.mp3"
set str[104]="Minato Hiraishin.mp3"
set str[105]="Gamabunta Teppoudama Strike.mp3"
set str[106]="Zabuza Mizu Bunshin no Jutsu.mp3"
set str[107]="Zabuza Kirigakure no Jutsu.mp3"
set str[108]="Zabuza Kubikiribocho.mp3"
set str[109]="NM Jokey Boy EX.mp3"
set str[110]="NM Ohamaguri Illusion Cast.mp3"
set str[111]="NM Mizufusen Cast.mp3"
set str[112]="NM Ohamaguri.mp3"
set str[113]="Jiraya Cho Odama Rasengan.mp3"
set str[114]="Jiraya SM Goemon.mp3"
set str[115]="Jiraya SM Kebari Senbon.mp3"
set str[116]="Jiraiya Senpo Ryosei no Jutsu.mp3"
set str[117]="Mei Yokai no Jutsu.mp3"
set str[118]="Mei Futton Komo no Jutsu.mp3"
set str[119]="Hashirama Chojo Kebutsu.mp3"
set str[120]="Hashirama Kokuangyo no Jutsu.mp3"
set str[121]="Tsunade Fuin.mp3"
set str[122]="Tsunade Kill 1.mp3"
set str[123]="Tsunade Kill.mp3"
set str[124]="Tsunade Kuchiyose.mp3"
set str[125]="Shikamaru Kageyose.mp3"
set str[126]="Shikamaru Kage Mane no Jutsu.mp3"
set str[127]="Kabuto Sennin Modo Hakugeki no Jutsu.mp3"
set str[128]="Kabuto Sennin Modo Kumo Sokai.mp3"
set str[129]="Kabuto Sennin Modo Mugen Onsa.mp3"
set str[130]="Kabuto Sennin Modo Muki Tensei.mp3"
set str[131]="Sasori Kazekage Arms.mp3"
set str[132]="Sasori Kazekage.mp3"
set str[133]="Sasori Make a Puppet.mp3"
set str[134]="Sasori True Form Puppets.mp3"
set str[135]="Sasori True Form Fire.mp3"
set str[136]="Sasori True Form Tail.mp3"
set str[137]="Sasori True Form.mp3"
set str[138]="Sasori Hiruko Bomb.mp3"
set str[139]="Madara Mugen Tsukuyomi.mp3"
set str[140]="Sasori Kazekage Satetsu Kaiho.mp3"
set str[141]="Madara Katon Goka Mekkyaku.mp3"
set str[142]="Madara Susanoo.mp3"
set str[143]="Juugo Angry.mp3"
set str[144]="Juugo Laughter.mp3"
set str[145]="Juugo Laughter 2.mp3"
set str[146]="Juugo Strike Act.mp3"
set str[147]="Juugo Strike Charge.mp3"
set str[148]="Sasuke Amaterasu.mp3"
set str[149]="Sasuke Genjutsu.mp3"
set str[150]="Sasuke Susanoo Skeleton Cast.mp3"
set str[151]="Madara Katon Goka Mekkyaku Cast 2.mp3"
set str[152]="Madara Katon Goka Messhitsu.mp3"
set str[153]="Madara Katon Haijingakure no Jutsu.mp3"
set str[154]="Madara Katon Ryuen Hoka no Jutsu.mp3"
set str[155]="Madara Mokuton Kajukai Korin.mp3"
set str[156]="NWHC Start.mp3"
set str[157]="Neji Juken Strike 1.mp3"
set str[158]="Neji Juken Strike 5.mp3"
set str[159]="Chakra Kai.mp3"
set str[160]="Itachi Karasu Genjutsu.mp3"
set str[161]="Hashirama Mokuton Hijutsu Jukai Kotan.mp3"
set str[162]="Hashirama Mokuton Hotei no Jutsu.mp3"
set str[163]="Madara Fujutsu Kyuin.mp3"
set str[164]="Madara Mokuton Jukai Kotan.mp3"
set str[165]="Naruto Harem no Jutsu Cast.mp3"
set str[166]="Naruto Harem no Jutsu Cast Spell.mp3"
set str[167]="Naruto Harem no Jutsu Over.mp3"
set str[168]="Naruto Rassengan Cast.mp3"
set str[169]="Weapon Destroy.mp3"
set str[170]="Weapon Destroy 2.mp3"
set str[171]="Double Cut 2.mp3"
set str[172]="Shikamaru Kage Mane Act.mp3"
set str[173]="Madara Tengai Shinsei 1.mp3"
set str[174]="Madara Tengai Shinsei 2.mp3"
set str[175]="NM Mizufusen Boom.mp3"
set str[176]="NM Mizudeppo Cast.mp3"
set str[177]="Weather Crust.mp3"
set str[178]="Weather Earthquake.mp3"
set str[179]="Weather Meteor.mp3"
set str[180]="Weather Thunder 2.mp3"
set str[181]="Weather Thunder.mp3"
set str[182]="Weather Wind.mp3"
set str[183]="Combo Naruto Sasuke - 1,1.mp3"
set str[184]="Combo Naruto Sasuke - 1,2.mp3"
set str[185]="Naruto_Rassengan.mp3"
set str[186]="Gai Kai.mp3"
set str[187]="Gai Konoha Goriki Senpu.mp3"
set str[188]="Gai Dynamic Action.mp3"
set str[189]="Hidan Sanjin no Ogama Cast.mp3"
set str[190]="Hidan Sanjin no Ogama Damage.mp3"
set str[191]="Hidan Sanjin no Ogama Move.mp3"
set str[192]="Hidan Sanjin no Ogama Return 1.mp3"
set str[193]="Hidan Sanjin no Ogama Return 2.mp3"
set str[194]="Hidan Kyokenbyo.mp3"
set str[195]="Hidan Jashinkyo Revive.mp3"
set str[196]="Onoki Iwa Bunshin no Jutsu.mp3"
set str[197]="Nagato Gedo no Jutsu Create Pain.mp3"
set str[198]="Han Fungokyaku.mp3"
set str[199]="Han Funsuiken Cast.mp3"
set str[200]="Han Tsunoori Cast.mp3"
set str[201]="Han Tsunoori Damage.mp3"
set str[202]="Gai Yagai Cast 1.mp3"
set str[203]="Gai Yagai Cast 2.mp3"
set str[204]="Gai Yagai Cast 3.mp3"
set str[205]="Gai Yagai Damage.mp3"
set str[206]="Gai Dynamic Action Damage.mp3"
set str[207]="Gai Hachimon Tonkou Blink 1.mp3"
set str[208]="Gai Hachimon Tonkou Blink 2.mp3"
set str[209]="Gai Hachimon Tonkou Blink 3.mp3"
set str[210]="Gai Hachimon Tonkou Cry 1.mp3"
set str[211]="Gai Hachimon Tonkou Cry 2.mp3"
set str[212]="Gai Sekizo Damage.mp3"
set str[213]="Gai Sekizo Strike 1.mp3"
set str[214]="Gai Sekizo Strike 2.mp3"
set str[215]="Gai Sekizo Strike 3.mp3"
set str[216]="Gai Sekizo Strike 4.mp3"
set str[217]="Gai Sekizo Strike 5.mp3"
set str[218]="Nagato Gedo Rinne Tensei no Jutsu Restore.mp3"
set str[219]="Haku Hijutsu Makyo Hyosho Cast.mp3"
set str[220]="Haku Hijutsu Sensatsu Suisho Cast.mp3"
set str[221]="Haku Hijutsu Sensatsu Suisho Damage.mp3"
set str[222]="Zabuza Hisenken.mp3"
set str[223]="Zabuza Suiton Daibakufu no Jutsu.mp3"
set str[224]="Zabuza Kijin.mp3"
set str[225]="Minato Kuchiyose.mp3"
set str[226]="Minato Fuinjutsu Shiki Fujin Cast.mp3"
set str[227]="Minato Kuchiyose Stun.mp3"
set str[228]="Kuchiyose no Jutsu Cast.mp3"
set str[229]="Gamabunta Teppoudama Cast.mp3"
set str[230]="Gamabunta Teppoudama Cast Var 1.mp3"
set str[231]="Gamabunta Teppoudama Cast Var 2.mp3"
set str[232]="Ei Erubo Strike.mp3"
set str[233]="Mu Mujin Meisai.mp3"
set str[234]="Naruto Kyubi no Chakra Cast.mp3"
set str[235]="Madara Susanoo Restore.mp3"
set str[236]="Onoki Iwa no Goremu.mp3"
set str[237]="Danzo Ura Shinsho Fuinjutsu.mp3"
set str[238]="Kuchiyose Poff Destroy.mp3"
set str[239]="Itachi Katon Hosenka Tsumabeni.mp3"
set str[240]="Itachi Susanoo Form 2.mp3"
set str[241]="Itachi Susanoo Form 3.mp3"
set str[242]="Itachi Totsuka no Tsurugi.mp3"
set str[243]="Itachi Yasaka no Magatama.mp3"
set str[244]="Itachi Amaterasu Cast.mp3"
set str[245]="Itachi Amaterasu Movement.mp3"
set str[246]="Itachi Amaterasu End.mp3"
set str[247]="Itachi Mangekyo Sharingan.mp3"
set str[248]="Nagato Chibaku Tensei 1.mp3"
set str[249]="Nagato Chibaku Tensei 2.mp3"
set str[250]="Nagato Fujutsu Kyuin.mp3"
set str[251]="Nagato Gedo no Jutsu Cast.mp3"
set str[252]="Nagato Kaiwan no Hiya.mp3"
set str[253]="Nagato Kuchiyose Bird.mp3"
set str[254]="Nagato Kuchiyose Pain.mp3"
set str[255]="Nagato Kyukon.mp3"
set str[256]="Nagato Meifu no O Kaifuku.mp3"
set str[257]="Nagato Meifu no O.mp3"
set str[258]="Nagato Shinra Tensei 1.mp3"
set str[259]="Nagato Shinra Tensei 2.mp3"
set str[260]="Nagato Shura no Ko.mp3"
set str[261]="Naruto Kage Bunshin 2.wav"
set str[262]="Naruto Joy.mp3"
set str[263]="Naruto Mini Rasen Shuriken Cast.mp3"
set str[264]="Naruto Mini Rasen Shuriken Damage.mp3"
set str[265]="Naruto Rasen Kyugan.mp3"
set str[266]="Naruto Rasen Rangan.mp3"
set str[267]="Naruto Wakusei Rasengan Cast.mp3"
set str[268]="Nagato Bansho Tennin.mp3"
set str[269]="Naruto Kyubi no Chakra Act.mp3"
set str[270]="Nagato Gedo Rinne Tensei no Jutsu Cast.mp3"
set str[271]="Naruto Biju Modo Cast.mp3"
set str[272]="Naruto Bijudama Cast Over.mp3"
set str[273]="Naruto Bijudama Cast Start.mp3"
set str[274]="Naruto Senjutsu.mp3"
set str[275]="Bijudama Explosion.mp3"
set str[276]="ITEM Madara Gunbai.mp3"
set str[277]="Danzo Fuinjutsu Start.mp3"
set str[278]="Danzo Futon Shinku Dai Gyoku.mp3"
set str[279]="Danzo Vacuum Blade.mp3"
set str[280]="Danzo Vacuum Shuriken.mp3"
set str[281]="Danzo Futon Shinkugyoku.mp3"
set str[282]="Danzo Futon Shinkuha.mp3"
set str[283]="Danzo Kuchiyose Baku Roar.mp3"
set str[284]="Danzo Mokton.mp3"
set str[285]="Jiraiya Gamagakure.mp3"
set str[286]="Jiraiya Gamaguchi Shibari.mp3"
set str[287]="Jiraiya Gamayudan.mp3"
set str[288]="Jiraiya Katon Endan.mp3"
set str[289]="Jiraiya Kuchiyose no Jutsu Gamaken.mp3"
set str[290]="Jiraiya Ranjishigami.mp3"
set str[291]="Jiraiya Rasengan.mp3"
set str[292]="Jiraiya SM Gamarinsho.mp3"
set str[293]="Jiraiya Doton Yomi Numa.mp3"
set str[294]="Jiraiya Hari Jizo.mp3"
set str[295]="Jiraiya Doton Yomi Numa Fired.mp3"
set str[296]="Jiraiya Katon Gamayu Endan.mp3"
set str[297]="Jiraiya Combo Cast.mp3"
set str[298]="Jiraiya Combo.mp3"
set str[299]="Obito Bukijutsu.mp3"
set str[300]="Obito Jikukan Ido.mp3"
set str[301]="Obito Kamui TP.mp3"
set str[302]="Obito Katon Gokakyu no Jutsu.mp3"
set str[303]="Obito Mazo no Kusari.mp3"
set str[304]="Sasuke Amaterasu Damage.mp3"
set str[305]="Sasuke Amaterasu Entenka.mp3"
set str[306]="Sasuke Chibaku Tensei.mp3"
set str[307]="Sasuke Chidori Eiso.mp3"
set str[308]="Sasuke Eien no Mangekyo Sharingan End.mp3"
set str[309]="Sasuke Enton Susanoo Kagutsuchi.mp3"
set str[310]="Sasuke Enton Yasaka no Magatama.mp3"
set str[311]="Sasuke Iatsu Sharingan.mp3"
set str[312]="Sasuke Katon Gokakyu no Jutsu.mp3"
set str[313]="Sasuke Katon Hosenka no Jutsu.mp3"
set str[314]="Sasuke Katon Ryuka no Jutsu.mp3"
set str[315]="Sasuke Kuchiyose no Jutsu Aoda.mp3"
set str[316]="Sasuke Kuchiyose no Jutsu Cast.mp3"
set str[317]="Sasuke Kusanagi no Tsurugi Chidorigatana.mp3"
set str[318]="Sasuke Rinnegan Genjutsu.mp3"
set str[319]="Sasuke Susanoo Armor Cast.mp3"
set str[320]="Sasuke Susanoo Armor Kagutsuchi no Tsurugi.mp3"
set str[321]="Sasuke Susanoo Full Bow Damage.mp3"
set str[322]="Sasuke Susanoo Full Bow.mp3"
set str[323]="Sasuke Susanoo Full Cast.mp3"
set str[324]="Sasuke Susanoo Kanseitai Cast.mp3"
set str[325]="Sasuke Susanoo no Ribu Cast.mp3"
set str[326]="Sasuke Mangekyo Sharingan.mp3"
set str[327]="Sasuke Susanoo Skeleton Kai.mp3"
set str[328]="Sasuke Susanoo Skeleton Roar.mp3"
set str[329]="Sasuke Susanoo Chidori.mp3"
set str[330]="Sasuke Enton Honoikazuchi.mp3"
set str[331]="Sasuke Indra no Ya.mp3"
set str[332]="Sasuke Rikudo Chidori.mp3"
set str[333]="Hashirama Mokuton Mokujin no Jutsu.mp3"
set str[334]="Hashirama Mokuton Mokuryu no Jutsu.mp3"
set str[335]="Hashirama Saisei Noryoku.mp3"
set str[336]="Hashirama Sennin Modo.mp3"
set str[337]="Hashirama Senpo Mokuton Shin Susenju Cast.mp3"
set str[338]="Hashirama Senpo Mokuton Shin Susenju Over.mp3"
set str[339]="Hashirama Senpo Myojinmon.mp3"
set str[340]="Sasuke Rinnegan.mp3"
set str[341]="Sasuke Amenotejikara.mp3"
set str[342]="Sasuke Enton Kagutsuchi.mp3"
set str[343]="Sasuke Biju Susanoo Cast.mp3"
set str[344]="Sasuke Chibaku Tensei Burn.mp3"
set str[345]="Obito Bijudama Cast.mp3"
set str[346]="Obito Bijudama Damage.mp3"
set str[347]="Obito Gudodama Bomb.mp3"
set str[348]="Obito Gudodama Hands.mp3"
set str[349]="Obito Gudodama Lance.mp3"
set str[350]="Obito Gudodama Sphere.mp3"
set str[351]="Obito Gudodama Swords Cast.mp3"
set str[352]="Obito Gudodama Swords Damage.mp3"
set str[353]="Obito Gudodama.mp3"
set str[354]="Obito Museki Yojin.mp3"
set str[355]="Obito Rikudo no Chikara.mp3"
set str[356]="Obito Nunoboko no Ken.mp3"
set str[357]="Obito Rikudo Senjutsu.mp3"
set str[358]="Madara Chibaku Tensei Cast.mp3"
set str[359]="Madara Chibaku Tensei Damage.mp3"
set str[360]="Madara Gudodama Defense.mp3"
set str[361]="Madara Gudodama Regen 1.mp3"
set str[362]="Madara Gudodama Regen 2.mp3"
set str[363]="Madara Gudodama Regen 3.mp3"
set str[364]="Madara Rikudo no Chikara.mp3"
set str[365]="Madara Senpo Ranton Koga.mp3"
set str[366]="Madara Rinbo Hengoku Cast.mp3"
set str[367]="Sasuke Rikudo no Chikara.mp3"
set str[368]="Madara Rinbo Hengoku Over.mp3"
set str[369]="Madara Senpo Inton Raiha Cast.mp3"
set str[370]="Madara Senpo Inton Raiha Damage.mp3"
set str[371]="Naruto Gudodama Pintle Cast.mp3"
set str[372]="Naruto Gudodama Pintle Damage.mp3"
set str[373]="Naruto Gudodama Pintle Self.mp3"
set str[374]="Naruto Rikudo Cho Odama Rasen Shuriken.mp3"
set str[375]="Naruto Rikudo no Chikara.mp3"
set str[376]="Naruto Rikudo Sennin Modo Cast.mp3"
set str[377]="Naruto Senpo Cho Biju Rasen Shuriken.mp3"
set str[378]="Shinobi Tenpechi.mp3"
loop
call PrSound(str[i])
set i=i+1
exitwhen i>378
endloop
endfunction
function Start_Actions_Timer takes nothing returns nothing
local timer t=CreateTimer()
local integer i=0
local integer count=0
local integer whatart
local player p
local unit d
call StopMusic(false)
call SetMusicVolume(127)
call PlayMusic("BORUTO OST (Yasuharu Takanashi) - Good Condition.mp3")
call DestroyTimer(GetExpiredTimer())
call DisableTrigger(gg_trg_Viewer_Mod)
loop
exitwhen i>11
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and not udg_VM_Log[i]then
if i!=5 and i!=11 then
set gs_fm[i]=CreateFogModifierRect(p,FOG_OF_WAR_VISIBLE,gg_rct_ModePick,true,false)
call FogModifierStart(gs_fm[i])
endif
set udg_Player_StartX[i]=GetStartLocationX(GetPlayerStartLocation(p))
set udg_Player_StartY[i]=GetStartLocationY(GetPlayerStartLocation(p))
endif
set i=i+1
endloop
set udg_Player_StartX[GetPlayerId(Player(bj_PLAYER_NEUTRAL_VICTIM))]=-7500.
set udg_Player_StartY[GetPlayerId(Player(bj_PLAYER_NEUTRAL_VICTIM))]=-6700.
set udg_Player_StartX[GetPlayerId(Player(bj_PLAYER_NEUTRAL_EXTRA))]=1650.
set udg_Player_StartY[GetPlayerId(Player(bj_PLAYER_NEUTRAL_EXTRA))]=650.
set i=0
set count=0
set udg_Host=null
loop
exitwhen i>10 or count>1
set p=Player(i)
if GetPlayerController(p)==MAP_CONTROL_USER and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
if udg_Host==null then
set udg_Host=p
else
set udg_Host=Player(0)
endif
set count=count+1
endif
set i=i+1
endloop
call TriggerRegisterPlayerChatEvent(gg_trg_D_Command,udg_Host,"-d ",false)
call TriggerRegisterPlayerChatEvent(gg_trg_SES_Command,udg_Host,"-ses ",false)
call TriggerRegisterPlayerChatEvent(gg_trg_W_Command,udg_Host,"-w ",false)
call TriggerRegisterPlayerChatEvent(gg_trg_TS_Command,udg_Host,"-ts ",false)
call TriggerRegisterPlayerChatEvent(gg_trg_WTF_Mod,udg_Host,"-wtf",true)
call TriggerRegisterPlayerChatEvent(gg_trg_MO_Command,udg_Host,"-mo",true)
call TriggerRegisterPlayerChatEvent(gg_trg_AI_Remove_Command,udg_Host,"-airemove",true)
call ClearTextMessages()
call DisplayTimedTextToPlayer(GetLocalPlayer(),.6,-.6,6.,"Доброго времени суток! Дождитесь пока хост ("+GetPlayerNameColored(udg_Host)+") выберет настройки.\nУдачи и весёлой игры!")
call InitGameSettings()
set d=null
set p=null
set t=null
endfunction
function cj_anonym__150 takes nothing returns nothing
call CameraSetupApplyForceDuration(gg_cam_CamMod,true,0.)
if not gs_log then
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__149 takes nothing returns nothing
call DisplayTimedTextToPlayer(GetLocalPlayer(),.6,-.6,6.,"Если вы хотите быть зрителем в игре, то в течение 5 секунд напишите |cFF0090D4-vm|r")
call TimerStart(CreateTimer(),5.,false,function Start_Actions_Timer)
call TimerStart(CreateTimer(),.01,true,function cj_anonym__150)
call DestroyTimer(GetExpiredTimer())
endfunction
function Start_Actions takes nothing returns nothing
call EnableDawnDusk(true)
call SetGameSpeed(MAP_SPEED_NORMAL)
call ClearTextMessages()
call PreloadS()
call TimerStart(CreateTimer(),.01,false,function cj_anonym__149)
endfunction
function InitTrig_StartGame takes nothing returns nothing
set gg_trg_StartGame=CreateTrigger()
call TriggerRegisterTimerEvent(gg_trg_StartGame,0.,false)
call TriggerAddAction(gg_trg_StartGame,function Start_Actions)
endfunction
function Settings_Track_Actions takes nothing returns nothing
local trackable tr=GetTriggeringTrackable()
local integer hp=GetTrackableRawcode(tr)
local string s
if gs_log then
if hp==1 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303ВЫБОР ГЕРОЕВ ВРУЧНУЮ|r")
set s="|cFFFFCC00Все игроки будут выбирать своих\nгероев вручную по собственному\nжеланию.|r"
elseif hp==2 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303СЛУЧАЙНЫЕ ГЕРОИ|r")
set s="|cFFFFCC00Всем игрокам выпадут случайные\nгерои, подобранные по балансу.|r"
elseif hp==3 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303КАПИТАН-МОД|r")
set s="|cFFFFCC00Капитаны (первые по порядковому\nномеру) команд будут поочерёдно\nбанить и пикать героев для своих\nигроков.|r"
elseif hp==4 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303ВСЕ ЛИНИИ|r")
set s="|cFFFFCC00Крипы идут по всем линиям.|r"
elseif hp==5 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303ВЕРХ|r")
set s="|cFFFFCC00Крипы идут по верхней линии.|r"
elseif hp==6 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303НИЗ|r")
set s="|cFFFFCC00Крипы идут по нижней линиии.|r"
elseif hp==7 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303РЕЙТИНГ|r")
set s="|cFFFFCC00Рейтинговая игра. Доступно лишь с\nлюдьми. Отключается wtf-мод. В конце игры\nкаждому игроку присваивается рейтинг\n(базовый + за номинации)|r"
elseif hp==8 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303ОБЫЧНЫЙ|r")
set s="|cFFFFCC00Обычная игра.|r"
elseif hp==9 then
call MultiboardSetTitleText(gs_mb,"|cFFFF0303GO!|r")
set s="|cFFFFCC00Применить все настройки и \nначать игру!|r"
endif
call mbiVal(gs_mb,2,0,null,s)
endif
set tr=null
endfunction
function InitTrig_Settings_Track takes nothing returns nothing
set gg_trg_Settings_Track=CreateTrigger()
call DisableTrigger(gg_trg_Settings_Track)
call TriggerAddAction(gg_trg_Settings_Track,function Settings_Track_Actions)
endfunction
function HeroPick_Camera_Timer takes nothing returns nothing
local integer i=0
local integer count=0
loop
exitwhen i>10
if i!=5 and udg_CamT[i]then
if GetLocalPlayer()==Player(i)then
call CameraSetupApplyForceDuration(gg_cam_CAMERA,true,0.)
endif
set count=count+1
endif
set i=i+1
endloop
if count==0 then
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function CaptainsModeAIGetDecision takes nothing returns nothing
local player pl=GetLocalPlayer()
set captainModeAI=true
if GetPlayerController(captainAlliance)==MAP_CONTROL_COMPUTER then
if GetRandomInt(1,2)==1 then
set captainDialogAnswerAlliance="да"
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAlliance)+" хочет начинать первым |cFFFFCC00банить/выбирать|r героев.")
else
set captainDialogAnswerAlliance="нет"
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAlliance)+" НЕ хочет начинать первым |cFFFFCC00банить/выбирать|r героев.")
endif
elseif GetPlayerController(captainAkatsuki)==MAP_CONTROL_COMPUTER then
if GetRandomInt(1,2)==1 then
set captainDialogAnswerAkatsuki="да"
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAkatsuki)+" хочет начинать первым |cFFFFCC00банить/выбирать|r героев.")
else
set captainDialogAnswerAkatsuki="нет"
call DisplayTimedTextToPlayer(pl,0.,0.,captainModeTimeText,GetPlayerNameColored(captainAkatsuki)+" НЕ хочет начинать первым |cFFFFCC00банить/выбирать|r героев.")
endif
endif
endfunction
function CaptainsModeIsOneHuman takes nothing returns boolean
local integer current=0
local integer i=0
local boolean log=true
local player p
loop
set p=Player(i)
if not udg_VM_Log[i]and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER then
if p==captainAlliance or p==captainAkatsuki then
set current=current+1
endif
endif
set i=i+1
exitwhen i==10 or current==2
endloop
if current==2 then
set log=false
endif
set p=null
return log
endfunction
function CaptainModeStart takes integer h,integer idEmpty returns nothing
local player pl=GetLocalPlayer()
local player p
local integer i=0
local integer curPlayers=0
local real x1
local real y1
loop
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
set curPlayers=curPlayers+1
endif
set playerCanPick[i]=false
set i=i+1
exitwhen i>10
endloop
set captainPhaseMax=curPlayers*2
set i=0
loop
set p=Player(i)
if not udg_VM_Log[i]and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER then
set captainAlliance=p
endif
set i=i+1
exitwhen i==4 or captainAlliance!=null
endloop
if captainAlliance==null then
set i=0
loop
set p=Player(i)
if not udg_VM_Log[i]and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_COMPUTER then
set captainAlliance=p
endif
set i=i+1
exitwhen i==4 or captainAlliance!=null
endloop
endif
set i=6
loop
set p=Player(i)
if not udg_VM_Log[i]and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER then
set captainAkatsuki=p
endif
set i=i+1
exitwhen i==10 or captainAkatsuki!=null
endloop
if captainAkatsuki==null then
set i=6
loop
set p=Player(i)
if not udg_VM_Log[i]and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_COMPUTER then
set captainAkatsuki=p
endif
set i=i+1
exitwhen i==10 or captainAkatsuki!=null
endloop
endif
call DisplayTimedTextToPlayer(pl,0.,0.,10.,"Капитаном "+nameteamOne+" назначен: "+GetPlayerNameColored(captainAlliance)+"\nКапитаном "+nameteamTwo+" назначен: "+GetPlayerNameColored(captainAkatsuki))
set x1=567.
set y1=3823.
call SaveDestructableHandle(Hash,h,9,CreateDestructable(idEmpty,x1,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,10,CreateDestructable(idEmpty,x1+64.,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,11,CreateDestructable(idEmpty,x1+128.,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,12,CreateDestructable(idEmpty,x1+192.,y1,0,1.,0))
set x1=567.
set y1=3759.
call SaveDestructableHandle(Hash,h,13,CreateDestructable(idEmpty,x1,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,14,CreateDestructable(idEmpty,x1+64.,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,15,CreateDestructable(idEmpty,x1+128.,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,16,CreateDestructable(idEmpty,x1+192.,y1,0,1.,0))
set gameText[11]=CreateTextTag()
call SetTextTagText(gameText[11],"Б|nА|nН|nЫ|n",.02)
call SetTextTagPos(gameText[11],502.,3739.,heightGameText)
call SetTextTagColor(gameText[11],254,244,209,0)
call DialogSetMessage(captainDialog,"ЖЕЛАЕТЕ ПЕРВЫМ НАЧАТЬ ВЫБОР ГЕРОЕВ?")
set captainDialogButtonYes=DialogAddButton(captainDialog,"ДА",0)
set captainDialogButtonNo=DialogAddButton(captainDialog,"НЕТ",1)
if GetPlayerController(captainAlliance)==MAP_CONTROL_USER then
call DialogDisplay(captainAlliance,captainDialog,true)
endif
if GetPlayerController(captainAkatsuki)==MAP_CONTROL_USER then
call DialogDisplay(captainAkatsuki,captainDialog,true)
endif
if CaptainsModeIsOneHuman()then
call CaptainsModeAIGetDecision()
endif
call EnableTrigger(gg_trg_CaptainAnswer)
set p=null
set pl=null
endfunction
function cj_anonym__151 takes nothing returns nothing
local integer i=0
local integer number=0
local integer h=GetHandleId(gg_trg_Click)
local integer numberhero
local destructable des
local destructable desEmpty
local player p
if PickTime>0 then
set PickTime=PickTime-1
loop
set p=Player(i)
if udg_CamT[i]then
if PickTime>59 then
if PickTime>69 then
call MultiboardSetTitleText(udg_LMB[i],PickMBName[i]+" - 1:"+I2S(PickTime-60))
else
call MultiboardSetTitleText(udg_LMB[i],PickMBName[i]+" - 1:0"+I2S(PickTime-60))
endif
else
if PickTime>9 then
call MultiboardSetTitleText(udg_LMB[i],PickMBName[i]+" - 0:"+I2S(PickTime))
else
call MultiboardSetTitleText(udg_LMB[i],PickMBName[i]+" - 0:0"+I2S(PickTime))
endif
endif
set number=number+1
endif
set i=i+1
exitwhen i>10
endloop
else
loop
set p=Player(i)
if udg_CamT[i]then
loop
set numberhero=GetRandomInt(1,hero_number)
exitwhen heroes_pick[numberhero]!=0
endloop
set des=LoadDestructableHandle(Hash,heroes_pick[numberhero],1)
if IsPlayerAlly(p,Player(5))then
set desEmpty=LoadDestructableHandle(Hash,h,i+1)
elseif IsPlayerAlly(p,Player(11))then
set desEmpty=LoadDestructableHandle(Hash,h,i)
endif
call CreateDestructable(GetDestructableTypeId(des),GetWidgetX(desEmpty),GetWidgetY(desEmpty),0,1.,0)
call ClickDestroyHeroFilter(heroes_pick[numberhero],i)
call ClickCreateIcons(des,p,heroes_pick[numberhero])
set udg_Repick_Log[i]=true
set udg_CamT[i]=false
set udg_Hero[i]=CreateUnit(p,heroes_pick[numberhero],GetHeroMainX(p),GetHeroMainY(p),GetHeroMainF(p))
call HeroMoveOnMainAreaAfterPick(p,i)
call HeroPickEnd(p,i,heroes_pick[numberhero],h,0)
endif
set i=i+1
exitwhen i>10
endloop
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
set des=null
set desEmpty=null
set p=null
endfunction
function InitPick takes nothing returns nothing
local integer i=0
local integer id
local integer array IconHero
local integer array ModelHero
local real array SizeHero
local string array NameHero
local string array DescHero
local string array CHero
local string array RLHero
local string array StrHero
local string array AgiHero
local string array IntHero
local string array HPHero
local string array MPHero
local string array DamageHero
local string array DTHero
local string array DefHero
local string array SpeedHero
local string array SpellOneDesc
local string array SpellOneIcon
local string array SpellTwoDesc
local string array SpellTwoIcon
local string array SpellThreeDesc
local string array SpellThreeIcon
local string array SpellFourDesc
local string array SpellFourIcon
local string attributes="HERO PAS Attributes\\Icon.blp"
local string danzoSpell="HERO Danzo Hashirama Saibo\\Icon.blp"
local string gaiSpell="HERO Gai Sekizo\\Icon.blp"
local string gengetsuSpell="HERO PAS Gengetsu Mizufusen no Jutsu\\Icon.blp"
local string hakuSpell="HERO Haku Hyoton Hyogan Domu\\Icon.blp"
local string hanzoSpell="HERO Hanzo Seppuku\\Icon.blp"
local string hashiramaSpell="HERO Hashirama Sennin Modo\\Icon.blp"
local string hidanSpell="HERO Hidan Inori\\Icon.blp"
local string itachiSpell="HERO Itachi Mangekyo Sharingan\\Icon.blp"
local string jiraiyaSpell="HERO Jiraiya Ryosei no Jutsu\\Icon.blp"
local string madaraSpell="HERO Madara Susanoo Ribu\\Icon.blp"
local string minatoSpell="HERO Minato Fuinjutsu Shiki Fujin\\Icon.blp"
local string muSpell="HERO Mu Kanchi no Jutsu\\Icon.blp"
local string nagatoSpell="HERO Nagato Rikudo no Jutsu\\Icon.blp"
local string narutoSpell="HERO Naruto Kurama Chakra Modo\\Icon.blp"
local string obitoSpell="HERO Obito Hashirama Saibo\\Icon.blp"
local string onokiSpell="HERO Onoki Iwa Bunshin no Jutsu\\Icon.blp"
local string saiSpell="HERO Sai Choju Giga Taka\\Icon.blp"
local string sasoriSpell="HERO Sasori Ranto de Zeijaku\\Icon.blp"
local string sasukeSpell="HERO Sasuke Eien no Mangekyo Sharingan\\Icon.blp"
local string zabuzaSpell="HERO Zabuza Demon\\Icon.blp"
local string hc_Killer="|cFFFFCC00 Убийца|r"
local string hc_Fighter="|cFFFFCC00 Боец|r"
local string hc_Support="|cFFFFCC00 Поддержка|r"
local string hc_Specialist="|cFFFFCC00 Специалист|r"
local string rl_Hard="|cFFFFCC00 Сложная|r"
local string rl_Safe="|cFFFFCC00 Лёгкая|r"
local real x=-150.
local real y=4035.
local real x1=567.
local real y1=4015.
local real xFilter=480.
local real yFilter=3655.
local integer idEmpty=0x42303449
local integer placex=-1
local integer placey=0
local integer h=GetHandleId(gg_trg_Click)
local player p
call SaveDestructableHandle(Hash,h,1,CreateDestructable(idEmpty,x1,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,2,CreateDestructable(idEmpty,x1+64.,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,3,CreateDestructable(idEmpty,x1+128.,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,4,CreateDestructable(idEmpty,x1+192.,y1,0,1.,0))
set x1=567.
set y1=3951.
call SaveDestructableHandle(Hash,h,5,CreateDestructable(idEmpty,x1,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,6,CreateDestructable(idEmpty,x1+64.,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,7,CreateDestructable(idEmpty,x1+128.,y1,0,1.,0))
call SaveDestructableHandle(Hash,h,8,CreateDestructable(idEmpty,x1+192.,y1,0,1.,0))
set gameText[10]=CreateTextTag()
call SetTextTagText(gameText[10],"П|nИ|nК|nИ|n",.02)
call SetTextTagPos(gameText[10],502.,3931.,heightGameText)
call SetTextTagColor(gameText[10],254,244,209,0)
set IconHero[Naruto]=0x42303039
set ModelHero[Naruto]=0x42303131
set SizeHero[Naruto]=.9
set NameHero[Naruto]="Наруто"
set DescHero[Naruto]="|cFFFE8A0EГлавный герой манги и аниме. Седьмой\nХокаге. Хранитель Девятихвостого\nдемона-лиса.|r"
set CHero[Naruto]=hc_Fighter
set RLHero[Naruto]=rl_Hard
set StrHero[Naruto]="|cFFA5FD00 20 + 2.60|r"
set AgiHero[Naruto]="|cFFFFCC00 14 + 1.70|r"
set IntHero[Naruto]="|cFFFFCC00 18 + 2.40|r"
set HPHero[Naruto]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Naruto]))+"|r"
set MPHero[Naruto]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Naruto]))+"|r"
set DamageHero[Naruto]="|cFFFFCC00 55|r"
set DTHero[Naruto]="|cFFFFCC00 128|r"
set DefHero[Naruto]="|cFFFFCC00 2|r"
set SpeedHero[Naruto]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Naruto]))+"|r"
set SpellOneIcon[Naruto]="HERO Naruto Kage Bunshin no Jutsu\\Icon.blp"
set SpellOneDesc[Naruto]="|cFFFFCC00Kage Bunshin no Jutsu|r"
set SpellTwoIcon[Naruto]="HERO Naruto Rasengan\\Icon.blp"
set SpellTwoDesc[Naruto]="|cFFFFCC00Rasengan|r"
set SpellThreeIcon[Naruto]="HERO Naruto Kuchiyose no Jutsu Gamakichi\\Icon.blp"
set SpellThreeDesc[Naruto]="|cFFFFCC00Kuchiyose no Jutsu: Gamakichi|r"
set SpellFourIcon[Naruto]="HERO Naruto Sennin Modo\\Icon.blp"
set SpellFourDesc[Naruto]="|cFFFFCC00Sennin Modo|r"
set IconHero[Sakura]=0x42303041
set ModelHero[Sakura]=0x42303133
set SizeHero[Sakura]=1.4
set NameHero[Sakura]="Сакура"
set DescHero[Sakura]="|cFFFE8A0EЧунин Конохагакуре. Обладает медицинским\nниндзютсу, а также прекрасно контролирует\nчакру.|r"
set CHero[Sakura]=hc_Support
set RLHero[Sakura]=rl_Safe
set StrHero[Sakura]="|cFFFFCC00 14 + 1.80|r"
set AgiHero[Sakura]="|cFFFFCC00 16 + 2.00|r"
set IntHero[Sakura]="|cFFA5FD00 22 + 2.90|r"
set HPHero[Sakura]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Sakura]))+"|r"
set MPHero[Sakura]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Sakura]))+"|r"
set DamageHero[Sakura]="|cFFFFCC00 44|r"
set DTHero[Sakura]="|cFFFFCC00 128|r"
set DefHero[Sakura]="|cFFFFCC00 4|r"
set SpeedHero[Sakura]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Sakura]))+"|r"
set SpellOneIcon[Sakura]="HERO Sakura Okasho\\Icon.blp"
set SpellOneDesc[Sakura]="|cFFFFCC00Okasho|r"
set SpellTwoIcon[Sakura]="HERO Sakura Gocken\\Icon.blp"
set SpellTwoDesc[Sakura]="|cFFFFCC00Gocken|r"
set SpellThreeIcon[Sakura]="HERO Hill\\Icon.blp"
set SpellThreeDesc[Sakura]="|cFFFFCC00Shosen no Jutsu|r"
set SpellFourIcon[Sakura]="HERO Sakura Byakugo no In\\Icon.blp"
set SpellFourDesc[Sakura]="|cFFFFCC00Byakugo no In|r"
set IconHero[Tsunade]=0x42303042
set ModelHero[Tsunade]=0x42303132
set SizeHero[Tsunade]=1.35
set NameHero[Tsunade]="Цунаде"
set DescHero[Tsunade]="|cFFFE8A0EПятая Хокаге. Одна из лучших\nниндзя-медиков. Имеет чудовищную\nфизическую силу.|r"
set CHero[Tsunade]=hc_Support
set RLHero[Tsunade]=rl_Safe
set StrHero[Tsunade]="|cFFA5FD00 25 + 3.00|r"
set AgiHero[Tsunade]="|cFFFFCC00 8 + 1.30|r"
set IntHero[Tsunade]="|cFFFFCC00 25 + 3.00|r"
set HPHero[Tsunade]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Tsunade]))+"|r"
set MPHero[Tsunade]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Tsunade]))+"|r"
set DamageHero[Tsunade]="|cFFFFCC00 70|r"
set DTHero[Tsunade]="|cFFFFCC00 128|r"
set DefHero[Tsunade]="|cFFFFCC00 1|r"
set SpeedHero[Tsunade]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Tsunade]))+"|r"
set SpellOneIcon[Tsunade]="HERO Tsunade Tsuten Kyaku\\Icon.blp"
set SpellOneDesc[Tsunade]="|cFFFFCC00Tsuten Kyaku|r"
set SpellTwoIcon[Tsunade]="HERO Tsunade Enkaku Chiyu\\Icon.blp"
set SpellTwoDesc[Tsunade]="|cFFFFCC00Enkaku Chiyu|r"
set SpellThreeIcon[Tsunade]="HERO Tsunade Tairyoku\\Icon.blp"
set SpellThreeDesc[Tsunade]="|cFFFFCC00Tairyoku|r"
set SpellFourIcon[Tsunade]="HERO Tsunade Byakugo no Jutsu\\Icon.blp"
set SpellFourDesc[Tsunade]="|cFFFFCC00Byakugo no Jutsu|r"
set IconHero[Gai]=0x42303045
set ModelHero[Gai]=0x42303134
set SizeHero[Gai]=1.55
set NameHero[Gai]="Гай"
set DescHero[Gai]="|cFFFE8A0EДжонин Конохагакуре. Эксперт в тайдзютсу,\nспособный открывать Восемь\nВнутренних врат.|r"
set CHero[Gai]=hc_Killer
set RLHero[Gai]=rl_Safe
set StrHero[Gai]="|cFFA5FD00 22 + 2.70|r"
set AgiHero[Gai]="|cFFFFCC00 22 + 2.70|r"
set IntHero[Gai]="|cFFFFCC00 11 + 1.60|r"
set HPHero[Gai]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Gai]))+"|r"
set MPHero[Gai]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Gai]))+"|r"
set DamageHero[Gai]="|cFFFFCC00 72|r"
set DTHero[Gai]="|cFFFFCC00 128|r"
set DefHero[Gai]="|cFFFFCC00 3|r"
set SpeedHero[Gai]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Gai]))+"|r"
set SpellOneIcon[Gai]="HERO Gai Dynamic Entry\\Icon.blp"
set SpellOneDesc[Gai]="|cFFFFCC00Dynamic Action|r"
set SpellTwoIcon[Gai]="HERO Gai Konoha Goriki Senpu\\Icon.blp"
set SpellTwoDesc[Gai]="|cFFFFCC00Konoha Goriki Senpu|r"
set SpellThreeIcon[Gai]="HERO Gai Hachimon Tonkou\\Icon.blp"
set SpellThreeDesc[Gai]="|cFFFFCC00Hachimon Tonkou|r"
set SpellFourIcon[Gai]="HERO Gai Super Skill\\Icon.blp"
set SpellFourDesc[Gai]="|cFFFFCC00Yagai|r"
set IconHero[Asuma]=0x42303049
set ModelHero[Asuma]=0x42303130
set SizeHero[Asuma]=1.35
set NameHero[Asuma]="Асума"
set DescHero[Asuma]="|cFFFE8A0EДжонин Конохагакуре. Владеет техниками\nогня и ветра, в бою использует специальные\nножи.|r"
set CHero[Asuma]=hc_Killer
set RLHero[Asuma]=rl_Safe
set StrHero[Asuma]="|cFFA5FD00 20 + 2.60|r"
set AgiHero[Asuma]="|cFFFFCC00 20 + 2.50|r"
set IntHero[Asuma]="|cFFFFCC00 15 + 1.90|r"
set HPHero[Asuma]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Asuma]))+"|r"
set MPHero[Asuma]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Asuma]))+"|r"
set DamageHero[Asuma]="|cFFFFCC00 63|r"
set DTHero[Asuma]="|cFFFFCC00 128|r"
set DefHero[Asuma]="|cFFFFCC00 3|r"
set SpeedHero[Asuma]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Asuma]))+"|r"
set SpellOneIcon[Asuma]="HERO Asuma Hien\\Icon.blp"
set SpellOneDesc[Asuma]="|cFFFFCC00Hien|r"
set SpellTwoIcon[Asuma]="HERO Asuma Kawarimi\\Icon.blp"
set SpellTwoDesc[Asuma]="|cFFFFCC00Kawarimi no Jutsu|r"
set SpellThreeIcon[Asuma]="HERO Asuma Katon Haisekishou\\Icon.blp"
set SpellThreeDesc[Asuma]="|cFFFFCC00Katon: Haisekishou|r"
set SpellFourIcon[Asuma]="HERO Asuma Fujin no Jutsu\\Icon.blp"
set SpellFourDesc[Asuma]="|cFFFFCC00Futon: Fujin no Jutsu|r"
set IconHero[Ei]=0x4230304C
set ModelHero[Ei]=0x42303135
set SizeHero[Ei]=1.4
set NameHero[Ei]="Эй"
set DescHero[Ei]="|cFFFE8A0EЧетвёртый Райкаге. Здоровый, накачанный,\nбрутальный человек, весьма\nраздражительный.|r"
set CHero[Ei]=hc_Fighter
set RLHero[Ei]=rl_Hard
set StrHero[Ei]="|cFFA5FD00 30 + 3.80|r"
set AgiHero[Ei]="|cFFFFCC00 10 + 1.10|r"
set IntHero[Ei]="|cFFFFCC00 20 + 2.60|r"
set HPHero[Ei]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Ei]))+"|r"
set MPHero[Ei]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Ei]))+"|r"
set DamageHero[Ei]="|cFFFFCC00 70|r"
set DTHero[Ei]="|cFFFFCC00 128|r"
set DefHero[Ei]="|cFFFFCC00 1|r"
set SpeedHero[Ei]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Ei]))+"|r"
set SpellOneIcon[Ei]="HERO Ei Erubo\\Icon.blp"
set SpellOneDesc[Ei]="|cFFFFCC00Erubo|r"
set SpellTwoIcon[Ei]="HERO Ei Raiton no Yoroi\\Icon.blp"
set SpellTwoDesc[Ei]="|cFFFFCC00Raiton no Yoroi|r"
set SpellThreeIcon[Ei]="HERO Ei Girochin Doroppu\\Icon.blp"
set SpellThreeDesc[Ei]="|cFFFFCC00Girochin Doroppu|r"
set SpellFourIcon[Ei]="HERO Ei Raiga Bomu\\Icon.blp"
set SpellFourDesc[Ei]="|cFFFFCC00Raiga Bomu|r"
set IconHero[Hashirama]=0x42303548
set ModelHero[Hashirama]=0x42303547
set SizeHero[Hashirama]=1.25
set NameHero[Hashirama]="Хаширама"
set DescHero[Hashirama]="|cFFFE8A0EПервый Хокаге. Владеет Древесными\nтехниками.|r"
set CHero[Hashirama]=hc_Support
set RLHero[Hashirama]=rl_Safe
set StrHero[Hashirama]="|cFFFFCC00 24 + 3.00|r"
set AgiHero[Hashirama]="|cFFFFCC00 12 + 1.50|r"
set IntHero[Hashirama]="|cFFA5FD00 24 + 3.00|r"
set HPHero[Hashirama]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Hashirama]))+"|r"
set MPHero[Hashirama]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Hashirama]))+"|r"
set DamageHero[Hashirama]="|cFFFFCC00 64|r"
set DTHero[Hashirama]="|cFFFFCC00 125|r"
set DefHero[Hashirama]="|cFFFFCC00 2|r"
set SpeedHero[Hashirama]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Hashirama]))+"|r"
set SpellOneIcon[Hashirama]="HERO Hashirama Mokuton no Jutsu\\Icon.blp"
set SpellOneDesc[Hashirama]="|cFFFFCC00Mokuton no Jutsu|r"
set SpellTwoIcon[Hashirama]="HERO Hashirama Kokuangyo no Jutsu\\Icon.blp"
set SpellTwoDesc[Hashirama]="|cFFFFCC00Kokuangyo no Jutsu|r"
set SpellThreeIcon[Hashirama]="HERO Hashirama Jukai Kotan\\Icon.blp"
set SpellThreeDesc[Hashirama]="|cFFFFCC00Mokuton Hijutsu: Jukai Kotan||r"
set SpellFourIcon[Hashirama]="HERO Hashirama Mokuton Summon\\Icon.blp"
set SpellFourDesc[Hashirama]="|cFFFFCC00Mokuton: Summon|r"
set IconHero[Jiraya]=0x42303635
set ModelHero[Jiraya]=0x42303634
set SizeHero[Jiraya]=1.75
set NameHero[Jiraya]="Джирайя"
set DescHero[Jiraya]="|cFFFE8A0EСаннин Конохагакуре. Владеет искусством\nжабьих техник.|r"
set CHero[Jiraya]=hc_Killer
set RLHero[Jiraya]=rl_Safe
set StrHero[Jiraya]="|cFFA5FD00 24 + 3.10|r"
set AgiHero[Jiraya]="|cFFFFCC00 14 + 1.40|r"
set IntHero[Jiraya]="|cFFFFCC00 20 + 2.80|r"
set HPHero[Jiraya]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Jiraya]))+"|r"
set MPHero[Jiraya]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Jiraya]))+"|r"
set DamageHero[Jiraya]="|cFFFFCC00 69|r"
set DTHero[Jiraya]="|cFFFFCC00 128|r"
set DefHero[Jiraya]="|cFFFFCC00 2|r"
set SpeedHero[Jiraya]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Jiraya]))+"|r"
set SpellOneIcon[Jiraya]="NWHC Heroes Spell Q\\Icon.blp"
set SpellOneDesc[Jiraya]="|cFFFFCC00Dai Ichi no Jutsu|r"
set SpellTwoIcon[Jiraya]="NWHC Heroes Spell W\\Icon.blp"
set SpellTwoDesc[Jiraya]="|cFFFFCC00Daini no Jutsu|r"
set SpellThreeIcon[Jiraya]="NWHC Heroes Spell E\\Icon.blp"
set SpellThreeDesc[Jiraya]="|cFFFFCC00Dai San no Jutsu|r"
set SpellFourIcon[Jiraya]="NWHC Heroes Spell R\\Icon.blp"
set SpellFourDesc[Jiraya]="|cFFFFCC00Dai Yon no Jutsu|r"
set IconHero[Kakashi]=0x42303044
set ModelHero[Kakashi]=0x42303137
set SizeHero[Kakashi]=1.3
set NameHero[Kakashi]="Какаши"
set DescHero[Kakashi]="|cFFFE8A0EШестой Хокаге. Владеет элементом Молний и\nЗемли.|r"
set CHero[Kakashi]=hc_Killer
set RLHero[Kakashi]=rl_Safe
set StrHero[Kakashi]="|cFFFFCC00 16 + 2.10|r"
set AgiHero[Kakashi]="|cFFA5FD00 22 + 2.70|r"
set IntHero[Kakashi]="|cFFFFCC00 19 + 2.40|r"
set HPHero[Kakashi]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Kakashi]))+"|r"
set MPHero[Kakashi]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Kakashi]))+"|r"
set DamageHero[Kakashi]="|cFFFFCC00 64|r"
set DTHero[Kakashi]="|cFFFFCC00 128|r"
set DefHero[Kakashi]="|cFFFFCC00 6|r"
set SpeedHero[Kakashi]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Kakashi]))+"|r"
set SpellOneIcon[Kakashi]="HERO Kakashi Kuchiyose\\Icon.blp"
set SpellOneDesc[Kakashi]="|cFFFFCC00Ninpo Kuchiysoe: Doton: Tsuiga no Jutsu|r"
set SpellTwoIcon[Kakashi]="HERO Kakashi Raiton Kage Bunshini\\Icon.blp"
set SpellTwoDesc[Kakashi]="|cFFFFCC00Raiton: Kage Bunshin|r"
set SpellThreeIcon[Kakashi]="HERO Kakashi Kamui\\Icon.blp"
set SpellThreeDesc[Kakashi]="|cFFFFCC00Kamui|r"
set SpellFourIcon[Kakashi]="HERO Kakashi Kamui Raikiri\\Icon.blp"
set SpellFourDesc[Kakashi]="|cFFFFCC00Kamui Raikiri|r"
set IconHero[Sai]=0x42303046
set ModelHero[Sai]=0x42303138
set SizeHero[Sai]=1.4
set NameHero[Sai]="Сай"
set DescHero[Sai]="|cFFFE8A0EЧунин Конохагакуре. Способен оживлять\nнарисованных им животных.|r"
set CHero[Sai]=hc_Support
set RLHero[Sai]=rl_Safe
set StrHero[Sai]="|cFFFFCC00 14 + 1.80|r"
set AgiHero[Sai]="|cFFA5FD00 21 + 2.70|r"
set IntHero[Sai]="|cFFFFCC00 18 + 2.30|r"
set HPHero[Sai]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Sai]))+"|r"
set MPHero[Sai]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Sai]))+"|r"
set DamageHero[Sai]="|cFFFFCC00 53|r"
set DTHero[Sai]="|cFFFFCC00 128|r"
set DefHero[Sai]="|cFFFFCC00 2|r"
set SpeedHero[Sai]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Sai]))+"|r"
set SpellOneIcon[Sai]="HERO Sai Choju Giga Shishi\\Icon.blp"
set SpellOneDesc[Sai]="|cFFFFCC00Choju Giga: Shishi|r"
set SpellTwoIcon[Sai]="HERO Sai Choju Giga Hebi\\Icon.blp"
set SpellTwoDesc[Sai]="|cFFFFCC00Choju Giga: Hebi|r"
set SpellThreeIcon[Sai]="HERO Sai Fuinjutsu Koshi Tandan\\Icon.blp"
set SpellThreeDesc[Sai]="|cFFFFCC00Fuinjutsu: Koshi Tandan|r"
set SpellFourIcon[Sai]="HERO Sai Choshin Giga\\Icon.blp"
set SpellFourDesc[Sai]="|cFFFFCC00Choshin Giga|r"
set IconHero[Neji]=0x42303047
set ModelHero[Neji]=0x42303139
set SizeHero[Neji]=3.
set NameHero[Neji]="Неджи"
set DescHero[Neji]="|cFFFE8A0EДжонин Конохагакуре. Эксперт в тайдзюцу,\nобладает Бьякуганом.|r"
set CHero[Neji]=hc_Killer
set RLHero[Neji]=rl_Safe
set StrHero[Neji]="|cFFFFCC00 14 + 1.80|r"
set AgiHero[Neji]="|cFFA5FD00 23 + 3.00|r"
set IntHero[Neji]="|cFFFFCC00 16 + 2.00|r"
set HPHero[Neji]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Neji]))+"|r"
set MPHero[Neji]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Neji]))+"|r"
set DamageHero[Neji]="|cFFFFCC00 61|r"
set DTHero[Neji]="|cFFFFCC00 128|r"
set DefHero[Neji]="|cFFFFCC00 2|r"
set SpeedHero[Neji]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Neji]))+"|r"
set SpellOneIcon[Neji]="HERO PAS Neji Juken\\Icon.blp"
set SpellOneDesc[Neji]="|cFFFFCC00Juken|r"
set SpellTwoIcon[Neji]="HERO Neji Kaiten\\Icon.blp"
set SpellTwoDesc[Neji]="|cFFFFCC00Hakkesho Kaiten|r"
set SpellThreeIcon[Neji]="HERO Neji Byakugan\\Icon.blp"
set SpellThreeDesc[Neji]="|cFFFFCC00Byakugan|r"
set SpellFourIcon[Neji]="HERO Neji 64 Yonsou\\Icon.blp"
set SpellFourDesc[Neji]="|cFFFFCC00Hakke Rokujuyon Sho|r"
set IconHero[Minato]=0x42303544
set ModelHero[Minato]=0x42303543
set SizeHero[Minato]=1.25
set NameHero[Minato]="Минато"
set DescHero[Minato]="|cFFFE8A0EЧетвёртый Хокаге. Владеет мгновенными\nтехниками перемещения.|r"
set CHero[Minato]=hc_Killer
set RLHero[Minato]=rl_Safe
set StrHero[Minato]="|cFFFFCC00 15 + 1.90|r"
set AgiHero[Minato]="|cFFA5FD00 25 + 3.10|r"
set IntHero[Minato]="|cFFFFCC00 20 + 2.50|r"
set HPHero[Minato]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Minato]))+"|r"
set MPHero[Minato]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Minato]))+"|r"
set DamageHero[Minato]="|cFFFFCC00 58|r"
set DTHero[Minato]="|cFFFFCC00 128|r"
set DefHero[Minato]="|cFFFFCC00 7|r"
set SpeedHero[Minato]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Minato]))+"|r"
set SpellOneIcon[Minato]="HERO Minato Rasengan\\Icon.blp"
set SpellOneDesc[Minato]="|cFFFFCC00Rasengan|r"
set SpellTwoIcon[Minato]="HERO Minato Hiraishin no Jutsu\\Icon.blp"
set SpellTwoDesc[Minato]="|cFFFFCC00Hiraishin no Jutsu|r"
set SpellThreeIcon[Minato]="HERO Minato Kuchiyose no Jutsu Gamabunta\\Icon.blp"
set SpellThreeDesc[Minato]="|cFFFFCC00Kuchiyose no Jutsu: Gamabunta|r"
set SpellFourIcon[Minato]="HERO Minato Rasen Senko Cho Rinbu Kosan Shiki\\Icon.blp"
set SpellFourDesc[Minato]="|cFFFFCC00Rasen Senko Cho Rinbu Kosan Shiki|r"
set IconHero[Darui]=0x42303452
set ModelHero[Darui]=0x42303256
set SizeHero[Darui]=1.25
set NameHero[Darui]="Даруи"
set DescHero[Darui]="|cFFFE8A0EПятый Райкаге. В бою использует меч,\nа также стихии Молнии, Воды и Бури.|r"
set CHero[Darui]=hc_Killer
set RLHero[Darui]=rl_Safe
set StrHero[Darui]="|cFFFFCC00 15 + 2.00|r"
set AgiHero[Darui]="|cFFFFCC00 17 + 2.20|r"
set IntHero[Darui]="|cFFA5FD00 23 + 2.80|r"
set HPHero[Darui]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Darui]))+"|r"
set MPHero[Darui]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Darui]))+"|r"
set DamageHero[Darui]="|cFFFFCC00 53|r"
set DTHero[Darui]="|cFFFFCC00 128|r"
set DefHero[Darui]="|cFFFFCC00 2|r"
set SpeedHero[Darui]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Darui]))+"|r"
set SpellOneIcon[Darui]="HERO Darui v2 Suiton Suijinheki\\Icon.blp"
set SpellOneDesc[Darui]="|cFFFFCC00Suiton: Suijinheki|r"
set SpellTwoIcon[Darui]="HERO Darui v1 Ranton Reizaa Saakasu\\Icon.blp"
set SpellTwoDesc[Darui]="|cFFFFCC00Ranton: Reizaa Saakasu|r"
set SpellThreeIcon[Darui]="HERO Darui Zanbato\\Icon.blp"
set SpellThreeDesc[Darui]="|cFFFFCC00Zanbato|r"
set SpellFourIcon[Darui]="HERO Darui v2 Raiton Kuro Pansa\\Icon.blp"
set SpellFourDesc[Darui]="|cFFFFCC00Raiton: Kuro Pansa|r"
set IconHero[Tobirama]=0x42303534
set ModelHero[Tobirama]=0x42303536
set SizeHero[Tobirama]=1.25
set NameHero[Tobirama]="Тобирама"
set DescHero[Tobirama]="|cFFFE8A0EВторой Хокаге. Владеет водяными\nтехниками.|r"
set CHero[Tobirama]=hc_Killer
set RLHero[Tobirama]=rl_Safe
set StrHero[Tobirama]="|cFFFFCC00 15 + 1.90|r"
set AgiHero[Tobirama]="|cFFFFCC00 20 + 2.40|r"
set IntHero[Tobirama]="|cFFA5FD00 25 + 3.20|r"
set HPHero[Tobirama]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Tobirama]))+"|r"
set MPHero[Tobirama]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Tobirama]))+"|r"
set DamageHero[Tobirama]="|cFFFFCC00 65|r"
set DTHero[Tobirama]="|cFFFFCC00 128|r"
set DefHero[Tobirama]="|cFFFFCC00 3|r"
set SpeedHero[Tobirama]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Tobirama]))+"|r"
set SpellOneIcon[Tobirama]="HERO Tobirama Gleam\\Icon.blp"
set SpellOneDesc[Tobirama]="|cFFFFCC00Suiton: Suidanha|r"
set SpellTwoIcon[Tobirama]="HERO Tobirama Suiton\\Icon.blp"
set SpellTwoDesc[Tobirama]="|cFFFFCC00Suiton: Suijinheki|r"
set SpellThreeIcon[Tobirama]="HERO Tobirama Suiton Suishoha\\Icon.blp"
set SpellThreeDesc[Tobirama]="|cFFFFCC00Suiton: Suishoha|r"
set SpellFourIcon[Tobirama]="HERO Tobirama Kage Bunshin no Jutsu\\Icon.blp"
set SpellFourDesc[Tobirama]="|cFFFFCC00Kage Bunshin no Jutsu|r"
set IconHero[Danzo]=0x42303043
set ModelHero[Danzo]=0x42303142
set SizeHero[Danzo]=1.3
set NameHero[Danzo]="Данзо"
set DescHero[Danzo]="|cFFFE8A0EГлава корня АНБУ. Владеет секретными\nтехниками.|r"
set CHero[Danzo]=hc_Fighter
set RLHero[Danzo]=rl_Hard
set StrHero[Danzo]="|cFFFFCC00 20 + 2.50|r"
set AgiHero[Danzo]="|cFFFFCC00 12 + 1.70|r"
set IntHero[Danzo]="|cFFA5FD00 23 + 2.80|r"
set HPHero[Danzo]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Danzo]))+"|r"
set MPHero[Danzo]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Danzo]))+"|r"
set DamageHero[Danzo]="|cFFFFCC00 53|r"
set DTHero[Danzo]="|cFFFFCC00 128|r"
set DefHero[Danzo]="|cFFFFCC00 2|r"
set SpeedHero[Danzo]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Danzo]))+"|r"
set SpellOneIcon[Danzo]="HERO Danzo Futon no Jutsu\\Icon.blp"
set SpellOneDesc[Danzo]="|cFFFFCC00Futon no Jutsu|r"
set SpellTwoIcon[Danzo]="HERO Danzo Fuinjutsu\\Icon.blp"
set SpellTwoDesc[Danzo]="|cFFFFCC00Fuinjutsu|r"
set SpellThreeIcon[Danzo]="HERO Danzo Kuchiyose no Jutsu Baku\\Icon.blp"
set SpellThreeDesc[Danzo]="|cFFFFCC00Kuchiyose no Jutsu: Baku|r"
set SpellFourIcon[Danzo]="HERO Danzo Izanagi\\Icon.blp"
set SpellFourDesc[Danzo]="|cFFFFCC00Izanagi|r"
set IconHero[Shikamaru]=0x42303048
set ModelHero[Shikamaru]=0x42303143
set SizeHero[Shikamaru]=.7
set NameHero[Shikamaru]="Шикамару"
set DescHero[Shikamaru]="|cFFFE8A0EЧунин Конохагакуре. Владеет секретными\nтеневыми техниками.|r"
set CHero[Shikamaru]=hc_Killer
set RLHero[Shikamaru]=rl_Safe
set StrHero[Shikamaru]="|cFFFFCC00 13 + 1.60|r"
set AgiHero[Shikamaru]="|cFFFFCC00 13 + 1.60|r"
set IntHero[Shikamaru]="|cFFA5FD00 24 + 3.30|r"
set HPHero[Shikamaru]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Shikamaru]))+"|r"
set MPHero[Shikamaru]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Shikamaru]))+"|r"
set DamageHero[Shikamaru]="|cFFFFCC00 46|r"
set DTHero[Shikamaru]="|cFFFFCC00 580|r"
set DefHero[Shikamaru]="|cFFFFCC00 2|r"
set SpeedHero[Shikamaru]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Shikamaru]))+"|r"
set SpellOneIcon[Shikamaru]="HERO Shikamaru Ninpo Kage Mane no Jutsu\\Icon.blp"
set SpellOneDesc[Shikamaru]="|cFFFFCC00Ninpo: Kage Mane no Jutsu|r"
set SpellTwoIcon[Shikamaru]="HERO Shikamaru Hikaridama\\Icon.blp"
set SpellTwoDesc[Shikamaru]="|cFFFFCC00Hikaridama|r"
set SpellThreeIcon[Shikamaru]="HERO Shikamaru Kibakufuda\\Icon.blp"
set SpellThreeDesc[Shikamaru]="|cFFFFCC00Kibakufuda|r"
set SpellFourIcon[Shikamaru]="HERO Shikamaru Ninpo Kage Yose no Jutsu\\Icon.blp"
set SpellFourDesc[Shikamaru]="|cFFFFCC00Ninpo: Kage Yose no Jutsu|r"
set IconHero[Chiyo]=0x42303535
set ModelHero[Chiyo]=0x42303537
set SizeHero[Chiyo]=1.75
set NameHero[Chiyo]="Чиё"
set DescHero[Chiyo]="|cFFFE8A0EСтарейшина Сунагакуре. Одна из лучших\nкукловодов.|r"
set CHero[Chiyo]=hc_Support
set RLHero[Chiyo]=rl_Safe
set StrHero[Chiyo]="|cFFFFCC00 14 + 2.00|r"
set AgiHero[Chiyo]="|cFFFFCC00 17 + 2.00|r"
set IntHero[Chiyo]="|cFFA5FD00 24 + 3.00|r"
set HPHero[Chiyo]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Chiyo]))+"|r"
set MPHero[Chiyo]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Chiyo]))+"|r"
set DamageHero[Chiyo]="|cFFFFCC00 62|r"
set DTHero[Chiyo]="|cFFFFCC00 350|r"
set DefHero[Chiyo]="|cFFFFCC00 2|r"
set SpeedHero[Chiyo]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Chiyo]))+"|r"
set SpellOneIcon[Chiyo]="HERO Chiyo Soshuha\\Icon.blp"
set SpellOneDesc[Chiyo]="|cFFFFCC00Soshujin|r"
set SpellTwoIcon[Chiyo]="HERO Chiyo Chakra no Ito\\Icon.blp"
set SpellTwoDesc[Chiyo]="|cFFFFCC00Chakra no Ito|r"
set SpellThreeIcon[Chiyo]="HERO Chiyo Chichi to Haha\\Icon.blp"
set SpellThreeDesc[Chiyo]="|cFFFFCC00Chichi to Haha|r"
set SpellFourIcon[Chiyo]="HERO Chiyo Shirohigi Jikki Chikamatsu no Shu\\Icon.blp"
set SpellFourDesc[Chiyo]="|cFFFFCC00Shirohigi: Jikki Chikamatsu no Shu|r"
set IconHero[Gaara]=0x4230304D
set ModelHero[Gaara]=0x42303144
set SizeHero[Gaara]=.55
set NameHero[Gaara]="Гаара"
set DescHero[Gaara]="|cFFFE8A0EПятый Казекаге. Его «абсолютным» оружием\nявляется песок.|r"
set CHero[Gaara]=hc_Support
set RLHero[Gaara]=rl_Hard
set StrHero[Gaara]="|cFFFFCC00 14 + 1.70|r"
set AgiHero[Gaara]="|cFFFFCC00 8 + 1.00|r"
set IntHero[Gaara]="|cFFA5FD00 30 + 4.00|r"
set HPHero[Gaara]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Gaara]))+"|r"
set MPHero[Gaara]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Gaara]))+"|r"
set DamageHero[Gaara]="|cFFFFCC00 55|r"
set DTHero[Gaara]="|cFFFFCC00 400|r"
set DefHero[Gaara]="|cFFFFCC00 1|r"
set SpeedHero[Gaara]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Gaara]))+"|r"
set SpellOneIcon[Gaara]="HERO Gaara Sabaku\\Icon.blp"
set SpellOneDesc[Gaara]="|cFFFFCC00Sabaku|r"
set SpellTwoIcon[Gaara]="HERO Gaara Zettai Bogyo\\Icon.blp"
set SpellTwoDesc[Gaara]="|cFFFFCC00Zettai Bogyo|r"
set SpellThreeIcon[Gaara]="HERO Gaara Sabakuha\\Icon.blp"
set SpellThreeDesc[Gaara]="|cFFFFCC00Sabakuha|r"
set SpellFourIcon[Gaara]="HERO Gaara Sabaku Sotaiso\\Icon.blp"
set SpellFourDesc[Gaara]="|cFFFFCC00Sabaku Sotaiso|r"
set IconHero[Mei]=0x42303350
set ModelHero[Mei]=0x4230334F
set SizeHero[Mei]=1.3
set NameHero[Mei]="Мей"
set DescHero[Mei]="|cFFFE8A0EПятая Мизукаге. Владеет стихиями Огня,\nВоды, Земли и двумя улучшенными\nгеномами.|r"
set CHero[Mei]=hc_Killer
set RLHero[Mei]=rl_Safe
set StrHero[Mei]="|cFFFFCC00 15 + 1.90|r"
set AgiHero[Mei]="|cFFFFCC00 18 + 2.30|r"
set IntHero[Mei]="|cFFA5FD00 22 + 2.80|r"
set HPHero[Mei]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Mei]))+"|r"
set MPHero[Mei]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Mei]))+"|r"
set DamageHero[Mei]="|cFFFFCC00 47|r"
set DTHero[Mei]="|cFFFFCC00 128|r"
set DefHero[Mei]="|cFFFFCC00 2|r"
set SpeedHero[Mei]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Mei]))+"|r"
set SpellOneIcon[Mei]="HERO Mei Futton Koumo\\Icon.blp"
set SpellOneDesc[Mei]="|cFFFFCC00Futton: Komo no Jutsu|r"
set SpellTwoIcon[Mei]="HERO Mei Yokai\\Icon.blp"
set SpellTwoDesc[Mei]="|cFFFFCC00Yokai: Yoton no Jutsu|r"
set SpellThreeIcon[Mei]="HERO Mei Kirigakure\\Icon.blp"
set SpellThreeDesc[Mei]="|cFFFFCC00Ninpo: Kirigakure no Jutsu|r"
set SpellFourIcon[Mei]="HERO Mei Suiton Suiryudan no Jutsu\\Icon.blp"
set SpellFourDesc[Mei]="|cFFFFCC00Suiton: Suiryudan no Jutsu|r"
set IconHero[Onoki]=0x42303056
set ModelHero[Onoki]=0x42303145
set SizeHero[Onoki]=1.4
set NameHero[Onoki]="Оноки"
set DescHero[Onoki]="|cFFFE8A0EТретий Тсучикаге. Способен соединять\nтри стихии в одну, образуя элемент Атома.|r"
set CHero[Onoki]=hc_Support
set RLHero[Onoki]=rl_Safe
set StrHero[Onoki]="|cFFFFCC00 15 + 1.90|r"
set AgiHero[Onoki]="|cFFFFCC00 8 + 1.30|r"
set IntHero[Onoki]="|cFFA5FD00 32 + 3.80|r"
set HPHero[Onoki]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Onoki]))+"|r"
set MPHero[Onoki]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Onoki]))+"|r"
set DamageHero[Onoki]="|cFFFFCC00 42|r"
set DTHero[Onoki]="|cFFFFCC00 545|r"
set DefHero[Onoki]="|cFFFFCC00 1|r"
set SpeedHero[Onoki]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Onoki]))+"|r"
set SpellOneIcon[Onoki]="HERO Onoki Kajugan no Jutsu\\Icon.blp"
set SpellOneDesc[Onoki]="|cFFFFCC00Doton: Kajugan no Jutsu|r"
set SpellTwoIcon[Onoki]="HERO Onoki Cho Keijugan no Jutsu\\Icon.blp"
set SpellTwoDesc[Onoki]="|cFFFFCC00Doton: Keijugan no Jutsu|r"
set SpellThreeIcon[Onoki]="HERO Onoki Iwa no Goremu\\Icon.blp"
set SpellThreeDesc[Onoki]="|cFFFFCC00Iwa no Goremu|r"
set SpellFourIcon[Onoki]="HERO Onoki Genkai Hakuri no Jutsu\\Icon.blp"
set SpellFourDesc[Onoki]="|cFFFFCC00Jinton: Genkai Hakuri no Jutsu|r"
set IconHero[Hidan]=0x4230304F
set ModelHero[Hidan]=0x42303148
set SizeHero[Hidan]=1.45
set NameHero[Hidan]="Хидан"
set DescHero[Hidan]="|cFFFE8A0EЧлен Акацки. Носит с собой косу\nс тремя лезвиями. Верит в Бога Дзясина.|r"
set CHero[Hidan]=hc_Fighter
set RLHero[Hidan]=rl_Hard
set StrHero[Hidan]="|cFFFFCC00 18 + 2.00|r"
set AgiHero[Hidan]="|cFFA5FD00 23 + 3.20|r"
set IntHero[Hidan]="|cFFFFCC00 13 + 1.70|r"
set HPHero[Hidan]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Hidan]))+"|r"
set MPHero[Hidan]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Hidan]))+"|r"
set DamageHero[Hidan]="|cFFFFCC00 63|r"
set DTHero[Hidan]="|cFFFFCC00 150|r"
set DefHero[Hidan]="|cFFFFCC00 2|r"
set SpeedHero[Hidan]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Hidan]))+"|r"
set SpellOneIcon[Hidan]="HERO Hidan Sanjin no Ogama\\Icon.blp"
set SpellOneDesc[Hidan]="|cFFFFCC00Sanjin no Ogama|r"
set SpellTwoIcon[Hidan]="HERO Hidan Kyokenbyo\\Icon.blp"
set SpellTwoDesc[Hidan]="|cFFFFCC00Kyokenbyo|r"
set SpellThreeIcon[Hidan]="HERO Hidan Jashinkyo\\Icon.blp"
set SpellThreeDesc[Hidan]="|cFFFFCC00Jashinkyo|r"
set SpellFourIcon[Hidan]="HERO Hidan Jujutsu Shiju Hyoketsu\\Icon.blp"
set SpellFourDesc[Hidan]="|cFFFFCC00Jujutsu: Shiju Hyoketsu|r"
set IconHero[Madara]=0x42303441
set ModelHero[Madara]=0x42303437
set SizeHero[Madara]=1.35
set NameHero[Madara]="Мадара"
set DescHero[Madara]="|cFFFE8A0EГлава Акацки. Бывший глава клана Учих,\nвладеет их секретными техниками.|r"
set CHero[Madara]=hc_Killer
set RLHero[Madara]=rl_Hard
set StrHero[Madara]="|cFFFFCC00 20 + 2.20|r"
set AgiHero[Madara]="|cFFFFCC00 15 + 1.70|r"
set IntHero[Madara]="|cFFA5FD00 25 + 3.60|r"
set HPHero[Madara]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Madara]))+"|r"
set MPHero[Madara]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Madara]))+"|r"
set DamageHero[Madara]="|cFFFFCC00 40|r"
set DTHero[Madara]="|cFFFFCC00 125|r"
set DefHero[Madara]="|cFFFFCC00 4|r"
set SpeedHero[Madara]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Madara]))+"|r"
set SpellOneIcon[Madara]="NWHC Heroes Spell Q\\Icon.blp"
set SpellOneDesc[Madara]="|cFFFFCC00Dai Ichi no Jutsu|r"
set SpellTwoIcon[Madara]="NWHC Heroes Spell W\\Icon.blp"
set SpellTwoDesc[Madara]="|cFFFFCC00Daini no Jutsu|r"
set SpellThreeIcon[Madara]="NWHC Heroes Spell E\\Icon.blp"
set SpellThreeDesc[Madara]="|cFFFFCC00Dai San no Jutsu|r"
set SpellFourIcon[Madara]="NWHC Heroes Spell R\\Icon.blp"
set SpellFourDesc[Madara]="|cFFFFCC00Dai Yon no Jutsu|r"
set IconHero[Zetsu]=0x42303034
set ModelHero[Zetsu]=0x42303033
set SizeHero[Zetsu]=1.2
set NameHero[Zetsu]="Зетсу"
set DescHero[Zetsu]="|cFFFE8A0EЧлен Акацки. Искусственный человек.\nСпособен создавать паразитических клонов.|r"
set CHero[Zetsu]=hc_Support
set RLHero[Zetsu]=rl_Safe
set StrHero[Zetsu]="|cFFFFCC00 14 + 1.70|r"
set AgiHero[Zetsu]="|cFFFFCC00 14 + 1.70|r"
set IntHero[Zetsu]="|cFFA5FD00 27 + 3.60|r"
set HPHero[Zetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Zetsu]))+"|r"
set MPHero[Zetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Zetsu]))+"|r"
set DamageHero[Zetsu]="|cFFFFCC00 47|r"
set DTHero[Zetsu]="|cFFFFCC00 560|r"
set DefHero[Zetsu]="|cFFFFCC00 1|r"
set SpeedHero[Zetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Zetsu]))+"|r"
set SpellOneIcon[Zetsu]="HERO Zetsu Kagero\\Icon.blp"
set SpellOneDesc[Zetsu]="|cFFFFCC00Kagero|r"
set SpellTwoIcon[Zetsu]="HERO Zetsu Tobi\\Icon.blp"
set SpellTwoDesc[Zetsu]="|cFFFFCC00Tobi|r"
set SpellThreeIcon[Zetsu]="HERO Zetsu Kisei Bunshin\\Icon.blp"
set SpellThreeDesc[Zetsu]="|cFFFFCC00Kisei Bunshin|r"
set SpellFourIcon[Zetsu]="HERO Zetsu Bunkatsu\\Icon.blp"
set SpellFourDesc[Zetsu]="|cFFFFCC00Bunkatsu|r"
set IconHero[Obito]=0x42303439
set ModelHero[Obito]=0x42303438
set SizeHero[Obito]=1.4
set NameHero[Obito]="Обито"
set DescHero[Obito]="|cFFFE8A0EЧлен Акацки. Владеет\nпространственно-временными техниками.|r"
set CHero[Obito]=hc_Support
set RLHero[Obito]=rl_Safe
set StrHero[Obito]="|cFFFFCC00 17 + 2.20|r"
set AgiHero[Obito]="|cFFFFCC00 18 + 2.30|r"
set IntHero[Obito]="|cFFA5FD00 20 + 2.50|r"
set HPHero[Obito]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Obito]))+"|r"
set MPHero[Obito]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Obito]))+"|r"
set DamageHero[Obito]="|cFFFFCC00 48|r"
set DTHero[Obito]="|cFFFFCC00 125|r"
set DefHero[Obito]="|cFFFFCC00 5|r"
set SpeedHero[Obito]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Obito]))+"|r"
set SpellOneIcon[Obito]="HERO Obito Mangekyo Sharingan\\Icon.blp"
set SpellOneDesc[Obito]="|cFFFFCC00Mangekyo Sharingan|r"
set SpellTwoIcon[Obito]="HERO Obito Uchiha Kaenjin\\Icon.blp"
set SpellTwoDesc[Obito]="|cFFFFCC00Uchiha Kaenjin|r"
set SpellThreeIcon[Obito]="HERO Obito Katon Gokakyu no Jutsu\\Icon.blp"
set SpellThreeDesc[Obito]="|cFFFFCC00Katon: Gokakyu no Jutsu|r"
set SpellFourIcon[Obito]="HERO Obito Mazo no Kusari\\Icon.blp"
set SpellFourDesc[Obito]="|cFFFFCC00Mazo no Kusari|r"
set IconHero[Nagato]=0x42303533
set ModelHero[Nagato]=0x42303532
set SizeHero[Nagato]=1.15
set NameHero[Nagato]="Нагато"
set DescHero[Nagato]="|cFFFE8A0EЧлен Акацки. Превосходный сенсор,\nвладеет техниками Мудреца Шести Путей.|r"
set CHero[Nagato]=hc_Support
set RLHero[Nagato]=rl_Safe
set StrHero[Nagato]="|cFFFFCC00 15 + 2.00|r"
set AgiHero[Nagato]="|cFFFFCC00 5 + 1.00|r"
set IntHero[Nagato]="|cFFA5FD00 30 + 3.50|r"
set HPHero[Nagato]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Nagato]))+"|r"
set MPHero[Nagato]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Nagato]))+"|r"
set DamageHero[Nagato]="|cFFFFCC00 45|r"
set DTHero[Nagato]="|cFFFFCC00 600|r"
set DefHero[Nagato]="|cFFFFCC00 5|r"
set SpeedHero[Nagato]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Nagato]))+"|r"
set SpellOneIcon[Nagato]="HERO Nagato Gedo no Jutsu\\Icon.blp"
set SpellOneDesc[Nagato]="|cFFFFCC00Gedo no Jutsu|r"
set SpellTwoIcon[Nagato]="HERO Nagato Futon Reppusho\\Icon.blp"
set SpellTwoDesc[Nagato]="|cFFFFCC00Futon: Reppusho|r"
set SpellThreeIcon[Nagato]="HERO Nagato Kanchi no Jutsu\\Icon.blp"
set SpellThreeDesc[Nagato]="|cFFFFCC00Kanchi no Jutsu|r"
set SpellFourIcon[Nagato]="HERO Nagato Gedo Rinne Tensei no Jutsu\\Icon.blp"
set SpellFourDesc[Nagato]="|cFFFFCC00Gedo: Rinne Tensei no Jutsu|r"
set IconHero[Sasori]=0x42303733
set ModelHero[Sasori]=0x42303732
set SizeHero[Sasori]=1.75
set NameHero[Sasori]="Сасори"
set DescHero[Sasori]="|cFFFE8A0EЧлен Акатки. Искуснейший кукловод,\nкоторый прячется в своей марионетке.|r"
set CHero[Sasori]=hc_Fighter
set RLHero[Sasori]=rl_Hard
set StrHero[Sasori]="|cFFA5FD00 23 + 2.80|r"
set AgiHero[Sasori]="|cFFFFCC00 14 + 1.90|r"
set IntHero[Sasori]="|cFFFFCC00 20 + 2.50|r"
set HPHero[Sasori]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Sasori]))+"|r"
set MPHero[Sasori]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Sasori]))+"|r"
set DamageHero[Sasori]="|cFFFFCC00 72|r"
set DTHero[Sasori]="|cFFFFCC00 250|r"
set DefHero[Sasori]="|cFFFFCC00 3|r"
set SpeedHero[Sasori]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Sasori]))+"|r"
set SpellOneIcon[Sasori]="HERO Sasori v2 Aianteru\\Icon.blp"
set SpellOneDesc[Sasori]="|cFFFFCC00Aianteru|r"
set SpellTwoIcon[Sasori]="HERO Sasori v2 Shikomi Kugutsu Shinshin Happa\\Icon.blp"
set SpellTwoDesc[Sasori]="|cFFFFCC00Shikomi Kugutsu: Shinshin Happa|r"
set SpellThreeIcon[Sasori]="HERO Sasori v2 Ganjona Kesu\\Icon.blp"
set SpellThreeDesc[Sasori]="|cFFFFCC00Ganjona Kesu|r"
set SpellFourIcon[Sasori]="HERO Sasori v2 Kugutsu no Jutsu Gishu Senbon\\Icon.blp"
set SpellFourDesc[Sasori]="|cFFFFCC00Kugutsu no Jutsu: Gishu Senbon|r"
set IconHero[Deidara]=0x42303458
set ModelHero[Deidara]=0x42303453
set SizeHero[Deidara]=1.
set NameHero[Deidara]="Дейдара"
set DescHero[Deidara]="|cFFFE8A0EЧлен Акацки. В бою применяет\nвзрывные техники.|r"
set CHero[Deidara]=hc_Killer
set RLHero[Deidara]=rl_Safe
set StrHero[Deidara]="|cFFFFCC00 13 + 1.60|r"
set AgiHero[Deidara]="|cFFFFCC00 18 + 2.00|r"
set IntHero[Deidara]="|cFFA5FD00 24 + 3.40|r"
set HPHero[Deidara]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Deidara]))+"|r"
set MPHero[Deidara]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Deidara]))+"|r"
set DamageHero[Deidara]="|cFFFFCC00 54|r"
set DTHero[Deidara]="|cFFFFCC00 365|r"
set DefHero[Deidara]="|cFFFFCC00 2|r"
set SpeedHero[Deidara]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Deidara]))+"|r"
set SpellOneIcon[Deidara]="HERO Deidara Kibaku Nendo\\Icon.blp"
set SpellOneDesc[Deidara]="|cFFFFCC00Kibaku Nendo|r"
set SpellTwoIcon[Deidara]="ReplaceableTextures\\CommandButtons\\BTNCancel.blp"
set SpellTwoDesc[Deidara]="|cFFFFCC00None|r"
set SpellThreeIcon[Deidara]="ReplaceableTextures\\CommandButtons\\BTNCancel.blp"
set SpellThreeDesc[Deidara]="|cFFFFCC00None|r"
set SpellFourIcon[Deidara]="ReplaceableTextures\\CommandButtons\\BTNCancel.blp"
set SpellFourDesc[Deidara]="|cFFFFCC00None|r"
set IconHero[Kabuto]=0x42303552
set ModelHero[Kabuto]=0x42303454
set SizeHero[Kabuto]=1.2
set NameHero[Kabuto]="Кабуто"
set DescHero[Kabuto]="|cFFFE8A0EДраконий Мудрец. Бывший подчинённый\nОрочимару, владеет секретными техниками.|r"
set CHero[Kabuto]=hc_Killer
set RLHero[Kabuto]=rl_Safe
set StrHero[Kabuto]="|cFFFFCC00 16 + 2.20|r"
set AgiHero[Kabuto]="|cFFFFCC00 17 + 2.10|r"
set IntHero[Kabuto]="|cFFA5FD00 22 + 2.70|r"
set HPHero[Kabuto]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Kabuto]))+"|r"
set MPHero[Kabuto]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Kabuto]))+"|r"
set DamageHero[Kabuto]="|cFFFFCC00 55|r"
set DTHero[Kabuto]="|cFFFFCC00 128|r"
set DefHero[Kabuto]="|cFFFFCC00 2|r"
set SpeedHero[Kabuto]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Kabuto]))+"|r"
set SpellOneIcon[Kabuto]="HERO Kabuto Senpo Muki Tensei\\Icon.blp"
set SpellOneDesc[Kabuto]="|cFFFFCC00Senpo: Muki Tensei|r"
set SpellTwoIcon[Kabuto]="HERO Kabuto Kumo Sokai\\Icon.blp"
set SpellTwoDesc[Kabuto]="|cFFFFCC00Kumo Sokai|r"
set SpellThreeIcon[Kabuto]="HERO Kabuto Senpo Hakugeki no Jutsu\\Icon.blp"
set SpellThreeDesc[Kabuto]="|cFFFFCC00Senpo: Hakugeki no Jutsu|r"
set SpellFourIcon[Kabuto]="HERO Kabuto Mateki Mugen Onsa\\Icon.blp"
set SpellFourDesc[Kabuto]="|cFFFFCC00Mateki: Mugen Onsa|r"
set IconHero[Hanzo]=0x4230334E
set ModelHero[Hanzo]=0x4230334D
set SizeHero[Hanzo]=1.35
set NameHero[Hanzo]="Ханзо"
set DescHero[Hanzo]="|cFFFE8A0EЛидер Амегакуре. Способен производить \nсмертельный яд.|r"
set CHero[Hanzo]=hc_Killer
set RLHero[Hanzo]=rl_Hard
set StrHero[Hanzo]="|cFFA5FD00 23 + 3.00|r"
set AgiHero[Hanzo]="|cFFFFCC00 22 + 2.70|r"
set IntHero[Hanzo]="|cFFFFCC00 13 + 1.60|r"
set HPHero[Hanzo]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Hanzo]))+"|r"
set MPHero[Hanzo]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Hanzo]))+"|r"
set DamageHero[Hanzo]="|cFFFFCC00 63|r"
set DTHero[Hanzo]="|cFFFFCC00 128|r"
set DefHero[Hanzo]="|cFFFFCC00 3|r"
set SpeedHero[Hanzo]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Hanzo]))+"|r"
set SpellOneIcon[Hanzo]="HERO Hanzo Hagama no Mai Rakuko no Yaiba\\Icon.blp"
set SpellOneDesc[Hanzo]="|cFFFFCC00Hagama no Mai: Rakuko no Yaiba|r"
set SpellTwoIcon[Hanzo]="HERO Hanzo Shunshin no Jutsu\\Icon.blp"
set SpellTwoDesc[Hanzo]="|cFFFFCC00Shunshin no Jutsu|r"
set SpellThreeIcon[Hanzo]="HERO Hanzo Katon Kibaku Enjin\\Icon.blp"
set SpellThreeDesc[Hanzo]="|cFFFFCC00Katon: Kibaku Enjin|r"
set SpellFourIcon[Hanzo]="HERO Hanzo Kuchiyose no Jutsu Ibuse\\Icon.blp"
set SpellFourDesc[Hanzo]="|cFFFFCC00Kuchiyose no Jutsu: Ibuse|r"
set IconHero[Jugo]=0x42303737
set ModelHero[Jugo]=0x42303736
set SizeHero[Jugo]=1.35
set NameHero[Jugo]="Джуго"
set DescHero[Jugo]="|cFFFE8A0EБывший подопытный Орочимару. Иногда\nу него бывают вспышки ярости.|r"
set CHero[Jugo]=hc_Killer
set RLHero[Jugo]=rl_Safe
set StrHero[Jugo]="|cFFA5FD00 22 + 2.70|r"
set AgiHero[Jugo]="|cFFFFCC00 18 + 2.30|r"
set IntHero[Jugo]="|cFFFFCC00 16 + 2.10|r"
set HPHero[Jugo]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Jugo]))+"|r"
set MPHero[Jugo]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Jugo]))+"|r"
set DamageHero[Jugo]="|cFFFFCC00 62|r"
set DTHero[Jugo]="|cFFFFCC00 128|r"
set DefHero[Jugo]="|cFFFFCC00 3|r"
set SpeedHero[Jugo]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Jugo]))+"|r"
set SpellOneIcon[Jugo]="HERO Jugo v1 Kusari\\Icon.blp"
set SpellOneDesc[Jugo]="|cFFFFCC00Kusari|r"
set SpellTwoIcon[Jugo]="HERO Jugo Kassokuken Isshiki\\Icon.blp"
set SpellTwoDesc[Jugo]="|cFFFFCC00Kassokuken: Isshiki|r"
set SpellThreeIcon[Jugo]="HERO Jugo Jotai Ni\\Icon.blp"
set SpellThreeDesc[Jugo]="|cFFFFCC00Jotai Ni|r"
set SpellFourIcon[Jugo]="HERO Jugo v2 Taren Fujizuho\\Icon.blp"
set SpellFourDesc[Jugo]="|cFFFFCC00Taren Fujizuho|r"
set IconHero[Zabuza]=0x42303546
set ModelHero[Zabuza]=0x42303545
set SizeHero[Zabuza]=1.35
set NameHero[Zabuza]="Забуза"
set DescHero[Zabuza]="|cFFFE8A0EНукенин Киригакуре. Владеет мечом\nKubikiribocho. Мастер бесшумных убийств.|r"
set CHero[Zabuza]=hc_Killer
set RLHero[Zabuza]=rl_Hard
set StrHero[Zabuza]="|cFFA5FD00 23 + 2.70|r"
set AgiHero[Zabuza]="|cFFFFCC00 17 + 2.30|r"
set IntHero[Zabuza]="|cFFFFCC00 14 + 1.90|r"
set HPHero[Zabuza]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Zabuza]))+"|r"
set MPHero[Zabuza]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Zabuza]))+"|r"
set DamageHero[Zabuza]="|cFFFFCC00 65|r"
set DTHero[Zabuza]="|cFFFFCC00 128|r"
set DefHero[Zabuza]="|cFFFFCC00 2|r"
set SpeedHero[Zabuza]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Zabuza]))+"|r"
set SpellOneIcon[Zabuza]="HERO Zabuza Ninpo Kirigakure no Jutsu\\Icon.blp"
set SpellOneDesc[Zabuza]="|cFFFFCC00Ninpo: Kirigakure no Jutsu|r"
set SpellTwoIcon[Zabuza]="HERO Zabuza Mizu Bunshin no Jutsu\\Icon.blp"
set SpellTwoDesc[Zabuza]="|cFFFFCC00Mizu Bunshin no Jutsu|r"
set SpellThreeIcon[Zabuza]="HERO Zabuza Kubikiribocho\\Icon.blp"
set SpellThreeDesc[Zabuza]="|cFFFFCC00Kubikiribocho|r"
set SpellFourIcon[Zabuza]="HERO Zabuza Suiton Daibakufu no Jutsu\\Icon.blp"
set SpellFourDesc[Zabuza]="|cFFFFCC00Suiton: Daibakufu no Jutsu|r"
set IconHero[Han]=0x42303539
set ModelHero[Han]=0x42303538
set SizeHero[Han]=1.55
set NameHero[Han]="Хан"
set DescHero[Han]="|cFFFE8A0EДжинчуурики Пятихвостого. Мастер\nтайдзюцу, носит паровую броню.|r"
set CHero[Han]=hc_Fighter
set RLHero[Han]=rl_Hard
set StrHero[Han]="|cFFA5FD00 26 + 3.20|r"
set AgiHero[Han]="|cFFFFCC00 16 + 2.20|r"
set IntHero[Han]="|cFFFFCC00 13 + 1.60|r"
set HPHero[Han]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Han]))+"|r"
set MPHero[Han]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Han]))+"|r"
set DamageHero[Han]="|cFFFFCC00 66|r"
set DTHero[Han]="|cFFFFCC00 128|r"
set DefHero[Han]="|cFFFFCC00 0|r"
set SpeedHero[Han]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Han]))+"|r"
set SpellOneIcon[Han]="HERO Han Fungokyaku\\Icon.blp"
set SpellOneDesc[Han]="|cFFFFCC00Fungokyaku|r"
set SpellTwoIcon[Han]="HERO Han Funsuiken\\Icon.blp"
set SpellTwoDesc[Han]="|cFFFFCC00Funsuiken|r"
set SpellThreeIcon[Han]="HERO PAS Han Joki no Yoroi\\Icon.blp"
set SpellThreeDesc[Han]="|cFFFFCC00Joki no Yoroi|r"
set SpellFourIcon[Han]="HERO Han Tsunoori\\Icon.blp"
set SpellFourDesc[Han]="|cFFFFCC00Tsunoori|r"
set IconHero[Orochimaru]=0x42303057
set ModelHero[Orochimaru]=0x4230314C
set SizeHero[Orochimaru]=1.2
set NameHero[Orochimaru]="Орочимару"
set DescHero[Orochimaru]="|cFFFE8A0EНукенин Конохагакуре. Владеет змеиными\nтехниками, очень живучий человек.|r"
set CHero[Orochimaru]=hc_Fighter
set RLHero[Orochimaru]=rl_Hard
set StrHero[Orochimaru]="|cFFFFCC00 15 + 2.00|r"
set AgiHero[Orochimaru]="|cFFA5FD00 23 + 2.80|r"
set IntHero[Orochimaru]="|cFFFFCC00 20 + 2.50|r"
set HPHero[Orochimaru]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Orochimaru]))+"|r"
set MPHero[Orochimaru]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Orochimaru]))+"|r"
set DamageHero[Orochimaru]="|cFFFFCC00 61|r"
set DTHero[Orochimaru]="|cFFFFCC00 128|r"
set DefHero[Orochimaru]="|cFFFFCC00 7|r"
set SpeedHero[Orochimaru]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Orochimaru]))+"|r"
set SpellOneIcon[Orochimaru]="HERO Orochimaru Sennei Tajashu\\Icon.blp"
set SpellOneDesc[Orochimaru]="|cFFFFCC00Sen'ei Tajashu|r"
set SpellTwoIcon[Orochimaru]="HERO Orochimaru Kusanagi\\Icon.blp"
set SpellTwoDesc[Orochimaru]="|cFFFFCC00Kusanagi no Tsurugi|r"
set SpellThreeIcon[Orochimaru]="HERO Orochimaru Sanjuu Rashoumon\\Icon.blp"
set SpellThreeDesc[Orochimaru]="|cFFFFCC00Sanju Rashomon|r"
set SpellFourIcon[Orochimaru]="HERO Orochimaru Kuoto Saise no Jutsu\\Icon.blp"
set SpellFourDesc[Orochimaru]="|cFFFFCC00Kuoto Saise no Jutsu|r"
set IconHero[Suigetsu]=0x42303451
set ModelHero[Suigetsu]=0x42303450
set SizeHero[Suigetsu]=1.
set NameHero[Suigetsu]="Суйгетсу"
set DescHero[Suigetsu]="|cFFFE8A0EНукенин Киригакуре. Способен превращать\nсебя в воду.|r"
set CHero[Suigetsu]=hc_Fighter
set RLHero[Suigetsu]=rl_Hard
set StrHero[Suigetsu]="|cFFFFCC00 20 + 2.20|r"
set AgiHero[Suigetsu]="|cFFA5FD00 20 + 3.00|r"
set IntHero[Suigetsu]="|cFFFFCC00 12 + 1.50|r"
set HPHero[Suigetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Suigetsu]))+"|r"
set MPHero[Suigetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Suigetsu]))+"|r"
set DamageHero[Suigetsu]="|cFFFFCC00 55|r"
set DTHero[Suigetsu]="|cFFFFCC00 128|r"
set DefHero[Suigetsu]="|cFFFFCC00 3|r"
set SpeedHero[Suigetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Suigetsu]))+"|r"
set SpellOneIcon[Suigetsu]="HERO Suigetsu v2 Mizudeppo Nicho\\Icon.blp"
set SpellOneDesc[Suigetsu]="|cFFFFCC00Mizudeppo: Nicho|r"
set SpellTwoIcon[Suigetsu]="HERO Suigetsu v1 Suiton Gosuiwan no Jutsu\\Icon.blp"
set SpellTwoDesc[Suigetsu]="|cFFFFCC00Suiton: Gosuiwan no Jutsu|r"
set SpellThreeIcon[Suigetsu]="HERO Suigetsu v2 Suika no Jutsu\\Icon.blp"
set SpellThreeDesc[Suigetsu]="|cFFFFCC00Suika no Jutsu|r"
set SpellFourIcon[Suigetsu]="HERO Suigetsu v2 Suiton Tate Eboshi\\Icon.blp"
set SpellFourDesc[Suigetsu]="|cFFFFCC00Suiton: Tate Eboshi|r"
set IconHero[Haku]=0x4230304E
set ModelHero[Haku]=0x4230314F
set SizeHero[Haku]=1.2
set NameHero[Haku]="Хаку"
set DescHero[Haku]="|cFFFE8A0EНукенин Киригакуре. Способен использовать\nодновременно элементы Ветра и Воды,\nобразуя элемент Льда.|r"
set CHero[Haku]=hc_Killer
set RLHero[Haku]=rl_Hard
set StrHero[Haku]="|cFFFFCC00 14 + 1.70|r"
set AgiHero[Haku]="|cFFA5FD00 20 + 2.60|r"
set IntHero[Haku]="|cFFFFCC00 18 + 2.40|r"
set HPHero[Haku]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Haku]))+"|r"
set MPHero[Haku]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Haku]))+"|r"
set DamageHero[Haku]="|cFFFFCC00 50|r"
set DTHero[Haku]="|cFFFFCC00 500|r"
set DefHero[Haku]="|cFFFFCC00 3|r"
set SpeedHero[Haku]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Haku]))+"|r"
set SpellOneIcon[Haku]="HERO Haku v1 Hijutsu Sensatsu Suisho\\Icon.blp"
set SpellOneDesc[Haku]="|cFFFFCC00Hijutsu: Sensatsu Suisho|r"
set SpellTwoIcon[Haku]="HERO Haku v1 Shunshin no Jutsu\\Icon.blp"
set SpellTwoDesc[Haku]="|cFFFFCC00Shunshin no Jutsu|r"
set SpellThreeIcon[Haku]="HERO Haku Hissatsu Hyoso\\Icon.blp"
set SpellThreeDesc[Haku]="|cFFFFCC00Hissatsu Hyoso|r"
set SpellFourIcon[Haku]="HERO Haku v1 Hijutsu Makyo Hyosho\\Icon.blp"
set SpellFourDesc[Haku]="|cFFFFCC00Hijutsu: Makyo Hyosho|r"
set IconHero[Mu]=0x42303542
set ModelHero[Mu]=0x42303541
set SizeHero[Mu]=1.4
set NameHero[Mu]="Му"
set DescHero[Mu]="|cFFFE8A0EВторой Тсучикаге. Владеет Джинтоном\nи способен полностью скрывать своё\nприсутствие.|r"
set CHero[Mu]=hc_Killer
set RLHero[Mu]=rl_Safe
set StrHero[Mu]="|cFFFFCC00 15 + 2.00|r"
set AgiHero[Mu]="|cFFA5FD00 20 + 2.50|r"
set IntHero[Mu]="|cFFFFCC00 20 + 2.50|r"
set HPHero[Mu]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Mu]))+"|r"
set MPHero[Mu]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Mu]))+"|r"
set DamageHero[Mu]="|cFFFFCC00 55|r"
set DTHero[Mu]="|cFFFFCC00 128|r"
set DefHero[Mu]="|cFFFFCC00 6|r"
set SpeedHero[Mu]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Mu]))+"|r"
set SpellOneIcon[Mu]="HERO PAS Mu Mujin Meisai\\Icon.blp"
set SpellOneDesc[Mu]="|cFFFFCC00Mujin Meisai|r"
set SpellTwoIcon[Mu]="HERO Mu Levitation\\Icon.blp"
set SpellTwoDesc[Mu]="|cFFFFCC00Doton: Keijugan no Jutsu|r"
set SpellThreeIcon[Mu]="HERO Mu Bunshin\\Icon.blp"
set SpellThreeDesc[Mu]="|cFFFFCC00Bunretsu no Jutsu|r"
set SpellFourIcon[Mu]="HERO Mu Genkai Hakuri no Jutsu\\Icon.blp"
set SpellFourDesc[Mu]="|cFFFFCC00Jinton: Genkai Hakuri: Hashira|r"
set IconHero[Sasuke]=0x42303058
set ModelHero[Sasuke]=0x4230314B
set SizeHero[Sasuke]=1.25
set NameHero[Sasuke]="Саске"
set DescHero[Sasuke]="|cFFFE8A0EНукенин Конохагакуре. Обладает\nРиннеганом.|r"
set CHero[Sasuke]=hc_Killer
set RLHero[Sasuke]=rl_Safe
set StrHero[Sasuke]="|cFFFFCC00 15 + 2.00|r"
set AgiHero[Sasuke]="|cFFA5FD00 22 + 2.70|r"
set IntHero[Sasuke]="|cFFFFCC00 17 + 2.20|r"
set HPHero[Sasuke]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Sasuke]))+"|r"
set MPHero[Sasuke]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Sasuke]))+"|r"
set DamageHero[Sasuke]="|cFFFFCC00 60|r"
set DTHero[Sasuke]="|cFFFFCC00 128|r"
set DefHero[Sasuke]="|cFFFFCC00 3|r"
set SpeedHero[Sasuke]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Sasuke]))+"|r"
set SpellOneIcon[Sasuke]="HERO Sasuke Chidori\\Icon.blp"
set SpellOneDesc[Sasuke]="|cFFFFCC00Chidori|r"
set SpellTwoIcon[Sasuke]="HERO Sasuke Katon no Jutsu\\Icon.blp"
set SpellTwoDesc[Sasuke]="|cFFFFCC00Katon no Jutsu|r"
set SpellThreeIcon[Sasuke]="HERO Sasuke Iatsu Sharingan\\Icon.blp"
set SpellThreeDesc[Sasuke]="|cFFFFCC00Iatsu Sharingan|r"
set SpellFourIcon[Sasuke]="HERO Sasuke Kuchiyose no Jutsu Aoda\\Icon.blp"
set SpellFourDesc[Sasuke]="|cFFFFCC00Kuchiyose no Jutsu: Aoda|r"
set IconHero[Itachi]=0x42303050
set ModelHero[Itachi]=0x42303150
set SizeHero[Itachi]=1.25
set NameHero[Itachi]="Итачи"
set DescHero[Itachi]="|cFFFE8A0EНукенин Конохагакуре. Гений клана Учиха.\nМастер гендзюцу.|r"
set CHero[Itachi]=hc_Killer
set RLHero[Itachi]=rl_Hard
set StrHero[Itachi]="|cFFFFCC00 17 + 2.10|r"
set AgiHero[Itachi]="|cFFA5FD00 21 + 2.70|r"
set IntHero[Itachi]="|cFFFFCC00 20 + 2.50|r"
set HPHero[Itachi]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Itachi]))+"|r"
set MPHero[Itachi]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Itachi]))+"|r"
set DamageHero[Itachi]="|cFFFFCC00 64|r"
set DTHero[Itachi]="|cFFFFCC00 128|r"
set DefHero[Itachi]="|cFFFFCC00 6|r"
set SpeedHero[Itachi]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Itachi]))+"|r"
set SpellOneIcon[Itachi]="HERO Itachi Katon Goukakyuu\\Icon.blp"
set SpellOneDesc[Itachi]="|cFFFFCC00Katon: Gokakyu no Jutsu|r"
set SpellTwoIcon[Itachi]="HERO Itachi Katon Hosenka Tsumabeni\\Icon.blp"
set SpellTwoDesc[Itachi]="|cFFFFCC00Katon: Hosenka Tsumabeni|r"
set SpellThreeIcon[Itachi]="HERO Itachi Karasu Bunshin\\Icon.blp"
set SpellThreeDesc[Itachi]="|cFFFFCC00Karasu Bunshin no Jutsu|r"
set SpellFourIcon[Itachi]="HERO Itachi Izanami\\Icon.blp"
set SpellFourDesc[Itachi]="|cFFFFCC00Izanami|r"
set IconHero[Gengetsu]=0x42303642
set ModelHero[Gengetsu]=0x42303641
set SizeHero[Gengetsu]=1.
set NameHero[Gengetsu]="Генгетсу"
set DescHero[Gengetsu]="|cFFFE8A0EВторой Мизукаге. Владеет редкими\nи сильными техниками.|r"
set CHero[Gengetsu]=hc_Killer
set RLHero[Gengetsu]=rl_Safe
set StrHero[Gengetsu]="|cFFFFCC00 13 + 1.70|r"
set AgiHero[Gengetsu]="|cFFFFCC00 17 + 2.10|r"
set IntHero[Gengetsu]="|cFFA5FD00 25 + 3.20|r"
set HPHero[Gengetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Gengetsu]))+"|r"
set MPHero[Gengetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Gengetsu]))+"|r"
set DamageHero[Gengetsu]="|cFFFFCC00 50|r"
set DTHero[Gengetsu]="|cFFFFCC00 500|r"
set DefHero[Gengetsu]="|cFFFFCC00 2|r"
set SpeedHero[Gengetsu]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Gengetsu]))+"|r"
set SpellOneIcon[Gengetsu]="HERO Gengetsu Mizudeppou\\Icon.blp"
set SpellOneDesc[Gengetsu]="|cFFFFCC00Mizudeppo no Jutsu|r"
set SpellTwoIcon[Gengetsu]="HERO Gengetsu Ouhamaguri\\Icon.blp"
set SpellTwoDesc[Gengetsu]="|cFFFFCC00Kuchiyose no Jutsu: Ohamaguri|r"
set SpellThreeIcon[Gengetsu]="HERO Gengetsu Suika no Jutsu\\Icon.blp"
set SpellThreeDesc[Gengetsu]="|cFFFFCC00Suika no Jutsu|r"
set SpellFourIcon[Gengetsu]="HERO Gengetsu Jockey Boy\\Icon.blp"
set SpellFourDesc[Gengetsu]="|cFFFFCC00Jokey Boy|r"
set IconHero[Yamato]=0x42303531
set ModelHero[Yamato]=0x4230345A
set SizeHero[Yamato]=1.3
set NameHero[Yamato]="Ямато"
set DescHero[Yamato]="|cFFFE8A0EАНБУ Конохагакуре. Владеет\nдревесными техниками.|r"
set CHero[Yamato]=hc_Support
set RLHero[Yamato]=rl_Safe
set StrHero[Yamato]="|cFFFFCC00 14 + 1.70|r"
set AgiHero[Yamato]="|cFFFFCC00 17 + 2.30|r"
set IntHero[Yamato]="|cFFA5FD00 21 + 2.70|r"
set HPHero[Yamato]="|cFFFFCC00 "+I2S(R2I(mb_heroesHP[Yamato]))+"|r"
set MPHero[Yamato]="|cFFFFCC00 "+I2S(R2I(mb_heroesMP[Yamato]))+"|r"
set DamageHero[Yamato]="|cFFFFCC00 59|r"
set DTHero[Yamato]="|cFFFFCC00 128|r"
set DefHero[Yamato]="|cFFFFCC00 2|r"
set SpeedHero[Yamato]="|cFFFFCC00 "+I2S(R2I(mb_heroesMS[Yamato]))+"|r"
set SpellOneIcon[Yamato]="HERO Yamato Mokuton Daijurin no Jutsu\\Icon.blp"
set SpellOneDesc[Yamato]="|cFFFFCC00Mokuton: Daijurin no Jutsu|r"
set SpellTwoIcon[Yamato]="HERO Yamato Mokuton Mokusatsu Shibari no Jutsu\\Icon.blp"
set SpellTwoDesc[Yamato]="|cFFFFCC00Mokuton: Mokusatsu Shibari no Jutsu|r"
set SpellThreeIcon[Yamato]="HERO Yamato Mokuton Shichuro no Jutsu\\Icon.blp"
set SpellThreeDesc[Yamato]="|cFFFFCC00Mokuton: Shichuro no Jutsu|r"
set SpellFourIcon[Yamato]="HERO Yamato Moku Bunshin no Jutsu\\Icon.blp"
set SpellFourDesc[Yamato]="|cFFFFCC00Moku Bunshin no Jutsu|r"
loop
exitwhen i>10
if i!=5 then
set p=Player(i)
set id=GetPlayerId(p)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER and not udg_VM_Log[id]then
set udg_LMB[id]=CreateMultiboard()
set PickMBName[id]="|cFFFF0303ВЫБЕРИТЕ ГЕРОЯ|r"
call MultiboardSetTitleText(udg_LMB[id],PickMBName[id])
call MultiboardSetColumnCount(udg_LMB[id],1)
call MultiboardSetRowCount(udg_LMB[id],mb_rowCount)
call mbiVal(udg_LMB[id],0,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp","|cFF959697Биография|r")
call mbiStyle(udg_LMB[id],0,0,true,true)
call mbiWidth(udg_LMB[id],0,0,mb_rowWidth)
call mbiVal(udg_LMB[id],1,0,null,null)
call mbiStyle(udg_LMB[id],1,0,false,false)
call mbiWidth(udg_LMB[id],1,0,mb_rowWidth)
call mbiVal(udg_LMB[id],2,0,null,null)
call mbiStyle(udg_LMB[id],2,0,false,false)
call mbiWidth(udg_LMB[id],2,0,mb_rowWidth)
call mbiVal(udg_LMB[id],3,0,null,null)
call mbiStyle(udg_LMB[id],3,0,false,false)
call mbiWidth(udg_LMB[id],3,0,mb_rowWidth)
call mbiVal(udg_LMB[id],4,0,null,"|cFF959697Класс и рекомендации|r")
call mbiStyle(udg_LMB[id],4,0,true,false)
call mbiWidth(udg_LMB[id],4,0,mb_rowWidth)
call mbiVal(udg_LMB[id],5,0,"ReplaceableTextures\\CommandButtons\\BTNPriestAdept.blp","|cFF0090D4Класс:|r")
call mbiStyle(udg_LMB[id],5,0,true,true)
call mbiWidth(udg_LMB[id],5,0,mb_rowWidth)
call mbiVal(udg_LMB[id],6,0,"ReplaceableTextures\\CommandButtons\\BTNMove.blp","|cFF0090D4Рекомендуемая линия:|r")
call mbiStyle(udg_LMB[id],6,0,true,true)
call mbiWidth(udg_LMB[id],6,0,mb_rowWidth)
call mbiVal(udg_LMB[id],7,0,null,null)
call mbiStyle(udg_LMB[id],7,0,false,false)
call mbiWidth(udg_LMB[id],7,0,mb_rowWidth)
call mbiVal(udg_LMB[id],8,0,null,"|cFF959697Характеристики|r")
call mbiStyle(udg_LMB[id],8,0,true,false)
call mbiWidth(udg_LMB[id],8,0,mb_rowWidth)
call mbiVal(udg_LMB[id],9,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-str.blp","|cFFC6D2FFСила:|r")
call mbiStyle(udg_LMB[id],9,0,true,true)
call mbiWidth(udg_LMB[id],9,0,mb_rowWidth)
call mbiVal(udg_LMB[id],10,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-agi.blp","|cFFC6D2FFЛовкость:|r")
call mbiStyle(udg_LMB[id],10,0,true,true)
call mbiWidth(udg_LMB[id],10,0,mb_rowWidth)
call mbiVal(udg_LMB[id],11,0,"UI\\Widgets\\Console\\Human\\infocard-heroattributes-int.blp","|cFFC6D2FFРазум:|r")
call mbiStyle(udg_LMB[id],11,0,true,true)
call mbiWidth(udg_LMB[id],11,0,mb_rowWidth)
call mbiVal(udg_LMB[id],12,0,"ReplaceableTextures\\CommandButtons\\BTNSkillz.blp","|cFFFF5000Здоровье:|r")
call mbiStyle(udg_LMB[id],12,0,true,true)
call mbiWidth(udg_LMB[id],12,0,mb_rowWidth)
call mbiVal(udg_LMB[id],13,0,"ReplaceableTextures\\CommandButtons\\BTNStatUp.blp","|cFFABA8FFЧакра:|r")
call mbiStyle(udg_LMB[id],13,0,true,true)
call mbiWidth(udg_LMB[id],13,0,mb_rowWidth)
call mbiVal(udg_LMB[id],14,0,"ReplaceableTextures\\CommandButtons\\BTNTransmute.blp","|cFFFF0303Урон:|r")
call mbiStyle(udg_LMB[id],14,0,true,true)
call mbiWidth(udg_LMB[id],14,0,mb_rowWidth)
call mbiVal(udg_LMB[id],15,0,"ReplaceableTextures\\CommandButtons\\BTNBearBlink.blp","|cFFE5BC97Радиус атаки:|r")
call mbiStyle(udg_LMB[id],15,0,true,true)
call mbiWidth(udg_LMB[id],15,0,mb_rowWidth)
call mbiVal(udg_LMB[id],16,0,"ReplaceableTextures\\CommandButtons\\BTNHelmutPurple.blp","|cFF20C000Защита:|r")
call mbiStyle(udg_LMB[id],16,0,true,true)
call mbiWidth(udg_LMB[id],16,0,mb_rowWidth)
call mbiVal(udg_LMB[id],17,0,"ReplaceableTextures\\CommandButtons\\BTNBootsOfSpeed.blp","|cFFB56B72Скорость передвижения:|r")
call mbiStyle(udg_LMB[id],17,0,true,true)
call mbiWidth(udg_LMB[id],17,0,mb_rowWidth)
call mbiVal(udg_LMB[id],18,0,null,null)
call mbiStyle(udg_LMB[id],18,0,false,false)
call mbiWidth(udg_LMB[id],18,0,mb_rowWidth)
call mbiVal(udg_LMB[id],19,0,null,"|cFF959697Дзюцу|r")
call mbiStyle(udg_LMB[id],19,0,true,false)
call mbiWidth(udg_LMB[id],19,0,mb_rowWidth)
call mbiVal(udg_LMB[id],20,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp",null)
call mbiStyle(udg_LMB[id],20,0,true,true)
call mbiWidth(udg_LMB[id],20,0,mb_rowWidth)
call mbiVal(udg_LMB[id],21,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp",null)
call mbiStyle(udg_LMB[id],21,0,true,true)
call mbiWidth(udg_LMB[id],21,0,mb_rowWidth)
call mbiVal(udg_LMB[id],22,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp",null)
call mbiStyle(udg_LMB[id],22,0,true,true)
call mbiWidth(udg_LMB[id],22,0,mb_rowWidth)
call mbiVal(udg_LMB[id],23,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp",null)
call mbiStyle(udg_LMB[id],23,0,true,true)
call mbiWidth(udg_LMB[id],23,0,mb_rowWidth)
call mbiVal(udg_LMB[id],24,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp",null)
call mbiStyle(udg_LMB[id],24,0,true,true)
call mbiWidth(udg_LMB[id],24,0,mb_rowWidth)
if GetLocalPlayer()==p then
call MultiboardDisplay(udg_LMB[id],true)
endif
call MultiboardMinimize(udg_LMB[id],false)
set udg_CamT[id]=true
endif
endif
set i=i+1
endloop
set i=0
loop
exitwhen i>hero_number
if i==5 then
set placex=0
set placey=1
elseif i==9 then
set placex=0
set placey=2
call CreateDestructable(idEmpty,x+192.+64.*placex,y-64.*placey,0,1.,0)
elseif i==12 then
set placex=5
set placey=0
call CreateDestructable(idEmpty,x+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+128.+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+192.+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+128.+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+192.+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.*placex,y-128.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.+64.*placex,y-128.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+128.+64.*placex,y-128.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+192.+64.*placex,y-128.-64.*placey,0,1.,0)
set placex=0
set placey=4
elseif i==16 then
set placex=0
set placey=5
elseif i==20 then
set placex=0
set placey=5
call CreateDestructable(idEmpty,x+192.+64.*placex,y-64.-64.*placey,0,1.,0)
set placex=5
set placey=4
call CreateDestructable(idEmpty,x+192.+64.*placex,y-128.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+128.+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+192.+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+128.+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+192.+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.*placex,y-128.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.+64.*placex,y-128.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+128.+64.*placex,y-128.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+192.+64.*placex,y-128.-64.*placey,0,1.,0)
set placex=0
set placey=6
elseif i==23 then
set placex=0
set placey=8
elseif i==27 then
set placex=0
set placey=9
elseif i==31 then
set placex=0
set placey=10
elseif i==35 then
set placex=5
set placey=8
elseif i==39 then
set placex=5
set placey=9
call CreateDestructable(idEmpty,x+128.+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+192.+64.*placex,y-0.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+64.+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+128.+64.*placex,y-64.-64.*placey,0,1.,0)
call CreateDestructable(idEmpty,x+192.+64.*placex,y-64.-64.*placey,0,1.,0)
endif
if i>0 then
call SaveBoolean(Hash,heroes_pick[i],0,true)
call SaveDestructableHandle(Hash,heroes_pick[i],1,CreateDestructable(IconHero[i],x+64.*placex,y-64.*placey,0,1.,0))
call SaveInteger(Hash,heroes_pick[i],2,ModelHero[i])
call SaveReal(Hash,heroes_pick[i],3,SizeHero[i])
call SaveStr(Hash,heroes_pick[i],4,"|cFFFF0303"+StringCase(NameHero[i],true)+"|r")
call SaveStr(Hash,heroes_pick[i],5,DescHero[i])
call SaveStr(Hash,heroes_pick[i],6,CHero[i])
call SaveStr(Hash,heroes_pick[i],7,RLHero[i])
call SaveStr(Hash,heroes_pick[i],8,StrHero[i])
call SaveStr(Hash,heroes_pick[i],9,AgiHero[i])
call SaveStr(Hash,heroes_pick[i],10,IntHero[i])
call SaveStr(Hash,heroes_pick[i],11,HPHero[i])
call SaveStr(Hash,heroes_pick[i],12,MPHero[i])
call SaveStr(Hash,heroes_pick[i],13,DamageHero[i])
call SaveStr(Hash,heroes_pick[i],14,DTHero[i])
call SaveStr(Hash,heroes_pick[i],15,DefHero[i])
call SaveStr(Hash,heroes_pick[i],16,SpeedHero[i])
call SaveStr(Hash,heroes_pick[i],17,SpellOneIcon[i])
call SaveStr(Hash,heroes_pick[i],18,StringCase(SpellOneDesc[i],true))
call SaveStr(Hash,heroes_pick[i],19,SpellTwoIcon[i])
call SaveStr(Hash,heroes_pick[i],20,StringCase(SpellTwoDesc[i],true))
call SaveStr(Hash,heroes_pick[i],21,SpellThreeIcon[i])
call SaveStr(Hash,heroes_pick[i],22,StringCase(SpellThreeDesc[i],true))
call SaveStr(Hash,heroes_pick[i],23,SpellFourIcon[i])
call SaveStr(Hash,heroes_pick[i],24,StringCase(SpellFourDesc[i],true))
if i!=Danzo and i!=Gai and i!=Gengetsu and i!=Haku and i!=Hanzo and i!=Hashirama and i!=Hidan and i!=Itachi and i!=Jiraya and i!=Madara and i!=Minato and i!=Mu and i!=Nagato and i!=Naruto and i!=Obito and i!=Onoki and i!=Sai and i!=Sasori and i!=Sasuke and i!=Zabuza then
call SaveStr(Hash,heroes_pick[i],25,attributes)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Rodo tu Ninja|r",true))
else
if i==Danzo then
call SaveStr(Hash,heroes_pick[i],25,danzoSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Hashirama Saibo|r",true))
elseif i==Gai then
call SaveStr(Hash,heroes_pick[i],25,gaiSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Sekizo|r",true))
elseif i==Gengetsu then
call SaveStr(Hash,heroes_pick[i],25,gengetsuSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Mizufusen no Jutsu|r",true))
elseif i==Haku then
call SaveStr(Hash,heroes_pick[i],25,hakuSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Hyoton: Hyogan Domu|r",true))
elseif i==Hanzo then
call SaveStr(Hash,heroes_pick[i],25,hanzoSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Seppuku|r",true))
elseif i==Hashirama then
call SaveStr(Hash,heroes_pick[i],25,hashiramaSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Sennin Modo|r",true))
elseif i==Hidan then
call SaveStr(Hash,heroes_pick[i],25,hidanSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Inori|r",true))
elseif i==Itachi then
call SaveStr(Hash,heroes_pick[i],25,itachiSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Mangekyo Sharingan|r",true))
elseif i==Jiraya then
call SaveStr(Hash,heroes_pick[i],25,jiraiyaSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Senpo: Ryosei no Jutsu|r",true))
elseif i==Madara then
call SaveStr(Hash,heroes_pick[i],25,madaraSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Susanoo no Ribu|r",true))
elseif i==Minato then
call SaveStr(Hash,heroes_pick[i],25,minatoSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Fuinjutsu: Shiki Fujin|r",true))
elseif i==Mu then
call SaveStr(Hash,heroes_pick[i],25,muSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Kanchi no Jutsu|r",true))
elseif i==Nagato then
call SaveStr(Hash,heroes_pick[i],25,nagatoSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Rikudo no Jutsu|r",true))
elseif i==Naruto then
call SaveStr(Hash,heroes_pick[i],25,narutoSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Kurama Chakra Modo|r",true))
elseif i==Obito then
call SaveStr(Hash,heroes_pick[i],25,obitoSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Hashirama Saibo|r",true))
elseif i==Onoki then
call SaveStr(Hash,heroes_pick[i],25,onokiSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Iwa Bunshin no Jutsu|r",true))
elseif i==Sai then
call SaveStr(Hash,heroes_pick[i],25,saiSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Choju Giga: Taka|r",true))
elseif i==Sasori then
call SaveStr(Hash,heroes_pick[i],25,sasoriSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Ranto de Zeijaku|r",true))
elseif i==Sasuke then
call SaveStr(Hash,heroes_pick[i],25,sasukeSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Eien no Mangekyo Sharingan|r",true))
elseif i==Zabuza then
call SaveStr(Hash,heroes_pick[i],25,zabuzaSpell)
call SaveStr(Hash,heroes_pick[i],26,StringCase("|cFFFFCC00Kijin|r",true))
endif
endif
call SaveInteger(Hash,heroes_pick[i],27,0)
call CreateTrack("4x4Trackable.MDX",x+64.*placex,y-64.*placey,heroes_pick[i],gg_trg_Track,gg_trg_Click)
endif
set placex=placex+1
set i=i+1
endloop
set PickRandom=CreateDestructable(0x4230344A,xFilter,yFilter,0,1.,0)
call CreateTrack("4x4Trackable.MDX",xFilter,yFilter,0,gg_trg_Track,gg_trg_Click)
set yFilter=yFilter-64.
set PickFilterCancel=CreateDestructable(0x42303152,xFilter,yFilter,0,1.,0)
call CreateTrack("4x4Trackable.MDX",xFilter,yFilter,-1,gg_trg_Track,gg_trg_Click)
set xFilter=xFilter+96.
set yFilter=yFilter+64.
set PickFilterKiller=CreateDestructable(0x42303432,xFilter,yFilter,0,1.,0)
call CreateTrack("4x4Trackable.MDX",xFilter,yFilter,-2,gg_trg_Track,gg_trg_Click)
set yFilter=yFilter-64.
set PickFilterFighter=CreateDestructable(0x42303434,xFilter,yFilter,0,1.,0)
call CreateTrack("4x4Trackable.MDX",xFilter,yFilter,-3,gg_trg_Track,gg_trg_Click)
set yFilter=yFilter-64.
set PickFilterSupport=CreateDestructable(0x4230354E,xFilter,yFilter,0,1.,0)
call CreateTrack("4x4Trackable.MDX",xFilter,yFilter,-4,gg_trg_Track,gg_trg_Click)
set yFilter=yFilter-64.
set PickFilterSpecailist=CreateDestructable(0x42303032,xFilter,yFilter,0,1.,0)
call CreateTrack("4x4Trackable.MDX",xFilter,yFilter,-5,gg_trg_Track,gg_trg_Click)
call TimerStart(CreateTimer(),.01,true,function HeroPick_Camera_Timer)
call EnableTrigger(gg_trg_Click)
call EnableTrigger(gg_trg_Track)
if captainMode then
call CaptainModeStart(h,idEmpty)
else
set PickTime=90
set i=0
loop
set p=Player(i)
if udg_CamT[i]then
call MultiboardSetTitleText(udg_LMB[i],PickMBName[i]+" - 1:"+I2S(PickTime-60))
endif
set i=i+1
exitwhen i>10
endloop
call TimerStart(CreateTimer(),1.,true,function cj_anonym__151)
endif
set p=null
endfunction
function cj_anonym__152 takes nothing returns nothing
local real duration=4.
call PingMinimapEx(GetRectCenterX(gg_rct_Creeps_Konoha_Up_4),GetRectCenterY(gg_rct_Creeps_Konoha_Up_4),duration,255,0,0,false)
call PingMinimapEx(GetRectCenterX(gg_rct_Creeps_Akatsuki_Up_5),GetRectCenterY(gg_rct_Creeps_Akatsuki_Up_5),duration,255,0,0,false)
call PingMinimapEx(GetRectCenterX(gg_rct_Creeps_Akatsuki_Down_4),GetRectCenterY(gg_rct_Creeps_Akatsuki_Down_4),duration,255,0,0,false)
call PingMinimapEx(GetRectCenterX(gg_rct_Creeps_Konoha_Down_5),GetRectCenterY(gg_rct_Creeps_Konoha_Down_5),duration,255,0,0,false)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"\nВойна в самом разгаре! Что же делать? |cFFFFCC00Укрепить оборону|r на сложной линии или |cFFFFCC00перейти в наступление|r на лёкой? Решать тебе! Не забудь захватить деревни!")
call DestroyTimer(GetExpiredTimer())
endfunction
function CreepsFightStart takes nothing returns nothing
local real x
local real y
local real randomOffset
local real randomDegree
local player p=Player(5)
local integer number=4
local integer max
local integer i=1
local integer idu
local boolean log=true
loop
if number==4 then
if TopLine then
set x=GetRectCenterX(gg_rct_Creeps_Konoha_Up_4)
set y=GetRectCenterY(gg_rct_Creeps_Konoha_Up_4)
set max=6
else
set log=false
endif
elseif number==3 then
if TopLine then
set x=GetRectCenterX(gg_rct_Creeps_Akatsuki_Up_5)
set y=GetRectCenterY(gg_rct_Creeps_Akatsuki_Up_5)
set max=6
else
set log=false
endif
elseif number==2 then
if BotLine then
set x=GetRectCenterX(gg_rct_Creeps_Akatsuki_Down_4)
set y=GetRectCenterY(gg_rct_Creeps_Akatsuki_Down_4)
set max=9
else
set log=false
endif
elseif number==1 then
if BotLine then
set x=GetRectCenterX(gg_rct_Creeps_Konoha_Down_5)
set y=GetRectCenterY(gg_rct_Creeps_Konoha_Down_5)
set max=9
else
set log=false
endif
endif
if log then
loop
set randomOffset=GetRandomReal(100.,200.)
set randomDegree=GetRandomReal(0.,360.)
if i==1 then
set idu=AllianceKonohaForwardID
elseif i==2 then
set idu=AllianceIwaForwardID
elseif i==3 then
set idu=AllianceKiriForwardID
elseif i==4 then
set idu=AllianceTetsuForwardID
elseif i==5 then
set idu=AllianceSunaSupportID
elseif i==6 then
set idu=AllianceKumoSupportID
elseif i==7 then
set idu=AllianceKonohaForwardID
elseif i==8 then
set idu=AllianceTetsuForwardID
elseif i==9 then
set idu=AllianceSunaSupportID
endif
set bj_lastCreatedUnit=CreateUnit(p,idu,x+randomOffset*Cos(randomDegree*bj_DEGTORAD),y+randomOffset*Sin(randomDegree*bj_DEGTORAD),randomDegree)
call UnitAddAbility(bj_lastCreatedUnit,0x41305233)
call UnitAddAbility(bj_lastCreatedUnit,0x4130544F)
call IssueImmediateOrder(bj_lastCreatedUnit,"windwalk")
set i=i+1
exitwhen i>max
endloop
else
set log=true
endif
set i=1
set number=number-1
exitwhen number<=0
endloop
set log=true
set p=Player(11)
set number=4
loop
if number==4 then
if TopLine then
set x=GetRectCenterX(gg_rct_Creeps_Konoha_Up_4)
set y=GetRectCenterY(gg_rct_Creeps_Konoha_Up_4)
set max=9
else
set log=false
endif
elseif number==3 then
if TopLine then
set x=GetRectCenterX(gg_rct_Creeps_Akatsuki_Up_5)
set y=GetRectCenterY(gg_rct_Creeps_Akatsuki_Up_5)
set max=9
else
set log=false
endif
elseif number==2 then
if BotLine then
set x=GetRectCenterX(gg_rct_Creeps_Akatsuki_Down_4)
set y=GetRectCenterY(gg_rct_Creeps_Akatsuki_Down_4)
set max=6
else
set log=false
endif
elseif number==1 then
if BotLine then
set x=GetRectCenterX(gg_rct_Creeps_Konoha_Down_5)
set y=GetRectCenterY(gg_rct_Creeps_Konoha_Down_5)
set max=6
else
set log=false
endif
endif
if log then
loop
set randomOffset=GetRandomReal(100.,200.)
set randomDegree=GetRandomReal(0.,360.)
if i==1 or i==2 or i==3 or i==4 or i==7 or i==8 then
set idu=AkatsukiForwardID
elseif i==5 or i==6 or i==9 then
set idu=AkatsukiSupportID
endif
set bj_lastCreatedUnit=CreateUnit(p,idu,x+randomOffset*Cos(randomDegree*bj_DEGTORAD),y+randomOffset*Sin(randomDegree*bj_DEGTORAD),randomDegree)
call UnitAddAbility(bj_lastCreatedUnit,0x41305233)
call UnitAddAbility(bj_lastCreatedUnit,0x4130544F)
call IssueImmediateOrder(bj_lastCreatedUnit,"windwalk")
set i=i+1
exitwhen i>max
endloop
else
set log=true
endif
set i=1
set number=number-1
exitwhen number<=0
endloop
call TimerStart(CreateTimer(),30.,false,function cj_anonym__152)
set p=null
endfunction
function cj_anonym__153 takes nothing returns nothing
if not udg_GameEnd and WeatherOn then
call WeatherStart()
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function TheBattleBegins takes nothing returns nothing
set preparationOn=false
call ModifyGateBJ(bj_GATEOPERATION_OPEN,gg_dest_B023_0913)
call ModifyGateBJ(bj_GATEOPERATION_OPEN,gg_dest_B023_0933)
call CreepsFightStart()
call BushInvisibility_Init()
call TimerStart(CreateTimer(),WeatherPeriod,true,function cj_anonym__153)
endfunction
function cj_anonym__154 takes nothing returns nothing
call TheBattleBegins()
call DestroyTimerDialog(preparationWindow)
call DestroyTimer(preparationTimer)
endfunction
function Preparation takes nothing returns nothing
set preparationTimer=CreateTimer()
set preparationWindow=CreateTimerDialog(preparationTimer)
call TimerDialogDisplay(preparationWindow,true)
call TimerDialogSetTitle(preparationWindow,"|cFFFF5000ПОДГОТОВКА|r")
call TimerStart(preparationTimer,preparationTime,false,function cj_anonym__154)
endfunction
function cj_anonym__155 takes nothing returns nothing
local integer i=0
loop
if i!=5 and not udg_VM_Log[i]and not udg_CamT[i]and GetWidgetLife(udg_Hero[i])>.405 and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(Player(i))==MAP_CONTROL_USER then
if GetLocalPlayer()==Player(i)then
call CameraSetupApplyForceDuration(gg_cam_CamMain,true,0.)
endif
endif
set i=i+1
exitwhen i>10
endloop
if picksNumberCur==picksNumberMax then
set countDownTime=countDownTime-1.
if countDownTime==700.then
call StopMusic(true)
call Sound("NWHC Start.mp3")
elseif countDownTime<700.and countDownTime>0.then
if countDownTime<=400.and countDownTime>100.then
if countDownTime==400.then
set i=0
loop
if i!=5 and not udg_VM_Log[i]and not udg_CamT[i]and GetWidgetLife(udg_Hero[i])>.405 and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
call SetUnitAnimation(udg_Hero[i],"spell channel")
endif
set i=i+1
exitwhen i>10
endloop
call CameraSetTargetNoiseEx(15.,5.*Pow(10.,3.),true)
call CameraSetSourceNoiseEx(15.,5.*Pow(10.,3.),true)
call DestroyEffect(AddSpecialEffect("Text.mdx",GetRectCenterX(gg_rct_MainRect),GetRectCenterY(gg_rct_MainRect)))
elseif countDownTime==300.then
call CameraSetTargetNoiseEx(20.,5.*Pow(10.,3.),true)
call CameraSetSourceNoiseEx(20.,5.*Pow(10.,3.),true)
elseif countDownTime==200.then
call CameraSetTargetNoiseEx(25.,5.*Pow(10.,3.),true)
call CameraSetSourceNoiseEx(25.,5.*Pow(10.,3.),true)
endif
elseif countDownTime<=100.and countDownTime>0.then
if countDownTime==100.then
call CommandRepickOff()
set i=0
call Sound("Bunshin Poff.wav")
loop
if i!=5 and not udg_VM_Log[i]and not udg_CamT[i]and GetWidgetLife(udg_Hero[i])>.405 and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(udg_Hero[i]),GetWidgetY(udg_Hero[i])))
call SetUnitPosition(udg_Hero[i],udg_Player_StartX[i],udg_Player_StartY[i])
endif
set i=i+1
exitwhen i>10
endloop
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
endif
call TimerStart(CreateTimer(),.025,true,function HeroesMoveText)
endif
elseif countDownTime==0.then
call Preparation()
call TimerStart(CreateTimer(),.25,true,function HeroesCheckLocation)
call MusicStartPlay(1)
call MultiboardMinimize(gamestat_mb,false)
call JutsuSystem_Init()
call TurnOnSomeTriggers()
set i=0
loop
if i!=5 and not udg_VM_Log[i]and not udg_CamT[i]and GetWidgetLife(udg_Hero[i])>.405 and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
call DestroyFogModifier(udg_HeroPickVision[i])
call PauseUnit(udg_Hero[i],false)
call SetUnitInvulnerable(udg_Hero[i],false)
call SetUnitAnimation(udg_Hero[i],"stand")
call RankSystemMarathoner(Player(i))
if GetLocalPlayer()==Player(i)then
call ResetToGameCamera(0.)
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
call PanCameraToTimed(GetWidgetX(udg_Hero[i]),GetWidgetY(udg_Hero[i]),0.)
call ClearSelection()
call SelectUnit(udg_Hero[i],true)
endif
endif
set i=i+1
exitwhen i>10
endloop
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endif
endfunction
function StartTheHeroMode takes integer alliance,integer akatsuki returns nothing
local integer i=0
local player p
loop
exitwhen i>10
set p=Player(i)
if i!=5 and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p)==MAP_CONTROL_USER and not udg_VM_Log[i]then
set udg_HeroPickVision[i]=CreateFogModifierRect(p,FOG_OF_WAR_VISIBLE,bj_mapInitialPlayableArea,true,false)
call FogModifierStart(udg_HeroPickVision[i])
endif
if gs_fm[i]!=null then
call DestroyFogModifier(gs_fm[i])
endif
set i=i+1
endloop
if gs_eff[1]!=null then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,GetPlayerNameColored(udg_Host)+" выбрал мод |cFFFFCC00ВЫБОР ГЕРОЕВ ВРУЧНУЮ|r.")
call InitPick()
elseif gs_eff[2]!=null then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,GetPlayerNameColored(udg_Host)+" выбрал мод |cFFFFCC00СЛУЧАЙНЫЕ ГЕРОИ|r.")
call CreateHeroes()
elseif gs_eff[3]!=null then
if alliance==akatsuki then
set captainMode=true
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,GetPlayerNameColored(udg_Host)+" выбрал |cFFFFCC00КАПИТАН-МОД|r.")
else
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,"Невозможно выбрать |cFFFFCC00КАПИТАН-МОД|r из-за неравного количества игроков.\nБыл автоматически выбран мод |cFFFFCC00ВЫБОР ГЕРОЕВ ВРУЧНУЮ|r.")
endif
call InitPick()
endif
call CameraSetupApplyForceDuration(gg_cam_CamMain,true,0.)
call TimerStart(CreateTimer(),.01,true,function cj_anonym__155)
call InitGameSettingsDestroyNeedEffects(1,2,3,4,5,6,7,8)
call FlushChildHashtable(Hash,GetHandleId(udg_Host))
endfunction
function OutpostAIChecking takes unit u returns nothing
local integer hu=GetHandleId(u)
local real distanceMax=300.
local rect r=LoadRectHandle(Hash,hu,0)
local real randomOffset=GetRandomReal(10.,20.)
local real x1=GetRectCenterX(r)+randomOffset
local real y1=GetRectCenterY(r)+randomOffset
local real distanceCur=DistanceBetweenCoords(GetWidgetX(u),GetWidgetY(u),x1,y1)
if distanceCur>distanceMax then
call IssueImmediateOrder(u,"stop")
call UnitTempSpell(u,0x41313143,0,distanceCur/GetUnitMoveSpeed(u),0,false)
call IssuePointOrder(u,"move",x1,y1)
endif
set r=null
endfunction
function OutpostAI takes nothing returns nothing
local unit tg
call GroupEnumUnitsInRect(bj_lastCreatedGroup,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitOutpost(tg)and GetUnitAbilityLevel(tg,0x41313143)==0 then
call OutpostAIChecking(tg)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
endfunction
function OutpostSelectTarget takes unit c returns nothing
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local player p=GetOwningPlayer(c)
local real lifeenemy=5000.
local real radius=500.
local real dist=500.
local unit tg
local unit tu=null
call GroupEnumUnitsInRange(outpostGrTarget,x,y,radius,null)
loop
set tg=FirstOfGroup(outpostGrTarget)
exitwhen tg==null
if IsUnitEnemy(tg,p)and IsUnitVisible(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitOutpost(tg)then
if GetWidgetLife(tg)<lifeenemy and DistanceBetweenCoords(x,y,GetWidgetX(tg),GetWidgetY(tg))<dist then
set lifeenemy=GetWidgetLife(tg)
set dist=DistanceBetweenCoords(x,y,GetWidgetX(tg),GetWidgetY(tg))
set tu=tg
endif
endif
call GroupRemoveUnit(outpostGrTarget,tg)
endloop
if tu!=null then
if GetInventoryIndexOfItemTypeBJ(c,0x4930304C)>0 then
call UnitUseItemPoint(c,GetItemOfTypeFromUnitBJ(c,0x4930304C),GetWidgetX(tu),GetWidgetY(tu))
elseif GetInventoryIndexOfItemTypeBJ(c,0x4930304B)>0 then
call UnitUseItemPoint(c,GetItemOfTypeFromUnitBJ(c,0x4930304B),GetWidgetX(tu),GetWidgetY(tu))
endif
endif
set p=null
set tg=null
set tu=null
endfunction
function OutpostCheckingEnemy takes nothing returns nothing
local unit tg
call GroupEnumUnitsInRect(outpostGrLoop,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(outpostGrLoop)
exitwhen tg==null
if IsUnitOutpost(tg)and GetUnitAbilityLevel(tg,0x41313143)==0 and GetRandomInt(1,4)==1 then
call OutpostSelectTarget(tg)
endif
call GroupRemoveUnit(outpostGrLoop,tg)
endloop
set tg=null
endfunction
function OutpostRestoreItemCharge takes nothing returns nothing
local item art
local integer maxCharge=3
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitOutpost(tg)then
if GetInventoryIndexOfItemTypeBJ(tg,0x4930304C)>0 then
set art=GetItemOfTypeFromUnitBJ(tg,0x4930304C)
if GetItemCharges(art)<maxCharge then
call SetItemCharges(art,GetItemCharges(art)+1)
endif
elseif GetInventoryIndexOfItemTypeBJ(tg,0x4930304B)>0 then
set art=GetItemOfTypeFromUnitBJ(tg,0x4930304B)
if GetItemCharges(art)<maxCharge then
call SetItemCharges(art,GetItemCharges(art)+1)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set art=null
set tg=null
set g=null
endfunction
function CreateCreepsForOutpost takes string s,rect r,real degree returns nothing
local real x=GetRectCenterX(r)
local real y=GetRectCenterY(r)
local real randomOff
local real randomDegree
local integer i=0
local integer id1
local integer id2
local unit u
local player p
if s=="alliance"then
set p=Player(5)
set id1=AllianceTetsuForwardID
set id2=AllianceSunaSupportID
elseif s=="akatsuki"then
set p=Player(11)
set id1=AkatsukiForwardID
set id2=AkatsukiSupportID
endif
loop
set randomOff=GetRandomReal(10.,20.)
set randomDegree=GetRandomReal(-3.,3.)
if i<outpostNumberForward then
set u=CreateUnit(p,id1,x+randomOff,y+randomOff,degree+randomDegree)
if id1==AllianceTetsuForwardID then
set id1=AllianceKonohaForwardID
endif
if i==0 then
call UnitAddAbility(u,0x41313746)
call UnitAddAbility(u,0x41313132)
endif
else
set u=CreateUnit(p,id2,x+randomOff,y+randomOff,degree+randomDegree)
endif
set i=i+1
exitwhen i==outpostNumber
endloop
set u=null
set p=null
endfunction
function CreateOutpostsHealers takes nothing returns nothing
local player p
local unit u
if TopLine then
set p=Player(5)
set u=CreateUnit(p,AllianceHealerID,GetRectCenterX(gg_rct_Alliance_Top_O2_Healer_1),GetRectCenterY(gg_rct_Alliance_Top_O2_Healer_1),45.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Alliance_Top_O2_Healer_1)
set u=CreateUnit(p,AllianceHealerID,GetRectCenterX(gg_rct_Alliance_Top_O2_Healer_2),GetRectCenterY(gg_rct_Alliance_Top_O2_Healer_2),45.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Alliance_Top_O2_Healer_2)
set p=Player(11)
set u=CreateUnit(p,AkatsukiHealerID,GetRectCenterX(gg_rct_Akatsuki_Top_O2_Healer_1),GetRectCenterY(gg_rct_Akatsuki_Top_O2_Healer_1),225.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Akatsuki_Top_O2_Healer_1)
set u=CreateUnit(p,AkatsukiHealerID,GetRectCenterX(gg_rct_Akatsuki_Top_O2_Healer_2),GetRectCenterY(gg_rct_Akatsuki_Top_O2_Healer_2),225.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Akatsuki_Top_O2_Healer_2)
endif
if BotLine then
set p=Player(5)
set u=CreateUnit(p,AllianceHealerID,GetRectCenterX(gg_rct_Alliance_Bot_O2_Healer_1),GetRectCenterY(gg_rct_Alliance_Bot_O2_Healer_1),45.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Alliance_Bot_O2_Healer_1)
set u=CreateUnit(p,AllianceHealerID,GetRectCenterX(gg_rct_Alliance_Bot_O2_Healer_2),GetRectCenterY(gg_rct_Alliance_Bot_O2_Healer_2),45.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Alliance_Bot_O2_Healer_2)
set p=Player(11)
set u=CreateUnit(p,AkatsukiHealerID,GetRectCenterX(gg_rct_Akatsuki_Bot_O2_Healer_1),GetRectCenterY(gg_rct_Akatsuki_Bot_O2_Healer_1),225.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Akatsuki_Bot_O2_Healer_1)
set u=CreateUnit(p,AkatsukiHealerID,GetRectCenterX(gg_rct_Akatsuki_Bot_O2_Healer_2),GetRectCenterY(gg_rct_Akatsuki_Bot_O2_Healer_2),225.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_Akatsuki_Bot_O2_Healer_2)
endif
set u=null
set p=null
endfunction
function cj_anonym__159 takes nothing returns nothing
if not udg_GameEnd then
call OutpostAI()
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__158 takes nothing returns nothing
if not udg_GameEnd then
call OutpostRestoreItemCharge()
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__157 takes nothing returns nothing
if not udg_GameEnd then
call OutpostCheckingEnemy()
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__156 takes nothing returns nothing
set outpostFirst=true
call DestroyTimer(GetExpiredTimer())
endfunction
function CreateOutposts takes nothing returns nothing
local integer i=0
local integer cur=1
local integer max=4
local real whatTime=2.
if TopLine then
loop
if cur==1 then
set AllianceOutpostCurrent[1]=outpostNumber
call CreateCreepsForOutpost("alliance",gg_rct_Alliance_Top_O2,45.)
set AllianceOutpostOwner[1]="alliance"
elseif cur==2 then
set AllianceOutpostCurrent[2]=0
set AllianceOutpostOwner[2]="neitural"
elseif cur==3 then
set AkatsukiOutpostCurrent[1]=outpostNumber
call CreateCreepsForOutpost("akatsuki",gg_rct_Akatsuki_Top_O2,225.)
set AkatsukiOutpostOwner[1]="akatsuki"
elseif cur==4 then
set AkatsukiOutpostCurrent[2]=0
set AkatsukiOutpostOwner[2]="neitural"
endif
set cur=cur+1
exitwhen cur>max
endloop
endif
set cur=1
if BotLine then
loop
if cur==1 then
set AllianceOutpostCurrent[3]=outpostNumber
call CreateCreepsForOutpost("alliance",gg_rct_Alliance_Bot_O2,45.)
set AllianceOutpostOwner[3]="alliance"
elseif cur==2 then
set AllianceOutpostCurrent[4]=0
set AllianceOutpostOwner[4]="neitural"
elseif cur==3 then
set AkatsukiOutpostCurrent[3]=outpostNumber
call CreateCreepsForOutpost("akatsuki",gg_rct_Akatsuki_Bot_O2,225.)
set AkatsukiOutpostOwner[3]="akatsuki"
elseif cur==4 then
set AkatsukiOutpostCurrent[4]=0
set AkatsukiOutpostOwner[4]="neitural"
endif
set cur=cur+1
exitwhen cur>max
endloop
endif
call CreateOutpostsHealers()
call TimerStart(CreateTimer(),whatTime,false,function cj_anonym__156)
call TimerStart(CreateTimer(),2.,true,function cj_anonym__157)
call TimerStart(CreateTimer(),30.,true,function cj_anonym__158)
call TimerStart(CreateTimer(),5.,true,function cj_anonym__159)
endfunction
function CreateGuards takes nothing returns nothing
local player p
local unit u
if TopLine then
set p=Player(5)
set u=CreateUnit(p,AllianceGuardTopID_1,GetRectCenterX(gg_rct_AllianceTopGuard1),GetRectCenterY(gg_rct_AllianceTopGuard1),90.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_AllianceTopGuard1)
set u=CreateUnit(p,AllianceGuardTopID_2,GetRectCenterX(gg_rct_AllianceTopGuard2),GetRectCenterY(gg_rct_AllianceTopGuard2),90.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_AllianceTopGuard2)
set p=Player(11)
set u=CreateUnit(p,AkatsukiGuardTopID_1,GetRectCenterX(gg_rct_AkatsukiTopGuard1),GetRectCenterY(gg_rct_AkatsukiTopGuard1),180.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_AkatsukiTopGuard1)
set u=CreateUnit(p,AkatsukiGuardTopID_2,GetRectCenterX(gg_rct_AkatsukiTopGuard2),GetRectCenterY(gg_rct_AkatsukiTopGuard2),180.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_AkatsukiTopGuard2)
endif
if BotLine then
set p=Player(5)
set u=CreateUnit(p,AllianceGuardBotID_1,GetRectCenterX(gg_rct_AllianceBotGuard1),GetRectCenterY(gg_rct_AllianceBotGuard1),0.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_AllianceBotGuard1)
set u=CreateUnit(p,AllianceGuardBotID_2,GetRectCenterX(gg_rct_AllianceBotGuard2),GetRectCenterY(gg_rct_AllianceBotGuard2),0.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_AllianceBotGuard2)
set p=Player(11)
set u=CreateUnit(p,AkatsukiGuardBotID_1,GetRectCenterX(gg_rct_AkatsukiBotGuard1),GetRectCenterY(gg_rct_AkatsukiBotGuard1),270.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_AkatsukiBotGuard1)
set u=CreateUnit(p,AkatsukiGuardBotID_2,GetRectCenterX(gg_rct_AkatsukiBotGuard2),GetRectCenterY(gg_rct_AkatsukiBotGuard2),270.)
call SaveAgentHandle(Hash,GetHandleId(u),0,gg_rct_AkatsukiBotGuard2)
endif
set u=null
endfunction
function StartTheGame takes nothing returns nothing
local integer i=0
local integer alliance=0
local integer akatsuki=0
local player p
local player pl=GetLocalPlayer()
set gs_log=false
call DestroyMultiboard(gs_mb)
loop
exitwhen i>10
if i!=5 and not udg_VM_Log[i]then
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
if GetPlayerController(p)==MAP_CONTROL_USER then
set player_Human=player_Human+1
elseif GetPlayerController(p)==MAP_CONTROL_COMPUTER then
if not botlog then
set botlog=true
call ExecuteFunc("AIStart_Init")
endif
endif
if IsPlayerAlly(p,Player(5))then
set alliance=alliance+1
elseif IsPlayerAlly(p,Player(11))then
set akatsuki=akatsuki+1
endif
set picksNumberMax=picksNumberMax+1
endif
endif
set i=i+1
endloop
if alliance>0 and akatsuki>0 then
call EnableTrigger(gg_trg_Assists_Reg)
call EnableTrigger(gg_trg_AddToAssisters)
endif
if gs_eff[4]!=null then
call DisplayTimedTextToPlayer(pl,0.,0.,4.,GetPlayerNameColored(udg_Host)+" выбрал мод |cFFFFCC00ВСЕ ЛИНИИ|r.")
elseif gs_eff[5]!=null then
set BotLine=false
call RemoveUnit(gg_unit_h02A_0039)
call RemoveUnit(gg_unit_h06R_0013)
call RemoveUnit(gg_unit_h02I_0111)
call RemoveUnit(gg_unit_h06V_0108)
call DisplayTimedTextToPlayer(pl,0.,0.,4.,GetPlayerNameColored(udg_Host)+" выбрал мод |cFFFFCC00ВЕРХ|r.")
elseif gs_eff[6]!=null then
set TopLine=false
call RemoveUnit(gg_unit_h02A_0014)
call RemoveUnit(gg_unit_h06R_0049)
call RemoveUnit(gg_unit_h02I_0113)
call RemoveUnit(gg_unit_h06V_0110)
call DisplayTimedTextToPlayer(pl,0.,0.,4.,GetPlayerNameColored(udg_Host)+" выбрал мод |cFFFFCC00НИЗ|r.")
endif
if gs_eff[7]!=null then
if not botlog then
set RatingGameOn=true
call DisplayTimedTextToPlayer(pl,0.,0.,4.,GetPlayerNameColored(udg_Host)+" выбрал режим |cFFFFCC00РЕЙТИНГ|r.")
else
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,4.,"Невозможно выбрать режим |cFFFFCC00РЕЙТИНГ|r из-за наличия ботов.\nБыл автоматически выбран режим |cFFFFCC00ОБЫЧНЫЙ|r.")
endif
elseif gs_eff[8]!=null then
call DisplayTimedTextToPlayer(pl,0.,0.,4.,GetPlayerNameColored(udg_Host)+" выбрал режим |cFFFFCC00ОБЫЧНЫЙ|r.")
endif
call CreateOutposts()
call CreateGuards()
set i=0
loop
exitwhen i>10
set p=Player(i)
if i!=5 and not udg_VM_Log[i]and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,playerStartGold)
endif
set i=i+1
endloop
call StartTheHeroMode(alliance,akatsuki)
set p=null
set pl=null
endfunction
function Settings_Click_Actions takes nothing returns nothing
local trackable tr=GetTriggeringTrackable()
local integer hp=GetTrackableRawcode(tr)
local string s=null
call ClearTextMessages()
if gs_log then
if hp==1 then
call InitGameSettingsDestroyNeedEffects(1,2,3,0,0,0,0,8)
call InitGameSettingsCreateNeedEffects(1,0,0,0,0,0,0,8)
elseif hp==2 then
call InitGameSettingsDestroyNeedEffects(1,2,3,0,0,0,0,8)
call InitGameSettingsCreateNeedEffects(0,2,0,0,0,0,0,8)
elseif hp==3 then
call InitGameSettingsDestroyNeedEffects(1,2,3,0,0,0,0,8)
call InitGameSettingsCreateNeedEffects(0,0,3,0,0,0,0,8)
elseif hp==4 then
call InitGameSettingsDestroyNeedEffects(0,0,0,4,5,6,0,8)
call InitGameSettingsCreateNeedEffects(0,0,0,4,0,0,0,8)
elseif hp==5 then
call InitGameSettingsDestroyNeedEffects(0,0,0,4,5,6,0,8)
call InitGameSettingsCreateNeedEffects(0,0,0,0,5,0,0,8)
elseif hp==6 then
call InitGameSettingsDestroyNeedEffects(0,0,0,4,5,6,0,8)
call InitGameSettingsCreateNeedEffects(0,0,0,0,0,6,0,8)
elseif hp==7 then
call InitGameSettingsDestroyNeedEffects(0,0,0,0,0,0,7,8)
call InitGameSettingsCreateNeedEffects(0,0,0,0,0,0,7,0)
elseif hp==8 then
call InitGameSettingsDestroyNeedEffects(0,0,0,0,0,0,7,8)
call InitGameSettingsCreateNeedEffects(0,0,0,0,0,0,0,8)
elseif hp==9 then
call StartTheGame()
endif
endif
set tr=null
endfunction
function InitTrig_Settings_Click takes nothing returns nothing
set gg_trg_Settings_Click=CreateTrigger()
call DisableTrigger(gg_trg_Settings_Click)
call TriggerAddAction(gg_trg_Settings_Click,function Settings_Click_Actions)
endfunction
function MoveBots takes rect start,rect finish returns nothing
local unit d
local integer id
local group g=CreateGroup()
call GroupEnumUnitsInRect(g,start,null)
loop
set d=FirstOfGroup(g)
exitwhen d==null
if GetPlayerController(GetOwningPlayer(d))==MAP_CONTROL_COMPUTER and IsUnitHero(d)then
set id=GetPlayerId(GetOwningPlayer(d))
set ai_coord_rect[id]=finish
call IssuePointOrder(d,"attack",GetRectCenterX(ai_coord_rect[id]),GetRectCenterY(ai_coord_rect[id]))
endif
call GroupRemoveUnit(g,d)
endloop
call DestroyGroup(g)
set g=null
set d=null
endfunction
function DestructablesSetLumber takes nothing returns nothing
local destructable des=GetEnumDestructable()
local integer id=GetDestructableTypeId(des)
if id==0x4C546C74 or id==0x41547472 or id==0x41547463 or id==0x4E547477 then
call DestroyEffect(LoadEffectHandle(Hash,GetHandleId(des),0))
call FlushChildHashtable(Hash,GetHandleId(des))
if GetRandomInt(1,10)==1 and GetWidgetLife(des)>.405 then
call SaveAgentHandle(Hash,GetHandleId(des),0,AddSpecialEffect("Abilities\\Spells\\NightElf\\TargetArtLumber\\TargetArtLumber.mdl",GetWidgetX(des),GetWidgetY(des)))
endif
endif
set des=null
endfunction
function DecorSetLumber takes nothing returns nothing
call EnumDestructablesInRect(gg_rct_Weather,null,function DestructablesSetLumber)
endfunction
function DestructablesRevive takes nothing returns nothing
local destructable des=GetEnumDestructable()
local integer id=GetDestructableTypeId(des)
if id==0x4C546C74 or id==0x41547472 or id==0x41547463 or id==0x4230344E or id==0x4E547477 then
if GetWidgetLife(des)<.405 then
call DestructableRestoreLife(des,GetDestructableMaxLife(des),true)
endif
endif
set des=null
endfunction
function DecorRevive_Timer takes nothing returns nothing
call EnumDestructablesInRect(gg_rct_Weather,null,function DestructablesRevive)
endfunction
function MBOtherFunctions takes nothing returns nothing
if musicOn then
set musicTime=musicTime-1
if musicTime==0 then
call MusicStartPlay(2)
endif
endif
if GetGameSpeed()!=MAP_SPEED_NORMAL then
call SetGameSpeed(MAP_SPEED_NORMAL)
endif
endfunction
function MB_CreateForPlayer takes player p,integer mblist returns nothing
set gamestat_S[mblist]="UI\\Widgets\\Console\\Human\\human-inventory-slotfiller.blp"
call mbiVal(gamestat_mb,mblist,0,"ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp",GetPlayerNameColored(p))
call mbiStyle(gamestat_mb,mblist,0,true,true)
call mbiVal(gamestat_mb,mblist,1,gamestat_S[mblist],null)
call mbiStyle(gamestat_mb,mblist,1,false,true)
if not udg_VM_Log[mblist]then
call mbiVal(gamestat_mb,mblist,2,null,"|cFFFCC75D- Жив -|r")
else
call mbiVal(gamestat_mb,mblist,2,null,"|cFFFCC75D- Зритель -|r")
endif
call mbiStyle(gamestat_mb,mblist,2,true,false)
call mbiWidth(gamestat_mb,mblist,2,.05)
call mbiVal(gamestat_mb,mblist,3,null,"|cFFC6D2FF"+I2S(gamestat_L[mblist])+"|r")
call mbiStyle(gamestat_mb,mblist,3,true,false)
call mbiVal(gamestat_mb,mblist,4,null,"|cFFFF5000"+I2S(gamestat_K[mblist])+"|r")
call mbiStyle(gamestat_mb,mblist,4,true,false)
call mbiVal(gamestat_mb,mblist,5,null,"|cFFFF0303"+I2S(gamestat_D[mblist])+"|r")
call mbiStyle(gamestat_mb,mblist,5,true,false)
call mbiVal(gamestat_mb,mblist,6,null,"|cFF959697"+I2S(gamestat_A[mblist])+"|r")
call mbiStyle(gamestat_mb,mblist,6,true,false)
call mbiVal(gamestat_mb,mblist,7,null,"|cFFA5FD00"+I2S(gamestat_LH[mblist])+"|r|cFFFCC75D/"+I2S(gamestat_LD[mblist])+"|r")
call mbiStyle(gamestat_mb,mblist,7,true,false)
endfunction
function cj_anonym__161 takes nothing returns nothing
if not udg_GameEnd then
call MBOtherFunctions()
if not gamestat_StartLog then
set gamestat_botSec=gamestat_botSec+1
if gamestat_botSec==10 then
call MoveBots(gg_rct_Creeps_Alliance_Top,gg_rct_Creeps_Konoha_Up_2)
call MoveBots(gg_rct_Creeps_Alliance_Bot,gg_rct_Creeps_Konoha_Down_2)
call MoveBots(gg_rct_Creeps_Akatsuki_Top,gg_rct_Creeps_Akatsuki_Up_2)
call MoveBots(gg_rct_Creeps_Akatsuki_Bot,gg_rct_Creeps_Akatsuki_Down_2)
set gamestat_botSec=0
endif
set gamestat_mbTimeSec=gamestat_mbTimeSec+1
if gamestat_mbTimeSec<10 then
call MultiboardSetTitleText(gamestat_mb,"|cFFC6D2FF"+GetCurrentVersion()+"|r - "+I2S(gamestat_mbTimeMin)+":0"+I2S(gamestat_mbTimeSec)+" - |cFF0090D4"+I2S(GetScores(0,5))+"|r : |cFF0090D4"+I2S(GetScores(6,10))+"|r")
elseif gamestat_mbTimeSec==60 then
set gamestat_mbTimeSec=0
set gamestat_mbTimeMin=gamestat_mbTimeMin+1
call MultiboardSetTitleText(gamestat_mb,"|cFFC6D2FF"+GetCurrentVersion()+"|r - "+I2S(gamestat_mbTimeMin)+":0"+I2S(gamestat_mbTimeSec)+" - |cFF0090D4"+I2S(GetScores(0,5))+"|r : |cFF0090D4"+I2S(GetScores(6,10))+"|r")
else
call MultiboardSetTitleText(gamestat_mb,"|cFFC6D2FF"+GetCurrentVersion()+"|r - "+I2S(gamestat_mbTimeMin)+":"+I2S(gamestat_mbTimeSec)+" - |cFF0090D4"+I2S(GetScores(0,5))+"|r : |cFF0090D4"+I2S(GetScores(6,10))+"|r")
endif
else
if not preparationOn then
set gamestat_mbTimeSec=gamestat_mbTimeSec-1
if gamestat_mbTimeSec<10 then
call MultiboardSetTitleText(gamestat_mb,"|cFFC6D2FF"+GetCurrentVersion()+"|r - "+I2S(gamestat_mbTimeMin)+":0"+I2S(gamestat_mbTimeSec)+" - |cFF0090D4"+I2S(GetScores(0,5))+"|r : |cFF0090D4"+I2S(GetScores(6,10))+"|r")
else
call MultiboardSetTitleText(gamestat_mb,"|cFFC6D2FF"+GetCurrentVersion()+"|r - "+I2S(gamestat_mbTimeMin)+":"+I2S(gamestat_mbTimeSec)+" - |cFF0090D4"+I2S(GetScores(0,5))+"|r : |cFF0090D4"+I2S(GetScores(6,10))+"|r")
endif
if gamestat_mbTimeMin>0 and gamestat_mbTimeSec==0 then
set gamestat_mbTimeMin=0
set gamestat_mbTimeSec=60
elseif gamestat_mbTimeMin==0 and gamestat_mbTimeSec==10 then
call StartSound(gg_snd_TheHornOfCenarius)
call KillSoundWhenDone(gg_snd_TheHornOfCenarius)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,10.,"\nСражение начнётся через |cFFFFCC0010|r секунд!")
elseif gamestat_mbTimeMin==0 and gamestat_mbTimeSec==0 then
call DuelInit()
call TimerStart(CreateTimer(),600.,true,function DecorRevive_Timer)
call TimerStart(CreateTimer(),120.,true,function DecorSetLumber)
call TriggerExecute(gg_trg_Creeps)
call BossStart()
call TimerStart(CreateTimer(),moneyForHeroTime,true,function ResourceTimer)
call SuspendTimeOfDay(false)
set gamestat_StartLog=false
endif
endif
endif
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__160 takes nothing returns nothing
local integer i=0
local player p
if not udg_GameEnd then
loop
set p=Player(i)
if i!=5 and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING and not udg_VM_Log[GetPlayerId(p)]then
set gamestat_NW_Cur[i]=GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)
if gamestat_NW_Old[i]<=gamestat_NW_Cur[i]then
set gamestat_NW_New[i]=gamestat_NW_New[i]+(gamestat_NW_Cur[i]-gamestat_NW_Old[i])
endif
set gamestat_NW_Old[i]=gamestat_NW_Cur[i]
endif
set i=i+1
exitwhen i>10
endloop
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function MB_Create_Actions takes nothing returns nothing
local player p
local integer id
local integer i=0
local integer count=0
local integer mblist=2
set gamestat_mb=CreateMultiboard()
loop
exitwhen i>11
set p=Player(i)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
set count=count+1
endif
set i=i+1
endloop
call MultiboardSetRowCount(gamestat_mb,count+mblist-1)
call MultiboardSetColumnCount(gamestat_mb,8)
call MultiboardSetTitleText(gamestat_mb,"|cFFC6D2FF"+GetCurrentVersion()+"|r - "+I2S(gamestat_mbTimeMin)+":"+I2S(gamestat_mbTimeSec)+" - |cFF0090D4"+I2S(GetScores(0,5))+"|r : |cFF0090D4"+I2S(GetScores(6,10))+"|r")
call MultiboardDisplay(gamestat_mb,false)
call mbiVal(gamestat_mb,0,0,"ReplaceableTextures\\CommandButtons\\BTNMetamorphosis.blp",null)
call mbiVal(gamestat_mb,0,1,"ReplaceableTextures\\CommandButtons\\BTNSpiritOfVengeance.blp",null)
call mbiVal(gamestat_mb,0,2,"ReplaceableTextures\\CommandButtons\\BTNSkillz.blp",null)
call mbiVal(gamestat_mb,0,3,"OTHER Glyph of Courage\\Icon.blp",null)
call mbiVal(gamestat_mb,0,4,"ReplaceableTextures\\CommandButtons\\BTNArcaniteMelee.blp",null)
call mbiVal(gamestat_mb,0,5,"ReplaceableTextures\\CommandButtons\\BTNUndeadShrine.blp",null)
call mbiVal(gamestat_mb,0,6,"ReplaceableTextures\\CommandButtons\\BTNTemp.blp",null)
call mbiVal(gamestat_mb,0,7,"ReplaceableTextures\\CommandButtons\\BTNHoldPosition.blp",null)
call mbiVal(gamestat_mb,1,0,null,nameteamOne)
call mbiStyle(gamestat_mb,1,0,true,false)
call mbiStyle(gamestat_mb,1,1,false,false)
call mbiStyle(gamestat_mb,1,2,false,false)
call mbiStyle(gamestat_mb,1,3,false,false)
call mbiStyle(gamestat_mb,1,4,false,false)
call mbiStyle(gamestat_mb,1,5,false,false)
call mbiStyle(gamestat_mb,1,6,false,false)
call mbiStyle(gamestat_mb,1,7,false,false)
set i=0
loop
exitwhen i>10
set p=Player(i)
set id=GetPlayerId(p)
if GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
if i<5 then
call MB_CreateForPlayer(p,mblist)
set gamestat_Place[id]=mblist
set mblist=mblist+1
elseif i==5 then
call mbiVal(gamestat_mb,mblist,0,null,nameteamTwo)
call mbiStyle(gamestat_mb,mblist,0,true,false)
call mbiWidth(gamestat_mb,mblist,0,.03)
call mbiStyle(gamestat_mb,mblist,1,false,false)
call mbiWidth(gamestat_mb,mblist,1,.02)
call mbiStyle(gamestat_mb,mblist,2,false,false)
call mbiWidth(gamestat_mb,mblist,2,.05)
call mbiStyle(gamestat_mb,mblist,3,false,false)
call mbiWidth(gamestat_mb,mblist,3,.03)
call mbiStyle(gamestat_mb,mblist,4,false,false)
call mbiWidth(gamestat_mb,mblist,4,.03)
call mbiStyle(gamestat_mb,mblist,5,false,false)
call mbiWidth(gamestat_mb,mblist,5,.03)
call mbiStyle(gamestat_mb,mblist,6,false,false)
call mbiWidth(gamestat_mb,mblist,6,.03)
call mbiStyle(gamestat_mb,mblist,7,false,false)
call mbiWidth(gamestat_mb,mblist,7,.03)
set mblist=mblist+1
elseif i>5 then
call MB_CreateForPlayer(p,mblist)
set gamestat_Place[id]=mblist
set mblist=mblist+1
endif
endif
set i=i+1
endloop
call MultiboardSetItemWidthBJ(gamestat_mb,1,0,12.)
call MultiboardSetItemWidthBJ(gamestat_mb,2,0,2.)
call MultiboardSetItemWidthBJ(gamestat_mb,3,0,6.)
call MultiboardSetItemWidthBJ(gamestat_mb,4,0,2.)
call MultiboardSetItemWidthBJ(gamestat_mb,5,0,1.75)
call MultiboardSetItemWidthBJ(gamestat_mb,6,0,1.75)
call MultiboardSetItemWidthBJ(gamestat_mb,7,0,1.75)
call MultiboardSetItemWidthBJ(gamestat_mb,8,0,3.)
call MultiboardMinimize(gamestat_mb,true)
call MultiboardDisplay(gamestat_mb,true)
call ClearTextMessages()
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"\nКоманда |cFFFFCC00-repick|r отключится через |cFFFFCC005|r секунд.")
call TimerStart(CreateTimer(),1.,true,function cj_anonym__160)
call TimerStart(CreateTimer(),1.,true,function cj_anonym__161)
call MB_Create_Icons()
set p=null
endfunction
function InitTrig_Multiboard takes nothing returns nothing
set gg_trg_Multiboard=CreateTrigger()
call DisableTrigger(gg_trg_Multiboard)
call TriggerAddAction(gg_trg_Multiboard,function MB_Create_Actions)
endfunction
function Victory_Defeat_Actions takes nothing returns nothing
local integer win=0
if GetTriggerUnit()==gg_unit_h004_0068 then
set win=1
elseif GetTriggerUnit()==gg_unit_h005_0045 then
set win=2
endif
call Victory_Defeat_Code(win)
endfunction
function InitTrig_Victory takes nothing returns nothing
set gg_trg_Victory=CreateTrigger()
call TriggerRegisterUnitEvent(gg_trg_Victory,gg_unit_h005_0045,EVENT_UNIT_DEATH)
call TriggerRegisterUnitEvent(gg_trg_Victory,gg_unit_h004_0068,EVENT_UNIT_DEATH)
call TriggerAddAction(gg_trg_Victory,function Victory_Defeat_Actions)
endfunction
function Asuma___FujinAddDamage takes real x,real y,group grCheckCenter returns nothing
local real addDmg=.25
local real dmgCenter=0.
local real radius=50.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Asuma___p)and not IsUnitInGroup(tg,grCheckCenter)then
call GroupAddUnit(grCheckCenter,tg)
set dmgCenter=GetUnitState(tg,UNIT_STATE_MAX_LIFE)*addDmg
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanLargeDeathExplode\\HumanLargeDeathExplode.mdl",tg,"chest"))
call UnitDamageTarget(Asuma___c,tg,GetNinjutsuDamage(dmgCenter,Asuma___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Asuma___FujinGiveDamage takes group grCheck,group grCheckCenter,real x,real y returns nothing
local real dmg=120.+GetHeroStr(Asuma___c,true)*3.
local real radius=200.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Asuma___p)and not IsUnitInGroup(tg,grCheck)then
call GroupAddUnit(grCheck,tg)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(Asuma___c,tg,GetNinjutsuDamage(dmg,Asuma___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call Asuma___FujinAddDamage(x,y,grCheckCenter)
set tg=null
set g=null
endfunction
function cj_anonym__162 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real a=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real curDistance=LoadReal(HH,h,3)
local real maxDistance=LoadReal(HH,h,4)
local group g1=LoadGroupHandle(HH,h,5)
local group g2=LoadGroupHandle(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if curDistance<maxDistance then
call Asuma___FujinGiveDamage(g1,g2,x,y)
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl",x,y))
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x,y))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
endif
endif
call SetUnitPosition(d,x+offset*Cos(a),y+offset*Sin(a))
call SaveReal(HH,h,3,curDistance+offset)
else
call GroupClear(g1)
call DestroyGroup(g1)
call GroupClear(g2)
call DestroyGroup(g2)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set d=null
set t=null
endfunction
function Asuma___FujinCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Asuma___c)
local real y=GetWidgetY(Asuma___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1100.
local real period=.025
local real offset=speed*period
local real maxDistance=800.
call Sound3D(Asuma___c,"Asuma Fuuton.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Asuma___p,0x68303135,x,y,a))
call SaveReal(HH,h,1,a*.017)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,0.)
call SaveReal(HH,h,4,maxDistance)
call SaveAgentHandle(HH,h,5,CreateGroup())
call SaveAgentHandle(HH,h,6,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__162)
set t=null
endfunction
function cj_anonym__165 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local real dmgPeriod=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real curTime=LoadReal(HH,h,3)
local unit tg
local group g2
if curTime>0.then
set g2=CreateGroup()
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
call UnitDamageTarget(Asuma___c,tg,GetNinjutsuDamage(dmgPeriod,Asuma___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call GroupAddUnit(g2,tg)
call GroupRemoveUnit(g1,tg)
endloop
call SaveAgentHandle(HH,h,0,g2)
call SaveReal(HH,h,3,curTime-period)
else
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41305459)
call UnitRemoveAbility(tg,0x42303456)
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function cj_anonym__164 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__163 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer number=3
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real dmg=40.+GetHeroStr(Asuma___c,true)*1.3
local real range=400.
local real timeDebuff=4.
local real degree=0.
local real degreeStep=360./number
local real offset=range/2.
local unit tg
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local group g1=CreateGroup()
local real period=1.
local real curTime=4.
local real dmgPeriod=0.
local group g=CreateGroup()
call GroupEnumUnitsInRange(g,x,y,range,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Asuma___p)then
call UnitDamageTarget(Asuma___c,tg,GetNinjutsuDamage(dmg,Asuma___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call GroupAddUnit(g1,tg)
call UnitAddAbility(tg,0x41305459)
call JiraiyaSetFireOil(Asuma___c,tg)
set dmgPeriod=30.*period
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call FireDestructablesEnum(x,y,range/2.)
call JiraiyaSetFireSwamp(Asuma___c,x,y)
loop
call DestroyEffect(AddSpecialEffect("Boom.mdx",x+offset*Cos(degree*.0174532),y+offset*Sin(degree*.0174532)))
set degree=degree+degreeStep
exitwhen degree==360.
endloop
call GroupEnumUnitsOfPlayer(g,Asuma___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303145 then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call SaveAgentHandle(HH,h1,0,CreateUnit(Asuma___p,0x6E303154,x,y,0.))
call TimerStart(t1,3.,false,function cj_anonym__164)
if dmgPeriod>0.then
set t1=CreateTimer()
set h1=GetHandleId(t1)
call SaveAgentHandle(HH,h1,0,g1)
call SaveReal(HH,h1,1,dmgPeriod)
call SaveReal(HH,h1,2,period)
call SaveReal(HH,h1,3,curTime)
call TimerStart(t1,period,true,function cj_anonym__165)
else
call DestroyGroup(g1)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set g=null
set g1=null
set tg=null
set t=null
set t1=null
endfunction
function Asuma___HaisekishouDamageStart takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=6.
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call TimerStart(t,.13,false,function cj_anonym__163)
set t=null
endfunction
function cj_anonym__166 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local real a=LoadReal(HH,h,4)
local integer amount=LoadInteger(HH,h,5)
local real x2=LoadReal(HH,h,6)
local real y2=LoadReal(HH,h,7)
local unit tg
if amount<17 then
if amount==1 then
set tg=CreateUnit(Asuma___p,0x68303145,x+50.*Cos(a*.017),y+50.*Sin(a*.017),a)
call SaveReal(HH,h,2,x+100.*Cos(a*.017))
call SaveReal(HH,h,3,y+100.*Sin(a*.017))
elseif amount==2 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+150.*Cos(a*.017))
call SaveReal(HH,h,3,y+150.*Sin(a*.017))
elseif amount==3 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+150.*Cos((a-15.)*.017))
call SaveReal(HH,h,3,y+150.*Sin((a-15.)*.017))
elseif amount==4 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+150.*Cos((a+15.)*.017))
call SaveReal(HH,h,3,y+150.*Sin((a+15.)*.017))
elseif amount==5 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+200.*Cos((a-25.)*.017))
call SaveReal(HH,h,3,y+200.*Sin((a-25.)*.017))
elseif amount==6 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+200.*Cos((a+25.)*.017))
call SaveReal(HH,h,3,y+200.*Sin((a+25.)*.017))
elseif amount==7 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+250.*Cos((a-30.)*.017))
call SaveReal(HH,h,3,y+250.*Sin((a-30.)*.017))
elseif amount==8 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+250.*Cos(a*.017))
call SaveReal(HH,h,3,y+250.*Sin(a*.017))
elseif amount==9 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+250.*Cos((a+30.)*.017))
call SaveReal(HH,h,3,y+250.*Sin((a+30.)*.017))
elseif amount==10 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+300.*Cos((a-40.)*.017))
call SaveReal(HH,h,3,y+300.*Sin((a-40.)*.017))
elseif amount==11 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+300.*Cos(a*.017))
call SaveReal(HH,h,3,y+300.*Sin(a*.017))
elseif amount==12 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+300.*Cos((a+40.)*.017))
call SaveReal(HH,h,3,y+300.*Sin((a+40.)*.017))
elseif amount==13 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+350.*Cos((a-25.)*.017))
call SaveReal(HH,h,3,y+350.*Sin((a-25.)*.017))
elseif amount==14 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+350.*Cos((a+25.)*.017))
call SaveReal(HH,h,3,y+350.*Sin((a+25.)*.017))
elseif amount==15 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+400.*Cos((a-15.)*.017))
call SaveReal(HH,h,3,y+400.*Sin((a-15.)*.017))
elseif amount==16 then
set tg=CreateUnit(Asuma___p,0x68303145,x1,y1,a)
call SaveReal(HH,h,2,x+400.*Cos((a+15.)*.017))
call SaveReal(HH,h,3,y+400.*Sin((a+15.)*.017))
endif
call SaveInteger(HH,h,5,amount+1)
else
call Asuma___HaisekishouDamageStart(x2,y2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set t=null
endfunction
function Asuma___HaisekishouCast takes nothing returns nothing
local real xHero=GetWidgetX(Asuma___c)
local real yHero=GetWidgetY(Asuma___c)
local real f=GetUnitFacing(Asuma___c)
local real startOffset=60.
local real x=xHero+startOffset*Cos(f*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(f*bj_DEGTORAD)
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.07
call Sound3D(Asuma___c,"Asuma Katon Haisekishou.mp3")
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,x)
call SaveReal(HH,h,3,y)
call SaveReal(HH,h,4,f)
call SaveInteger(HH,h,5,1)
call SaveReal(HH,h,6,x+250.*Cos(f*bj_DEGTORAD))
call SaveReal(HH,h,7,y+250.*Sin(f*bj_DEGTORAD))
call TimerStart(t,period,true,function cj_anonym__166)
set t=null
endfunction
function Asuma___GetDamageConditions takes nothing returns boolean
return GetEventDamage()>0.
endfunction
function cj_anonym__167 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1
local real y1
local real dmg=200.
local real radius=300.
local real knockback=250.
local group g=CreateGroup()
local unit tg
if SpecialEffectsShow then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("NewDirtEXNofire.mdx",x,y))
else
call DestroyEffect(AddSpecialEffect("IceSparks.mdx",x,y))
endif
endif
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Asuma___p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
call KnockBackUnitEf(tg,knockback,knockback/1000.,bj_RADTODEG*Atan2(y1-y,x1-x),.025,0,false)
call UnitDamageTarget(Asuma___c,tg,GetTaijutsuDamage(dmg,Asuma___c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyEffect(LoadEffectHandle(HH,h,1))
call RemoveUnit(u)
set u=null
set tg=null
set g=null
set t=null
endfunction
function Asuma___GetDamageActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit u=GetTriggerUnit()
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real f=GetRandomReal(0.,360.)
local real time=1.
call DisableTrigger(Asuma___getdmg)
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",x,y))
call RemoveUnit(u)
set u=CreateUnit(Asuma___p,0x6E303043,x,y,f)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Environment\\LargeBuildingFire\\LargeBuildingFire1.mdl",u,"chest"))
call TimerStart(t,time,false,function cj_anonym__167)
set u=null
set t=null
endfunction
function cj_anonym__168 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)<.405 or GetUnitAbilityLevel(Asuma___c,0x42303248)==0 then
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Asuma___c,0x42303248)==0 then
call DisableTrigger(Asuma___getdmg)
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(u),GetWidgetY(u)))
call RemoveUnit(u)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function Asuma___KawarimiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Asuma___c)
local real y=GetWidgetY(Asuma___c)
local real f=GetUnitFacing(Asuma___c)
local real hp=GetWidgetLife(Asuma___c)
local real mp=GetUnitState(Asuma___c,UNIT_STATE_MANA)
local real period=.1
local unit u
call SetUnitPathing(Asuma___c,false)
set u=CreateUnit(Asuma___p,0x45303034,x,y,f)
call SetUnitPathing(Asuma___c,true)
call SetHeroXP(u,GetHeroXP(Asuma___c),false)
call SuspendHeroXP(u,false)
call SetWidgetLife(u,hp)
call SetUnitState(u,UNIT_STATE_MANA,mp)
call TriggerRegisterUnitEvent(Asuma___getdmg,u,EVENT_UNIT_DAMAGED)
call EnableTrigger(Asuma___getdmg)
call SaveAgentHandle(HH,h,0,u)
call TimerStart(t,period,true,function cj_anonym__168)
set u=null
set t=null
endfunction
function cj_anonym__169 takes nothing returns nothing
call UnitRemoveAbility(Asuma___c,0x42303238)
call UnitRemoveAbility(Asuma___c,0x41305536)
call DestroyTimer(GetExpiredTimer())
endfunction
function Asuma___TekkoCast takes nothing returns nothing
local real time=12.
call Sound3D(Asuma___c,"Chakra Kai.mp3")
call UnitAddAbility(Asuma___c,0x41305536)
call TimerStart(CreateTimer(),time,false,function cj_anonym__169)
endfunction
function Asuma___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Asuma_TEKKO or i==Asuma_KAWARIMI or i==Asuma_HAISEKISHOU or i==Asuma_FUJIN
endfunction
function Asuma___SpellsActions takes nothing returns nothing
local integer i
if Asuma___c==null then
set Asuma___c=GetTriggerUnit()
set Asuma___p=GetOwningPlayer(Asuma___c)
endif
set i=GetSpellAbilityId()
if i==Asuma_TEKKO then
call Asuma___TekkoCast()
elseif i==Asuma_KAWARIMI then
call Asuma___KawarimiCast()
elseif i==Asuma_HAISEKISHOU then
call Asuma___HaisekishouCast()
elseif i==Asuma_FUJIN then
call Asuma___FujinCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Asuma_AddAbility takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Asuma]then
call SetPlayerTechResearched(Player(i),0x5230304E,1)
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Asuma_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Asuma___getdmg=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call SetPlayerAbilityAvailable(Player(i),0x41305536,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Asuma___SpellsConditions))
call TriggerAddAction(spells,function Asuma___SpellsActions)
call TriggerAddCondition(Asuma___getdmg,Condition(function Asuma___GetDamageConditions))
call TriggerAddAction(Asuma___getdmg,function Asuma___GetDamageActions)
set spells=null
endfunction
function cj_anonym__170 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit mama=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
if GetUnitCurrentOrder(mama)!=OrderId("whirlwind")then
call SetUnitInvulnerable(tu,false)
call DestroyEffect(LoadEffectHandle(HH,h,2))
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set mama=null
set tu=null
set t=null
endfunction
function Chiyo___MamaTateCast takes unit mama,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
call SetUnitInvulnerable(tu,true)
call SaveAgentHandle(HH,h,0,mama)
call SaveAgentHandle(HH,h,1,tu)
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("Shield.mdx",tu,"chest"))
call TimerStart(t,period,true,function cj_anonym__170)
set t=null
endfunction
function Chiyo___PapaWhipRemoveDummy takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Chiyo___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x6E303050 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=null
set tg=null
endfunction
function cj_anonym__171 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,1)
local unit papa=LoadUnitHandle(HH,h,2)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real x=GetWidgetX(papa)
local real y=GetWidgetY(papa)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance>offset and GetWidgetLife(papa)>.405 and GetWidgetLife(tu)>.405 then
call SetUnitPosition(tu,x1-offset*Cos(a*.017),y1-offset*Sin(a*.017))
else
call Chiyo___PapaWhipRemoveDummy()
call PauseUnit(papa,false)
call SetUnitPathing(tu,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set papa=null
set tu=null
set t=null
endfunction
function Chiyo___PapaWhipStartMoving takes unit papa,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real offset=100.
call SetUnitPathing(tu,false)
call SetUnitTimeScale(papa,1.)
call SetUnitAnimation(papa,"attack")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,offset)
call SaveAgentHandle(HH,h,2,papa)
call TimerStart(t,MainPeriod,true,function cj_anonym__171)
set t=null
endfunction
function cj_anonym__172 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real rangeMax=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local unit papa=LoadUnitHandle(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance>offset and distance<rangeMax and GetWidgetLife(papa)>.405 and GetWidgetLife(tu)>.405 then
call UnitApplyTimedLife(CreateUnit(Chiyo___p,0x6E303050,x,y,GetUnitFacing(d)),0x42544C46,distance/1000.)
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SetUnitFacing(d,a)
else
if GetWidgetLife(papa)>.405 and GetWidgetLife(tu)>.405 then
call RemoveUnit(d)
call Chiyo___PapaWhipStartMoving(papa,tu)
else
call Chiyo___PapaWhipRemoveDummy()
call PauseUnit(papa,false)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set papa=null
set tu=null
set d=null
set t=null
endfunction
function Chiyo___PapaWhipCast takes unit papa,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(papa,0x41305349)
local real x=GetWidgetX(papa)
local real y=GetWidgetY(papa)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real offset=50.
local real rangeMax=1125.
call PauseUnit(papa,true)
call SetUnitTimeScale(papa,0.)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,CreateUnit(Chiyo___p,0x6E303050,x,y,a))
call SaveReal(HH,h,2,rangeMax)
call SaveReal(HH,h,3,offset)
call SaveAgentHandle(HH,h,4,papa)
call TimerStart(t,MainPeriod,true,function cj_anonym__172)
set t=null
endfunction
function cj_anonym__173 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit papa=LoadUnitHandle(HH,h,0)
local unit mama=LoadUnitHandle(HH,h,1)
local group g=LoadGroupHandle(HH,h,2)
local group gr=LoadGroupHandle(HH,h,3)
local integer amount=LoadInteger(HH,h,4)
local real a=LoadReal(HH,h,5)
local real dmg=LoadReal(HH,h,6)
local real radius=LoadReal(HH,h,7)
local real offset=LoadReal(HH,h,8)
local real x=GetWidgetX(papa)
local real y=GetWidgetY(papa)
local unit tg
local rect r
if amount>0 then
set x=x+250.*Cos(a-90.)
set y=y+250.*Sin(a-90.)
set r=Rect(x-radius/10.,y-radius/2.,x+radius/10.,y+radius/2.)
call GroupEnumUnitsInRect(g,r,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if not IsUnitInGroup(tg,gr)and IsUnitNeedClear(tg,Chiyo___p)then
call GroupAddUnit(gr,tg)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call UnitDamageTarget(papa,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call RemoveRect(r)
call SetUnitFacing(papa,a)
call SetUnitFacing(mama,a)
call SetUnitAnimation(papa,"walk")
call SetUnitAnimation(mama,"walk")
call SetUnitPosition(papa,GetWidgetX(papa)+offset*Cos(a*.017),GetWidgetY(papa)+offset*Sin(a*.017))
call SetUnitPosition(mama,GetWidgetX(mama)+offset*Cos(a*.017),GetWidgetY(mama)+offset*Sin(a*.017))
call GroupEnumUnitsOfPlayer(g,Chiyo___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303054 then
call SetUnitPosition(tg,GetWidgetX(tg)+offset*Cos(a*.017),GetWidgetY(tg)+offset*Sin(a*.017))
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveInteger(HH,h,4,amount-1)
else
call GroupEnumUnitsOfPlayer(g,Chiyo___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303054 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call GroupClear(gr)
call DestroyGroup(gr)
call DestroyGroup(g)
call SetUnitPathing(papa,true)
call SetUnitPathing(mama,true)
call PauseUnit(papa,false)
call PauseUnit(mama,false)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set r=null
set g=null
set tg=null
set papa=null
set mama=null
set t=null
endfunction
function Chiyo___PapaWireCast takes unit papa,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(papa,0x41305331)
local real dmg=120.
local real radius=400.
local real offset=50.
local real startOffset=radius/2.-10.
local real x=GetWidgetX(papa)
local real y=GetWidgetY(papa)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real x2=x+(radius/2.)*Cos((a+90.)*.017)
local real y2=y+(radius/2.)*Sin((a+90.)*.017)
local real f=a+90.
local integer amount=R2I(600./offset)
local integer i=23
local group g=CreateGroup()
local unit tg
local unit mama=null
call GroupEnumUnitsOfPlayer(g,Chiyo___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or mama!=null
if GetUnitTypeId(tg)==0x68303535 then
set mama=tg
endif
call GroupRemoveUnit(g,tg)
endloop
call SetUnitFacing(papa,a)
call SetUnitFacing(mama,a)
call SetUnitPosition(papa,x2,y2)
set x2=x+(radius/2.)*Cos((a-90.)*.017)
set y2=y+(radius/2.)*Sin((a-90.)*.017)
call SetUnitPosition(mama,x2,y2)
call PauseUnit(papa,true)
call PauseUnit(mama,true)
call SetUnitPathing(papa,false)
call SetUnitPathing(mama,false)
call SetUnitAnimation(papa,"walk")
call SetUnitAnimation(mama,"walk")
loop
exitwhen i==0
if i>11 then
call CreateUnit(Chiyo___p,0x68303054,x+startOffset*Cos((a+90.)*.017),y+startOffset*Sin((a+90.)*.017),f)
set startOffset=startOffset-20.
elseif i<11 then
call CreateUnit(Chiyo___p,0x68303054,x+startOffset*Cos((a-90.)*.017),y+startOffset*Sin((a-90.)*.017),f)
set startOffset=startOffset+20.
endif
set i=i-1
endloop
call SaveAgentHandle(HH,h,0,papa)
call SaveAgentHandle(HH,h,1,mama)
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveAgentHandle(HH,h,3,CreateGroup())
call SaveInteger(HH,h,4,amount)
call SaveReal(HH,h,5,a)
call SaveReal(HH,h,6,dmg)
call SaveReal(HH,h,7,radius)
call SaveReal(HH,h,8,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__173)
set mama=null
set g=null
set tg=null
set t=null
endfunction
function cj_anonym__174 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit mama=LoadUnitHandle(HH,h,0)
local unit papa=LoadUnitHandle(HH,h,1)
local lightning lightOne=LoadLightningHandle(HH,h,2)
local lightning lightTwo=LoadLightningHandle(HH,h,3)
local real period=LoadReal(HH,h,6)
local real timeLife=LoadReal(HH,h,7)
local real x=GetWidgetX(Chiyo___c)
local real y=GetWidgetY(Chiyo___c)
local real x1
local real y1
local real a
local real distance
if timeLife>0.and GetWidgetLife(Chiyo___c)>.405 then
if GetWidgetLife(mama)>.405 then
set x1=GetWidgetX(mama)
set y1=GetWidgetY(mama)
set a=57.2958279087*Atan2(y1-y,x1-x)*.017
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call MoveLightning(lightOne,true,x,y,x1,y1)
if distance>Chiyo___puppetRange then
call KillDestructablesStart(x1,y1,128.)
call SetUnitPosition(mama,x1-(distance-Chiyo___puppetRange)*Cos(a),y1-(distance-Chiyo___puppetRange)*Sin(a))
endif
else
if not LoadBoolean(HH,h,4)and lightOne!=null then
call DestroyLightning(lightOne)
call SaveBoolean(HH,h,4,true)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",x1,y1))
call RemoveUnit(mama)
endif
endif
if GetWidgetLife(papa)>.405 then
set x1=GetWidgetX(papa)
set y1=GetWidgetY(papa)
set a=57.2958279087*Atan2(y1-y,x1-x)*.017
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call MoveLightning(lightTwo,true,x,y,x1,y1)
if distance>Chiyo___puppetRange then
call KillDestructablesStart(x1,y1,128.)
call SetUnitPosition(papa,x1-(distance-Chiyo___puppetRange)*Cos(a),y1-(distance-Chiyo___puppetRange)*Sin(a))
endif
else
if not LoadBoolean(HH,h,5)and lightTwo!=null then
call DestroyLightning(lightTwo)
call SaveBoolean(HH,h,5,true)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",x1,y1))
call RemoveUnit(papa)
endif
endif
if GetWidgetLife(mama)>.405 and GetWidgetLife(papa)>.405 then
call SaveReal(HH,h,7,timeLife-period)
else
call SaveReal(HH,h,7,0.)
endif
else
if GetWidgetLife(mama)>.405 then
call DestroyLightning(lightOne)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(mama),GetWidgetY(mama)))
call RemoveUnit(mama)
endif
if GetWidgetLife(papa)>.405 then
call DestroyLightning(lightTwo)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(papa),GetWidgetY(papa)))
call RemoveUnit(papa)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set lightOne=null
set lightTwo=null
set mama=null
set papa=null
set t=null
endfunction
function Chiyo___PapaMamaCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Chiyo___c)
local real y=GetWidgetY(Chiyo___c)
local real f=GetUnitFacing(Chiyo___c)
local real period=.025
local unit mama=CreateUnit(Chiyo___p,0x68303534,x,y,f)
local unit papa=CreateUnit(Chiyo___p,0x68303535,x,y,f)
local real timeLife=25.
set Chiyo___puppetRange=Chiyo___puppetRange+1400.
call CreateEffect(GetWidgetX(mama),GetWidgetY(mama),1.,"Smoke.mdx",3.)
call CreateEffect(GetWidgetX(papa),GetWidgetY(papa),1.,"Smoke.mdx",3.)
call SaveAgentHandle(HH,h,0,mama)
call SaveAgentHandle(HH,h,1,papa)
call SaveLightningHandle(HH,h,2,AddLightning("DRAM",true,x,y,GetWidgetX(mama),GetWidgetY(mama)))
call SaveLightningHandle(HH,h,3,AddLightning("DRAM",true,x,y,GetWidgetX(papa),GetWidgetY(papa)))
call SaveBoolean(HH,h,4,false)
call SaveBoolean(HH,h,5,false)
call SaveReal(HH,h,6,period)
call SaveReal(HH,h,7,timeLife)
call TimerStart(t,period,true,function cj_anonym__174)
set mama=null
set papa=null
set t=null
endfunction
function cj_anonym__175 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real manacost=LoadReal(HH,h,2)
local integer current=0
local real x=GetWidgetX(Chiyo___c)
local real y=GetWidgetY(Chiyo___c)
local real x1
local real y1
local unit tg
call GroupEnumUnitsInRect(g1,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitInGroup(tg,g2)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetWidgetLife(tg)>.405 and SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<Chiyo___itoRange then
if not IsUnitPuppet(tg)then
call CreateTimerForLightning(AddLightning("DRAM",true,x,y,x1,y1),.025)
elseif IsUnitPuppet(tg)and not IsUnitOwnedByPlayer(tg,Chiyo___p)then
call CreateTimerForLightning(AddLightning("DRAM",true,x,y,x1,y1),.025)
endif
set current=current+1
else
call UnitRemoveAbility(tg,0x41305351)
call UnitRemoveAbility(tg,0x53303030)
call UnitRemoveAbility(tg,0x41313053)
call GroupRemoveUnit(g2,tg)
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
set Chiyo___ItoNumberCur=current
set manacost=manacost*current
call SetUnitState(Chiyo___c,UNIT_STATE_MANA,GetUnitState(Chiyo___c,UNIT_STATE_MANA)-manacost)
if GetWidgetLife(Chiyo___c)<.405 or GetUnitState(Chiyo___c,UNIT_STATE_MANA)==0.or GetUnitAbilityLevel(Chiyo___c,0x41313047)==0 or current==0 then
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41305351)
call UnitRemoveAbility(tg,0x53303030)
call UnitRemoveAbility(tg,0x41313053)
call GroupRemoveUnit(g2,tg)
endloop
call DestroyGroup(g1)
call DestroyGroup(g2)
call UnitRemoveAbility(Chiyo___c,0x41313143)
call UnitRemoveAbility(Chiyo___c,0x41313047)
call SetPlayerAbilityAvailable(Chiyo___p,Chiyo_CHAKRA_NO_ITO,true)
set Chiyo___puppetRange=Chiyo___puppetRange-400.
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function Chiyo___ChakraNoItoCast takes real x1,real y1 returns nothing
local timer t
local integer h
local integer count=0
local real x=GetWidgetX(Chiyo___c)
local real y=GetWidgetY(Chiyo___c)
local real radius=350.
local real manacost=5.*MainPeriod
local group g1=CreateGroup()
local group g2=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g1,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null or count==Chiyo___ItoNumberMax
if tg!=Chiyo___c and IsUnitAlly(tg,Chiyo___p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not HasUnitInvisible(tg)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
if IsUnitPuppet(tg)then
if not IsUnitOwnedByPlayer(tg,Chiyo___p)then
call UnitAddAbility(tg,0x41305351)
call CreateTimerForLightning(AddLightning("DRAM",true,x,y,GetWidgetX(tg),GetWidgetY(tg)),MainPeriod)
else
call UnitAddAbility(tg,0x53303030)
call UnitAddAbility(tg,0x41313053)
endif
else
call UnitAddAbility(tg,0x41305351)
call CreateTimerForLightning(AddLightning("DRAM",true,x,y,GetWidgetX(tg),GetWidgetY(tg)),MainPeriod)
endif
call GroupAddUnit(g2,tg)
set Chiyo___ItoNumberCur=Chiyo___ItoNumberCur+1
set count=count+1
endif
call GroupRemoveUnit(g1,tg)
endloop
if count>0 then
set t=CreateTimer()
set h=GetHandleId(t)
set Chiyo___puppetRange=Chiyo___puppetRange+400.
call SetPlayerAbilityAvailable(Chiyo___p,Chiyo_CHAKRA_NO_ITO,false)
call UnitAddAbility(Chiyo___c,0x41313143)
call UnitAddAbility(Chiyo___c,0x41313047)
call SaveAgentHandle(HH,h,0,g1)
call SaveAgentHandle(HH,h,1,g2)
call SaveReal(HH,h,2,manacost)
call TimerStart(t,MainPeriod,true,function cj_anonym__175)
endif
set tg=null
set g1=null
set g2=null
set t=null
endfunction
function Chiyo___ChakraNoItoKoteiCast takes nothing returns nothing
local unit tg
local real timeShow=1.
local integer lvlImmobilize=Chiyo___ItoNumberMax-Chiyo___ItoNumberCur
call Sound("Ping.mp3")
if lvlImmobilize>0 then
loop
set tg=FirstOfGroup(Chiyo___ItoGroup)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41313253)
call UnitRemoveAbility(tg,0x42303041)
if GetWidgetLife(tg)>.405 then
set bj_lastCreatedUnit=CreateUnit(Chiyo___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313633)
call SetUnitAbilityLevel(bj_lastCreatedUnit,0x41313633,lvlImmobilize)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
call GroupRemoveUnit(Chiyo___ItoGroup,tg)
endloop
else
call RecastSkills(Chiyo___c,0x41305A43,1,0.)
call DisplayTimedTextToPlayer(Chiyo___p,0.,0.,timeShow,"|cFFFFCC00У Chiyo нет свободного пальца.|r")
endif
set tg=null
endfunction
function Chiyo___SoshuhaRemove takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Chiyo___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303533 then
call FlushChildHashtable(HH,GetHandleId(tg))
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Chiyo___SoshuhaDamage takes unit kunai,real kunaiDmg,real kunaiRadius,boolean itoLog returns nothing
local group g=CreateGroup()
local unit tg
local real x=GetWidgetX(kunai)
local real y=GetWidgetY(kunai)
local boolean log=false
call GroupEnumUnitsInRange(g,x,y,kunaiRadius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitNeedClear(tg,Chiyo___p)then
set log=true
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call UnitDamageTarget(Chiyo___c,tg,kunaiDmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tg)>.405 and itoLog then
call GroupAddUnit(Chiyo___ItoGroup,tg)
call UnitAddAbility(tg,0x41313253)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if log then
set Chiyo___KunaiNumber=Chiyo___KunaiNumber-1
call FlushChildHashtable(HH,GetHandleId(kunai))
call RemoveUnit(kunai)
endif
set tg=null
set g=null
endfunction
function Chiyo___SoshuhaMovement takes real kunaiOffset,real kunaiDmg,real kunaiRadius,boolean itoLog,lightning light,real xLeft,real yLeft,real xRight,real yRight,real degree,real curDistance returns nothing
local group g=CreateGroup()
local unit tg
local real offsetCur
local real offsetCheck
local real height
local integer random
local real f
local integer htg
local string str
call GroupEnumUnitsOfPlayer(g,Chiyo___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303533 then
set f=GetUnitFacing(tg)
call SetUnitPosition(tg,GetWidgetX(tg)+kunaiOffset*Cos(f*.017),GetWidgetY(tg)+kunaiOffset*Sin(f*.017))
if itoLog then
set htg=GetHandleId(tg)
set offsetCur=LoadReal(HH,htg,0)
set offsetCheck=LoadReal(HH,htg,1)
set height=LoadReal(HH,htg,2)
set random=LoadInteger(HH,htg,3)
set str=LoadStr(HH,htg,4)
if random==1 then
call SetUnitFlyHeight(tg,GetUnitFlyHeight(tg)+height,0.)
elseif random==2 then
call SetUnitFlyHeight(tg,GetUnitFlyHeight(tg)-height,0.)
endif
if offsetCheck>offsetCur*11.then
if str=="left"then
call SetUnitPosition(tg,GetWidgetX(tg)-offsetCur*Cos((f+90.)*.017),GetWidgetY(tg)-offsetCur*Sin((f+90.)*.017))
elseif str=="right"then
call SetUnitPosition(tg,GetWidgetX(tg)-offsetCur*Cos((f-90.)*.017),GetWidgetY(tg)-offsetCur*Sin((f-90.)*.017))
endif
call SaveReal(HH,htg,1,offsetCheck-offsetCur)
endif
endif
call Chiyo___SoshuhaDamage(tg,kunaiDmg,kunaiRadius,itoLog)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if itoLog then
call MoveLightning(light,true,xLeft+curDistance*Cos(degree*.017),yLeft+curDistance*Sin(degree*.017),xRight+curDistance*Cos(degree*.017),yRight+curDistance*Sin(degree*.017))
endif
set tg=null
set g=null
endfunction
function cj_anonym__177 takes nothing returns nothing
local unit tg
call UnitRemoveAbility(Chiyo___c,0x41305A43)
call SetPlayerAbilityAvailable(Chiyo___p,Chiyo_SOSHUHA,true)
loop
set tg=FirstOfGroup(Chiyo___ItoGroup)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41313253)
call UnitRemoveAbility(tg,0x42303041)
call GroupRemoveUnit(Chiyo___ItoGroup,tg)
endloop
call DestroyTimer(GetExpiredTimer())
set tg=null
endfunction
function cj_anonym__176 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real kunaiDmg=LoadReal(HH,h,0)
local real kunaiRadius=LoadReal(HH,h,1)
local real kunaiOffset=LoadReal(HH,h,2)
local real timeAbility=LoadReal(HH,h,3)
local real curDistance=LoadReal(HH,h,4)
local real maxDistance=LoadReal(HH,h,5)
local boolean itoLog=LoadBoolean(HH,h,6)
local real degree=LoadReal(HH,h,7)
local real xLeft=LoadReal(HH,h,8)
local real yLeft=LoadReal(HH,h,9)
local real xRight=LoadReal(HH,h,10)
local real yRight=LoadReal(HH,h,11)
local lightning light=LoadLightningHandle(HH,h,12)
if curDistance<maxDistance and Chiyo___KunaiNumber>0 then
call Chiyo___SoshuhaMovement(kunaiOffset,kunaiDmg,kunaiRadius,itoLog,light,xLeft,yLeft,xRight,yRight,degree,curDistance)
call SaveReal(HH,h,4,curDistance+kunaiOffset)
else
call DestroyLightning(light)
if Chiyo___KunaiNumber>0 then
call Chiyo___SoshuhaRemove()
endif
if Chiyo___KunaiNumber<10 and itoLog then
call SetPlayerAbilityAvailable(Chiyo___p,Chiyo_SOSHUHA,false)
call UnitAddAbility(Chiyo___c,0x41305A43)
call TimerStart(CreateTimer(),timeAbility,false,function cj_anonym__177)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set light=null
set t=null
endfunction
function Chiyo___SoshuhaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=1
local real xHero=GetWidgetX(Chiyo___c)
local real yHero=GetWidgetY(Chiyo___c)
local real a=57.2958279087*Atan2(y1-yHero,x1-xHero)
local real startOffset=25.
local real x=xHero+startOffset*Cos(a*.017)
local real y=yHero+startOffset*Sin(a*.017)
local real x2
local real y2
local real period=.025
local real distance=900.
local real kunaiDmg=40.
local real kunaiRadius=25.
local real kunaiSpeed=652.5
local real kunaiOffset=kunaiSpeed*period
local real kunaiStartOffset=0.
local real kunaiHeight=GetRandomReal(24.,32.)*period
local real kunaiStartOffsetHalf=kunaiRadius/2.
local real kunaiItoOffset
local real timeAbility=8.
local boolean itoLog=false
local unit kunai
set Chiyo___KunaiNumber=10
if Chiyo___ItoNumberCur<Chiyo___ItoNumberMax and GetUnitAbilityLevel(Chiyo___c,Chiyo_CHAKRA_NO_ITO)>0 then
set itoLog=true
endif
loop
if i==1 then
set kunaiStartOffset=25.
elseif i==2 then
set kunaiStartOffset=50.
elseif i==3 then
set kunaiStartOffset=75.
elseif i==4 then
set kunaiStartOffset=100.
elseif i==5 then
set kunaiStartOffset=125.
endif
set kunaiStartOffset=kunaiStartOffset-kunaiStartOffsetHalf
set kunaiItoOffset=kunaiStartOffset*period
set x2=x+kunaiStartOffset*Cos((a+90.)*.017)
set y2=y+kunaiStartOffset*Sin((a+90.)*.017)
set kunai=CreateUnit(Chiyo___p,0x68303533,x2,y2,a)
if itoLog then
if i==5 then
set Chiyo___KunaiLeft=kunai
endif
call SaveReal(HH,GetHandleId(kunai),0,kunaiItoOffset)
call SaveReal(HH,GetHandleId(kunai),1,kunaiStartOffset)
call SaveReal(HH,GetHandleId(kunai),2,kunaiHeight)
call SaveInteger(HH,GetHandleId(kunai),3,GetRandomInt(1,2))
call SaveStr(HH,GetHandleId(kunai),4,"left")
endif
set x2=x+kunaiStartOffset*Cos((a-90.)*.017)
set y2=y+kunaiStartOffset*Sin((a-90.)*.017)
set kunai=CreateUnit(Chiyo___p,0x68303533,x2,y2,a)
if itoLog then
if i==5 then
set Chiyo___KunaiRight=kunai
endif
call SaveReal(HH,GetHandleId(kunai),0,kunaiItoOffset)
call SaveReal(HH,GetHandleId(kunai),1,kunaiStartOffset)
call SaveReal(HH,GetHandleId(kunai),2,kunaiHeight)
call SaveInteger(HH,GetHandleId(kunai),3,GetRandomInt(1,2))
call SaveStr(HH,GetHandleId(kunai),4,"right")
endif
set i=i+1
exitwhen i>Chiyo___KunaiNumber/2
endloop
call SaveReal(HH,h,0,kunaiDmg)
call SaveReal(HH,h,1,kunaiRadius)
call SaveReal(HH,h,2,kunaiOffset)
call SaveReal(HH,h,3,timeAbility)
call SaveReal(HH,h,4,0.)
call SaveReal(HH,h,5,distance)
call SaveBoolean(HH,h,6,itoLog)
call SaveReal(HH,h,7,a)
if itoLog then
call SaveReal(HH,h,8,GetWidgetX(Chiyo___KunaiLeft))
call SaveReal(HH,h,9,GetWidgetY(Chiyo___KunaiLeft))
call SaveReal(HH,h,10,GetWidgetX(Chiyo___KunaiRight))
call SaveReal(HH,h,11,GetWidgetY(Chiyo___KunaiRight))
call SaveLightningHandle(HH,h,12,AddLightning("DRAM",true,GetWidgetX(Chiyo___KunaiRight),GetWidgetY(Chiyo___KunaiRight),GetWidgetX(Chiyo___KunaiLeft),GetWidgetY(Chiyo___KunaiLeft)))
endif
call TimerStart(t,period,true,function cj_anonym__176)
set kunai=null
set t=null
endfunction
function Chiyo___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Chiyo_SOSHUHA or i==0x41305A43 or i==Chiyo_CHAKRA_NO_ITO or i==0x41313047 or i==Chiyo_PAPA_MAMA or i==0x41305331 or i==0x41305349 or i==0x41305333
endfunction
function Chiyo___SpellsActions takes nothing returns nothing
local integer i
if Chiyo___c==null then
set Chiyo___c=GetTriggerUnit()
set Chiyo___p=GetOwningPlayer(Chiyo___c)
endif
set i=GetSpellAbilityId()
if i==Chiyo_SOSHUHA then
call Chiyo___SoshuhaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41305A43 then
call Chiyo___ChakraNoItoKoteiCast()
elseif i==Chiyo_CHAKRA_NO_ITO then
call Chiyo___ChakraNoItoCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41313047 then
call UnitRemoveAbility(Chiyo___c,0x41313047)
elseif i==Chiyo_PAPA_MAMA then
call Chiyo___PapaMamaCast()
elseif i==0x41305331 then
call Chiyo___PapaWireCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41305349 then
call Chiyo___PapaWhipCast(GetTriggerUnit(),GetSpellTargetUnit())
elseif i==0x41305333 then
call Chiyo___MamaTateCast(GetTriggerUnit(),GetSpellTargetUnit())
endif
endfunction
function Chiyo_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Chiyo___ItoGroup=CreateGroup()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call SetPlayerAbilityAvailable(Player(i),0x41305351,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Chiyo___SpellsConditions))
call TriggerAddAction(spells,function Chiyo___SpellsActions)
set spells=null
endfunction
function Danzo___GetDamageSaiboConditions takes nothing returns boolean
return GetEventDamage()>0.and GetUnitAbilityLevel(GetTriggerUnit(),Danzo_SAIBO)>0 and Danzo___SaiboValue>0.
endfunction
function Danzo___GetDamageSaiboActions takes nothing returns nothing
local real dmg=GetEventDamage()
local real x=GetWidgetX(Danzo___c)
local real y=GetWidgetY(Danzo___c)
local real distance=SquareRoot((x-Danzo___SaiboX)*(x-Danzo___SaiboX)+(y-Danzo___SaiboY)*(y-Danzo___SaiboY))
if distance<200.then
if dmg<=Danzo___SaiboValue then
call SetWidgetLife(Danzo___c,GetWidgetLife(Danzo___c)+dmg)
set Danzo___SaiboValue=Danzo___SaiboValue-dmg
else
call SetWidgetLife(Danzo___c,GetWidgetLife(Danzo___c)+Danzo___SaiboValue)
set Danzo___SaiboValue=0.
endif
call SetTextTagText(Danzo___SaiboText,"Прочность [|cFFE5BC97 "+I2S(R2I(Danzo___SaiboValue))+"|r]",countDownTextSize/4.44)
endif
endfunction
function Danzo___SaiboGiveState takes boolean log returns nothing
local real x=GetWidgetX(Danzo___c)
local real y=GetWidgetY(Danzo___c)
local real radius=500.
local group g=CreateGroup()
local unit tg
if log then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Danzo___p)then
set bj_lastCreatedUnit=CreateUnit(Danzo___p,0x6E303042,x,y,GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313653)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
endif
call GroupRemoveUnit(g,tg)
endloop
set Danzo___SaiboValue=200.+GetUnitState(Danzo___c,UNIT_STATE_MAX_MANA)-GetUnitState(Danzo___c,UNIT_STATE_MANA)
set Danzo___SaiboText=CreateTextTag()
call SetTextTagText(Danzo___SaiboText,"Прочность [|cFFE5BC97 "+I2S(R2I(Danzo___SaiboValue))+"|r]",countDownTextSize/4.44)
call SetTextTagPos(Danzo___SaiboText,x,y,heightGameText*20.)
call SetTextTagVisibility(Danzo___SaiboText,false)
if GetLocalPlayer()==Danzo___p then
call SetTextTagVisibility(Danzo___SaiboText,true)
endif
call EnableTrigger(Danzo___TrgSaiboReg)
else
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x42303542)>0 then
call UnitRemoveAbility(tg,0x42303542)
endif
call GroupRemoveUnit(g,tg)
endloop
call DisableTrigger(Danzo___TrgSaiboReg)
set Danzo___SaiboValue=0.
call DestroyTextTag(Danzo___SaiboText)
endif
set tg=null
set g=null
endfunction
function Danzo___IsTreeKillDanzo takes nothing returns boolean
local boolean log=false
local real mp_cur=GetUnitState(Danzo___c,UNIT_STATE_MANA)
local real mp_max=GetUnitState(Danzo___c,UNIT_STATE_MAX_MANA)
local integer chance=0
if mp_cur<mp_max then
if mp_cur<mp_max*1.and mp_cur>=mp_max*.9 then
set chance=GetRandomInt(1,11)
elseif mp_cur<mp_max*.9 and mp_cur>=mp_max*.8 then
set chance=GetRandomInt(1,10)
elseif mp_cur<mp_max*.8 and mp_cur>=mp_max*.7 then
set chance=GetRandomInt(1,9)
elseif mp_cur<mp_max*.7 and mp_cur>=mp_max*.6 then
set chance=GetRandomInt(1,8)
elseif mp_cur<mp_max*.6 and mp_cur>=mp_max*.5 then
set chance=GetRandomInt(1,7)
elseif mp_cur<mp_max*.5 and mp_cur>=mp_max*.4 then
set chance=GetRandomInt(1,6)
elseif mp_cur<mp_max*.4 and mp_cur>=mp_max*.3 then
set chance=GetRandomInt(1,5)
elseif mp_cur<mp_max*.3 and mp_cur>=mp_max*.2 then
set chance=GetRandomInt(1,4)
elseif mp_cur<mp_max*.2 and mp_cur>=mp_max*.1 then
set chance=GetRandomInt(1,3)
elseif mp_cur<mp_max*.1 then
set chance=GetRandomInt(1,2)
endif
endif
if chance==1 then
set log=true
endif
return log
endfunction
function cj_anonym__178 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if Danzo___SaiboValue>0.and time>0.then
call SaveReal(HH,h,2,time-period)
else
call KillUnit(LoadUnitHandle(HH,h,0))
call Danzo___SaiboGiveState(false)
if GetWidgetLife(Danzo___c)>.405 and LoadBoolean(HH,h,3)then
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,5.,"|cFFFFCC00Клетки Хаширамы поглотили Данзо!|r")
call KillUnit(Danzo___c)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Danzo___SaiboStart takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(Danzo___c,Danzo_SAIBO)
local real castTime=lvl*1.+3.
local real period=.1
local unit d
set Danzo___SaiboX=GetWidgetX(Danzo___c)
set Danzo___SaiboY=GetWidgetY(Danzo___c)
set d=CreateUnit(Danzo___p,0x6E30334B,Danzo___SaiboX,Danzo___SaiboY,GetRandomReal(1.,360.))
call Sound("Danzo Mokton.mp3")
call SetUnitAnimation(d,"stand")
call SetUnitTimeScale(d,3.)
call Danzo___SaiboGiveState(true)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,castTime)
call SaveBoolean(HH,h,3,Danzo___IsTreeKillDanzo())
call TimerStart(t,period,true,function cj_anonym__178)
set d=null
set t=null
endfunction
function Danzo___SaiboCast takes nothing returns nothing
if GetUnitAbilityLevel(Danzo___c,0x41303250)==0 then
call Danzo___SaiboStart()
else
call RecastSkills(Danzo___c,Danzo_SAIBO,1,100.)
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,5.,"|cFFFFCC00Нельзя высвобождать клетки Хаширамы во время Изанаги!|r")
endif
endfunction
function Danzo___UltChangeText takes nothing returns nothing
local integer idp=GetPlayerId(Danzo___p)
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFFE5BC97"+I2S(Danzo___sharingancur)+"|r]",countDownTextSize/4.44)
endfunction
function cj_anonym__180 takes nothing returns nothing
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,4.,"|cFFFFCC00Глаз-Шаринган восстановлен и готов к использованию.|r")
set Danzo___sharingancur=Danzo___sharingancur+1
call Danzo___UltChangeText()
if Danzo___sharingancur==1 then
call SetPlayerAbilityAvailable(Danzo___p,Danzo_ULT,true)
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__179 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,2)
local real y=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local real time=LoadReal(HH,h,5)
if GetWidgetLife(Danzo___c)>.405 and time>0.and not Danzo___uraShinshoCast then
call SaveReal(HH,h,5,time-period)
else
call UnitRemoveAbility(Danzo___c,0x41303250)
if not Danzo___uraShinshoCast then
call Sound("Danzo Izanagi Off.mp3")
if GetWidgetLife(Danzo___c)<.405 then
call ReviveHero(Danzo___c,x,y,false)
else
call SetUnitPosition(Danzo___c,x,y)
endif
call SetWidgetLife(Danzo___c,LoadReal(HH,h,0))
call SetUnitState(Danzo___c,UNIT_STATE_MANA,LoadReal(HH,h,1))
if GetLocalPlayer()==Danzo___p then
call ClearSelection()
call SelectUnit(Danzo___c,true)
endif
endif
set Danzo___sharingancur=Danzo___sharingancur-1
call Danzo___UltChangeText()
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,4.,"|cFFFFCC00Глаз-Шаринган восстановится через 120 секунд.|r")
if Danzo___sharingancur==0 then
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,4.,"|cFFFFCC00Изанаги заблокировано.|r")
else
call SetPlayerAbilityAvailable(Danzo___p,Danzo_ULT,true)
endif
call TimerStart(CreateTimer(),120.,false,function cj_anonym__180)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Danzo___UltStart takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Danzo___c)
local real y=GetWidgetY(Danzo___c)
local real manacost=100.
local real period=.1
local real time=10.-period
call UnitAddAbility(Danzo___c,0x41303250)
call SetPlayerAbilityAvailable(Danzo___p,Danzo_ULT,false)
call SaveReal(HH,h,0,GetWidgetLife(Danzo___c))
call SaveReal(HH,h,1,GetUnitState(Danzo___c,UNIT_STATE_MANA)-manacost)
call SaveReal(HH,h,2,x)
call SaveReal(HH,h,3,y)
call SaveReal(HH,h,4,period)
call SaveReal(HH,h,5,time)
call TimerStart(t,period,true,function cj_anonym__179)
set t=null
endfunction
function Danzo___UltCast takes nothing returns nothing
if Danzo___SaiboValue==0.then
call Danzo___UltStart()
else
call RecastSkills(Danzo___c,Danzo_ULT,1,280.)
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,5.,"|cFFFFCC00Нельзя использовать Изанаги во время высвобожденных клеток Хаширамы!|r")
endif
endfunction
function cj_anonym__181 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit caster=LoadUnitHandle(HH,h,0)
local group g1=LoadGroupHandle(HH,h,1)
local group g2=LoadGroupHandle(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real radius=LoadReal(HH,h,4)
local real f=GetUnitFacing(caster)
local real x=GetWidgetX(caster)
local real y=GetWidgetY(caster)
local real rectx=x+offset*Cos(f*bj_DEGTORAD)
local real recty=y+offset*Sin(f*bj_DEGTORAD)
local real offsetTarget=radius/45.
local real x1
local real y1
local real x2
local real y2
local unit tg
if GetUnitCurrentOrder(caster)==OrderId("coupleinstant")and GetWidgetLife(caster)>.405 then
call GroupEnumUnitsInRange(g1,rectx,recty,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Danzo___p)then
if not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
call UnitAddAbility(tg,0x41305154)
endif
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
set x2=x1-offsetTarget*Cos((bj_RADTODEG*Atan2(y1-y,x1-x))*bj_DEGTORAD)
set y2=y1-offsetTarget*Sin((bj_RADTODEG*Atan2(y1-y,x1-x))*bj_DEGTORAD)
if not IsTerrainPathable(x2,y2,PATHING_TYPE_WALKABILITY)then
call SetUnitPosition(tg,x2,y2)
else
call SetUnitPosition(tg,x1,y1)
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
else
call DestroyGroup(g1)
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41305154)
call UnitRemoveAbility(tg,0x42303250)
call GroupRemoveUnit(g2,tg)
endloop
call DestroyGroup(g2)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g1=null
set g2=null
set tg=null
set caster=null
set t=null
endfunction
function Danzo___BakuSpellCast takes unit caster returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real offset=300.
local real radius=500.
call SaveAgentHandle(HH,h,0,caster)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,radius)
call TimerStart(t,period,true,function cj_anonym__181)
set t=null
endfunction
function cj_anonym__184 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
if GetWidgetLife(d)<.405 then
call KuchiyoseCreateDustEffect("end",d,1.75,2.6)
call RemoveUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set t=null
endfunction
function cj_anonym__183 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local unit d=CreateUnit(Danzo___p,0x68303144,LoadReal(HH,h,0),LoadReal(HH,h,1),GetUnitFacing(Danzo___c))
local real lifeTime=25.
local real period=.1
call Sound("Danzo Kuchiyose Baku Roar.mp3")
call KuchiyoseCreateDustEffect("cast",d,1.75,2.6)
call UnitApplyTimedLife(d,0x42544C46,lifeTime)
call SaveAgentHandle(HH,GetHandleId(t1),0,d)
call TimerStart(t1,period,true,function cj_anonym__184)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__182 takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Danzo___c)
local real y=GetWidgetY(Danzo___c)
local real period=.67
call KuchiyoseEffect(x,y,3.)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call TimerStart(t,period,false,function cj_anonym__183)
call DestroyTimer(GetExpiredTimer())
set t=null
endfunction
function Danzo___BakuCast takes nothing returns nothing
call Sound("Danzo Kuchiyose.mp3")
call TimerStart(CreateTimer(),.683,false,function cj_anonym__182)
endfunction
function Danzo___IsUnitNeedUraShinsho takes unit u returns boolean
local boolean log=false
if GetWidgetLife(u)>.405 and not IsUnitHidden(u)and not IsUnitInvulnerable(u)and not IsUnitType(u,UNIT_TYPE_UNDEAD)and not IsUnitType(u,UNIT_TYPE_STRUCTURE)and not IsUnitBig(u)then
set log=true
endif
return log
endfunction
function Danzo___UraShinshoDamage takes unit ball,real radius returns nothing
local group g=CreateGroup()
local unit tg
local real x=GetWidgetX(ball)
local real y=GetWidgetY(ball)
call KillDestructablesStart(x,y,radius/2.)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if Danzo___IsUnitNeedUraShinsho(tg)then
call UnitDamageTarget(Danzo___c,tg,99999.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=null
set tg=null
endfunction
function cj_anonym__185 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit ball=LoadUnitHandle(HH,h,0)
local real radius=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real sizePlus=LoadReal(HH,h,4)
local real size=LoadReal(HH,h,5)
local real radiusPlus=LoadReal(HH,h,6)
if time>0.then
if time>2.5 then
set size=size+.045
set radius=radius+4.5
elseif time>2.3 and time<=2.5 then
set size=size-.025
set radius=radius-2.5
elseif time>1.and time<=2.then
set size=size+sizePlus
set radius=radius+radiusPlus
elseif time==1.then
call CreateEffect(GetWidgetX(ball),GetWidgetY(ball),size,"EarthShock.mdx",2.)
endif
call SetUnitScale(ball,size,size,size)
call Danzo___UraShinshoDamage(ball,radius)
call SaveReal(HH,h,1,radius)
call SaveReal(HH,h,5,size)
call SaveReal(HH,h,3,time-period)
else
set Danzo___uraShinshoCast=false
call PauseUnit(Danzo___c,false)
call SetUnitInvulnerable(Danzo___c,false)
call SetUnitPathing(Danzo___c,false)
call KillUnit(Danzo___c)
call KillUnit(ball)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set ball=null
set t=null
endfunction
function Danzo___UraShinshoStart takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real time=3.
local real timeAct=1.
local real size=.1
local real sizePlus=(1.75/timeAct)*period
local real radius=10.
local real radiusPlus=(700./timeAct)*period
local unit ball=CreateUnit(Danzo___p,0x6E303257,GetWidgetX(Danzo___c),GetWidgetY(Danzo___c),0.)
call SetUnitScale(ball,size,size,size)
call Danzo___UraShinshoDamage(ball,radius)
call SaveAgentHandle(HH,h,0,ball)
call SaveReal(HH,h,1,radius)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call SaveReal(HH,h,4,sizePlus)
call SaveReal(HH,h,5,size)
call SaveReal(HH,h,6,radiusPlus)
call TimerStart(t,period,true,function cj_anonym__185)
set ball=null
set t=null
endfunction
function cj_anonym__186 takes nothing returns nothing
call Danzo___UraShinshoStart()
call DestroyTimer(GetExpiredTimer())
endfunction
function Danzo___UraShinshoCast takes nothing returns nothing
set Danzo___uraShinshoCast=true
call Sound("Danzo Ura Shinsho Fuinjutsu.mp3")
call PauseUnit(Danzo___c,true)
call SetUnitInvulnerable(Danzo___c,true)
call SetUnitPathing(Danzo___c,true)
call SetUnitAnimation(Danzo___c,"Spell Death")
call TimerStart(CreateTimer(),2.,false,function cj_anonym__186)
endfunction
function cj_anonym__187 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real time=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
if GetWidgetLife(tu)>.405 and time>0.then
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call SaveReal(HH,h,1,time-period)
else
call PauseUnit(tu,false)
call SetUnitTimeScale(tu,1.)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set tu=null
set t=null
endfunction
function Danzo___JigoJibakuCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=4.
local real period=.1
call Sound("Danzo Fuinjutsu Start.mp3")
call PauseUnit(tu,true)
call SetUnitTimeScale(tu,0.)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,time-period)
call SaveReal(HH,h,2,period)
call TimerStart(t,period,true,function cj_anonym__187)
set t=null
endfunction
function cj_anonym__188 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
if GetWidgetLife(tu)<.405 or GetUnitAbilityLevel(tu,0x42303241)==0 or GetUnitAbilityLevel(Danzo___c,0x41303645)==0 then
if GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(tu,0x42303241)>0 and GetUnitAbilityLevel(Danzo___c,0x41303645)==0 then
call Danzo___JigoJibakuCast(tu)
endif
call UnitRemoveAbility(tu,0x42303241)
call UnitRemoveAbility(Danzo___c,0x41303645)
call SetPlayerAbilityAvailable(Danzo___p,Danzo_FUINJUTSU,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Danzo___FuinjutsuCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
call SetPlayerAbilityAvailable(Danzo___p,Danzo_FUINJUTSU,false)
call UnitAddAbility(Danzo___c,0x41303645)
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,period,true,function cj_anonym__188)
set t=null
endfunction
function Danzo___ShinkuGyokuDamage takes real x,real y,real radius,real dmg,group gr_loop returns boolean
local boolean log=false
local unit tg
call GroupEnumUnitsInRange(gr_loop,x,y,radius,null)
loop
set tg=FirstOfGroup(gr_loop)
exitwhen tg==null or log
if IsUnitNeedNinjutsu(tg,Danzo___p)then
call Sound3D(tg,"Danzo Futon Shinkugyoku Damage.mp3")
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(Danzo___c,tg,GetNinjutsuDamage(dmg,Danzo___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
set log=true
endif
call GroupRemoveUnit(gr_loop,tg)
endloop
set tg=null
return log
endfunction
function cj_anonym__189 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,2)
local real distance=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local boolean log=false
if distance>offset then
set log=Danzo___ShinkuGyokuDamage(x,y,LoadReal(HH,h,4),LoadReal(HH,h,5),LoadGroupHandle(HH,h,1))
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
if not log then
call SaveReal(HH,h,3,distance-offset)
else
call SaveReal(HH,h,3,0.)
endif
else
call DestroyGroup(LoadGroupHandle(HH,h,1))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Danzo___ShinkuGyokuStart takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Danzo___c)
local real y=GetWidgetY(Danzo___c)
local real f=GetUnitFacing(Danzo___c)
local real random_degree=GetRandomReal(-5.,5.)
local real distance=900.
local real radius=40.
local real dmg=50.
local real speed=1300.
local real offset=speed*MainPeriod
call SaveAgentHandle(HH,h,0,CreateUnit(Danzo___p,0x6E303349,x,y,f+random_degree))
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,distance)
call SaveReal(HH,h,4,radius)
call SaveReal(HH,h,5,dmg)
call TimerStart(t,MainPeriod,true,function cj_anonym__189)
set t=null
endfunction
function cj_anonym__190 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if GetWidgetLife(Danzo___c)>.405 and time>0.then
call Danzo___ShinkuGyokuStart()
call SaveReal(HH,h,1,time-period)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Danzo___ShinkuGyokuCast takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=3.
local real period=.25
call Sound("Danzo Futon Shinkugyoku.mp3")
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call TimerStart(t,period,true,function cj_anonym__190)
set t=null
endfunction
function Danzo___ShinkuhaDamage takes real x,real y,real radius,real dmg,group gr_loop,group gr_saved returns nothing
local unit tg
call GroupEnumUnitsInRange(gr_loop,x,y,radius,null)
loop
set tg=FirstOfGroup(gr_loop)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Danzo___p)and not IsUnitInGroup(tg,gr_saved)then
call UnitDamageTarget(Danzo___c,tg,GetNinjutsuDamage(dmg,Danzo___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call GroupAddUnit(gr_saved,tg)
endif
endif
call GroupRemoveUnit(gr_loop,tg)
endloop
set tg=null
endfunction
function cj_anonym__191 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance>offset then
call Danzo___ShinkuhaDamage(x,y,LoadReal(HH,h,4),LoadReal(HH,h,5),LoadGroupHandle(HH,h,6),LoadGroupHandle(HH,h,7))
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
call GroupClear(LoadGroupHandle(HH,h,7))
call DestroyGroup(LoadGroupHandle(HH,h,6))
call DestroyGroup(LoadGroupHandle(HH,h,7))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Danzo___ShinkuhaCast takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=600.
local real speed=900.
local real offset=speed*MainPeriod
local real dmg=100.+GetHeroInt(Danzo___c,true)*3.
local real radius=300.
local unit d=CreateUnit(Danzo___p,0x6E30334A,x,y,a)
call Sound("Danzo Futon Shinkuha.mp3")
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x+distance*Cos(a*bj_DEGTORAD))
call SaveReal(HH,h,2,y+distance*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,radius)
call SaveReal(HH,h,5,dmg)
call SaveAgentHandle(HH,h,6,CreateGroup())
call SaveAgentHandle(HH,h,7,CreateGroup())
call TimerStart(t,MainPeriod,true,function cj_anonym__191)
set d=null
set t=null
endfunction
function cj_anonym__192 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,2)
local real x1=LoadReal(HH,h,3)
local real y1=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local real knockback=LoadReal(HH,h,6)
local real dmg=LoadReal(HH,h,7)
local real period=LoadReal(HH,h,8)
local real time=LoadReal(HH,h,9)
local real dmgAdd=LoadReal(HH,h,10)
local real x
local real y
local unit tg
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
if time>0.then
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Danzo___p)then
set x=GetWidgetX(tg)
set y=GetWidgetY(tg)
call SetUnitPosition(tg,x+(knockback/10.)*Cos(bj_RADTODEG*Atan2(y1-y,x1-x)*bj_DEGTORAD),y+(knockback/10.)*Sin(bj_RADTODEG*Atan2(y1-y,x1-x)*bj_DEGTORAD))
if GetUnitAbilityLevel(tg,0x41305154)>0 then
call UnitDamageTarget(Danzo___c,tg,GetNinjutsuDamage(GetUnitState(tg,UNIT_STATE_MAX_LIFE)*dmgAdd,Danzo___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,9,time-period)
else
call CreateEffect(x1,y1,1.5,"IceNova.mdx",2.)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Danzo___p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
set x=GetWidgetX(tg)+knockback*Cos(GetUnitFacing(tg)*bj_DEGTORAD)
set y=GetWidgetY(tg)+knockback*Sin(GetUnitFacing(tg)*bj_DEGTORAD)
call KnockBackUnitEf(tg,knockback,period*10.,bj_RADTODEG*Atan2(y1-y,x1-x),period,0,false)
call UnitDamageTarget(Danzo___c,tg,GetNinjutsuDamage(dmg,Danzo___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call RemoveUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g=null
set tg=null
set d=null
set t=null
endfunction
function Danzo___ShinkuDaiGyokuStart takes unit d,effect e,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=1.
local real period=.025
local real radius=400.
local real knockback=200.
local real dmg=50.+GetHeroInt(Danzo___c,true)*1.5
local real dmgAdd=.1*period
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,e)
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveReal(HH,h,3,x1)
call SaveReal(HH,h,4,y1)
call SaveReal(HH,h,5,radius)
call SaveReal(HH,h,6,knockback)
call SaveReal(HH,h,7,dmg)
call SaveReal(HH,h,8,period)
call SaveReal(HH,h,9,time)
call SaveReal(HH,h,10,dmgAdd)
call TimerStart(t,period,true,function cj_anonym__192)
set t=null
endfunction
function cj_anonym__193 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance>offset then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
call Danzo___ShinkuDaiGyokuStart(d,LoadEffectHandle(HH,h,1),x1,y1)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Danzo___ShinkuDaiGyokuCast takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real speed=783.
local real offset=speed*MainPeriod
local real size=1.85
local unit d=CreateUnit(Danzo___p,0x6E303042,x,y,a)
call Sound("Danzo Futon Shinku Dai Gyoku.mp3")
call SetUnitFlyHeight(d,60.,0.)
call SetUnitScale(d,size,size,size)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("cronosphere1.mdx",d,"chest"))
call SaveReal(HH,h,2,x+distance*Cos(a*bj_DEGTORAD))
call SaveReal(HH,h,3,y+distance*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,4,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__193)
set d=null
set t=null
endfunction
function Danzo___VacuumShurikenItem takes boolean log returns nothing
local integer id
local integer charges=0
local item art
if log then
set id=ITEM_VACUUM_SHURIKEN_ID
set art=GetItemOfTypeFromUnitBJ(Danzo___c,SHURIKEN_ID)
else
set id=SHURIKEN_ID
set art=GetItemOfTypeFromUnitBJ(Danzo___c,ITEM_VACUUM_SHURIKEN_ID)
endif
set charges=GetItemCharges(art)
call RemoveItem(art)
call SetItemCharges(UnitAddItemById(Danzo___c,id),charges)
set art=null
endfunction
function cj_anonym__194 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if time>0.and GetWidgetLife(Danzo___c)>.405 then
call SaveReal(HH,h,1,time-period)
else
call Danzo___VacuumShurikenItem(false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Danzo___VacuumShurikenCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=10.
local real period=1.
call Sound("Danzo Vacuum Shuriken.mp3")
call Danzo___VacuumShurikenItem(true)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call TimerStart(t,period,true,function cj_anonym__194)
set t=null
endfunction
function Danzo___GetDamageVacuumBladeConditions takes nothing returns boolean
return GetEventDamage()>.0 and GetUnitAbilityLevel(GetEventDamageSource(),0x41303856)>0 and IsUnitInGroup(GetTriggerUnit(),Danzo___GrBladeCheck)
endfunction
function Danzo___GetDamageVacuumBladeActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real dmg=GetEventDamage()
local real dmg_add=60.+GetHeroLevel(Danzo___c)*10.
call DisableTrigger(Danzo___TrgBladeReg)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(Danzo___c,tu,dmg+dmg_add,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call SetWidgetLife(tu,GetWidgetLife(tu)+dmg)
call GroupRemoveUnit(Danzo___GrBladeCheck,tu)
call EnableTrigger(Danzo___TrgBladeReg)
set tu=null
endfunction
function Danzo___AttackVacuumBladeConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),0x41303856)>0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(GetTriggerUnit(),Danzo___GrBladeCheck)
endfunction
function Danzo___AttackVacuumBladeActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Danzo___GrBladeReg)then
call GroupAddUnit(Danzo___GrBladeReg,tu)
call TriggerRegisterUnitEvent(Danzo___TrgBladeReg,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Danzo___GrBladeCheck,tu)
set tu=null
endfunction
function Danzo___VacuumBladeCast takes nothing returns nothing
call Sound("Danzo Vacuum Blade.mp3")
call SetItemCharges(GetItemOfTypeFromUnitBJ(Danzo___c,KUNAI_ID),GetItemCharges(GetItemOfTypeFromUnitBJ(Danzo___c,KUNAI_ID))-1)
call UnitTempSpell(Danzo___c,0x41303856,0x42303541,8.,1,false)
endfunction
function Danzo___FutonNoJutsuCast takes unit tu,item art returns nothing
local real x=GetWidgetX(Danzo___c)
local real y=GetWidgetY(Danzo___c)
local real x1
local real y1
local real distance
if tu!=null then
set x1=GetWidgetX(tu)
set y1=GetWidgetY(tu)
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<300.then
call Danzo___ShinkuDaiGyokuCast(x,y,x1,y1)
elseif distance>=300.and distance<600.then
call Danzo___ShinkuhaCast(x,y,x1,y1)
elseif distance>=600.then
call Danzo___ShinkuGyokuCast(x,y,x1,y1)
endif
else
if art!=null then
if UnitHasItem(Danzo___c,art)then
if GetItemCharges(art)>0 then
if GetItemTypeId(art)==KUNAI_ID then
call Danzo___VacuumBladeCast()
elseif GetItemTypeId(art)==SHURIKEN_ID then
call Danzo___VacuumShurikenCast()
else
call RecastSkills(Danzo___c,Danzo_FUTON,1,140.)
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,5.,"Технику можно применять либо на |cFFFFCC00Сюрикен|r, либо на |cFFFFCC00Кунай|r!")
endif
else
call RecastSkills(Danzo___c,Danzo_FUTON,1,140.)
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,5.,"|cFFFFCC00У предмета кончились заряды!|r")
endif
else
call RecastSkills(Danzo___c,Danzo_FUTON,1,140.)
call DisplayTimedTextToPlayer(Danzo___p,0.,0.,5.,"Предмет должен быть в инвентаре у |cFFFFCC00Данзо|r!")
endif
endif
endif
endfunction
function Danzo___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Danzo_FUTON or i==Danzo_BAKU or i==0x4130364A or i==Danzo_FUINJUTSU or i==0x41303645 or i==Danzo_ULT or i==Danzo_URA_SHINSHO or i==Danzo_SAIBO
endfunction
function Danzo___SpellsActions takes nothing returns nothing
local integer i
if Danzo___c==null then
set Danzo___c=GetTriggerUnit()
set Danzo___p=GetOwningPlayer(Danzo___c)
call TriggerRegisterUnitEvent(Danzo___TrgSaiboReg,Danzo___c,EVENT_UNIT_DAMAGED)
endif
set i=GetSpellAbilityId()
if i==Danzo_FUTON then
call Danzo___FutonNoJutsuCast(GetSpellTargetUnit(),GetSpellTargetItem())
elseif i==Danzo_BAKU then
call Danzo___BakuCast()
elseif i==0x4130364A then
call Danzo___BakuSpellCast(GetTriggerUnit())
elseif i==Danzo_FUINJUTSU then
call Danzo___FuinjutsuCast(GetSpellTargetUnit())
elseif i==Danzo_URA_SHINSHO then
call Danzo___UraShinshoCast()
elseif i==0x41303645 then
call UnitRemoveAbility(Danzo___c,0x41303645)
elseif i==Danzo_ULT then
call Danzo___UltCast()
elseif i==Danzo_SAIBO then
call Danzo___SaiboCast()
endif
endfunction
function Danzo_AddIzanagi takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Danzo]then
if Danzo___c==null then
set Danzo___c=udg_Hero[i]
set Danzo___p=GetOwningPlayer(Danzo___c)
call TriggerRegisterUnitEvent(Danzo___TrgSaiboReg,Danzo___c,EVENT_UNIT_DAMAGED)
endif
call Danzo___UltChangeText()
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function cj_anonym__195 takes nothing returns nothing
if not udg_GameEnd then
if GetWidgetLife(Danzo___c)>.405 then
if GetUnitAbilityLevel(Danzo___c,0x41303645)==0 then
if GetWidgetLife(Danzo___c)<GetUnitState(Danzo___c,UNIT_STATE_MAX_LIFE)*.25 then
if GetUnitAbilityLevel(Danzo___c,Danzo_URA_SHINSHO)>0 then
call SetPlayerAbilityAvailable(Danzo___p,Danzo_FUINJUTSU,false)
call SetPlayerAbilityAvailable(Danzo___p,Danzo_URA_SHINSHO,true)
else
call UnitAddAbility(Danzo___c,Danzo_URA_SHINSHO)
endif
else
call SetPlayerAbilityAvailable(Danzo___p,Danzo_URA_SHINSHO,false)
call SetPlayerAbilityAvailable(Danzo___p,Danzo_FUINJUTSU,true)
endif
endif
endif
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Danzo___FuinjutsuStart takes nothing returns nothing
call TimerStart(CreateTimer(),1.,true,function cj_anonym__195)
endfunction
function Danzo_AddFuinjutsu takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Danzo]then
if Danzo___c==null then
set Danzo___c=udg_Hero[i]
set Danzo___p=GetOwningPlayer(Danzo___c)
call TriggerRegisterUnitEvent(Danzo___TrgSaiboReg,Danzo___c,EVENT_UNIT_DAMAGED)
endif
call Danzo___FuinjutsuStart()
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Danzo_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
set Danzo___GrBladeReg=CreateGroup()
set Danzo___GrBladeCheck=CreateGroup()
set Danzo___TrgBladeReg=CreateTrigger()
set Danzo___TrgSaiboReg=CreateTrigger()
call DisableTrigger(Danzo___TrgSaiboReg)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),Danzo_SAIBO_SPELLBOOK,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Danzo___SpellsConditions))
call TriggerAddAction(spells,function Danzo___SpellsActions)
call TriggerAddCondition(attack,Condition(function Danzo___AttackVacuumBladeConditions))
call TriggerAddAction(attack,function Danzo___AttackVacuumBladeActions)
call TriggerAddCondition(Danzo___TrgBladeReg,Condition(function Danzo___GetDamageVacuumBladeConditions))
call TriggerAddAction(Danzo___TrgBladeReg,function Danzo___GetDamageVacuumBladeActions)
call TriggerAddCondition(Danzo___TrgSaiboReg,Condition(function Danzo___GetDamageSaiboConditions))
call TriggerAddAction(Danzo___TrgSaiboReg,function Danzo___GetDamageSaiboActions)
set attack=null
set spells=null
endfunction
function cj_anonym__197 takes nothing returns nothing
set Darui___kangekihaCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__196 takes nothing returns nothing
set Darui___kangekihaSoundCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Darui___RaitonKangekihaAct takes nothing returns nothing
local integer lvlSlow
local real cd=.25
local real cdSound=7.
local real dmg=50.
local real timeDebuff=3.
local unit tg
set Darui___kangekihaCD=true
if not Darui___kangekihaSoundCD then
set Darui___kangekihaSoundCD=true
call Sound("Darui Raiton Kangekiha.mp3")
call TimerStart(CreateTimer(),cdSound,false,function cj_anonym__196)
endif
loop
set tg=FirstOfGroup(Darui___grKangekiha)
exitwhen tg==null
set lvlSlow=GetUnitAbilityLevel(tg,0x41303155)
if lvlSlow>0 then
call SetUnitAbilityLevel(tg,0x41303155,lvlSlow+1)
else
call UnitTempSpell(tg,0x41303155,0x42303035,timeDebuff,1,true)
endif
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",tg,"chest"))
call UnitDamageTarget(Darui___c,tg,GetNinjutsuDamage(dmg,Darui___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call GroupRemoveUnit(Darui___grKangekiha,tg)
endloop
call TimerStart(CreateTimer(),cd,false,function cj_anonym__197)
set tg=null
endfunction
function Darui___KuroPansaDamage takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=5
local real dmg=400.
local real radius=500.
local rect r=Rect(x-radius/2.,y-radius/2.,x+radius/2.,y+radius/2.)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Darui___p)then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call UnitDamageTarget(Darui___c,tg,GetNinjutsuDamage(dmg,Darui___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
loop
call CreateEffect(GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),1.25,"vl_shidori_nagashi.mdx",.01)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl",GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r))))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r))))
set i=i+1
exitwhen i==max
endloop
call RemoveRect(r)
call DestroyGroup(g)
set tg=null
set g=null
set r=null
set t=null
endfunction
function cj_anonym__198 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local integer amountMax=LoadInteger(HH,h,4)
local integer amount=LoadInteger(HH,h,5)
local real maxdis=LoadReal(HH,h,6)
local real animFacing=LoadReal(HH,h,7)
local real offset=LoadReal(HH,h,8)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=GetUnitFacing(d)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if amount>0 then
call SetUnitFlyHeight(d,2200./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
if amount>amountMax-amountMax/4 then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a-animFacing)
elseif amount<=amountMax-amountMax/4 and amount>amountMax-amountMax/2 then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a-animFacing)
elseif amount<=amountMax-amountMax/2 and amount>amountMax/4 then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a+animFacing)
elseif amount<=amountMax/4 then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a+animFacing)
endif
call SaveInteger(HH,h,5,amount-1)
else
call Darui___KuroPansaDamage(x1,y1)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call RemoveUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set t=null
endfunction
function Darui___KuroPansaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Darui___c)
local real y=GetWidgetY(Darui___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real f=25.
local real period=.025
local real speed=522.*(1.+f/100.)
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer amount=R2I(distance/offset)+1
local real animFacing=(amount/f)*2.
set bj_lastCreatedUnit=CreateUnit(Darui___p,0x68303242,x,y,a+f)
call Sound("Darui Raiton Kuro Pansa.mp3")
call PauseUnit(bj_lastCreatedUnit,true)
call SetUnitTimeScale(bj_lastCreatedUnit,2.)
call SetUnitAnimation(bj_lastCreatedUnit,"walk")
call DestroyEffect(AddSpecialEffect("plasma mortar revized.mdx",GetWidgetX(bj_lastCreatedUnit),GetWidgetY(bj_lastCreatedUnit)))
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("lightning_ball.mdx",bj_lastCreatedUnit,"chest"))
call SaveReal(HH,h,2,x1)
call SaveReal(HH,h,3,y1)
call SaveInteger(HH,h,4,amount)
call SaveInteger(HH,h,5,amount)
call SaveReal(HH,h,6,distance)
call SaveReal(HH,h,7,animFacing)
call SaveReal(HH,h,8,offset)
call TimerStart(t,period,true,function cj_anonym__198)
set t=null
endfunction
function Darui___ZanbatoDamage takes unit tu returns nothing
local real dmg=100.
local real stunTime=2.
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl",tu,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",tu,"chest"))
call UnitDamageTarget(Darui___c,tu,GetNinjutsuDamage(dmg,Darui___c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 then
call GetStun(tu,stunTime)
endif
endfunction
function cj_anonym__199 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real a=LoadReal(HH,h,3)
local integer amount=LoadInteger(HH,h,4)
local group gr_saved=LoadGroupHandle(HH,h,5)
local real x=GetWidgetX(Darui___c)
local real y=GetWidgetY(Darui___c)
local unit tg
if GetWidgetLife(Darui___c)>.405 and amount>0 then
call SetUnitPosition(Darui___c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Darui___p)and not IsUnitInGroup(tg,gr_saved)then
call Darui___ZanbatoDamage(tg)
call GroupAddUnit(gr_saved,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveInteger(HH,h,4,amount-1)
else
call SetUnitPathing(Darui___c,true)
call GroupClear(gr_saved)
call DestroyGroup(g)
call DestroyGroup(gr_saved)
call SetUnitTimeScale(Darui___c,1.)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set t=null
endfunction
function Darui___ZanbatoCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Darui___c)
local real y=GetWidgetY(Darui___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real speed=1044.
local real offset=speed*period
local real radius=125.
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer amount=R2I(distance/offset)
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SetUnitTimeScale(Darui___c,distance*.001)
call SetUnitAnimation(Darui___c,"attack 1")
call SetUnitPathing(Darui___c,false)
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,a)
call SaveInteger(HH,h,4,amount)
call SaveAgentHandle(HH,h,5,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__199)
set t=null
endfunction
function Darui___RantonReizaaSaakasuRemove takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Darui___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303243 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Darui___RantonReizaaSaakasuDamage takes real x,real y returns nothing
local real dmg=100.
local real radius=80.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Darui___p)then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call UnitDamageTarget(Darui___c,tg,GetNinjutsuDamage(dmg,Darui___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
set bj_lastCreatedUnit=CreateUnit(Darui___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41305149)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("plasma mortar revized.mdx",x,y))
set Darui___ReizaNumber=Darui___ReizaNumber-1
set tg=null
set g=null
endfunction
function cj_anonym__200 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit laser=LoadUnitHandle(HH,h,0)
local real distance=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x=GetWidgetX(laser)
local real y=GetWidgetY(laser)
local real f=GetUnitFacing(laser)
if distance>0.then
call SetUnitPosition(laser,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call CreateUnit(Darui___p,0x68303243,x,y,f)
call SaveReal(HH,h,1,distance-offset)
else
call Darui___RantonReizaaSaakasuDamage(x,y)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set laser=null
set t=null
endfunction
function Darui___RantonReizaaSaakasuCreateLaser takes real x,real y,real x2,real y2,real offset returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real a=bj_RADTODEG*Atan2(y2-y,x2-x)
local real distance=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))
call SaveAgentHandle(HH,h,0,CreateUnit(Darui___p,0x68303243,x,y,a))
call SaveReal(HH,h,1,distance)
call SaveReal(HH,h,2,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__200)
set t=null
endfunction
function cj_anonym__201 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
if Darui___ReizaNumber==0 then
call Darui___RantonReizaaSaakasuRemove()
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Darui___RantonReizaaSaakasuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer minimum=5
local real xCaster=GetWidgetX(Darui___c)
local real yCaster=GetWidgetY(Darui___c)
local real a=bj_RADTODEG*Atan2(y1-yCaster,x1-xCaster)
local real startOffset=125.
local real x=xCaster+startOffset*Cos(a*bj_DEGTORAD)
local real y=yCaster+startOffset*Sin(a*bj_DEGTORAD)
local real x2
local real y2
local real radius=400.
local real speed=1500.
local real offset=speed*MainPeriod
local rect r
local group g=CreateGroup()
local unit tg
set Darui___ReizaNumber=0
call Sound("Darui Ranton Reizaa Saakasu.mp3")
call UnitApplyTimedLife(CreateUnit(Darui___p,0x6E303044,xCaster+(startOffset/3.5)*Cos(a*bj_DEGTORAD),yCaster+(startOffset/3.5)*Sin(a*bj_DEGTORAD),a),0x42544C46,.6)
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Darui___p)then
set x2=GetWidgetX(tg)
set y2=GetWidgetY(tg)
call Darui___RantonReizaaSaakasuCreateLaser(x,y,x2,y2,offset)
set Darui___ReizaNumber=Darui___ReizaNumber+1
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if Darui___ReizaNumber<minimum then
set radius=radius/2.
set r=Rect(x1-radius,y1-radius,x1+radius,y1+radius)
loop
set x2=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
set y2=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
call Darui___RantonReizaaSaakasuCreateLaser(x,y,x2,y2,offset)
set Darui___ReizaNumber=Darui___ReizaNumber+1
exitwhen Darui___ReizaNumber==minimum
endloop
call RemoveRect(r)
endif
call TimerStart(t,MainPeriod,true,function cj_anonym__201)
set r=null
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__202 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real a=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real distance=LoadReal(HH,h,3)
local group g=LoadGroupHandle(HH,h,4)
local unit tg
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local rect r
if distance>0.then
if GetRandomInt(1,2)==1 then
call DestroyEffect(AddSpecialEffect("IceSparks.mdx",x,y))
else
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x,y))
endif
call SetUnitPosition(d,x+offset*Cos(a),y+offset*Sin(a))
set r=Rect(x-150.,y-150.,x+150.,y+150.)
call GroupEnumUnitsInRect(g,r,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Darui___p)then
if not Darui___kangekihaCD and not IsUnitInGroup(tg,Darui___grKangekiha)then
call GroupAddUnit(Darui___grKangekiha,tg)
endif
call SetUnitPosition(tg,GetWidgetX(tg)+offset*Cos(a),GetWidgetY(tg)+offset*Sin(a))
endif
call GroupRemoveUnit(g,tg)
endloop
if not Darui___kangekihaCD then
call Darui___RaitonKangekihaAct()
endif
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r))))
call EnumDestructablesInRect(r,null,function Kill_Destructables)
call RemoveRect(r)
call SaveReal(HH,h,3,distance-offset)
else
call DestroyGroup(g)
call RemoveUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set r=null
set g=null
set tg=null
set d=null
set t=null
endfunction
function Darui___SuitonSuijinhekiMove takes unit d,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real distance=800.
local real speed=1200.
local real offset=speed*MainPeriod
call SetUnitTimeScale(Darui___c,1.)
call SetUnitAnimation(Darui___c,"Spell 2")
call SetUnitMoveSpeed(Darui___c,GetUnitDefaultMoveSpeed(Darui___c))
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,a)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,distance)
call SaveAgentHandle(HH,h,4,CreateGroup())
call TimerStart(t,MainPeriod,true,function cj_anonym__202)
set t=null
endfunction
function cj_anonym__203 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,2)
local integer time=LoadInteger(HH,h,3)
local unit tg
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local rect r
if time<4 then
set r=Rect(x-150.,y-150.,x+150.,y+150.)
call GroupEnumUnitsInRect(g,r,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Darui___p)then
call SetUnitPosition(tg,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)))
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r))))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r))))
call RemoveRect(r)
call SaveInteger(HH,h,3,time+1)
else
call DestroyGroup(g)
call Darui___SuitonSuijinhekiMove(d,LoadReal(HH,h,1)*.017)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g=null
set r=null
set tg=null
set d=null
set t=null
endfunction
function Darui___SuitonSuijinhekiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Darui___c)
local real y=GetWidgetY(Darui___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real startOffset=75.
local real period=.25
set bj_lastCreatedUnit=CreateUnit(Darui___p,0x6830335A,x+startOffset,y+startOffset,a)
set x=GetWidgetX(bj_lastCreatedUnit)
set y=GetWidgetY(bj_lastCreatedUnit)
call Sound("Darui Suiton Suijinheki.mp3")
call PauseUnit(bj_lastCreatedUnit,true)
call SetUnitMoveSpeed(Darui___c,0.)
call SetUnitTimeScale(Darui___c,.35)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveReal(HH,h,1,a)
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveInteger(HH,h,3,0)
call TimerStart(t,period,true,function cj_anonym__203)
set t=null
endfunction
function Darui___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Darui_SUIJINHEKI or i==Darui_REIZAA_SAAKASU or i==Darui_ZANBATO or i==Darui_KURO_PANSA
endfunction
function Darui___SpellsActions takes nothing returns nothing
local integer i
if Darui___c==null then
set Darui___c=GetTriggerUnit()
set Darui___p=GetOwningPlayer(Darui___c)
endif
set i=GetSpellAbilityId()
if i==Darui_SUIJINHEKI then
call Darui___SuitonSuijinhekiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Darui_REIZAA_SAAKASU then
call Darui___RantonReizaaSaakasuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Darui_ZANBATO then
call Darui___ZanbatoCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Darui_KURO_PANSA then
call Darui___KuroPansaCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Darui_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Darui___grKangekiha=CreateGroup()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Darui___SpellsConditions))
call TriggerAddAction(spells,function Darui___SpellsActions)
set spells=null
endfunction
function cj_anonym__207 takes nothing returns nothing
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__206 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__205 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit d=LoadUnitHandle(HH,h,0)
local real timeRemove=4.
call SetUnitTimeScale(d,0.)
call SaveAgentHandle(HH,h1,0,d)
call TimerStart(t1,timeRemove,false,function cj_anonym__206)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__204 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real size=LoadReal(HH,h,2)
local real sizeStep=LoadReal(HH,h,3)
local integer alpha=LoadInteger(HH,h,4)
local integer alphaStep=LoadInteger(HH,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if alpha>0 then
call SetUnitScale(d,size,size,size)
call SetUnitVertexColor(d,255,255,255,alpha)
set d=LoadUnitHandle(HH,h,1)
call SetUnitScale(d,size/2.,size/2.,size/2.)
call SetUnitVertexColor(d,255,255,255,alpha)
call SaveReal(HH,h,2,size+sizeStep)
call SaveInteger(HH,h,4,alpha-alphaStep)
else
call RemoveUnit(d)
call RemoveUnit(LoadUnitHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Deidara___C0Boom takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Deidara___c)
local real y=GetWidgetY(Deidara___c)
local real dmg=200.+GetHeroInt(Deidara___c,true)*4.
local real adddmg=.5
local real radius=2400.
local real period=.025
local real size=2.4
local real sizeStep=9.*period
local real timeShake=4.8
local real timeC0Eff=.8
local real sizeHero=.85
local integer alphaStep=5
local unit tg
local group g=CreateGroup()
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Deidara___p)then
call UnitDamageTarget(Deidara___c,tg,GetNinjutsuDamage(dmg,Deidara___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call KillDestructablesStart(x,y,radius/2.)
call UnitRemoveAbility(Deidara___c,0x41303754)
call PauseUnit(Deidara___c,false)
call KillUnit(Deidara___c)
call SetUnitScale(Deidara___c,sizeHero,sizeHero,sizeHero)
call DestroyEffect(AddSpecialEffect("SuperBigExplosion.mdx",x,y))
call CreateEffect(x,y,1.5,"A-Bomb.mdx",20.)
call CreateEffect(x,y,1.75,"NuclearExplosion.mdx",15.)
call CreateEffect(x,y,4.5,"NewMassiveEX.mdx",10.)
call SaveAgentHandle(HH,h,0,CreateUnit(Deidara___p,0x68303152,x,y,0.))
call SaveAgentHandle(HH,h,1,CreateUnit(Deidara___p,0x68303154,x,y,0.))
call SaveReal(HH,h,2,size)
call SaveReal(HH,h,3,sizeStep)
call SaveInteger(HH,h,4,250)
call SaveInteger(HH,h,5,alphaStep)
call TimerStart(t,period,true,function cj_anonym__204)
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,CreateUnit(Deidara___p,0x68303331,x,y,270.))
call TimerStart(t,timeC0Eff,false,function cj_anonym__205)
call CameraSetTargetNoiseEx(24.,12.*Pow(10.,5.),true)
call CameraSetSourceNoiseEx(24.,12.*Pow(10.,5.),true)
call TimerStart(CreateTimer(),timeShake,false,function cj_anonym__207)
set g=null
set tg=null
set t=null
endfunction
function cj_anonym__208 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer alpha=LoadInteger(HH,h,0)
local integer alphaStep=LoadInteger(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real size=LoadReal(HH,h,4)
local real sizeStep=LoadReal(HH,h,5)
if time>0.and GetWidgetLife(Deidara___c)>.405 then
if time==3.or time==2.5 or time==2.then
call DestroyEffect(AddSpecialEffectTarget("SuperShinyThingy.mdx",Deidara___c,"chest"))
elseif time==1.5 then
call SaveAgentHandle(HH,h,4,AddSpecialEffectTarget("SolarBall.mdx",Deidara___c,"chest"))
elseif time<1.5 then
call SetUnitScale(Deidara___c,size,size,size)
call SaveReal(HH,h,4,size+sizeStep)
endif
call SaveInteger(HH,h,0,alpha-alphaStep)
call SaveReal(HH,h,3,time-period)
call SetUnitVertexColor(Deidara___c,255,255,255,alpha)
else
call DestroyEffect(LoadEffectHandle(HH,h,4))
if GetWidgetLife(Deidara___c)>.405 then
call Deidara___C0Boom()
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Deidara___C0Cast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.05
local real time=3.45
local integer alpha=R2I((255./time)*period)
local real size=.85
local real sizeStep=.2*period
call Sound("Deidara C0.mp3")
call PauseUnit(Deidara___c,true)
call UnitAddAbility(Deidara___c,0x41303754)
call SetUnitAnimation(Deidara___c,"spell channel")
call SaveInteger(HH,h,0,255)
call SaveInteger(HH,h,1,alpha)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call SaveReal(HH,h,4,size)
call SaveReal(HH,h,5,sizeStep)
call TimerStart(t,period,true,function cj_anonym__208)
set t=null
endfunction
function Deidara___C4KaruraBoom takes unit d,real dmg returns nothing
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real radius=1200.
local group g=CreateGroup()
local unit tg
call Sound("Katsu.mp3")
call CreateEffect(x,y,1.5,"Boom.mdx",1.)
call CreateEffect(x,y,6.,"Objects\\Spawnmodels\\Human\\FragmentationShards\\FragBoomSpawn.mdl",8.)
call KuchiyoseCreateDustEffect("end",d,2.,2.6)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Deidara___p)and IsUnitVisible(tg,Deidara___p)then
call UnitDamageTarget(Deidara___c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Polymorph\\PolyMorphDoneGround.mdl",GetWidgetX(tg),GetWidgetY(tg)))
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call RemoveUnit(d)
set tg=null
set g=null
endfunction
function cj_anonym__209 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real dmgStart=LoadReal(HH,h,1)
local real dmgCurrent=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
if time>0.and GetWidgetLife(d)>.405 then
call SaveReal(HH,h,2,dmgCurrent+dmgStart)
call SaveReal(HH,h,4,time-period)
else
if GetWidgetLife(d)>.405 and time==0.then
call Deidara___C4KaruraBoom(d,dmgCurrent)
else
call RemoveUnit(d)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Deidara___C4KaruraCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Deidara___c)
local real y=GetWidgetY(Deidara___c)
local real f=GetUnitFacing(Deidara___c)
local real time=6.
local real period=.1
local real dmg=100.*period
call Sound("Akatsuki Jutsu.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Deidara___p,0x6E303047,x,y,f))
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call TimerStart(t,period,true,function cj_anonym__209)
set t=null
endfunction
function cj_anonym__211 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local group g=CreateGroup()
local unit tg
call Sound("Katsu.mp3")
call CreateEffect(x,y,1.35,"NuclearExplosion.mdx",15.)
call DestroyEffect(AddSpecialEffect("SuperBigExplosion.mdx",x,y))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Deidara___p)then
call UnitDamageTarget(Deidara___c,tg,GetNinjutsuDamage(dmg,Deidara___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
else
if IsUnitEnemy(tg,Deidara___p)and IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
call SetWidgetLife(tg,GetWidgetLife(tg)-dmg/2.)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__210 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real speedDown=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SetUnitFlyHeight(d,0.,speedDown)
call SaveAgentHandle(HH,h1,0,d)
call SaveReal(HH,h1,1,dmg)
call SaveReal(HH,h1,2,radius)
call TimerStart(t1,time,false,function cj_anonym__211)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
set t1=null
endfunction
function Deidara___C3Cast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(Deidara___c,Deidara_C3)
local real f=GetUnitFacing(Deidara___c)
local real dmg=100.+GetHeroInt(Deidara___c,true)*2.5
local real radius=400.
local real castTime=.77
local real height=600.
local real speedDown=600.
local real time=height/speedDown
call Sound("Akatsuki Jutsu.mp3")
set bj_lastCreatedUnit=CreateUnit(Deidara___p,0x6E30304B,x1,y1,f)
call SetUnitFlyHeight(bj_lastCreatedUnit,height,0.)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,speedDown)
call SaveReal(HH,h,4,time)
call TimerStart(t,castTime,false,function cj_anonym__210)
set t=null
endfunction
function Deidara___DoragonsheruBoom takes unit d,real x,real y returns nothing
local real dmg=60.+GetHeroInt(Deidara___c,true)*1.8
local real radius=250.
local real knockback=300.
local real timeStun=.25
local real x1
local real y1
local group g=CreateGroup()
local unit tg
call Sound("Katsu.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Deidara___p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
call KnockBackUnitEf(tg,knockback,knockback/1000.,57.2958279087*Atan2(y1-y,x1-x),.025,0,false)
call UnitDamageTarget(Deidara___c,tg,GetNinjutsuDamage(dmg,Deidara___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call GetStun(tg,timeStun)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,GetRandomReal(1.35,1.5),"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,GetRandomReal(1.35,1.5),"IceSparks.mdx",8.)
endif
call RemoveUnit(d)
set tg=null
set g=null
endfunction
function cj_anonym__212 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real heightDown=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real distance=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
if distance>0.then
call SetUnitPosition(d,x+offset*Cos(f*.017),y+offset*Sin(f*.017))
call SaveReal(HH,h,3,distance-offset)
else
call Deidara___DoragonsheruBoom(d,x,y)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Deidara___DoragonsheruCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Deidara___c)
local real y=GetWidgetY(Deidara___c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real speed=1350.
local real offset=speed*MainPeriod
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real heightStart=300.
local real heightDown=distance/heightStart
call Sound("Akatsuki Jutsu.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Deidara___p,0x6E303057,x,y,a))
call SaveReal(HH,h,1,heightDown)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,distance)
call TimerStart(t,MainPeriod,true,function cj_anonym__212)
set t=null
endfunction
function cj_anonym__213 takes nothing returns nothing
call SetUnitState(Deidara___c,UNIT_STATE_MANA,GetUnitState(Deidara___c,UNIT_STATE_MANA)-2.)
if GetWidgetLife(Deidara___c)<=.405 or GetUnitAbilityLevel(Deidara___c,0x41303251)==0 or GetUnitState(Deidara___c,UNIT_STATE_MANA)<20.then
call SetUnitPathing(Deidara___c,true)
call SetUnitFlyHeight(Deidara___c,GetUnitDefaultFlyHeight(Deidara___c),900.)
call UnitRemoveAbility(Deidara___c,0x41303251)
call UnitRemoveAbility(Deidara___c,0x41305558)
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C2_DORAGONSHERU,false)
call AddUnitAnimationProperties(Deidara___c,"Attack -1",true)
call AddUnitAnimationProperties(Deidara___c,"Attack -2",true)
call AddUnitAnimationProperties(Deidara___c,"Death",true)
call AddUnitAnimationProperties(Deidara___c,"Spell Channel",true)
call AddUnitAnimationProperties(Deidara___c,"Spell Throw",true)
call AddUnitAnimationProperties(Deidara___c,"Stand",true)
call AddUnitAnimationProperties(Deidara___c,"Stand Ready",true)
call AddUnitAnimationProperties(Deidara___c,"Walk",true)
call AddUnitAnimationProperties(Deidara___c,"Walk Alternate",false)
call AddUnitAnimationProperties(Deidara___c,"Death Alternate",false)
call AddUnitAnimationProperties(Deidara___c,"Morph Alternate",false)
call AddUnitAnimationProperties(Deidara___c,"Spell Channel Alternate",false)
call AddUnitAnimationProperties(Deidara___c,"Spell Throw Alternate",false)
call AddUnitAnimationProperties(Deidara___c,"Stand Ready Alternate",false)
call AddUnitAnimationProperties(Deidara___c,"Attack Alternate -1",false)
call AddUnitAnimationProperties(Deidara___c,"Attack Alternate -2",false)
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Deidara___C2DragonCast takes nothing returns nothing
call AddUnitAnimationProperties(Deidara___c,"Walk Alternate",true)
call AddUnitAnimationProperties(Deidara___c,"Death Alternate",true)
call AddUnitAnimationProperties(Deidara___c,"Morph Alternate",true)
call AddUnitAnimationProperties(Deidara___c,"Spell Channel Alternate",true)
call AddUnitAnimationProperties(Deidara___c,"Spell Throw Alternate",true)
call AddUnitAnimationProperties(Deidara___c,"Stand Ready Alternate",true)
call AddUnitAnimationProperties(Deidara___c,"Attack Alternate -1",true)
call AddUnitAnimationProperties(Deidara___c,"Attack Alternate -2",true)
call AddUnitAnimationProperties(Deidara___c,"Attack -1",false)
call AddUnitAnimationProperties(Deidara___c,"Attack -2",false)
call AddUnitAnimationProperties(Deidara___c,"Death",false)
call AddUnitAnimationProperties(Deidara___c,"Spell Channel",false)
call AddUnitAnimationProperties(Deidara___c,"Spell Throw",false)
call AddUnitAnimationProperties(Deidara___c,"Stand",false)
call AddUnitAnimationProperties(Deidara___c,"Stand Ready",false)
call AddUnitAnimationProperties(Deidara___c,"Walk",false)
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C2_DRAGON,false)
if GetUnitAbilityLevel(Deidara___c,Deidara_C2_DORAGONSHERU)==0 then
call UnitAddAbility(Deidara___c,Deidara_C2_DORAGONSHERU)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C2_DORAGONSHERU,true)
call UnitAddAbility(Deidara___c,0x41305558)
call UnitAddAbility(Deidara___c,0x41303251)
call SetUnitPathing(Deidara___c,false)
call SetUnitTypeFlying(Deidara___c)
call SetUnitFlyHeight(Deidara___c,200.,750.)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__213)
endfunction
function Deidara___C1KibakuJiraiExplosion takes unit d returns nothing
local real dmg=15.+GetHeroInt(Deidara___c,true)*1.25
local real radiusEx=150.
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local unit tg
if Deidara___kibakuFirst then
call Sound("Katsu.mp3")
set Deidara___kibakuFirst=false
endif
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radiusEx,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Deidara___p)then
call UnitDamageTarget(Deidara___c,tg,GetNinjutsuDamage(dmg,Deidara___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call RemoveUnit(d)
set tg=null
endfunction
function cj_anonym__214 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Deidara___C1KibakuJiraiExplosion(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Deidara___C1KibakuJiraiBombCreate takes real x,real y,real radius returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real randomDegree=GetRandomReal(0.,360.)
local real randomOffset=GetRandomReal(0.,radius/2.)
local real x1=x+randomOffset*Cos(randomDegree*bj_DEGTORAD)
local real y1=y+randomOffset*Sin(randomDegree*bj_DEGTORAD)
local unit d=CreateUnit(Deidara___p,0x6E303033,x1,y1,0.)
local real time=.5
local real speedHeight=GetUnitFlyHeight(d)/time
call SetUnitTypeFlying(d)
call SetUnitFlyHeight(d,0.,speedHeight)
call SaveAgentHandle(HH,h,0,d)
call TimerStart(t,time,false,function cj_anonym__214)
set d=null
set t=null
endfunction
function cj_anonym__215 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
if GetUnitAbilityLevel(Deidara___c,0x42303037)>0 then
call Deidara___C1KibakuJiraiBombCreate(GetWidgetX(Deidara___c),GetWidgetY(Deidara___c),LoadReal(HH,h,0))
else
call DestroyEffect(LoadEffectHandle(HH,h,1))
call SetUnitPathing(Deidara___c,true)
call SetUnitFlyHeight(Deidara___c,GetUnitDefaultFlyHeight(Deidara___c),900.)
call UnitRemoveAbility(Deidara___c,0x41313143)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Deidara___C1KibakuJiraiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real radius=250.
local real period=.25
set Deidara___kibakuFirst=true
call Sound("Akatsuki Jutsu.mp3")
call SetUnitTypeFlying(Deidara___c)
call SetUnitFlyHeight(Deidara___c,500.,750.)
call UnitAddAbility(Deidara___c,0x41313143)
call SaveReal(HH,h,0,radius)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Deidara C1 Bird.mdl",Deidara___c,"origin"))
call TimerStart(t,period,true,function cj_anonym__215)
set t=null
endfunction
function cj_anonym__216 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
if GetWidgetLife(tu)>.405 and time>0.then
call SetUnitPosition(d,x1,y1)
call SaveReal(HH,h,3,time-period)
else
call UnitRemoveAbility(tu,0x41313143)
call UnitRemoveAbility(tu,0x41305432)
call UnitRemoveAbility(tu,0x42303433)
call UnitRemoveAbility(tu,0x41305A56)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Deidara___C1MukadeAct takes unit d,unit tu,real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
call UnitAddAbility(tu,0x41313143)
call UnitAddAbility(tu,0x41305432)
call UnitAddAbility(tu,0x41305A56)
call UnitRemoveAbility(d,0x424F776B)
call SetUnitAnimation(d,"Spell Two")
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__216)
set t=null
endfunction
function cj_anonym__217 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real time=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(tu)>.405 and distance>offset then
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SetUnitFacing(d,a)
else
if GetWidgetLife(tu)>.405 then
call SetUnitPosition(d,x1,y1)
call Deidara___C1MukadeAct(d,tu,time)
else
call RemoveUnit(d)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Deidara___C1MukadeCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Deidara___c)
local real y=GetWidgetY(Deidara___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real speed=1200.
local real offset=speed*MainPeriod
local real time=3.5
set bj_lastCreatedUnit=CreateUnit(Deidara___p,0x6E30304F,x,y,a)
call SetUnitPathing(bj_lastCreatedUnit,false)
call IssueImmediateOrder(bj_lastCreatedUnit,"windwalk")
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__217)
set t=null
endfunction
function Deidara___C1ToritoKumoDamage takes real x,real y,real dmg,real radius returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Deidara___p)then
call UnitDamageTarget(Deidara___c,tg,GetNinjutsuDamage(dmg,Deidara___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__218 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real timeLife=LoadReal(HH,h,3)
local real radiusEx=LoadReal(HH,h,4)
local real dmg=LoadReal(HH,h,5)
local real x
local real y
local boolean log=false
local unit d
local unit tg
if timeLife>0.then
call GroupEnumUnitsOfPlayer(g1,Deidara___p,null)
loop
set d=FirstOfGroup(g1)
exitwhen d==null
if GetWidgetLife(d)>.405 and GetUnitTypeId(d)==0x68303038 then
set x=GetWidgetX(d)
set y=GetWidgetY(d)
call GroupEnumUnitsInRange(g2,x,y,radiusEx,null)
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null or log
if IsUnitNeedNinjutsu(tg,Deidara___p)and IsUnitVisible(tg,Deidara___p)then
call Deidara___C1ToritoKumoDamage(x,y,dmg,radiusEx)
set log=true
endif
call GroupRemoveUnit(g2,tg)
endloop
if log then
call Sound("Katsu.mp3")
call DestroyEffect(AddSpecialEffect("AerialExplosionV3.mdx",x,y))
call RemoveUnit(d)
set log=false
endif
endif
call GroupRemoveUnit(g1,d)
endloop
call SaveReal(HH,h,3,timeLife-period)
else
call GroupEnumUnitsOfPlayer(g1,Deidara___p,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303038 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tg=null
set g1=null
set g2=null
set t=null
endfunction
function Deidara___C1KumoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=2
local group g=CreateGroup()
local real x=GetWidgetX(Deidara___c)
local real y=GetWidgetY(Deidara___c)
local real radius=1800.
local real radiusEx=350.
local real maxDistance=radius
local real curDistance=0.
local real timeLife=8.
local real period=.25
local real dmg=30.+GetHeroInt(Deidara___c,true)*1.35
local real x1
local real y1
local real a=GetUnitFacing(Deidara___c)
local unit tu=null
local unit tg
call Sound("Akatsuki Jutsu.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Deidara___p)and IsUnitVisible(tg,Deidara___p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
set curDistance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if curDistance<maxDistance then
set curDistance=maxDistance
set a=57.2958279087*Atan2(y1-y,x1-x)
set tu=tg
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
loop
set bj_lastCreatedUnit=CreateUnit(Deidara___p,0x68303038,x,y,a)
if tu!=null then
call IssuePointOrder(bj_lastCreatedUnit,"move",GetWidgetX(tu),GetWidgetY(tu))
endif
set i=i-1
exitwhen i==0
endloop
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,timeLife)
call SaveReal(HH,h,4,radiusEx)
call SaveReal(HH,h,5,dmg)
call TimerStart(t,period,true,function cj_anonym__218)
set tg=null
set tu=null
set g=null
set t=null
endfunction
function cj_anonym__219 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real timeLife=LoadReal(HH,h,3)
local real radiusEx=LoadReal(HH,h,4)
local real dmg=LoadReal(HH,h,5)
local real x
local real y
local boolean log=false
local unit d
local unit tg
if timeLife>0.then
call GroupEnumUnitsOfPlayer(g1,Deidara___p,null)
loop
set d=FirstOfGroup(g1)
exitwhen d==null
if GetWidgetLife(d)>.405 and GetUnitTypeId(d)==0x6830324F then
set x=GetWidgetX(d)
set y=GetWidgetY(d)
call GroupEnumUnitsInRange(g2,x,y,radiusEx,null)
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null or log
if IsUnitNeedNinjutsu(tg,Deidara___p)and IsUnitVisible(tg,Deidara___p)then
call Deidara___C1ToritoKumoDamage(x,y,dmg,radiusEx)
set log=true
endif
call GroupRemoveUnit(g2,tg)
endloop
if log then
call Sound("Katsu.mp3")
call DestroyEffect(AddSpecialEffect("AerialExplosionV3.mdx",x,y))
call RemoveUnit(d)
set log=false
endif
endif
call GroupRemoveUnit(g1,d)
endloop
call SaveReal(HH,h,3,timeLife-period)
else
call GroupEnumUnitsOfPlayer(g1,Deidara___p,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if GetUnitTypeId(tg)==0x6830324F then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tg=null
set g1=null
set g2=null
set t=null
endfunction
function Deidara___C1ToriCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=3
local group g=CreateGroup()
local real x=GetWidgetX(Deidara___c)
local real y=GetWidgetY(Deidara___c)
local real radius=1800.
local real radiusEx=250.
local real maxDistance=radius
local real curDistance=0.
local real timeLife=8.
local real period=.25
local real dmg=20.+GetHeroInt(Deidara___c,true)*1.2
local real x1
local real y1
local real a=GetUnitFacing(Deidara___c)
local unit tu=null
local unit tg
call Sound("Akatsuki Jutsu.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Deidara___p)and IsUnitVisible(tg,Deidara___p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
set curDistance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if curDistance<maxDistance then
set curDistance=maxDistance
set a=57.2958279087*Atan2(y1-y,x1-x)
set tu=tg
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
loop
set bj_lastCreatedUnit=CreateUnit(Deidara___p,0x6830324F,x,y,a)
if tu!=null then
call IssuePointOrder(bj_lastCreatedUnit,"move",GetWidgetX(tu),GetWidgetY(tu))
endif
set i=i-1
exitwhen i==0
endloop
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,timeLife)
call SaveReal(HH,h,4,radiusEx)
call SaveReal(HH,h,5,dmg)
call TimerStart(t,period,true,function cj_anonym__219)
set tg=null
set tu=null
set g=null
set t=null
endfunction
function cj_anonym__220 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer power=LoadInteger(HH,h,0)
if power==1 then
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C1_TORI,false)
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C1_KUMO,false)
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C2_DORAGONSHERU,false)
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C1_MUKADE,false)
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C1_KIBAKU_JIRAI,false)
elseif power==2 then
if GetUnitAbilityLevel(Deidara___c,0x41303251)==0 then
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C2_DRAGON,false)
endif
elseif power==3 then
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C3,false)
elseif power==4 then
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C4_KARURA,false)
elseif power==0 then
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C0,false)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_KIBAKU_NENDO,true)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Deidara___KibakuNnendoGetSpell takes integer power returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call SetPlayerAbilityAvailable(Deidara___p,Deidara_KIBAKU_NENDO,false)
if power==1 then
if GetUnitAbilityLevel(Deidara___c,Deidara_C1_TORI)==0 then
call UnitAddAbility(Deidara___c,Deidara_C1_TORI)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C1_TORI,true)
if GetUnitAbilityLevel(Deidara___c,0x41303251)==0 then
if GetUnitAbilityLevel(Deidara___c,Deidara_C1_KUMO)==0 then
call UnitAddAbility(Deidara___c,Deidara_C1_KUMO)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C1_KUMO,true)
else
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C2_DORAGONSHERU,true)
endif
if GetUnitAbilityLevel(Deidara___c,Deidara_C1_MUKADE)==0 then
call UnitAddAbility(Deidara___c,Deidara_C1_MUKADE)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C1_MUKADE,true)
if GetUnitAbilityLevel(Deidara___c,Deidara_C1_KIBAKU_JIRAI)==0 then
call UnitAddAbility(Deidara___c,Deidara_C1_KIBAKU_JIRAI)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C1_KIBAKU_JIRAI,true)
elseif power==2 then
if GetUnitAbilityLevel(Deidara___c,0x41303251)==0 then
if GetUnitAbilityLevel(Deidara___c,Deidara_C2_DRAGON)==0 then
call UnitAddAbility(Deidara___c,Deidara_C2_DRAGON)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C2_DRAGON,true)
else
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C2_DORAGONSHERU,true)
endif
elseif power==3 then
if GetUnitAbilityLevel(Deidara___c,Deidara_C3)==0 then
call UnitAddAbility(Deidara___c,Deidara_C3)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C3,true)
elseif power==4 then
if GetUnitAbilityLevel(Deidara___c,Deidara_C4_KARURA)==0 then
call UnitAddAbility(Deidara___c,Deidara_C4_KARURA)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C4_KARURA,true)
elseif power==0 then
if GetUnitAbilityLevel(Deidara___c,Deidara_C0)==0 then
call UnitAddAbility(Deidara___c,Deidara_C0)
endif
call SetPlayerAbilityAvailable(Deidara___p,Deidara_C0,true)
endif
call SaveInteger(HH,h,0,power)
call TimerStart(t,5.,false,function cj_anonym__220)
set t=null
endfunction
function cj_anonym__221 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer power=LoadInteger(HH,h,0)
local real needChakra=LoadReal(HH,h,1)
local texttag text=LoadTextTagHandle(HH,h,2)
local string name=LoadStr(HH,h,3)
local integer time=LoadInteger(HH,h,4)
local integer lvl=GetUnitAbilityLevel(Deidara___c,Deidara_KIBAKU_NENDO)
if GetUnitCurrentOrder(Deidara___c)==OrderId("whirlwind")and GetUnitState(Deidara___c,UNIT_STATE_MANA)>needChakra and lvl>power then
set power=power+1
set time=time+1
if power==5 and lvl>=5 then
set power=0
endif
call SaveInteger(HH,h,0,power)
call SaveInteger(HH,h,4,time)
call SetUnitState(Deidara___c,UNIT_STATE_MANA,GetUnitState(Deidara___c,UNIT_STATE_MANA)-needChakra)
call SetTextTagText(text,name+I2S(power),.0276)
call SetTextTagPos(text,GetWidgetX(Deidara___c),GetWidgetY(Deidara___c),heightGameText*3.)
else
if GetWidgetLife(Deidara___c)>.405 then
if lvl>=5 and time>0 then
call Deidara___KibakuNnendoGetSpell(power)
else
if power>0 then
call Deidara___KibakuNnendoGetSpell(power)
else
call DisplayTimedTextToPlayer(Deidara___p,0.,0.,3.,"|cFFFFCC00Техника не сработала!|r")
endif
endif
else
call DisplayTimedTextToPlayer(Deidara___p,0.,0.,3.,"|cFFFFCC00Техника не сработала!|r")
endif
call IssueImmediateOrder(Deidara___c,"stop")
call DestroyTextTag(text)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set text=null
set t=null
endfunction
function Deidara___KibakuNnendoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local texttag text=CreateTextTag()
local real needChakra=200.
local integer power=0
local string name="C"
call SetTextTagText(text,name,.0276)
call SetTextTagPos(text,GetWidgetX(Deidara___c),GetWidgetY(Deidara___c),heightGameText*3.)
call SetTextTagColor(text,255,252,1,0)
call SetTextTagVisibility(text,true)
call SaveInteger(HH,h,0,power)
call SaveReal(HH,h,1,needChakra)
call SaveTextTagHandle(HH,h,2,text)
call SaveStr(HH,h,3,name)
call SaveInteger(HH,h,4,power)
call TimerStart(t,1.,true,function cj_anonym__221)
set text=null
set t=null
endfunction
function Deidara___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Deidara_KIBAKU_NENDO or i==Deidara_C1_TORI or i==Deidara_C1_KUMO or i==Deidara_C1_MUKADE or i==Deidara_C1_KIBAKU_JIRAI or i==Deidara_C2_DRAGON or i==0x41303251 or i==Deidara_C2_DORAGONSHERU or i==Deidara_C3 or i==Deidara_C4_KARURA or i==Deidara_C0
endfunction
function Deidara___SpellsActions takes nothing returns nothing
local integer i
if Deidara___c==null then
set Deidara___c=GetTriggerUnit()
set Deidara___p=GetOwningPlayer(Deidara___c)
endif
set i=GetSpellAbilityId()
if i==Deidara_KIBAKU_NENDO then
call Deidara___KibakuNnendoCast()
elseif i==Deidara_C1_TORI then
call Deidara___C1ToriCast()
elseif i==Deidara_C1_KUMO then
call Deidara___C1KumoCast()
elseif i==Deidara_C1_MUKADE then
call Deidara___C1MukadeCast(GetSpellTargetUnit())
elseif i==Deidara_C1_KIBAKU_JIRAI then
call Deidara___C1KibakuJiraiCast()
elseif i==Deidara_C2_DRAGON then
call Deidara___C2DragonCast()
elseif i==0x41303251 then
call UnitRemoveAbility(Deidara___c,0x41303251)
elseif i==Deidara_C2_DORAGONSHERU then
call Deidara___DoragonsheruCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Deidara_C3 then
call Deidara___C3Cast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Deidara_C4_KARURA then
call Deidara___C4KaruraCast()
elseif i==Deidara_C0 then
call Deidara___C0Cast()
endif
endfunction
function Deidara_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call SetPlayerAbilityAvailable(Player(i),0x41305A56,false)
call SetPlayerAbilityAvailable(Player(i),0x41305558,false)
call SetPlayerAbilityAvailable(Player(i),0x41303754,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Deidara___SpellsConditions))
call TriggerAddAction(spells,function Deidara___SpellsActions)
set spells=null
endfunction
function Ei___RaitonChakraAttackGetBonusDamage takes real dmg returns real
local real newdmg=dmg
if GetUnitAbilityLevel(Ei___c,0x42303043)>0 and Ei_RaitonAttack>0 then
if Ei_RaitonAttack>=dmg then
set Ei_RaitonAttack=Ei_RaitonAttack-R2I(dmg)
else
set newdmg=dmg+I2R(Ei_RaitonAttack)
set Ei_RaitonAttack=0
endif
call LeaderboardSetItemValue(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(1)),Ei_RaitonAttack)
endif
return newdmg
endfunction
function cj_anonym__222 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real size=LoadReal(HH,h,1)
local integer alpha=LoadInteger(HH,h,2)
if alpha>0 then
call SetUnitScale(d,size,size,size)
call SetUnitVertexColor(d,255,255,255,alpha)
call SaveReal(HH,h,1,size+.5)
call SaveInteger(HH,h,2,alpha-5)
else
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Ei___RaigaBomuDamage takes unit tu,real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local boolean log=false
local real adddmg=GetUnitState(tu,UNIT_STATE_MAX_LIFE)*.35
local real dmg=Ei___RaitonChakraAttackGetBonusDamage(300.+adddmg)
local real a=0.
local real x1
local real y1
if GetUnitAbilityLevel(Ei___c,0x42303043)>0 then
set log=true
endif
call SaveAgentHandle(HH,h,0,CreateUnit(Ei___p,0x68303152,x,y,a))
call SaveReal(HH,h,1,2.5)
call SaveInteger(HH,h,2,95)
call TimerStart(t,MainPeriod,true,function cj_anonym__222)
call SetUnitFlyHeight(tu,GetUnitDefaultFlyHeight(tu),0.)
call PauseUnit(tu,false)
call UnitDamageTarget(Ei___c,tu,GetTaijutsuDamage(dmg,Ei___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call KillDestructablesStart(x,y,150.)
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x,y,GetRandomReal(2.5,3.),"NewDirtEXNofire.mdx",a)
call CreateEffect(x,y,GetRandomReal(2.8,3.2),"Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",2.)
else
call CreateDummyEffect(x,y,GetRandomReal(2.5,3.),"IceSparks.mdx",a)
call CreateEffect(x,y,GetRandomReal(2.8,3.2),"Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl",2.)
endif
loop
exitwhen a==360.
set x1=x+420.*Cos(a*bj_DEGTORAD)
set y1=y+420.*Sin(a*bj_DEGTORAD)
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x1,y1,1.,"Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",2.)
else
call CreateEffect(x1,y1,1.,"Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl",2.)
endif
if log then
set x1=x+300.*Cos(a*bj_DEGTORAD)
set y1=y+300.*Sin(a*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x1,y1))
set bj_lastCreatedUnit=CreateUnit(Ei___p,0x6E303159,x,y,0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.65)
call KnockBackUnitEf(bj_lastCreatedUnit,650.,.65,bj_RADTODEG*Atan2(y1-y,x1-x),.025,0,false)
endif
set a=a+45.
endloop
set t=null
endfunction
function cj_anonym__223 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real a=LoadReal(HH,h,1)
local integer amount=LoadInteger(HH,h,2)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real x1
local real y1
if amount<41 then
if amount<18 then
call SetUnitFlyHeight(tu,GetUnitFlyHeight(tu)+8.5,0.)
call SetUnitPosition(tu,x+6.*Cos(a*bj_DEGTORAD),y+6.*Sin(a*bj_DEGTORAD))
elseif amount==18 then
call SetUnitTimeScale(Ei___c,0.)
elseif amount==30 then
call SetUnitTimeScale(Ei___c,3.)
call SetUnitAnimation(Ei___c,"Attack Slam")
call SetUnitTimeScale(tu,1.)
elseif amount>30 then
if amount<36 then
call SetUnitPosition(tu,x-16.*Cos(a*bj_DEGTORAD),y-16.*Sin(a*bj_DEGTORAD))
call SetUnitFlyHeight(tu,GetUnitFlyHeight(tu)-25.,0.)
elseif amount==36 then
call SetUnitTimeScale(Ei___c,1.)
call PauseUnit(Ei___c,false)
call SaveReal(HH,h,4,x)
call SaveReal(HH,h,5,y)
call Ei___RaigaBomuDamage(tu,x,y)
if GetUnitAbilityLevel(Ei___c,0x42303043)>0 then
call SaveBoolean(HH,h,3,true)
else
call SaveBoolean(HH,h,3,false)
endif
elseif amount>36 then
if LoadBoolean(HH,h,3)then
set x1=LoadReal(HH,h,4)
set y1=LoadReal(HH,h,5)
if amount==37 then
call KillDestructablesStart(x1,y1,200.)
set a=0.
loop
exitwhen a==360.
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x1+400.*Cos(a*.0174532),y1+400.*Sin(a*.0174532)))
set a=a+40.
endloop
elseif amount==38 then
call KillDestructablesStart(x1,y1,250.)
set a=0.
loop
exitwhen a==360.
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x1+500.*Cos(a*.0174532),y1+500.*Sin(a*.0174532)))
set a=a+36.
endloop
elseif amount==39 then
call KillDestructablesStart(x1,y1,300.)
set a=0.
loop
exitwhen a==360.
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x1+600.*Cos(a*.0174532),y1+600.*Sin(a*.0174532)))
set a=a+30.
endloop
elseif amount==40 then
call KillDestructablesStart(x1,y1,350.)
set a=0.
loop
exitwhen a==360.
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x1+700.*Cos(a*.0174532),y1+700.*Sin(a*.0174532)))
set a=a+24.
endloop
endif
endif
endif
endif
call SaveInteger(HH,h,2,amount+1)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Ei___RaigaBomuCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Ei___c)
local real y=GetWidgetY(Ei___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real f=GetUnitFacing(tu)
local real period=.04
call Sound("Ei Raiga Bomu.mp3")
call PauseUnit(Ei___c,true)
call PauseUnit(tu,true)
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SetUnitX(Ei___c,x1-75.*Cos(f*bj_DEGTORAD))
call SetUnitY(Ei___c,y1-75.*Sin(f*bj_DEGTORAD))
call SetUnitFacing(Ei___c,f)
call SetUnitTypeFlying(tu)
call SetUnitTimeScale(Ei___c,.35)
call SetUnitAnimation(Ei___c,"Spell Slam")
call SetUnitTimeScale(tu,.5)
call SetUnitAnimation(tu,"death")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,bj_RADTODEG*Atan2(y-y1,x-x1))
call SaveInteger(HH,h,2,1)
call TimerStart(t,period,true,function cj_anonym__223)
set tu=null
set t=null
endfunction
function cj_anonym__224 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local unit tg
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41313157)
call UnitRemoveAbility(tg,0x42303644)
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tg=null
set g=null
set t=null
endfunction
function Ei___GirochinDoroppuDamage takes nothing returns nothing
local group g=null
local real dmg=Ei___RaitonChakraAttackGetBonusDamage(75.+GetHeroStr(Ei___c,true)*2.)
local real facing=0.
local real radius=400.
local real x=GetWidgetX(Ei___c)
local real y=GetWidgetY(Ei___c)
local real x1
local real y1
local real offset=radius/2.
local real effSize=1.6
local unit tg
local timer t
call CreateEffect(x,y,GetRandomReal(2.5,3.),"Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",2.)
loop
set x1=x+offset*Cos(facing*.0174532)
set y1=y+offset*Sin(facing*.0174532)
call CreateDummyEffect(x1,y1,effSize,"HelGate.mdx",facing)
set facing=facing+72.
exitwhen facing>360.
endloop
call KillDestructablesStart(x,y,300.)
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,300.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Ei___p)then
call UnitDamageTarget(Ei___c,tg,GetTaijutsuDamage(dmg,Ei___c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
if GetWidgetLife(tg)>.405 then
if g==null then
set g=CreateGroup()
endif
call UnitAddAbility(tg,0x41313157)
call GroupAddUnit(g,tg)
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
if g!=null then
set t=CreateTimer()
call SaveAgentHandle(HH,GetHandleId(t),0,g)
call TimerStart(t,3.,false,function cj_anonym__224)
endif
set g=null
set tg=null
set t=null
endfunction
function cj_anonym__226 takes nothing returns nothing
call SetUnitTimeScale(Ei___c,1.)
call Ei___GirochinDoroppuDamage()
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__225 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real speedHeight=LoadReal(HH,h,0)
local real needHeight=GetUnitDefaultFlyHeight(Ei___c)
local real curHeight=GetUnitFlyHeight(Ei___c)
local real upSpeed=1.4
local real castTime=curHeight/(speedHeight*upSpeed)
call SetUnitFlyHeight(Ei___c,needHeight,speedHeight*upSpeed)
call SetUnitAnimation(Ei___c,"Attack Slam")
call SetUnitTimeScale(Ei___c,1.5)
call TimerStart(CreateTimer(),castTime,false,function cj_anonym__226)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Ei___GirochinDoroppuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Ei___c)
local real y=GetWidgetY(Ei___c)
local real needHeight=500.
local real speedHeight=1200.
local real castTime=needHeight/speedHeight
call Sound("Ei Girochin Doroppu.mp3")
call SetUnitTypeFlying(Ei___c)
call SetUnitFlyHeight(Ei___c,needHeight,speedHeight)
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SaveReal(HH,h,0,speedHeight)
call TimerStart(t,castTime,false,function cj_anonym__225)
set t=null
endfunction
function Ei___OrderConditions takes nothing returns boolean
local integer i=GetUnitCurrentOrder(GetTriggerUnit())
return GetUnitAbilityLevel(GetTriggerUnit(),0x42303043)>0 and i!=851983 and i!=851985 and i!=852662 and i!=852119 and i!=852580 and i!=852173 and i!=852580 and i!=852230 and i!=852110
endfunction
function cj_anonym__227 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real dis=LoadReal(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real a=LoadReal(HH,h,2)
local integer eff=LoadInteger(HH,h,3)
local real x=GetWidgetX(Ei___c)
local real y=GetWidgetY(Ei___c)
if dis>0.and GetWidgetLife(Ei___c)>.405 then
if eff>0 then
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x,y))
call SaveInteger(HH,h,3,eff-1)
else
call SaveInteger(HH,h,3,1)
endif
set x=x+offset*Cos(a*bj_DEGTORAD)
set y=y+offset*Sin(a*bj_DEGTORAD)
call SetUnitPosition(Ei___c,x,y)
call SetUnitFacing(Ei___c,a)
call SaveReal(HH,h,0,dis-offset)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Ei___OrderActions takes nothing returns nothing
local real x=GetWidgetX(Ei___c)
local real y=GetWidgetY(Ei___c)
local real x1=GetOrderPointX()
local real y1=GetOrderPointY()
local real dis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real range=800.
local real speed=2000.
local real period=.025
local real offset=speed*period
local integer takenChakra=0
local integer needChakra=R2I(dis/25.)
local timer t
local integer h
if dis<=range then
if Ei_RaitonSpeed>needChakra then
set Ei_RaitonSpeed=Ei_RaitonSpeed-needChakra
call LeaderboardSetItemValue(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(0)),Ei_RaitonSpeed)
set t=CreateTimer()
set h=GetHandleId(t)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",Ei___c,"chest"))
call SaveReal(HH,h,0,dis)
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,bj_RADTODEG*Atan2(y1-y,x1-x))
call SaveInteger(HH,h,3,1)
call TimerStart(t,period,true,function cj_anonym__227)
else
call DisplayTimedTextToPlayer(Ei___p,0.,0.,1.,"|cFFFFCC00Не хватает Raiton-чакры.|r")
endif
endif
set t=null
endfunction
function cj_anonym__228 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer count=LoadInteger(HH,h,2)
call SaveInteger(HH,h,2,count+1)
if count==15 then
set count=GetRandomInt(1,4)
if count==1 then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",Ei___c,"head"))
elseif count==2 then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",Ei___c,"hand left"))
elseif count==3 then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",Ei___c,"hand right"))
elseif count==4 then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",Ei___c,"origin"))
endif
call SaveInteger(HH,h,2,0)
endif
if GetUnitAbilityLevel(Ei___c,0x42303043)==0 then
call LeaderboardDisplay(Ei_lb,false)
call DestroyEffect(LoadEffectHandle(HH,h,0))
call DestroyEffect(LoadEffectHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Ei___ArmorCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real percent=.8
local real mpCur=GetUnitState(Ei___c,UNIT_STATE_MANA)
local real mpMax=GetUnitState(Ei___c,UNIT_STATE_MAX_MANA)
local real raitonChakra=mpMax*percent
local real period=.1
if mpCur<raitonChakra then
set raitonChakra=mpCur
endif
set Ei_RaitonSpeed=R2I(raitonChakra/2.)
set Ei_RaitonAttack=R2I(raitonChakra/4.)
set Ei_RaitonDefense=R2I(raitonChakra/4.)
if Ei_lb==null then
set Ei_lb=CreateLeaderboard()
call LeaderboardSetLabel(Ei_lb,"Raiton no Yoroi")
call PlayerSetLeaderboard(Ei___p,Ei_lb)
call LeaderboardAddItem(Ei_lb,"Скорость:",Ei_RaitonSpeed,Player(0))
call LeaderboardSetItemValueColor(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(0)),149,150,151,255)
call LeaderboardSetItemLabelColor(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(0)),149,150,151,128)
call LeaderboardAddItem(Ei_lb,"Атака:",Ei_RaitonAttack,Player(1))
call LeaderboardSetItemValueColor(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(1)),32,192,0,255)
call LeaderboardSetItemLabelColor(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(1)),32,192,0,128)
call LeaderboardAddItem(Ei_lb,"Защита:",Ei_RaitonDefense,Player(2))
call LeaderboardSetItemValueColor(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(2)),255,3,3,255)
call LeaderboardSetItemLabelColor(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(2)),255,3,3,128)
call LeaderboardSetSizeByItemCount(Ei_lb,LeaderboardGetItemCount(Ei_lb))
endif
call LeaderboardSetItemValue(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(0)),Ei_RaitonSpeed)
call LeaderboardSetItemValue(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(1)),Ei_RaitonAttack)
call LeaderboardSetItemValue(Ei_lb,LeaderboardGetPlayerIndex(Ei_lb,Player(2)),Ei_RaitonDefense)
call LeaderboardDisplay(Ei_lb,true)
call Sound("Ei Raiton no Yoroi.mp3")
call SaveAgentHandle(HH,h,0,AddSpecialEffectTarget("BlueChakra.mdx",Ei___c,"origin"))
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("ThunderAura.mdx",Ei___c,"chest"))
call TimerStart(t,MainPeriod,true,function cj_anonym__228)
set t=null
endfunction
function Ei___EruboCast takes unit tu returns nothing
local real knockback=400.
local real startOffset=75.
local real dmg=Ei___RaitonChakraAttackGetBonusDamage(100.+GetHeroStr(Ei___c,true)*4.)
local real x=GetWidgetX(Ei___c)
local real y=GetWidgetY(Ei___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real x2=x1+startOffset*Cos(a*bj_DEGTORAD)
local real y2=y1+startOffset*Sin(a*bj_DEGTORAD)
call Sound("Ei Erubo.mp3")
call SetUnitX(Ei___c,x2)
call SetUnitY(Ei___c,y2)
call SetUnitFacing(Ei___c,a)
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call CreateEffect(x1,y1,GetRandomReal(1.5,2.),"Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",4.)
call UnitDamageTarget(Ei___c,tu,GetTaijutsuDamage(dmg,Ei___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call Sound("Ei Erubo Strike.mp3")
call KnockBackUnitEf(tu,knockback,knockback/1000.,a,MainPeriod,3,false)
endfunction
function Ei___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Ei_ERUBO or i==Ei_ARMOR or i==Ei_GIROCHIN or i==Ei_ULT
endfunction
function Ei___SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
if Ei___c==null then
set Ei___c=GetTriggerUnit()
set Ei___p=GetOwningPlayer(Ei___c)
endif
if i==Ei_ERUBO then
call Ei___EruboCast(GetSpellTargetUnit())
elseif i==Ei_ARMOR then
if GetUnitAbilityLevel(Ei___c,0x42303043)==0 then
call Ei___ArmorCast()
else
call UnitRemoveAbility(Ei___c,0x42303043)
endif
elseif i==Ei_GIROCHIN then
call Ei___GirochinDoroppuCast()
elseif i==Ei_ULT then
call Ei___RaigaBomuCast(GetSpellTargetUnit())
endif
endfunction
function Ei_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger order=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(order,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Ei___SpellsConditions))
call TriggerAddAction(spells,function Ei___SpellsActions)
call TriggerAddCondition(order,Condition(function Ei___OrderConditions))
call TriggerAddAction(order,function Ei___OrderActions)
set spells=null
set order=null
endfunction
function cj_anonym__229 takes nothing returns nothing
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
call DestroyTimer(GetExpiredTimer())
endfunction
function Gaara___SabakuSotaisoDamage takes group g returns nothing
local real dmg=400.
local real needHP=.2
local real timeShake=2.
local unit tg
call Sound("Ping.mp3")
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
call PauseUnit(tg,false)
call UnitDamageTarget(Gaara___c,tg,GetNinjutsuDamage(dmg,Gaara___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 and GetWidgetLife(tg)<GetUnitState(tg,UNIT_STATE_MAX_LIFE)*needHP then
call CreateEffect(GetWidgetX(tg),GetWidgetY(tg),1.35,"Objects\\Spawnmodels\\Human\\HumanLargeDeathExplode\\HumanLargeDeathExplode.mdl",2.)
call UnitDamageTarget(Gaara___c,tg,99999.,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call CameraSetTargetNoiseEx(24.,12.*Pow(10.,5.),true)
call CameraSetSourceNoiseEx(24.,12.*Pow(10.,5.),true)
call TimerStart(CreateTimer(),timeShake,false,function cj_anonym__229)
set tg=null
endfunction
function Gaara___SabakuSotaisoCapture takes real x,real y,real range,integer h,group g returns nothing
local real x1
local real y1
local unit tg
local group gr_other=CreateGroup()
local rect r=Rect(x-range,y-range,x+range,y+range)
local real speed=700.
local real offset=speed*MainPeriod
local real degreeAngle=80.
call GroupEnumUnitsInRect(gr_other,r,null)
loop
set tg=FirstOfGroup(gr_other)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Gaara___p)then
if not IsUnitPaused(tg)then
call PauseUnit(tg,true)
endif
if not IsUnitInGroup(tg,g)then
call GroupAddUnit(g,tg)
endif
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
call SetUnitPosition(tg,x1-offset*Cos(Atan2(y1-y,x1-x)+degreeAngle*bj_DEGTORAD),y1-offset*Sin(Atan2(y1-y,x1-x)+degreeAngle*bj_DEGTORAD))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x1,y1))
endif
call GroupRemoveUnit(gr_other,tg)
endloop
call DestroyGroup(gr_other)
call SaveAgentHandle(HH,h,0,g)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r))))
call EnumDestructablesInRect(r,null,function Kill_Destructables)
call RemoveRect(r)
set r=null
set tg=null
set gr_other=null
endfunction
function cj_anonym__230 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local real x1=LoadReal(HH,h,5)
local real y1=LoadReal(HH,h,6)
local real scale=LoadReal(HH,h,7)
local real rangeMax=LoadReal(HH,h,8)
local real rangeCur=LoadReal(HH,h,9)
local real rangeStep=LoadReal(HH,h,10)
local real castTime=LoadReal(HH,h,11)
if castTime>0.then
call SetUnitScale(LoadUnitHandle(HH,h,1),scale-.15,scale-.15,scale-.15)
call SetUnitScale(LoadUnitHandle(HH,h,2),scale+.3,scale+.3,scale+.3)
call SetUnitScale(LoadUnitHandle(HH,h,3),scale+.83,scale+.83,scale+.83)
call SetUnitScale(LoadUnitHandle(HH,h,4),scale+1.33,scale+1.33,scale+1.33)
call Gaara___SabakuSotaisoCapture(x1,y1,rangeCur,h,g)
call SaveReal(HH,h,7,scale+.05)
call SaveReal(HH,h,9,rangeCur+rangeStep)
call SaveReal(HH,h,11,castTime-MainPeriod)
else
call KillUnit(LoadUnitHandle(HH,h,1))
call KillUnit(LoadUnitHandle(HH,h,2))
call KillUnit(LoadUnitHandle(HH,h,3))
call KillUnit(LoadUnitHandle(HH,h,4))
call Gaara___SabakuSotaisoDamage(g)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set t=null
endfunction
function Gaara___SabakuSotaisoCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real scale=1.
local real castTime=3.
local real rangeCur=200./2.
local real rangeMax=600./2.
local real rangeStep=rangeCur*MainPeriod
call Sound("Gaara Sabaku Sotaiso.mp3")
call CreateEffect(x1,y1,2.75,"SandPoff.mdx",5.)
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,CreateUnit(Gaara___p,0x6E303135,x1,y1,0.))
call SaveAgentHandle(HH,h,2,CreateUnit(Gaara___p,0x6E303136,x1,y1,0.))
call SaveAgentHandle(HH,h,3,CreateUnit(Gaara___p,0x6E303136,x1,y1,0.))
call SaveAgentHandle(HH,h,4,CreateUnit(Gaara___p,0x6E303136,x1,y1,0.))
call SaveReal(HH,h,5,x1)
call SaveReal(HH,h,6,y1)
call SaveReal(HH,h,7,scale)
call SaveReal(HH,h,8,rangeMax)
call SaveReal(HH,h,9,rangeCur)
call SaveReal(HH,h,10,rangeStep)
call SaveReal(HH,h,11,castTime)
call TimerStart(t,MainPeriod,true,function cj_anonym__230)
set t=null
endfunction
function Gaara___SabakuhaEffect takes real x,real y,real a returns nothing
local real offset=300.
local real offsetStep=100.
local real f=90.
local real x1
local real y1
local integer i=6
loop
set x1=x+offset*Cos((a+f)*bj_DEGTORAD)
set y1=y+offset*Sin((a+f)*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x1,y1))
set offset=offset-offsetStep
set i=i-1
exitwhen i==0
endloop
endfunction
function cj_anonym__231 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call Gaara___SabakuhaEffect(LoadReal(HH,h,1),LoadReal(HH,h,2),LoadReal(HH,h,3))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Gaara___SabakuhaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Gaara___c)
local real y=GetWidgetY(Gaara___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real timeLife=6.
call Sound("Ping.mp3")
call Gaara___SabakuhaEffect(x1,y1,a)
call SaveAgentHandle(HH,h,0,CreateUnit(Gaara___p,0x6E303137,x1,y1,a))
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,a)
call TimerStart(t,timeLife,false,function cj_anonym__231)
set t=null
endfunction
function Gaara___SunaNoYoroiStart takes unit attacker,real dmg returns nothing
call GroupRemoveUnit(Gaara___grYoroiCheck,attacker)
if Gaara_SunaNoYoroiCur>=R2I(dmg)then
set Gaara_SunaNoYoroiCur=Gaara_SunaNoYoroiCur-R2I(dmg)
else
set dmg=dmg-I2R(Gaara_SunaNoYoroiCur)
set Gaara_SunaNoYoroiCur=0
endif
call SetWidgetLife(Gaara___c,GetWidgetLife(Gaara___c)+dmg)
call LeaderboardSetItemValue(Gaara_lb,LeaderboardGetPlayerIndex(Gaara_lb,Player(0)),Gaara_SunaNoYoroiCur)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl",Gaara___c,"chest"))
endfunction
function cj_anonym__232 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
set Gaara___tateLog[LoadInteger(HH,h,0)]=false
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Gaara___SunaNoTateStart takes unit u,integer id,real dmg returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cd=2.
call SetWidgetLife(u,GetWidgetLife(u)+dmg)
call DestroyEffect(AddSpecialEffectTarget("Gaara Shield.mdx",u,"origin"))
call UnitRemoveAbility(u,0x41303249)
call SaveInteger(HH,h,0,id)
call TimerStart(t,cd,false,function cj_anonym__232)
set t=null
endfunction
function Gaara___GetDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and not IsUnitIllusion(GetTriggerUnit())
endfunction
function Gaara___GetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real dmg=GetEventDamage()
if GetUnitAbilityLevel(tu,0x41303249)>0 then
call Gaara___SunaNoTateStart(tu,GetPlayerId(GetOwningPlayer(tu)),dmg)
else
if GetUnitAbilityLevel(tu,0x4230304B)>0 and IsUnitInGroup(GetEventDamageSource(),Gaara___grYoroiCheck)then
call Gaara___SunaNoYoroiStart(GetEventDamageSource(),dmg)
endif
endif
set tu=null
endfunction
function Gaara___AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and IsUnitHero(GetTriggerUnit())and GetUnitAbilityLevel(GetTriggerUnit(),Gaara_ZETTAI_BOGYO)>0 or GetUnitAbilityLevel(GetTriggerUnit(),0x41305653)>0
endfunction
function Gaara___AttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local integer id=GetPlayerId(GetOwningPlayer(tu))
if not Gaara___tateLog[id]then
set Gaara___tateLog[id]=true
call UnitAddAbility(tu,0x41303249)
if not IsUnitInGroup(tu,Gaara___grReg)then
call GroupAddUnit(Gaara___grReg,tu)
call TriggerRegisterUnitEvent(Gaara___getdmg,tu,EVENT_UNIT_DAMAGED)
endif
else
if GetUnitAbilityLevel(tu,0x4230304B)>0 and not IsUnitInGroup(GetAttacker(),Gaara___grYoroiCheck)then
call GroupAddUnit(Gaara___grYoroiCheck,GetAttacker())
endif
endif
set tu=null
endfunction
function cj_anonym__233 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real manacost=LoadReal(HH,h,0)
if Gaara_SunaNoYoroiCur<Gaara_SunaNoYoroiMax and GetUnitState(Gaara___c,UNIT_STATE_MANA)>manacost then
set Gaara_SunaNoYoroiCur=Gaara_SunaNoYoroiCur+1
call SetUnitState(Gaara___c,UNIT_STATE_MANA,GetUnitState(Gaara___c,UNIT_STATE_MANA)-manacost)
call LeaderboardSetItemValue(Gaara_lb,LeaderboardGetPlayerIndex(Gaara_lb,Player(0)),Gaara_SunaNoYoroiCur)
endif
if GetUnitAbilityLevel(Gaara___c,0x4230304B)==0 or GetUnitState(Gaara___c,UNIT_STATE_MANA)==0.or GetWidgetLife(Gaara___c)<.405 then
call LeaderboardDisplay(Gaara_lb,false)
call UnitRemoveAbility(Gaara___c,0x4130594D)
call UnitRemoveAbility(Gaara___c,0x4230305A)
call UnitRemoveAbility(Gaara___c,0x4230304B)
call GroupClear(Gaara___grYoroiCheck)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Gaara___ZettaiBogyoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real percent=.35
local real mpCur=GetUnitState(Gaara___c,UNIT_STATE_MANA)
local real mpMax=GetUnitState(Gaara___c,UNIT_STATE_MAX_MANA)
local real sunaNoYoroi=mpMax*percent
local real manacost=4.
local real period=.1
if mpCur<sunaNoYoroi then
set sunaNoYoroi=mpCur
endif
set Gaara_SunaNoYoroiCur=R2I(sunaNoYoroi)
set Gaara_SunaNoYoroiMax=Gaara_SunaNoYoroiCur
if Gaara_lb==null then
set Gaara_lb=CreateLeaderboard()
call LeaderboardSetLabel(Gaara_lb,"SUNA NO YOROI")
call PlayerSetLeaderboard(Gaara___p,Gaara_lb)
call LeaderboardAddItem(Gaara_lb,"DURABILITY:",Gaara_SunaNoYoroiCur,Player(0))
call LeaderboardSetItemValueColor(Gaara_lb,LeaderboardGetPlayerIndex(Gaara_lb,Player(0)),229,188,151,255)
call LeaderboardSetItemLabelColor(Gaara_lb,LeaderboardGetPlayerIndex(Gaara_lb,Player(0)),229,188,151,128)
call LeaderboardSetSizeByItemCount(Gaara_lb,LeaderboardGetItemCount(Gaara_lb))
endif
call LeaderboardSetItemValue(Gaara_lb,LeaderboardGetPlayerIndex(Gaara_lb,Player(0)),Gaara_SunaNoYoroiCur)
call LeaderboardDisplay(Gaara_lb,true)
call Sound("Ping.mp3")
call SetUnitState(Gaara___c,UNIT_STATE_MANA,mpCur-sunaNoYoroi)
call UnitAddAbility(Gaara___c,0x4130594D)
call SaveReal(HH,h,0,manacost)
call TimerStart(t,period,true,function cj_anonym__233)
set t=null
endfunction
function cj_anonym__235 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local real radius=LoadReal(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real x=GetWidgetX(Gaara___sabaku)
local real y=GetWidgetY(Gaara___sabaku)
local real x1
local real y1
local rect r
local unit tg
if GetWidgetLife(Gaara___c)>.405 and GetWidgetLife(Gaara___sabaku)>.405 then
set r=Rect(x-radius/2.,y-radius/2.,x+radius/2.,y+radius/2.)
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if IsUnitNeedNinjutsu(tg,Gaara___p)and GetUnitAbilityLevel(tg,0x42303051)>0 then
call UnitDamageTarget(Gaara___c,tg,GetNinjutsuDamage(dmg,Gaara___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r))))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r))))
call RemoveRect(r)
else
call DestroyGroup(g)
if GetWidgetLife(Gaara___sabaku)>.405 then
call RemoveUnit(Gaara___sabaku)
endif
call DisplayTextToPlayer(Gaara___p,0.,0.,"|cFFFFCC00Пустыня исчезла.|r")
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set g=null
set r=null
set t=null
endfunction
function cj_anonym__234 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer amount=LoadInteger(HH,h,0)
local real a=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x
local real y
if GetUnitCurrentOrder(Gaara___c)==OrderId("carrionswarm")and amount>0 and GetWidgetLife(Gaara___sabaku)>.405 then
set x=GetWidgetX(Gaara___sabaku)
set y=GetWidgetY(Gaara___sabaku)
call SetUnitPosition(Gaara___sabaku,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveInteger(HH,h,0,amount-1)
else
if GetUnitCurrentOrder(Gaara___c)==OrderId("carrionswarm")then
call IssueImmediateOrder(Gaara___c,"stop")
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Gaara___SabakuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local boolean log=false
local real x
local real y
local real a
local real distance
local real speed=1250.
local real offset=speed*MainPeriod
local real radius=600.
local real lifeTime=30.
local real dmg=50.*MainPeriod
call Sound3D(Gaara___c,"Gaara Sabaku Cast.mp3")
if GetWidgetLife(Gaara___sabaku)>.405 then
set x=GetWidgetX(Gaara___sabaku)
set y=GetWidgetY(Gaara___sabaku)
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call SaveInteger(HH,h,0,R2I(distance/offset))
call SaveReal(HH,h,1,a)
call SaveReal(HH,h,2,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__234)
set log=true
endif
if not log then
set Gaara___sabaku=CreateUnit(Gaara___p,0x68303358,x1,y1,0.)
call SetUnitTimeScale(Gaara___sabaku,GetRandomReal(1.8,2.2))
call UnitApplyTimedLife(Gaara___sabaku,0x42544C46,lifeTime)
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveReal(HH,h,1,radius)
call SaveReal(HH,h,2,dmg)
call TimerStart(t,MainPeriod,true,function cj_anonym__235)
endif
set t=null
endfunction
function Gaara___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Gaara_SABAKU or i==Gaara_SABAKUHA or i==Gaara_ZETTAI_BOGYO or i==Gaara_SABAKU_SOTAISO
endfunction
function Gaara___SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
if Gaara___c==null then
set Gaara___c=GetTriggerUnit()
set Gaara___p=GetOwningPlayer(Gaara___c)
endif
if i==Gaara_SABAKU then
call Gaara___SabakuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Gaara_ZETTAI_BOGYO then
if GetUnitAbilityLevel(Gaara___c,0x4230304B)==0 then
call Gaara___ZettaiBogyoCast()
else
call UnitRemoveAbility(Gaara___c,0x4230304B)
endif
elseif i==Gaara_SABAKUHA then
call Gaara___SabakuhaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Gaara_SABAKU_SOTAISO then
call Gaara___SabakuSotaisoCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Gaara_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
set Gaara___getdmg=CreateTrigger()
set Gaara___grYoroiCheck=CreateGroup()
set Gaara___grReg=CreateGroup()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
set Gaara___tateLog[i]=false
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Gaara___SpellsConditions))
call TriggerAddAction(spells,function Gaara___SpellsActions)
call TriggerAddCondition(attack,Condition(function Gaara___AttackConditions))
call TriggerAddAction(attack,function Gaara___AttackActions)
call TriggerAddCondition(Gaara___getdmg,Condition(function Gaara___GetDamageConditions))
call TriggerAddAction(Gaara___getdmg,function Gaara___GetDamageActions)
set attack=null
set spells=null
endfunction
function Gai___YagaiEnd takes nothing returns nothing
local real curlife=GetWidgetLife(Gai___c)
local real maxlife=GetUnitState(Gai___c,UNIT_STATE_MAX_LIFE)
local real percent=.25
set Gai_SoundOn=false
call Sound("Gai 8 Gate.mp3")
call PauseUnit(Gai___c,false)
call SetUnitInvulnerable(Gai___c,false)
call SetUnitPathing(Gai___c,true)
if curlife-(maxlife*percent)>.405 then
call SetWidgetLife(Gai___c,curlife-(maxlife*percent))
else
call SetWidgetLife(Gai___c,1.)
endif
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
call EnableTrigger(Gai___HT_speedTrg)
endif
endfunction
function cj_anonym__236 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit dragon=LoadUnitHandle(HH,h,1)
local real time=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real a=LoadReal(HH,h,4)
local real period=LoadReal(HH,h,5)
local real efOffset=LoadReal(HH,h,6)
local integer efCount=LoadInteger(HH,h,7)
local real x=GetWidgetX(Gai___c)
local real y=GetWidgetY(Gai___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real x2
local real y2
if time>0.then
call KillDestructablesStart(x1,y1,efOffset)
call CreateDummyEffect(x1,y1,1.25,"Deathmok.mdx",0.)
if SpecialEffectsShow then
if efCount<1 then
call SaveInteger(HH,h,7,efCount+1)
else
set x2=x1+efOffset*Cos((a+90.)*bj_DEGTORAD)
set y2=y1+efOffset*Sin((a+90.)*bj_DEGTORAD)
if IsTerrainPathable(x2,y2,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x2,y2))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x2,y2))
endif
set x2=x1-efOffset*Cos((a-90.)*bj_DEGTORAD)
set y2=y1-efOffset*Sin((a-90.)*bj_DEGTORAD)
if IsTerrainPathable(x2,y2,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x2,y2))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x2,y2))
endif
call SaveInteger(HH,h,7,0)
endif
endif
if time>.75 then
call SetUnitPosition(Gai___c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitPosition(dragon,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
elseif time==.75 then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x,y,1.75,"NewDirtEXNofire.mdx",GetRandomReal(0.,360.))
else
call CreateDummyEffect(x,y,1.75,"IceSparks.mdx",GetRandomReal(0.,360.))
endif
endif
call SetUnitPosition(tu,x1+offset*Cos(a*bj_DEGTORAD),y1+offset*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,2,time-period)
else
call RemoveUnit(dragon)
call KillDestructablesStart(x1,y1,300.)
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x1,y1,3.25,"NewDirtEXNofire.mdx",GetRandomReal(0.,360.))
else
call CreateDummyEffect(x1,y1,3.25,"IceSparks.mdx",GetRandomReal(0.,360.))
endif
call SetUnitPathing(tu,true)
call Gai___YagaiEnd()
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set dragon=null
set tu=null
set t=null
endfunction
function Gai___YagaiDamage takes unit tu,unit dragon returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Gai___c)
local real y=GetWidgetY(Gai___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real time=1.5
local real period=.025
local real speed=1500.
local real offset=speed*period
local real efOffset=175.
local integer lvl=GetHeroLevel(Gai___c)
local real dmg=200.+Gai___HT_speed*(lvl/20.)
call Sound("Gai Yagai Damage.mp3")
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x,y,2.5,"NewDirtEXNofire.mdx",GetRandomReal(0.,360.))
else
call CreateDummyEffect(x,y,2.5,"IceSparks.mdx",GetRandomReal(0.,360.))
endif
call SetUnitPosition(Gai___c,x1,y1)
call SetUnitFacing(dragon,a)
call SetUnitFacing(Gai___c,a)
call SetUnitTimeScale(dragon,.85)
call SetUnitAnimation(dragon,"Death")
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
call SetUnitAnimation(Gai___c,"spell two alternate")
else
call SetUnitAnimation(Gai___c,"Spell Death")
endif
call TerrainDeformRipple(x1,y1,1500.,150.,5000,1,5.,10.,1500.,false)
call CreateDummyEffect(x1,y1,3.5,"Deathmok.mdx",0.)
call SetUnitPathing(tu,false)
call SetUnitTypeFlying(tu)
call UnitDamageTarget(Gai___c,tu,GetTaijutsuDamage(dmg,Gai___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,dragon)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,a)
call SaveReal(HH,h,5,period)
call SaveReal(HH,h,6,efOffset)
call SaveInteger(HH,h,7,0)
call TimerStart(t,period,true,function cj_anonym__236)
set t=null
endfunction
function cj_anonym__240 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Gai___YagaiDamage(LoadUnitHandle(HH,h,0),LoadUnitHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__239 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit dragon=LoadUnitHandle(HH,h,1)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call Sound("Gai Yagai Cast 3.mp3")
call SetUnitTimeScale(dragon,1.)
call SaveAgentHandle(HH,h1,0,tu)
call SaveAgentHandle(HH,h1,1,dragon)
call TimerStart(t1,.4,false,function cj_anonym__240)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set dragon=null
set tu=null
set t=null
set t1=null
endfunction
function cj_anonym__238 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit dragon=LoadUnitHandle(HH,h,1)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SetUnitAnimation(dragon,"Stand")
call SaveAgentHandle(HH,h1,0,tu)
call SaveAgentHandle(HH,h1,1,dragon)
call TimerStart(t1,.3,false,function cj_anonym__239)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set dragon=null
set tu=null
set t=null
set t1=null
endfunction
function cj_anonym__237 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
set bj_lastCreatedUnit=CreateUnit(Gai___p,0x6E303230,GetWidgetX(Gai___c),GetWidgetY(Gai___c),GetUnitFacing(Gai___c))
call Sound("Gai Yagai Cast 2.mp3")
call SetUnitTimeScale(bj_lastCreatedUnit,1.7)
call SetUnitAnimation(bj_lastCreatedUnit,"Birth")
call SaveAgentHandle(HH,h1,0,tu)
call SaveAgentHandle(HH,h1,1,bj_lastCreatedUnit)
call TimerStart(t1,.3,false,function cj_anonym__238)
set tu=null
set t=null
set t1=null
endfunction
function Gai___UltCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
set Gai_SoundOn=true
call Sound("Gai Yagai Cast 1.mp3")
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
call DisableTrigger(Gai___HT_speedTrg)
endif
call IssueImmediateOrder(Gai___c,"stop")
call PauseUnit(Gai___c,true)
call SetUnitInvulnerable(Gai___c,true)
call SetUnitPathing(Gai___c,false)
call SetUnitAnimation(Gai___c,"Stand hit alternate")
call UnitApplyTimedLife(CreateUnit(Gai___p,0x6E303235,GetWidgetX(Gai___c),GetWidgetY(Gai___c),GetUnitFacing(Gai___c)),0x42544C46,5.)
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,.296,false,function cj_anonym__237)
set t=null
endfunction
function Gai___SekizoConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),Gai_SEKIZO)>0 and Gai_HT_SekizoNumber>0 and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))
endfunction
function cj_anonym__241 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real lvldmg=GetUnitAbilityLevel(Gai___c,Gai_SEKIZO)*.03
local real dmg=30.+GetUnitState(tu,UNIT_STATE_MAX_LIFE)*lvldmg
local real x=GetWidgetX(Gai___c)
local real y=GetWidgetY(Gai___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
call Sound("Gai Sekizo Damage.mp3")
call UnitApplyTimedLife(CreateUnit(Gai___p,0x6E303236,x1,y1,a),0x42544C46,1.)
call UnitApplyTimedLife(CreateUnit(Gai___p,0x6E303237,x1,y1,a+90.),0x42544C46,1.)
call KnockBackUnitEf(tu,600.,.3,a,.025,9,false)
call UnitDamageTarget(Gai___c,tu,GetTaijutsuDamage(dmg,Gai___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
if Gai_HT_SekizoNumber==0 or GetWidgetLife(Gai___c)<=GetUnitState(Gai___c,UNIT_STATE_MAX_LIFE)*.05 then
set Gai_HT_SekizoNumber=0
if GetWidgetLife(Gai___c)<=GetUnitState(Gai___c,UNIT_STATE_MAX_LIFE)*.05 then
call SetWidgetLife(Gai___c,1.)
endif
else
call SetWidgetLife(Gai___c,GetWidgetLife(Gai___c)-GetUnitState(Gai___c,UNIT_STATE_MAX_LIFE)*.05)
call EnableTrigger(Gai_sekizo)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Gai___SekizoActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit attacked=GetTriggerUnit()
if Gai_HT_SekizoNumber==5 then
call Sound("Gai Sekizo Strike 1.mp3")
elseif Gai_HT_SekizoNumber==4 then
call Sound("Gai Sekizo Strike 2.mp3")
elseif Gai_HT_SekizoNumber==3 then
call Sound("Gai Sekizo Strike 3.mp3")
elseif Gai_HT_SekizoNumber==2 then
call Sound("Gai Sekizo Strike 4.mp3")
elseif Gai_HT_SekizoNumber==1 then
call Sound("Gai Sekizo Strike 5.mp3")
endif
set Gai_HT_SekizoNumber=Gai_HT_SekizoNumber-1
call DisableTrigger(Gai_sekizo)
call SetUnitAnimation(Gai___c,"Spell death alternate")
call SaveAgentHandle(HH,h,0,attacked)
call TimerStart(t,.358,false,function cj_anonym__241)
set attacked=null
set t=null
endfunction
function Gai___HachimonTonkouChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Gai___p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFF65A100"+I2S(LoadInteger(HH,GetHandleId(udg_Hero[idp]),0))+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function Gai___HachimonTonkouSpeedConditions takes nothing returns boolean
local integer i=GetUnitCurrentOrder(GetTriggerUnit())
return GetUnitAbilityLevel(GetTriggerUnit(),Gai_HT_BUFF)>0 and not udg_ShopCam[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]and i!=OrderId("chainlightning")and i!=OrderId("breathoffire")and i!=OrderId("farsight")and i!=OrderId("carrionscarabson")and i!=OrderId("blink")and i!=OrderId("flamingattacktarg")and i!=OrderId("lightningshield")and i!=OrderId("ward")and i!=OrderId("nagabuild")and i!=OrderId("cripple")
endfunction
function cj_anonym__243 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set t=null
endfunction
function cj_anonym__242 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer amount=LoadInteger(HH,h,0)
local real portion=LoadReal(HH,h,1)
local real a=LoadReal(HH,h,2)
local real distanceSaved=LoadReal(HH,h,3)
local real x=GetWidgetX(Gai___c)
local real y=GetWidgetY(Gai___c)
local timer t1
if amount>0 and GetWidgetLife(Gai___c)>.405 and not udg_ShopCam[GetPlayerId(Gai___p)]then
if SpecialEffectsShow then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x,y))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
endif
endif
set x=x+portion*Cos(a*bj_DEGTORAD)
set y=y+portion*Sin(a*bj_DEGTORAD)
call KillDestructablesStart(x,y,125.)
call SetUnitPosition(Gai___c,x,y)
call SetUnitFacing(Gai___c,a)
call SetUnitAnimationByIndex(Gai___c,21)
call SaveInteger(HH,h,0,amount-1)
if Gai___HT_speed>900 then
if distanceSaved<Gai___HT_speed/50.then
call SaveReal(HH,h,3,distanceSaved+portion)
else
set t1=CreateTimer()
set bj_lastCreatedUnit=CreateUnit(Gai___p,0x6830374D,x,y,a)
call SetUnitFlyHeight(bj_lastCreatedUnit,GetUnitFlyHeight(Gai___c),0.)
call SetUnitTimeScale(bj_lastCreatedUnit,5.)
call SetUnitAnimationByIndex(bj_lastCreatedUnit,21)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,128)
call SaveAgentHandle(HH,GetHandleId(t1),0,bj_lastCreatedUnit)
call TimerStart(t1,.15,false,function cj_anonym__243)
call SaveReal(HH,h,3,0.)
endif
endif
else
set Gai_SoundOn=false
call SetUnitPathing(Gai___c,true)
call SetUnitTimeScale(Gai___c,1.)
call SetUnitAnimation(Gai___c,"Stand Ready alternate")
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set t1=null
set t=null
endfunction
function Gai___HachimonTonkouSpeedActions takes nothing returns nothing
local real x=GetWidgetX(Gai___c)
local real y=GetWidgetY(Gai___c)
local real x1=GetOrderPointX()
local real y1=GetOrderPointY()
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real maxdis=1200.
local real health=curdis*.2
local real period=.025
local real offset
local integer randomSnd=GetRandomInt(1,3)
local timer t
local integer h
if curdis<=maxdis and not IsTerrainPathable(x1,y1,PATHING_TYPE_WALKABILITY)then
if randomSnd==1 then
call Sound("Gai Hachimon Tonkou Blink 1.mp3")
elseif randomSnd==2 then
call Sound("Gai Hachimon Tonkou Blink 2.mp3")
elseif randomSnd==3 then
call Sound("Gai Hachimon Tonkou Blink 3.mp3")
endif
set Gai_SoundOn=true
set t=CreateTimer()
set h=GetHandleId(t)
set offset=curdis/(R2I((curdis/Gai___HT_speed)/period))
call SetUnitTypeFlying(Gai___c)
call SetUnitPathing(Gai___c,false)
call SetWidgetLife(Gai___c,GetWidgetLife(Gai___c)-health)
call SetUnitTimeScale(Gai___c,5.)
call SetUnitAnimationByIndex(Gai___c,21)
call SaveInteger(HH,h,0,R2I((curdis/Gai___HT_speed)/period))
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,bj_RADTODEG*Atan2(y1-y,x1-x))
call SaveReal(HH,h,3,0.)
call TimerStart(t,period,true,function cj_anonym__242)
endif
set t=null
endfunction
function cj_anonym__247 takes nothing returns nothing
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
if GetUnitAbilityLevel(Gai___c,0x41304942)==0 then
call UnitAddAbility(Gai___c,0x41304942)
endif
set Gai___HT_speed=(GetHeroStr(Gai___c,true)+GetHeroAgi(Gai___c,true))*10
call SaveInteger(HH,GetHandleId(Gai___c),0,Gai___HT_speed)
call Gai___HachimonTonkouChangeText(true)
else
call RemoveUnit(Gai___HT_dummy)
call AddUnitAnimationProperties(Gai___c,"Attack 5",true)
call AddUnitAnimationProperties(Gai___c,"Attack 2",true)
call AddUnitAnimationProperties(Gai___c,"spell channel",true)
call AddUnitAnimationProperties(Gai___c,"Death",true)
call AddUnitAnimationProperties(Gai___c,"Stand Ready",true)
call AddUnitAnimationProperties(Gai___c,"spell five",true)
call AddUnitAnimationProperties(Gai___c,"Attack walk stand spin",true)
call AddUnitAnimationProperties(Gai___c,"Attack 4",true)
call AddUnitAnimationProperties(Gai___c,"Stand",true)
call AddUnitAnimationProperties(Gai___c,"Walk",true)
call AddUnitAnimationProperties(Gai___c,"Spell Death",true)
call AddUnitAnimationProperties(Gai___c,"spell slam",true)
call AddUnitAnimationProperties(Gai___c,"attack 1",true)
call AddUnitAnimationProperties(Gai___c,"attack 3",true)
call AddUnitAnimationProperties(Gai___c,"spell throw",true)
call AddUnitAnimationProperties(Gai___c,"Portrait",true)
call AddUnitAnimationProperties(Gai___c,"spell hero alternate",false)
call AddUnitAnimationProperties(Gai___c,"spell four alternate",false)
call AddUnitAnimationProperties(Gai___c,"spell six alternate",false)
call AddUnitAnimationProperties(Gai___c,"stand hit alternate",false)
call AddUnitAnimationProperties(Gai___c,"spell two alternate",false)
call AddUnitAnimationProperties(Gai___c,"spell alternate",false)
call AddUnitAnimationProperties(Gai___c,"spell one alternate",false)
call AddUnitAnimationProperties(Gai___c,"Walk alternate",false)
call AddUnitAnimationProperties(Gai___c,"Stand alternate",false)
call AddUnitAnimationProperties(Gai___c,"Stand ready alternate",false)
call AddUnitAnimationProperties(Gai___c,"Death alternate",false)
call AddUnitAnimationProperties(Gai___c,"Spell death alternate",false)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 1",false)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 2",false)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 3",false)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 4",false)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 5",false)
call AddUnitAnimationProperties(Gai___c,"Attack walk stand spin alternate",false)
call AddUnitAnimationProperties(Gai___c,"Spell channel alternate",false)
call AddUnitAnimationProperties(Gai___c,"Spell five alternate",false)
call AddUnitAnimationProperties(Gai___c,"Spell slam alternate",false)
call AddUnitAnimationProperties(Gai___c,"spell throw alternate",false)
call AddUnitAnimationProperties(Gai___c,"Portrait alternate",false)
set Gai___HT_speed=0
call Gai___HachimonTonkouChangeText(false)
call DisableTrigger(Gai___HT_speedTrg)
set Gai_HT_SekizoNumber=0
call DisableTrigger(Gai_sekizo)
call FlushChildHashtable(HH,GetHandleId(Gai___c))
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function cj_anonym__246 takes nothing returns nothing
set Gai_SoundOn=false
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__245 takes nothing returns nothing
if GetRandomInt(1,2)==1 then
call Sound("Gai Hachimon Tonkou Cry 1.mp3")
else
call Sound("Gai Hachimon Tonkou Cry 2.mp3")
endif
call TimerStart(CreateTimer(),3.,false,function cj_anonym__246)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__244 takes nothing returns nothing
local integer lvl=GetHeroLevel(Gai___c)
call Sound("Gai Kai.mp3")
call CreateDummyEffect(GetWidgetX(Gai___c),GetWidgetY(Gai___c),1.5,"NatureExplosion.mdx",GetRandomReal(0.,360.))
call AddUnitAnimationProperties(Gai___c,"spell hero alternate",true)
call AddUnitAnimationProperties(Gai___c,"spell four alternate",true)
call AddUnitAnimationProperties(Gai___c,"spell six alternate",true)
call AddUnitAnimationProperties(Gai___c,"stand hit alternate",true)
call AddUnitAnimationProperties(Gai___c,"spell two alternate",true)
call AddUnitAnimationProperties(Gai___c,"spell alternate",true)
call AddUnitAnimationProperties(Gai___c,"spell one alternate",true)
call AddUnitAnimationProperties(Gai___c,"Walk alternate",true)
call AddUnitAnimationProperties(Gai___c,"Stand alternate",true)
call AddUnitAnimationProperties(Gai___c,"Stand ready alternate",true)
call AddUnitAnimationProperties(Gai___c,"Death alternate",true)
call AddUnitAnimationProperties(Gai___c,"Spell death alternate",true)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 1",true)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 2",true)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 3",true)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 4",true)
call AddUnitAnimationProperties(Gai___c,"Attack alternate 5",true)
call AddUnitAnimationProperties(Gai___c,"Attack walk stand spin alternate",true)
call AddUnitAnimationProperties(Gai___c,"Spell channel alternate",true)
call AddUnitAnimationProperties(Gai___c,"Spell five alternate",true)
call AddUnitAnimationProperties(Gai___c,"Spell slam alternate",true)
call AddUnitAnimationProperties(Gai___c,"spell throw alternate",true)
call AddUnitAnimationProperties(Gai___c,"Portrait alternate",true)
call AddUnitAnimationProperties(Gai___c,"Attack 5",false)
call AddUnitAnimationProperties(Gai___c,"Attack 2",false)
call AddUnitAnimationProperties(Gai___c,"spell channel",false)
call AddUnitAnimationProperties(Gai___c,"Death",false)
call AddUnitAnimationProperties(Gai___c,"Stand Ready",false)
call AddUnitAnimationProperties(Gai___c,"spell five",false)
call AddUnitAnimationProperties(Gai___c,"Attack walk stand spin",false)
call AddUnitAnimationProperties(Gai___c,"Attack 4",false)
call AddUnitAnimationProperties(Gai___c,"Stand",false)
call AddUnitAnimationProperties(Gai___c,"Walk",false)
call AddUnitAnimationProperties(Gai___c,"Spell Death",false)
call AddUnitAnimationProperties(Gai___c,"spell slam",false)
call AddUnitAnimationProperties(Gai___c,"attack 1",false)
call AddUnitAnimationProperties(Gai___c,"attack 3",false)
call AddUnitAnimationProperties(Gai___c,"spell throw",false)
call AddUnitAnimationProperties(Gai___c,"Portrait",false)
call SetUnitTypeFlying(Gai___c)
call IssueImmediateOrder(Gai___c,"stop")
call SetUnitAnimation(Gai___c,"Stand alternate")
call EnableTrigger(Gai___HT_speedTrg)
if lvl>=5 then
set Gai_HT_SekizoNumber=5
call EnableTrigger(Gai_sekizo)
endif
call PauseUnit(Gai___c,false)
call TimerStart(CreateTimer(),.6,false,function cj_anonym__245)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__247)
call DestroyTimer(GetExpiredTimer())
endfunction
function Gai___HachimonTonkouCast takes nothing returns nothing
set Gai___HT_speed=(GetHeroStr(Gai___c,true)+GetHeroAgi(Gai___c,true))*10
call SaveInteger(HH,GetHandleId(Gai___c),0,Gai___HT_speed)
call Gai___HachimonTonkouChangeText(true)
set Gai___HT_dummy=CreateUnit(Gai___p,0x6E303239,0.,0.,0.)
set Gai_SoundOn=true
call Sound("Gai Hachimon Tonkou.mp3")
call TimerStart(CreateTimer(),.75,false,function cj_anonym__244)
endfunction
function cj_anonym__248 takes nothing returns nothing
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
call SetUnitAnimation(Gai___c,"Stand alternate")
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
call EnableTrigger(Gai___HT_speedTrg)
endif
else
call SetUnitAnimation(Gai___c,"Stand")
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function Gai___KonohaGorikiSenpuCast takes nothing returns nothing
local real dmg=75.
local real x=GetWidgetX(Gai___c)
local real y=GetWidgetY(Gai___c)
local real knockback=300.
local unit tg
call Sound("Gai Konoha Goriki Senpu.mp3")
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
set dmg=dmg+(Gai___HT_speed*.08)
call DisableTrigger(Gai___HT_speedTrg)
call SetUnitAnimation(Gai___c,"Attack walk stand spin alternate")
else
call SetUnitAnimation(Gai___c,"Attack walk stand spin")
endif
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,200.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Gai___p)then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call KnockBackUnitEf(tg,knockback,knockback/1000.,bj_RADTODEG*Atan2(GetWidgetY(tg)-y,GetWidgetX(tg)-x),.025,3,false)
call UnitDamageTarget(Gai___c,tg,GetTaijutsuDamage(dmg,Gai___c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call TimerStart(CreateTimer(),.283,false,function cj_anonym__248)
set tg=null
endfunction
function Gai___DynamicActionDamage takes unit tu,real x1,real y1 returns nothing
local real dmg=100.
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
set dmg=dmg+(Gai___HT_speed*.12)
endif
call Sound("Gai Dynamic Action Damage.mp3")
call CreateEffect(x1,y1,.75,"Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",3.)
call UnitDamageTarget(Gai___c,tu,GetTaijutsuDamage(dmg,Gai___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endfunction
function cj_anonym__249 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real x=GetWidgetX(Gai___c)
local real y=GetWidgetY(Gai___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Gai___c)>.405 and distance>offset*2.and IsSpellNeedRange(x,y,x1,y1,900.)then
call SetUnitPosition(Gai___c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
set Gai_SoundOn=false
if GetWidgetLife(Gai___c)>.405 and IsSpellNeedRange(x,y,x1,y1,900.)then
call Gai___DynamicActionDamage(tu,x1,y1)
endif
call PauseUnit(Gai___c,false)
call SetUnitPathing(Gai___c,true)
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
call EnableTrigger(Gai___HT_speedTrg)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Gai___DynamicActionCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real speed=900.
local real period=.025
local real offset=speed*period
set Gai_SoundOn=true
call Sound("Gai Dynamic Action.mp3")
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
call DisableTrigger(Gai___HT_speedTrg)
endif
call DestroyEffect(AddSpecialEffect("dim.MDx",GetWidgetX(Gai___c),GetWidgetY(Gai___c)))
call PauseUnit(Gai___c,true)
call SetUnitPathing(Gai___c,false)
if GetUnitAbilityLevel(Gai___c,Gai_HT_BUFF)>0 then
call SetUnitAnimation(Gai___c,"Spell Five alternate")
else
call SetUnitAnimation(Gai___c,"Spell Five")
endif
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,offset)
call TimerStart(t,period,true,function cj_anonym__249)
set t=null
endfunction
function Gai___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Gai_ENTRY or i==Gai_GORIKI or i==Gai_HT or i==Gai_ULT
endfunction
function Gai___SpellsActions takes nothing returns nothing
local integer i
if Gai___c==null then
set Gai___c=GetTriggerUnit()
set Gai___p=GetOwningPlayer(Gai___c)
endif
set i=GetSpellAbilityId()
if i==Gai_ENTRY then
call Gai___DynamicActionCast(GetSpellTargetUnit())
elseif i==Gai_GORIKI then
call Gai___KonohaGorikiSenpuCast()
elseif i==Gai_HT then
call Gai___HachimonTonkouCast()
elseif i==Gai_ULT then
call Gai___UltCast(GetSpellTargetUnit())
endif
endfunction
function Gai_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Gai___HT_speedTrg=CreateTrigger()
set Gai_sekizo=CreateTrigger()
call DisableTrigger(Gai___HT_speedTrg)
call DisableTrigger(Gai_sekizo)
loop
call TriggerRegisterPlayerUnitEvent(Gai_sekizo,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(Gai___HT_speedTrg,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Gai___SpellsConditions))
call TriggerAddAction(spells,function Gai___SpellsActions)
call TriggerAddCondition(Gai___HT_speedTrg,Condition(function Gai___HachimonTonkouSpeedConditions))
call TriggerAddAction(Gai___HT_speedTrg,function Gai___HachimonTonkouSpeedActions)
call TriggerAddCondition(Gai_sekizo,Condition(function Gai___SekizoConditions))
call TriggerAddAction(Gai_sekizo,function Gai___SekizoActions)
set spells=null
endfunction
function Gengetsu___MizufusionDamage takes real dmg,real x,real y,real radius,real timeDebuff returns nothing
local group g=CreateGroup()
local unit tg
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Gengetsu___p)then
call UnitDamageTarget(Gengetsu___mizukage,tg,GetNinjutsuDamage(dmg,Gengetsu___mizukage,tg,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
if GetUnitAbilityLevel(tg,0x41303338)>0 then
call SetUnitAbilityLevel(tg,0x41303338,GetUnitAbilityLevel(tg,0x41303338)+1)
else
call UnitTempSpell(tg,0x41303338,0x42303141,timeDebuff,0,false)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__250 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real timeDebuff=LoadReal(HH,h,3)
local unit bubble
loop
set bubble=FirstOfGroup(g)
exitwhen bubble==null
call Gengetsu___MizufusionDamage(dmg,GetWidgetX(bubble),GetWidgetY(bubble),radius,timeDebuff)
call RemoveUnit(bubble)
call GroupRemoveUnit(g,bubble)
endloop
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set g=null
set bubble=null
set t=null
endfunction
function Gengetsu___MizufusionCast takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer number=2
local integer numberCheck=number
local real castTime=1.
local real degreeStep=360./number
local real degree=0.
local real radiusStart=200.
local real offset=radiusStart/2.
local real randomOffset=GetRandomReal(-offset/2.,offset/2.)
local real needHeight=100.
local real speedHeight=needHeight/castTime
local real dmg=75.+25.*GetUnitAbilityLevel(Gengetsu___mizukage,Gengetsu_MIZUFUSEN)
local real radius=120.
local real timeDebuff=5.
local real randomFacing
local group g=CreateGroup()
loop
set randomFacing=GetRandomReal(0.,360.)
set bj_lastCreatedUnit=CreateUnit(Gengetsu___p,0x6830344F,x+(offset+randomOffset)*Cos((degree+randomFacing)*bj_DEGTORAD),y+(offset+randomOffset)*Sin((degree+randomFacing)*bj_DEGTORAD),degree)
call GroupAddUnit(g,bj_lastCreatedUnit)
call SetUnitFlyHeight(bj_lastCreatedUnit,GetUnitFlyHeight(bj_lastCreatedUnit)+needHeight,speedHeight)
set degree=degree+degreeStep
set numberCheck=numberCheck-1
exitwhen numberCheck==0
endloop
call SaveAgentHandle(HH,h,0,g)
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,timeDebuff)
call TimerStart(t,castTime,false,function cj_anonym__250)
set g=null
set t=null
endfunction
function cj_anonym__253 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer alpha1=LoadInteger(HH,h,2)
local integer alpha2=LoadInteger(HH,h,3)
local unit jokeyboy=LoadUnitHandle(HH,h,0)
if alpha1<255 and Gengetsu___JB_lifetime>0 then
call SetUnitVertexColor(jokeyboy,255,255,255,alpha1)
call SetUnitVertexColor(LoadUnitHandle(HH,h,1),255,255,255,alpha2)
call SaveInteger(HH,h,2,alpha1+5)
call SaveInteger(HH,h,3,alpha2-5)
else
call RemoveUnit(LoadUnitHandle(HH,h,1))
if Gengetsu___JB_lifetime>0 then
call UnitRemoveAbility(jokeyboy,0x41304D55)
call UnitRemoveAbility(jokeyboy,0x42303436)
call UnitAddAbility(jokeyboy,0x41304D55)
call PauseUnit(jokeyboy,false)
call SetUnitInvulnerable(jokeyboy,false)
if GetLocalPlayer()==GetOwningPlayer(jokeyboy)then
call ClearSelection()
call SelectUnit(jokeyboy,true)
endif
else
call DestroyLeaderboard(Gengetsu___lb)
call RemoveUnit(jokeyboy)
endif
set Gengetsu___JB_log=true
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set jokeyboy=null
set t=null
endfunction
function cj_anonym__252 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer h1
local unit jokeyboy=LoadUnitHandle(HH,h,0)
local real period=.025
local timer t1
if GetWidgetLife(jokeyboy)>.405 and Gengetsu___JB_lifetime>0 then
call SetUnitVertexColor(jokeyboy,255,255,255,0)
call ShowUnit(jokeyboy,true)
set t1=CreateTimer()
set h1=GetHandleId(t1)
call SaveAgentHandle(HH,h1,0,jokeyboy)
call SaveAgentHandle(HH,h1,1,LoadUnitHandle(HH,h,1))
call SaveInteger(HH,h1,2,15)
call SaveInteger(HH,h1,3,240)
call TimerStart(t1,period,true,function cj_anonym__253)
else
call DestroyLeaderboard(Gengetsu___lb)
call RemoveUnit(jokeyboy)
call RemoveUnit(LoadUnitHandle(HH,h,1))
endif
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set jokeyboy=null
set t=null
set t1=null
endfunction
function cj_anonym__251 takes nothing returns nothing
call Sound("NM Mizufusen Boom.mp3")
call DestroyTimer(GetExpiredTimer())
endfunction
function Gengetsu___JokeyBoyBoom takes unit jokeyboy returns nothing
local timer t=CreateTimer()
local real x=GetWidgetX(jokeyboy)
local real y=GetWidgetY(jokeyboy)
local real soundTime=1.
local integer lvlMizufusen=GetUnitAbilityLevel(Gengetsu___mizukage,Gengetsu_MIZUFUSEN)
local group gr_other=CreateGroup()
local unit tg
if lvlMizufusen>0 then
call Sound("NM Mizufusen Cast.mp3")
call TimerStart(CreateTimer(),soundTime,false,function cj_anonym__251)
endif
call ShowUnit(jokeyboy,false)
call CreateEffect(x,y,Gengetsu___JB_size,"Boom.mdx",1.)
call GroupEnumUnitsInRange(gr_other,x,y,600.,null)
loop
set tg=FirstOfGroup(gr_other)
exitwhen tg==null
if IsUnitEnemy(tg,Gengetsu___p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
if lvlMizufusen>0 then
call Gengetsu___MizufusionCast(GetWidgetX(tg),GetWidgetY(tg))
endif
call UnitDamageTarget(jokeyboy,tg,GetNinjutsuDamage(Gengetsu___JB_dmg,jokeyboy,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(gr_other,tg)
endloop
call DestroyGroup(gr_other)
set Gengetsu___JB_dmg=0.
call LeaderboardSetItemValue(Gengetsu___lb,0,R2I(Gengetsu___JB_dmg))
set Gengetsu___JB_distance=0.
set Gengetsu___JB_size=.8
set Gengetsu___JB_animspeed=1.
call SetUnitScale(jokeyboy,Gengetsu___JB_size,Gengetsu___JB_size,Gengetsu___JB_size)
call SetUnitTimeScale(jokeyboy,Gengetsu___JB_animspeed)
call SaveAgentHandle(HH,GetHandleId(t),0,jokeyboy)
call SaveAgentHandle(HH,GetHandleId(t),1,CreateUnit(Gengetsu___p,0x68303630,x,y,GetRandomReal(0.,360.)))
call TimerStart(t,3.5,false,function cj_anonym__252)
set gr_other=null
set t=null
set tg=null
endfunction
function cj_anonym__254 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit jokeyboy=LoadUnitHandle(HH,h,0)
local real time=LoadReal(HH,h,1)
if time>0.then
set Gengetsu___JB_size=Gengetsu___JB_size+.01
call SetUnitScale(jokeyboy,Gengetsu___JB_size,Gengetsu___JB_size,Gengetsu___JB_size)
call SaveReal(HH,h,1,time-.01)
else
call Gengetsu___JokeyBoyBoom(jokeyboy)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set jokeyboy=null
set t=null
endfunction
function Gengetsu___MakeExplosion takes unit jokeyboy returns nothing
local timer t=CreateTimer()
call Sound("NM Jokey Boy EX.mp3")
if GetUnitState(jokeyboy,UNIT_STATE_MANA)>=GetUnitState(jokeyboy,UNIT_STATE_MAX_MANA)*.33 then
call SetUnitState(jokeyboy,UNIT_STATE_MANA,GetUnitState(jokeyboy,UNIT_STATE_MANA)-GetUnitState(jokeyboy,UNIT_STATE_MAX_MANA)*.33)
else
set Gengetsu___JB_dmg=0.
call LeaderboardSetItemValue(Gengetsu___lb,0,R2I(Gengetsu___JB_dmg))
endif
call PauseUnit(jokeyboy,true)
call SetUnitInvulnerable(jokeyboy,true)
call SetUnitTimeScale(jokeyboy,1.)
call SetUnitAnimation(jokeyboy,"spell one")
call SaveAgentHandle(HH,GetHandleId(t),0,jokeyboy)
call SaveReal(HH,GetHandleId(t),1,.99)
call TimerStart(t,.01,true,function cj_anonym__254)
set t=null
endfunction
function Gengetsu___JokeyBoyCastExplosion takes unit jokeyboy,boolean log returns nothing
if log then
call Gengetsu___MakeExplosion(jokeyboy)
elseif not log then
if GetUnitState(jokeyboy,UNIT_STATE_MANA)>=GetUnitState(jokeyboy,UNIT_STATE_MAX_MANA)*.33 then
call Gengetsu___MakeExplosion(jokeyboy)
else
call DisplayTimedTextToPlayer(Gengetsu___p,0.,0.,5.,"|cFFFFCC00Недостаточно чакры.|r")
endif
endif
endfunction
function cj_anonym__255 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit jokeyboy=LoadUnitHandle(HH,h,0)
local real xold=LoadReal(HH,h,1)
local real yold=LoadReal(HH,h,2)
local real xnew=GetWidgetX(jokeyboy)
local real ynew=GetWidgetY(jokeyboy)
local real distance=SquareRoot((xold-xnew)*(xold-xnew)+(yold-ynew)*(yold-ynew))
if GetWidgetLife(Gengetsu___mizukage)>.405 and not IsUnitHidden(jokeyboy)and GetWidgetLife(jokeyboy)>.405 and Gengetsu___JB_dmg<400.and Gengetsu___JB_lifetime>0 then
if not IsUnitPaused(jokeyboy)then
set Gengetsu___JB_distance=Gengetsu___JB_distance+distance
if Gengetsu___JB_distance>=100.then
set Gengetsu___JB_dmg=Gengetsu___JB_dmg+Gengetsu___JB_dmg_add
if Gengetsu___JB_dmg>400.then
set Gengetsu___JB_dmg=400.
endif
if Gengetsu___JB_dmg<25.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,1)
elseif Gengetsu___JB_dmg>=25.and Gengetsu___JB_dmg<50.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,2)
elseif Gengetsu___JB_dmg>=50.and Gengetsu___JB_dmg<75.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,3)
elseif Gengetsu___JB_dmg>=75.and Gengetsu___JB_dmg<100.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,4)
elseif Gengetsu___JB_dmg>=100.and Gengetsu___JB_dmg<125.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,5)
elseif Gengetsu___JB_dmg>=125.and Gengetsu___JB_dmg<150.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,6)
elseif Gengetsu___JB_dmg>=150.and Gengetsu___JB_dmg<175.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,7)
elseif Gengetsu___JB_dmg>=175.and Gengetsu___JB_dmg<200.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,8)
elseif Gengetsu___JB_dmg>=200.and Gengetsu___JB_dmg<225.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,9)
elseif Gengetsu___JB_dmg>=225.and Gengetsu___JB_dmg<250.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,10)
elseif Gengetsu___JB_dmg>=250.and Gengetsu___JB_dmg<275.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,11)
elseif Gengetsu___JB_dmg>=275.and Gengetsu___JB_dmg<300.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,12)
elseif Gengetsu___JB_dmg>=300.and Gengetsu___JB_dmg<325.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,13)
elseif Gengetsu___JB_dmg>=325.and Gengetsu___JB_dmg<350.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,14)
elseif Gengetsu___JB_dmg>=350.and Gengetsu___JB_dmg<375.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,15)
elseif Gengetsu___JB_dmg>=375.and Gengetsu___JB_dmg<400.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,16)
elseif Gengetsu___JB_dmg==400.then
call SetUnitAbilityLevel(jokeyboy,0x41304D55,17)
endif
set Gengetsu___JB_size=Gengetsu___JB_size+.05
set Gengetsu___JB_animspeed=Gengetsu___JB_animspeed+.025
call SetUnitScale(jokeyboy,Gengetsu___JB_size,Gengetsu___JB_size,Gengetsu___JB_size)
call SetUnitTimeScale(jokeyboy,Gengetsu___JB_animspeed)
call LeaderboardSetItemValue(Gengetsu___lb,0,R2I(Gengetsu___JB_dmg))
set Gengetsu___JB_distance=0.
endif
endif
call SaveReal(HH,h,1,xnew)
call SaveReal(HH,h,2,ynew)
else
if Gengetsu___JB_lifetime>0 and GetWidgetLife(Gengetsu___mizukage)>.405 then
if Gengetsu___JB_dmg==400.or GetWidgetLife(jokeyboy)<.405 then
if GetWidgetLife(jokeyboy)<.405 then
call ReviveHero(jokeyboy,xnew,ynew,false)
call UnitRemoveAbility(jokeyboy,0x41304D55)
call UnitRemoveAbility(jokeyboy,0x42303436)
call UnitAddAbility(jokeyboy,0x41304D55)
endif
call Gengetsu___JokeyBoyCastExplosion(jokeyboy,true)
endif
else
call DestroyLeaderboard(Gengetsu___lb)
call RemoveUnit(jokeyboy)
set Gengetsu___JB_distance=0.
set Gengetsu___JB_size=.75
set Gengetsu___JB_animspeed=1.
endif
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set jokeyboy=null
set t=null
endfunction
function Gengetsu___StartDMGPlus takes unit jokeyboy returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,jokeyboy)
call SaveReal(HH,h,1,GetWidgetX(jokeyboy))
call SaveReal(HH,h,2,GetWidgetY(jokeyboy))
call TimerStart(t,.1,true,function cj_anonym__255)
set t=null
endfunction
function cj_anonym__256 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit jokeyboy=LoadUnitHandle(HH,h,0)
if GetWidgetLife(jokeyboy)>.405 and Gengetsu___JB_lifetime>0 then
set Gengetsu___JB_lifetime=Gengetsu___JB_lifetime-1
call LeaderboardSetItemValue(Gengetsu___lb,1,R2I(Gengetsu___JB_lifetime))
if Gengetsu___JB_log then
set Gengetsu___JB_log=false
set Gengetsu___JB_dmg=0.
call LeaderboardSetItemValue(Gengetsu___lb,0,R2I(Gengetsu___JB_dmg))
call Gengetsu___StartDMGPlus(jokeyboy)
endif
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set jokeyboy=null
set t=null
endfunction
function Gengetsu___JokeyBoyCast takes nothing returns nothing
local timer t=CreateTimer()
local real x=GetWidgetX(Gengetsu___mizukage)
local real y=GetWidgetY(Gengetsu___mizukage)
local real f=GetUnitFacing(Gengetsu___mizukage)
local unit jokeyboy=CreateUnit(Gengetsu___p,0x4F30314D,x,y,f)
call SetHeroXP(jokeyboy,GetHeroXP(Gengetsu___mizukage),false)
call SetWidgetLife(jokeyboy,GetWidgetLife(Gengetsu___mizukage))
call SetUnitState(jokeyboy,UNIT_STATE_MANA,GetUnitState(Gengetsu___mizukage,UNIT_STATE_MANA))
set Gengetsu___JB_dmg=0.
set Gengetsu___JB_lifetime=40
set Gengetsu___JB_dmg_add=25.
set Gengetsu___lb=CreateLeaderboard()
call LeaderboardSetLabel(Gengetsu___lb,"JOCKEY BOY")
call PlayerSetLeaderboard(Gengetsu___p,Gengetsu___lb)
call LeaderboardAddItem(Gengetsu___lb,"DAMAGE:",R2I(Gengetsu___JB_dmg),Player(0))
call LeaderboardSetItemValueColor(Gengetsu___lb,0,255,3,3,255)
call LeaderboardSetItemLabelColor(Gengetsu___lb,0,255,3,3,128)
call LeaderboardAddItem(Gengetsu___lb,"DURATION:",R2I(Gengetsu___JB_lifetime),Player(1))
call LeaderboardSetItemValueColor(Gengetsu___lb,1,165,253,0,255)
call LeaderboardSetItemLabelColor(Gengetsu___lb,1,165,253,0,128)
call LeaderboardSetSizeByItemCount(Gengetsu___lb,2)
call LeaderboardDisplay(Gengetsu___lb,true)
call Gengetsu___StartDMGPlus(jokeyboy)
call SaveAgentHandle(HH,GetHandleId(t),0,jokeyboy)
call TimerStart(t,1.,true,function cj_anonym__256)
set jokeyboy=null
set t=null
endfunction
function cj_anonym__257 takes nothing returns nothing
if GetUnitAbilityLevel(Gengetsu___mizukage,0x4230344A)==0 then
call UnitRemoveAbility(Gengetsu___mizukage,0x41304D58)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Gengetsu___SuikaCast takes nothing returns nothing
call Sound("Akatsuki Jutsu.mp3")
call UnitAddAbility(Gengetsu___mizukage,0x41304D58)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__257)
endfunction
function Gengetsu___OhamaguriDeathConditions takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit())==0x68303835
endfunction
function Gengetsu___OhamaguriDeathActions takes nothing returns nothing
local unit ohamaguri=GetTriggerUnit()
call KuchiyoseCreateDustEffect("end",ohamaguri,2.,3.)
call RemoveUnit(ohamaguri)
call RemoveUnit(Gengetsu___mizukage_illusion)
call RemoveUnit(Gengetsu___ohamaguri_illusion)
set Gengetsu___mizukage_illusion=null
set Gengetsu___ohamaguri_illusion=null
set ohamaguri=null
endfunction
function cj_anonym__258 takes nothing returns nothing
call Sound("NM Mizufusen Boom.mp3")
call DestroyTimer(GetExpiredTimer())
endfunction
function Gengetsu___OhamaguriIllusionGetDamage takes nothing returns nothing
local unit illusion=GetTriggerUnit()
local real x=GetWidgetX(illusion)
local real y=GetWidgetY(illusion)
local integer lvlMizufusen=GetUnitAbilityLevel(Gengetsu___mizukage,Gengetsu_MIZUFUSEN)
local integer numberPoint=6
local real soundTime=1.
local real radius=400.
local real offset=radius/2.
local real degreeStep=360./numberPoint
local real degree=0.
if lvlMizufusen>0 then
call Sound("NM Mizufusen Cast.mp3")
call TimerStart(CreateTimer(),soundTime,false,function cj_anonym__258)
loop
call Gengetsu___MizufusionCast(x+offset*Cos(degree*bj_DEGTORAD),y+offset*Sin(degree*bj_DEGTORAD))
set degree=degree+degreeStep
set numberPoint=numberPoint-1
exitwhen numberPoint==0
endloop
endif
if illusion==Gengetsu___mizukage_illusion then
set Gengetsu___mizukage_illusion=null
elseif illusion==Gengetsu___ohamaguri_illusion then
set Gengetsu___ohamaguri_illusion=null
endif
call RemoveUnit(illusion)
set illusion=null
endfunction
function cj_anonym__264 takes nothing returns nothing
set Gengetsu___cooldown_two_log=false
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__263 takes nothing returns nothing
set Gengetsu___cooldown_one_log=false
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__262 takes nothing returns nothing
set Gengetsu___cooldown_illusion=false
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__261 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit ohamaguri=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(Gengetsu___mizukage)
local real y=GetWidgetY(Gengetsu___mizukage)
local real f=GetUnitFacing(Gengetsu___mizukage)
local real randomOffset
local real randomDegree
if GetWidgetLife(ohamaguri)>.405 and GetWidgetLife(Gengetsu___mizukage)>.405 then
if not Gengetsu___cooldown_illusion then
if Gengetsu___mizukage_illusion==null then
call Sound("NM Ohamaguri Illusion Cast.mp3")
call UnitRemoveAbility(ohamaguri,0x42303352)
set randomOffset=GetRandomReal(50.,250.)
set randomDegree=GetRandomReal(1.,360.)
set Gengetsu___mizukage_illusion=CreateUnit(Gengetsu___p,0x4F30314F,x+randomOffset*Cos(randomDegree*bj_DEGTORAD),y+randomOffset*Sin(randomDegree*bj_DEGTORAD),f)
call SetHeroXP(Gengetsu___mizukage_illusion,GetHeroXP(Gengetsu___mizukage),false)
call SetWidgetLife(Gengetsu___mizukage_illusion,GetWidgetLife(Gengetsu___mizukage))
call SetUnitState(Gengetsu___mizukage_illusion,UNIT_STATE_MANA,GetUnitState(Gengetsu___mizukage,UNIT_STATE_MANA))
call TriggerRegisterUnitEvent(Gengetsu___damageEvent,Gengetsu___mizukage_illusion,EVENT_UNIT_DAMAGED)
endif
if Gengetsu___ohamaguri_illusion==null then
call Sound("NM Ohamaguri Illusion Cast.mp3")
call UnitRemoveAbility(ohamaguri,0x42303352)
set x=GetWidgetX(ohamaguri)
set y=GetWidgetY(ohamaguri)
set f=GetUnitFacing(ohamaguri)
set randomOffset=GetRandomReal(50.,250.)
set randomDegree=GetRandomReal(1.,360.)
set Gengetsu___ohamaguri_illusion=CreateUnit(Gengetsu___p,0x68303450,x+randomOffset*Cos(randomDegree*bj_DEGTORAD),y+randomOffset*Sin(randomDegree*bj_DEGTORAD),f)
call TriggerRegisterUnitEvent(Gengetsu___damageEvent,Gengetsu___ohamaguri_illusion,EVENT_UNIT_DAMAGED)
endif
set Gengetsu___cooldown_illusion=true
call TimerStart(CreateTimer(),7.,false,function cj_anonym__262)
endif
set x=GetWidgetX(Gengetsu___mizukage)
set y=GetWidgetY(Gengetsu___mizukage)
set f=GetUnitFacing(Gengetsu___mizukage)
if GetUnitAbilityLevel(Gengetsu___mizukage,0x42303352)==0 and not Gengetsu___cooldown_one_log then
set bj_lastCreatedUnit=CreateUnit(Gengetsu___p,0x6E303042,x,y,f)
call UnitAddAbility(bj_lastCreatedUnit,0x41313152)
call IssueTargetOrder(bj_lastCreatedUnit,"invisibility",Gengetsu___mizukage)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
set Gengetsu___cooldown_one_log=true
call TimerStart(CreateTimer(),5.,false,function cj_anonym__263)
endif
set x=GetWidgetX(ohamaguri)
set y=GetWidgetY(ohamaguri)
set f=GetUnitFacing(ohamaguri)
if GetUnitAbilityLevel(ohamaguri,0x42303352)==0 and not Gengetsu___cooldown_two_log then
set bj_lastCreatedUnit=CreateUnit(Gengetsu___p,0x6E303042,x,y,f)
call UnitAddAbility(bj_lastCreatedUnit,0x41313152)
call IssueTargetOrder(bj_lastCreatedUnit,"invisibility",ohamaguri)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
set Gengetsu___cooldown_two_log=true
call TimerStart(CreateTimer(),5.,false,function cj_anonym__264)
endif
else
call UnitRemoveAbility(Gengetsu___mizukage,0x42303352)
call DisableTrigger(Gengetsu___damageEvent)
if GetWidgetLife(Gengetsu___mizukage)<.405 and GetWidgetLife(ohamaguri)>.405 then
call KillUnit(ohamaguri)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set ohamaguri=null
set t=null
endfunction
function cj_anonym__260 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local unit ohamaguri=CreateUnit(Gengetsu___p,0x68303835,x,y,GetRandomReal(0.,360.))
local timer t1=CreateTimer()
call KuchiyoseCreateDustEffect("cast",ohamaguri,2.,3.)
call UnitApplyTimedLife(ohamaguri,0x42544C46,25.)
call PauseUnit(Gengetsu___mizukage,false)
call SetUnitAnimation(Gengetsu___mizukage,"Stand")
call EnableTrigger(Gengetsu___damageEvent)
call SaveAgentHandle(HH,GetHandleId(t1),0,ohamaguri)
call TimerStart(t1,.05,true,function cj_anonym__261)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set ohamaguri=null
set t=null
set t1=null
endfunction
function cj_anonym__259 takes nothing returns nothing
local real startOffset=110.
local real f=GetUnitFacing(Gengetsu___mizukage)
local real x=GetWidgetX(Gengetsu___mizukage)+startOffset*Cos(f*bj_DEGTORAD)
local real y=GetWidgetY(Gengetsu___mizukage)+startOffset*Sin(f*bj_DEGTORAD)
local timer t=CreateTimer()
call KuchiyoseEffect(x,y,3.5)
call SaveReal(HH,GetHandleId(t),0,x)
call SaveReal(HH,GetHandleId(t),1,y)
call TimerStart(t,.67,false,function cj_anonym__260)
call DestroyTimer(GetExpiredTimer())
set t=null
endfunction
function Gengetsu___OhamaguriCast takes nothing returns nothing
call Sound("NM Ohamaguri.mp3")
call PauseUnit(Gengetsu___mizukage,true)
call SetUnitAnimation(Gengetsu___mizukage,"Spell slam")
call TimerStart(CreateTimer(),.8,false,function cj_anonym__259)
endfunction
function cj_anonym__265 takes nothing returns nothing
call Sound("NM Mizufusen Boom.mp3")
call DestroyTimer(GetExpiredTimer())
endfunction
function Gengetsu___MizudeppoDamage takes real x,real y,real radius,real dmg,integer lvlMizufusen,group grCheck returns nothing
local group g=CreateGroup()
local unit tg
local real x1
local real y1
local real soundTime=1.
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Gengetsu___p)and not IsUnitInGroup(tg,grCheck)then
call GroupAddUnit(grCheck,tg)
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x1,y1))
if lvlMizufusen>0 then
call Sound("NM Mizufusen Cast.mp3")
call TimerStart(CreateTimer(),soundTime,false,function cj_anonym__265)
call Gengetsu___MizufusionCast(x1,y1)
endif
call UnitDamageTarget(Gengetsu___mizukage,tg,GetNinjutsuDamage(dmg,Gengetsu___mizukage,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__266 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit dummy=LoadUnitHandle(HH,h,0)
local integer lvlMizufusen=LoadInteger(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real distance=LoadReal(HH,h,4)
local real offset=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local group grCheck=LoadGroupHandle(HH,h,7)
local real x=GetWidgetX(dummy)
local real y=GetWidgetY(dummy)
if distance>0.then
call Gengetsu___MizudeppoDamage(x,y,radius,dmg,lvlMizufusen,grCheck)
call SetUnitPosition(dummy,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,4,distance-offset)
else
call GroupClear(grCheck)
call DestroyGroup(grCheck)
call RemoveUnit(dummy)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set grCheck=null
set dummy=null
set t=null
endfunction
function Gengetsu___MizudeppoStrike takes real a,real dmg returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvlMizufusen=GetUnitAbilityLevel(Gengetsu___mizukage,Gengetsu_MIZUFUSEN)
local real x=GetWidgetX(Gengetsu___mizukage)
local real y=GetWidgetY(Gengetsu___mizukage)
local real startOffset=50.
local real distance=1000.
local real speed=1500.
local real offset=speed*MainPeriod
local real radius=50.
local unit dummy=CreateUnit(Gengetsu___p,0x6830344E,x+startOffset*Cos(a*bj_DEGTORAD),y+startOffset*Sin(a*bj_DEGTORAD),a)
call Sound("NM Mizudeppo Shot.mp3")
call SetUnitFlyHeight(dummy,125.,0.)
call SaveAgentHandle(HH,h,0,dummy)
call SaveInteger(HH,h,1,lvlMizufusen)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,distance)
call SaveReal(HH,h,5,offset)
call SaveReal(HH,h,6,a)
call SaveAgentHandle(HH,h,7,CreateGroup())
call TimerStart(t,MainPeriod,true,function cj_anonym__266)
set dummy=null
set t=null
endfunction
function cj_anonym__267 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real dmgStep=LoadReal(HH,h,3)
local real mana=LoadReal(HH,h,4)
local real x=GetWidgetX(Gengetsu___mizukage)
local real y=GetWidgetY(Gengetsu___mizukage)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
call SetUnitState(Gengetsu___mizukage,UNIT_STATE_MANA,GetUnitState(Gengetsu___mizukage,UNIT_STATE_MANA)-mana)
if GetCasterAndTargetLocation(Gengetsu___mizukage,tu)and GetUnitState(Gengetsu___mizukage,UNIT_STATE_MANA)>0.and GetUnitCurrentOrder(Gengetsu___mizukage)==OrderId("chainlightning")then
call SetUnitFacing(Gengetsu___mizukage,a)
call SaveReal(HH,h,2,dmg+dmgStep)
else
if GetWidgetLife(Gengetsu___mizukage)>.405 and GetCasterAndTargetLocation(Gengetsu___mizukage,tu)then
call Gengetsu___MizudeppoStrike(a,dmg)
endif
call IssueImmediateOrder(Gengetsu___mizukage,"stop")
call RemoveUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Gengetsu___MizudeppoCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit bar=CreateUnit(Gengetsu___p,0x6830344D,GetWidgetX(Gengetsu___mizukage)+25.,GetWidgetY(Gengetsu___mizukage)+25.,270.)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real castTime=3.
local real period=.1
local real dmg=125.*period
local real mana=30.*period
local real limitDistance=1000.
call Sound("NM Mizudeppo Cast.mp3")
if GetLocalPlayer()!=Gengetsu___p then
call SetUnitVertexColor(bar,255,255,255,0)
endif
call SetUnitFlyHeight(bar,300.,0.)
call SetUnitTimeScale(bar,1./castTime)
call SaveAgentHandle(HH,h,0,bar)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,mana)
call TimerStart(t,period,true,function cj_anonym__267)
set bar=null
set t=null
endfunction
function Gengetsu___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Gengetsu_MIZUDEPPO or i==Gengetsu_OHAMAGURI or i==Gengetsu_SUIKA or i==Gengetsu_JOKEY_BOY or i==0x4130554C
endfunction
function Gengetsu___SpellsActions takes nothing returns nothing
local integer i
if Gengetsu___mizukage==null then
set Gengetsu___mizukage=GetTriggerUnit()
set Gengetsu___p=GetOwningPlayer(Gengetsu___mizukage)
endif
set i=GetSpellAbilityId()
if i==Gengetsu_MIZUDEPPO then
call Gengetsu___MizudeppoCast(GetSpellTargetUnit())
elseif i==Gengetsu_OHAMAGURI then
call Gengetsu___OhamaguriCast()
elseif i==Gengetsu_SUIKA then
call Gengetsu___SuikaCast()
elseif i==Gengetsu_JOKEY_BOY then
call Gengetsu___JokeyBoyCast()
elseif i==0x4130554C then
call Gengetsu___JokeyBoyCastExplosion(GetTriggerUnit(),false)
endif
endfunction
function Gengetsu_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger ohamagurideath=CreateTrigger()
set Gengetsu___damageEvent=CreateTrigger()
call DisableTrigger(Gengetsu___damageEvent)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(ohamagurideath,Player(i),EVENT_PLAYER_UNIT_DEATH,null)
call SetPlayerAbilityAvailable(Player(i),0x41304D58,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Gengetsu___SpellsConditions))
call TriggerAddAction(spells,function Gengetsu___SpellsActions)
call TriggerAddCondition(ohamagurideath,Condition(function Gengetsu___OhamaguriDeathConditions))
call TriggerAddAction(ohamagurideath,function Gengetsu___OhamaguriDeathActions)
call TriggerAddAction(Gengetsu___damageEvent,function Gengetsu___OhamaguriIllusionGetDamage)
set ohamagurideath=null
set spells=null
endfunction
function Haku___GetDamageConditions takes nothing returns boolean
return Haku___domu!=null and GetEventDamage()>0.and GetWidgetLife(GetTriggerUnit())>.405 and IsUnitInGroup(GetTriggerUnit(),Haku___grCheck)
endfunction
function Haku___GetDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local real dmg=GetEventDamage()
local real life=GetWidgetLife(Haku___domu)
if dmg<=life then
call SetWidgetLife(u,GetWidgetLife(u)+dmg)
call SetWidgetLife(Haku___domu,GetWidgetLife(Haku___domu)-dmg)
else
call SetWidgetLife(u,GetWidgetLife(u)+life)
call SetWidgetLife(Haku___domu,GetWidgetLife(Haku___domu)-life)
endif
set u=null
endfunction
function Haku___HyoganDomuDefense takes real radius returns nothing
local real x=GetWidgetX(Haku___domu)
local real y=GetWidgetY(Haku___domu)
local real x1
local real y1
local real needDistance=radius/2.
local group g1=CreateGroup()
local group g2=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if tg!=Haku___domu and IsUnitAlly(tg,Haku___p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
if not IsUnitInGroup(tg,Haku___grReg)then
call GroupAddUnit(Haku___grReg,tg)
call TriggerRegisterUnitEvent(Haku___trgDamage,tg,EVENT_UNIT_DAMAGED)
endif
if not IsUnitInGroup(tg,Haku___grCheck)then
call GroupAddUnit(Haku___grCheck,tg)
call GroupAddUnit(g2,tg)
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
loop
set tg=FirstOfGroup(Haku___grCheck)
exitwhen tg==null
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))>needDistance then
call GroupRemoveUnit(g2,tg)
endif
call GroupRemoveUnit(Haku___grCheck,tg)
endloop
call GroupAddGroup(g2,Haku___grCheck)
call DestroyGroup(g1)
call DestroyGroup(g2)
set tg=null
set g1=null
set g2=null
endfunction
function Haku___HyoganDomuRemove takes integer max returns nothing
local integer hd=GetHandleId(Haku___domu)
local integer i=0
loop
call RemoveDestructable(LoadDestructableHandle(HH,hd,i))
set i=i+1
exitwhen i==max
endloop
endfunction
function Haku___HyoganDomuCreateBlock takes real radius returns integer
local integer hd=GetHandleId(Haku___domu)
local integer i=0
local integer max=15
local real x=GetWidgetX(Haku___domu)
local real y=GetWidgetY(Haku___domu)
local real startOffset=radius/1.5
local real degree=0.
local real degreeStep=360./max
loop
call SaveDestructableHandle(HH,hd,i,CreateDestructable(0x42303245,x+startOffset*Cos(degree*bj_DEGTORAD),y+startOffset*Sin(degree*bj_DEGTORAD),degree,.8,0))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
return max
endfunction
function cj_anonym__268 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
if GetWidgetLife(Haku___domu)>.405 and time>0.then
call Haku___HyoganDomuDefense(radius)
call SaveReal(HH,h,1,time-period)
else
call Haku___HyoganDomuRemove(LoadInteger(HH,h,3))
call GroupClear(Haku___grCheck)
call KillUnit(Haku___domu)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Haku___HyoganDomuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(Haku___c,Haku_DOMU)
local real radius=400.
local real x=GetWidgetX(Haku___c)
local real y=GetWidgetY(Haku___c)
local real period=.2
local real time=6.
set Haku___domu=CreateUnit(Haku___p,0x6830334A,x,y,0.)
call Sound("Akatsuki Jutsu.mp3")
call SetPlayerTechResearched(Haku___p,0x52303033,lvl)
call Haku___HyoganDomuDefense(radius)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,radius)
call SaveInteger(HH,h,3,Haku___HyoganDomuCreateBlock(radius))
call TimerStart(t,period,true,function cj_anonym__268)
set t=null
endfunction
function Haku___ShunshinSenbobsDamageOrMoving takes unit u,real offset returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real a=GetUnitFacing(u)
local real radius=10.
local real dmg=40.
local real stunTime=.2
local boolean log=false
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitNeedClear(tg,Haku___p)then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl",tg,"chest"))
call UnitDamageTarget(Haku___c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tg)>.405 then
call GetStun(tg,stunTime)
endif
set log=true
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if not log then
call SetUnitPosition(u,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
call RemoveUnit(u)
endif
set tg=null
set g=null
endfunction
function cj_anonym__269 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real offset=LoadReal(HH,h,10)
local real distance=LoadReal(HH,h,11)
local integer i=0
local integer max=10
local unit u
if distance>0.then
loop
set u=LoadUnitHandle(HH,h,i)
if u!=null then
call Haku___ShunshinSenbobsDamageOrMoving(u,offset)
endif
set i=i+1
exitwhen i==max
endloop
call SaveReal(HH,h,11,distance-offset)
else
loop
call RemoveUnit(LoadUnitHandle(HH,h,i))
set i=i+1
exitwhen i==max
endloop
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function Haku___ShunshinCreateSenbobs takes real x,real y,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=10
local real distance=600.
local real f=a+90.
local real x1
local real y1
local real offsetStart=27.5
local real offsetStepStart=5.
local real speed=1200.
local real period=.025
local real offset=speed*period
loop
set x1=x+offsetStart*Cos(f*bj_DEGTORAD)
set y1=y+offsetStart*Sin(f*bj_DEGTORAD)
call SaveAgentHandle(HH,h,i,CreateUnit(Haku___p,0x6E303048,x1,y1,a))
set offsetStart=offsetStart-offsetStepStart
set i=i+1
exitwhen i==max
endloop
call SaveReal(HH,h,10,offset)
call SaveReal(HH,h,11,distance)
call TimerStart(t,period,true,function cj_anonym__269)
set t=null
endfunction
function Haku___ShunshinMovingCreateUnits takes real x,real y,real a,integer alphaUlt,real timeLifeUlt returns unit
local unit u=CreateUnit(Haku___p,0x6E30304A,x,y,a)
call SetUnitVertexColor(u,255,255,255,alphaUlt)
call SetUnitAnimation(u,"Stand Ready")
call UnitApplyTimedLife(u,0x42544C46,timeLifeUlt)
set cj_v666_unit=u
set u=null
return cj_v666_unit
endfunction
function cj_anonym__270 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local integer alphaUlt=LoadInteger(HH,h,1)
local real distance=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real a=LoadReal(HH,h,4)
local real timeLifeUlt=LoadReal(HH,h,5)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=x+offset*Cos(a*bj_DEGTORAD)
local real y1=y+offset*Sin(a*bj_DEGTORAD)
if distance>0.then
call SaveAgentHandle(HH,h,0,Haku___ShunshinMovingCreateUnits(x1,y1,a,alphaUlt,timeLifeUlt))
call SaveReal(HH,h,2,distance-offset)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function Haku___ShunshinStartMoving takes unit mirror returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alphaUlt=60
local real x=GetWidgetX(Haku___c)
local real y=GetWidgetY(Haku___c)
local real x1=GetWidgetX(mirror)
local real y1=GetWidgetY(mirror)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real angleSenbon=bj_RADTODEG*Atan2(Haku___ultY-y,Haku___ultX-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real speed=4000.
local real period=.025
local real offset=(speed/2.)*period
local real timeLifeUlt=period*4.
call Sound3D(mirror,"Haku Hijutsu Makyo Hyosho Blink.mp3")
call SetUnitX(Haku___c,x1)
call SetUnitY(Haku___c,y1)
call SetUnitFacing(Haku___c,a+180.)
call IssueImmediateOrder(Haku___c,"stop")
call Haku___ShunshinCreateSenbobs(x,y,angleSenbon)
call SaveAgentHandle(HH,h,0,Haku___ShunshinMovingCreateUnits(x,y,a,alphaUlt,timeLifeUlt))
call SaveInteger(HH,h,1,alphaUlt)
call SaveReal(HH,h,2,distance)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,a)
call SaveReal(HH,h,5,timeLifeUlt)
call TimerStart(t,period,true,function cj_anonym__270)
set t=null
endfunction
function Haku___IsHakuIsInSameMirror takes real x1,real y1,real radius returns boolean
local real x=GetWidgetX(Haku___c)
local real y=GetWidgetY(Haku___c)
local boolean log=false
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or log
if tg==Haku___c and GetWidgetLife(tg)>.405 and SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<radius/2.then
set log=true
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
return log
endfunction
function Haku___IsHakuIsInNeedArea takes nothing returns boolean
local real x=GetWidgetX(Haku___c)
local real y=GetWidgetY(Haku___c)
local real x1=Haku___ultX
local real y1=Haku___ultY
local real radius=600.
local boolean log=false
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=radius then
set log=true
endif
return log
endfunction
function Haku___MakyoHyoshoStart takes unit mirror,real x1,real y1 returns nothing
local real x
local real y
local real radius=125.
local boolean log=false
local unit tg
if Haku___IsHakuIsInNeedArea()then
if mirror==null then
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or log
if GetUnitTypeId(tg)==0x6E303049 and GetWidgetLife(tg)>.405 then
set x=GetWidgetX(tg)
set y=GetWidgetY(tg)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<radius then
call IssueImmediateOrder(Haku___c,"stop")
if not Haku___IsHakuIsInSameMirror(x,y,radius)then
call Haku___ShunshinStartMoving(tg)
else
call DisplayTimedTextToPlayer(Haku___p,0.,0.,3.,"|cFFFFCC00Выберите другое зеркало!|r")
endif
set log=true
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
else
call IssueImmediateOrder(Haku___c,"stop")
if not Haku___IsHakuIsInSameMirror(x1,y1,radius)then
call Haku___ShunshinStartMoving(mirror)
else
call DisplayTimedTextToPlayer(Haku___p,0.,0.,3.,"|cFFFFCC00Выберите другое зеркало!|r")
endif
endif
endif
set tg=null
endfunction
function Haku___SelectionConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),Haku_ULT)>0 and GetUnitTypeId(GetOrderTargetUnit())==0x6E303049 and GetUnitCurrentOrder(GetTriggerUnit())==OrderId("smart")and Haku___ultOn
endfunction
function Haku___SelectionActions takes nothing returns nothing
local unit mirror=GetOrderTargetUnit()
call Haku___MakyoHyoshoStart(mirror,GetWidgetX(mirror),GetWidgetY(mirror))
set mirror=null
endfunction
function Haku___OrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),Haku_ULT)>0 and Haku___ultOn
endfunction
function Haku___OrderActions takes nothing returns nothing
call Haku___MakyoHyoshoStart(null,GetOrderPointX(),GetOrderPointY())
endfunction
function cj_anonym__271 takes nothing returns nothing
set Haku___ultOn=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Haku___UltCast takes real x1,real y1 returns nothing
local integer number=12
local real radius=600.
local real offset=radius/2.+75.
local real degree=0.
local real degreeStep=360./number
local real time=20.
local real x=GetWidgetX(Haku___c)
local real y=GetWidgetY(Haku___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real a2
local real x2
local real y2
set Haku___ultX=x1
set Haku___ultY=y1
set Haku___ultOn=true
call Sound("Haku Hijutsu Makyo Hyosho Cast.mp3")
loop
set x2=x1+offset*Cos((a+degree)*bj_DEGTORAD)
set y2=y1+offset*Sin((a+degree)*bj_DEGTORAD)
set a2=bj_RADTODEG*Atan2(y2-y1,x2-x1)
set bj_lastCreatedUnit=CreateUnit(Haku___p,0x6E303049,x2,y2,a2)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,time)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",x2,y2))
set degree=degree+degreeStep
exitwhen degree==360.
endloop
call TimerStart(CreateTimer(),time,false,function cj_anonym__271)
endfunction
function cj_anonym__272 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=5
local unit u=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real radius=400.
local real dmg=120.
local real stunTime=1.5
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Haku___p)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl",tg,"chest"))
call UnitDamageTarget(Haku___c,tg,GetNinjutsuDamage(dmg,Haku___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call GetStun(tg,stunTime)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
loop
call UnitApplyTimedLife(LoadUnitHandle(HH,h,i),0x42544C46,stunTime)
set i=i+1
exitwhen i==max
endloop
set u=null
set tg=null
set g=null
set t=null
endfunction
function Haku___HissatsuHyosoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=5
local real time=.334
local real offset=200.
local real x=GetWidgetX(Haku___c)
local real y=GetWidgetY(Haku___c)
local real x1
local real y1
local real degree=0.
local real degreeStep=360./max
local real a=GetUnitFacing(Haku___c)
local real f=GetRandomReal(0.,360.)
loop
set x1=x+offset*Cos((a+degree)*bj_DEGTORAD)
set y1=y+offset*Sin((a+degree)*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",x1,y1))
call SaveAgentHandle(HH,h,i,CreateUnit(Haku___p,0x6E303138,x1,y1,f))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
call TimerStart(t,time,false,function cj_anonym__272)
set t=null
endfunction
function Haku___ShunshinCast takes real x1,real y1 returns nothing
call SetUnitPosition(Haku___c,x1,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
endfunction
function Haku___SensatsuDamage takes real x,real y returns nothing
local real dmg=200.
local real radius=250.
local group g=CreateGroup()
local unit tg
call Sound("Haku Hijutsu Sensatsu Suisho Damage.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Haku___p)then
call UnitDamageTarget(Haku___c,tg,GetNinjutsuDamage(dmg,Haku___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__273 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real offset=LoadReal(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real x1
local real y1
local real a
local integer i=5
local integer max=25
if time>0.then
loop
set bj_lastLoadedUnit=LoadUnitHandle(HH,h,i)
set x1=GetWidgetX(bj_lastLoadedUnit)
set y1=GetWidgetY(bj_lastLoadedUnit)
set a=bj_RADTODEG*Atan2(y-y1,x-x1)
call SetUnitPosition(bj_lastLoadedUnit,x1+offset*Cos(a*.017),y1+offset*Sin(a*.017))
set i=i+1
exitwhen i==max
endloop
call SaveReal(HH,h,4,time-period)
else
call Haku___SensatsuDamage(x,y)
loop
call RemoveUnit(LoadUnitHandle(HH,h,i))
set i=i+1
exitwhen i==max
endloop
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Haku___SensatsuCast takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=5
local integer max=25
local real x1
local real y1
local real a
local real degree=18.
local real period=.022
local real range=250.
local real time=.66
local real speed=range/time
local real offset=speed*period
local unit d
call Sound("Haku Hijutsu Sensatsu Suisho Cast.mp3")
call DestroyEffect(AddSpecialEffect("WaterMagic.mdx",x,y))
call SaveReal(HH,h,0,offset)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
loop
set x1=x+range*Cos(degree*.017)
set y1=y+range*Sin(degree*.017)
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
set d=CreateUnit(Haku___p,0x6E303048,x1,y1,a)
call SaveAgentHandle(HH,h,i,d)
set degree=degree+18.
set i=i+1
exitwhen i==max
endloop
call TimerStart(t,period,true,function cj_anonym__273)
set d=null
set t=null
endfunction
function Haku___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Haku_SENSATSU or i==Haku_SHUNSHIN or i==Haku_HISSATSU or i==Haku_ULT or i==Haku_DOMU
endfunction
function Haku___SpellsActions takes nothing returns nothing
local integer i
if Haku___c==null then
set Haku___c=GetTriggerUnit()
set Haku___p=GetOwningPlayer(Haku___c)
endif
set i=GetSpellAbilityId()
if i==Haku_SENSATSU then
call Haku___SensatsuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Haku_SHUNSHIN then
call Haku___ShunshinCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Haku_HISSATSU then
call Haku___HissatsuHyosoCast()
elseif i==Haku_ULT then
call Haku___UltCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Haku_DOMU then
call Haku___HyoganDomuCast()
endif
endfunction
function Haku_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger order=CreateTrigger()
local trigger selection=CreateTrigger()
set Haku___trgDamage=CreateTrigger()
set Haku___grReg=CreateGroup()
set Haku___grCheck=CreateGroup()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(order,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
call TriggerRegisterPlayerUnitEvent(selection,Player(i),EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Haku___SpellsConditions))
call TriggerAddAction(spells,function Haku___SpellsActions)
call TriggerAddCondition(order,Condition(function Haku___OrderConditions))
call TriggerAddAction(order,function Haku___OrderActions)
call TriggerAddCondition(selection,Condition(function Haku___SelectionConditions))
call TriggerAddAction(selection,function Haku___SelectionActions)
call TriggerAddCondition(Haku___trgDamage,Condition(function Haku___GetDamageConditions))
call TriggerAddAction(Haku___trgDamage,function Haku___GetDamageActions)
set selection=null
set order=null
set spells=null
endfunction
function cj_anonym__274 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local group g1=LoadGroupHandle(HH,h,2)
local group g2=LoadGroupHandle(HH,h,3)
local real dmg=LoadReal(HH,h,4)
local real range=LoadReal(HH,h,5)
local real dmgGroup=dmg/2.
local unit tg
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local rect r
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))>30.and GetWidgetLife(tu)>.405 then
call SetUnitPosition(d,x+30.*Cos(a*bj_DEGTORAD),y+30.*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a)
set r=Rect(x-150.,y-150.,x+150.,y+150.)
call EnumDestructablesInRect(r,null,function Kill_Destructables)
call GroupEnumUnitsInRect(g1,r,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Han___p)and not IsUnitInGroup(tg,g2)and tg!=tu then
call GroupAddUnit(g2,tg)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call UnitDamageTarget(Han___c,tg,GetTaijutsuDamage(dmgGroup,Han___c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
if GetWidgetLife(tg)>.405 then
call GetStun(tg,2.)
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
call RemoveRect(r)
else
if GetWidgetLife(tu)>.405 then
call Sound("Han Tsunoori Damage.mp3")
call KnockBackUnitEf(tu,1200.,.75,a,.025,3,false)
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x1,y1,1.75,"NewDirtEXNofire.mdx",0.)
else
call CreateDummyEffect(x1,y1,1.75,"IceSparks.mdx",0.)
endif
call UnitDamageTarget(Han___c,tu,GetTaijutsuDamage(dmg,Han___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call KuchiyoseCreateDustEffect("end",d,2.,3.)
call RemoveUnit(d)
call SetUnitPosition(Han___c,x,y)
call PauseUnit(Han___c,false)
call SetUnitInvulnerable(Han___c,false)
call ShowUnit(Han___c,true)
if GetLocalPlayer()==Han___p then
call ClearSelection()
call SelectUnit(Han___c,true)
endif
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set tg=null
set g1=null
set g2=null
set r=null
set tu=null
set t=null
endfunction
function Han___HanTsunooriCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=400.
local real range=1200.
local real x=GetWidgetX(Han___c)
local real y=GetWidgetY(Han___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local unit d=CreateUnit(Han___p,0x68303141,x,y,a)
call Sound("Han Tsunoori Cast.mp3")
call KuchiyoseCreateDustEffect("cast",d,2.,3.)
call PauseUnit(Han___c,true)
call ShowUnit(Han___c,false)
call SetUnitInvulnerable(Han___c,true)
call PauseUnit(d,true)
call SetUnitInvulnerable(d,true)
call SetUnitAnimation(d,"Walk")
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveAgentHandle(HH,h,3,CreateGroup())
call SaveReal(HH,h,4,dmg)
call SaveReal(HH,h,5,range)
call TimerStart(t,.025,true,function cj_anonym__274)
set d=null
set t=null
endfunction
function Han___HanYoroiChangeText takes nothing returns nothing
local integer idp=GetPlayerId(Han___p)
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFFFF5000"+I2S(Han___currentDamage)+"|r]",countDownTextSize/4.44)
endfunction
function cj_anonym__275 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real turnspeedStart=LoadReal(HH,h,1)
call SetUnitTurnSpeed(tu,turnspeedStart)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Han___HanFuttonTurnSpeedReduction takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real turnspeedStart=GetUnitTurnSpeed(tu)
local real turnspeedReduction=.3
local real turnspeedCur=turnspeedStart*turnspeedReduction
local real turnspeedTime=6.
call SetUnitTurnSpeed(tu,turnspeedCur)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,turnspeedStart)
call TimerStart(t,turnspeedTime,false,function cj_anonym__275)
set t=null
endfunction
function cj_anonym__276 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local integer amount=LoadInteger(HH,h,2)
local real x=GetWidgetX(Han___c)
local real y=GetWidgetY(Han___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a
if amount<10 then
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
call SetUnitPosition(tu,x1+30.*Cos(a*bj_DEGTORAD),y1+30.*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a)
call SetUnitFacing(Han___c,a)
call SetUnitFacing(tu,a)
set a=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call SetUnitScale(d,a/2000.,a/2000.,a/2000.)
if SpecialEffectsShow then
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x1,y1))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x1,y1))
endif
endif
call SaveInteger(HH,h,2,amount+1)
else
if GetWidgetLife(tu)>.405 then
call Han___HanFuttonTurnSpeedReduction(tu)
endif
call PauseUnit(Han___c,false)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Han___HanGivesSomeReek takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Han___c)
local real y=GetWidgetY(Han___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real time=13.
call PauseUnit(Han___c,true)
call SetUnitAnimation(Han___c,"Spell Throw")
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Polymorph\\PolyMorphDoneGround.mdl",Han___c,"chest"))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",x1,y1))
if Han___currentDamage>0 then
call UnitDamageTarget(Han___c,tu,Han___maxDamage,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
set Han___currentDamage=0
call Han___HanYoroiChangeText()
call SetPlayerAbilityAvailable(Han___p,0x41304C58,false)
call SetPlayerAbilityAvailable(Han___p,Han_YOROI,true)
endif
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x41305439,0,time,0,false)
endif
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,CreateUnit(Han___p,0x68303552,x,y,a))
call TimerStart(t,.025,true,function cj_anonym__276)
set t=null
endfunction
function cj_anonym__277 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if GetWidgetLife(Han___c)>.405 and Han___futtonAct and time>0.then
call SaveReal(HH,h,1,time-period)
else
set Han___futtonAct=false
call UnitRemoveAbility(Han___c,0x41305031)
call UnitRemoveAbility(Han___c,0x42303046)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set t=null
endfunction
function Han___FuttonCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=10.
local real period=.1
set Han___futtonAct=true
call Sound("Ping.mp3")
call UnitAddAbility(Han___c,0x41305031)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call TimerStart(t,period,true,function cj_anonym__277)
set t=null
endfunction
function Han___YoroiGetDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and not IsUnitIllusion(GetTriggerUnit())and GetUnitAbilityLevel(GetTriggerUnit(),Han_YOROI)>0
endfunction
function Han___YoroiGetDamageActions takes nothing returns nothing
local unit tu=GetEventDamageSource()
local real dmg=GetEventDamage()
call DisableTrigger(Han___yoroidmg)
if not Han___futtonAct then
if Han___currentDamage<Han___maxDamage then
if dmg<20.then
call SetWidgetLife(Han___c,GetWidgetLife(Han___c)+dmg)
set Han___currentDamage=Han___currentDamage+R2I(dmg)
else
call SetWidgetLife(Han___c,GetWidgetLife(Han___c)+20.)
set Han___currentDamage=Han___currentDamage+20
endif
if Han___currentDamage>=Han___maxDamage then
set Han___currentDamage=Han___maxDamage
call SetPlayerAbilityAvailable(Han___p,Han_YOROI,false)
if GetUnitAbilityLevel(Han___c,0x41304C58)>0 then
call SetPlayerAbilityAvailable(Han___p,0x41304C58,true)
else
call UnitAddAbility(Han___c,0x41304C58)
endif
endif
call Han___HanYoroiChangeText()
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Polymorph\\PolyMorphDoneGround.mdl",Han___c,"chest"))
endif
elseif Han___futtonAct and IsUnitHero(tu)then
set Han___futtonAct=false
call Han___HanGivesSomeReek(tu)
else
if Han___currentDamage<Han___maxDamage then
if dmg<20.then
call SetWidgetLife(Han___c,GetWidgetLife(Han___c)+dmg)
else
call SetWidgetLife(Han___c,GetWidgetLife(Han___c)+20.)
endif
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Polymorph\\PolyMorphDoneGround.mdl",Han___c,"chest"))
endif
endif
call EnableTrigger(Han___yoroidmg)
set tu=null
endfunction
function Han___FunsuikenGetDamageConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetEventDamageSource(),0x42303345)>0 and IsUnitInGroup(GetTriggerUnit(),Han___grFunsuikenCheck)
endfunction
function Han___FunsuikenGetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real x=GetWidgetX(Han___c)
local real y=GetWidgetY(Han___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real knockback=150.
local real dmg=Han___currentDamage/5.
set Han___funsuikenNumber=Han___funsuikenNumber-1
call DisableTrigger(Han___funsuikendmg)
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x1,y1,1.15,"NewDirtEXNofire.mdx",0.)
else
call CreateDummyEffect(x1,y1,1.15,"IceSparks.mdx",0.)
endif
if dmg>0.then
call UnitDamageTarget(Han___c,tu,GetTaijutsuDamage(dmg,Han___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call KnockBackUnitEf(tu,knockback,knockback/1000.,bj_RADTODEG*Atan2(y1-y,x1-x),.025,3,false)
call GroupRemoveUnit(Han___grFunsuikenCheck,tu)
if Han___funsuikenNumber==0 then
call UnitRemoveAbility(Han___c,0x42303345)
endif
call EnableTrigger(Han___funsuikendmg)
set tu=null
endfunction
function Han___AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and GetUnitAbilityLevel(GetAttacker(),0x42303345)>0 and not IsUnitInGroup(GetTriggerUnit(),Han___grFunsuikenCheck)
endfunction
function Han___AttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Han___grFunsuikenReg)then
call GroupAddUnit(Han___grFunsuikenReg,tu)
call TriggerRegisterUnitEvent(Han___funsuikendmg,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Han___grFunsuikenCheck,tu)
set tu=null
endfunction
function cj_anonym__278 takes nothing returns nothing
if GetUnitAbilityLevel(Han___c,0x42303345)==0 then
call DisableTrigger(Han___funsuikenattack)
call DisableTrigger(Han___funsuikendmg)
call UnitRemoveAbility(Han___c,0x41304246)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Han___FunsuikenCast takes nothing returns nothing
set Han___funsuikenNumber=5
call Sound("Han Funsuiken Cast.mp3")
call UnitAddAbility(Han___c,0x41304246)
call EnableTrigger(Han___funsuikenattack)
call EnableTrigger(Han___funsuikendmg)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__278)
endfunction
function Han___IsFungokyakuDamaged takes real x,real y,real dmg,real range,real a returns boolean
local boolean log=false
local unit tg
local real x1
local real y1
call KillDestructablesStart(x,y,75.)
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,100.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or log
if IsUnitNeedTaijutsu(tg,Han___p)then
call Sound("Han Fungokyaku.mp3")
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
call SetUnitAnimation(tg,"death")
call CreateDummyEffect(x1,y1,1.75,"Deathmok.mdx",0.)
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x1,y1,1.25,"NewDirtEXNofire.mdx",0.)
else
call CreateDummyEffect(x1,y1,1.25,"IceSparks.mdx",0.)
endif
if IsUnitFacingBack(Han___c,tg,45.)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call GetStun(tg,1.)
set dmg=dmg*2.
endif
call KnockBackUnitEf(tg,range,range/1000.,a,.025,0,false)
call UnitDamageTarget(Han___c,tg,GetTaijutsuDamage(dmg,Han___c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
set log=true
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
return log
endfunction
function cj_anonym__279 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real a=LoadReal(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real range=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real distance=LoadReal(HH,h,4)
local boolean log=LoadBoolean(HH,h,5)
local real x=GetWidgetX(Han___c)
local real y=GetWidgetY(Han___c)
if GetWidgetLife(Han___c)>.405 and distance>offset*2.and not log then
call SetUnitAnimation(Han___c,"spell two")
if Han___IsFungokyakuDamaged(x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD),dmg,range,a)then
call SaveBoolean(HH,h,5,true)
endif
call SetUnitPosition(Han___c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(Han___c,a)
call SaveReal(HH,h,4,distance-offset)
else
call SetUnitAnimation(Han___c,"spell five")
call SetUnitPathing(Han___c,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Han___FungokyakuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=130.
local real range=400.
local real speed=900.
local real period=.025
local real offset=speed*period
local real distance=600.
call DestroyEffect(AddSpecialEffect("dim.MDx",GetWidgetX(Han___c),GetWidgetY(Han___c)))
call SetUnitAnimation(Han___c,"spell two")
call SetUnitTypeFlying(Han___c)
call SetUnitPathing(Han___c,false)
call SaveReal(HH,h,0,GetUnitFacing(Han___c))
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,range)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,distance)
call SaveBoolean(HH,h,5,false)
call TimerStart(t,period,true,function cj_anonym__279)
set t=null
endfunction
function Han___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Han_FUNGOKYAKU or i==Han_FUNSUIKEN or i==0x41304C58 or i==Han_TSUNOORI
endfunction
function Han___SpellsActions takes nothing returns nothing
local integer i
if Han___c==null then
set Han___c=GetTriggerUnit()
set Han___p=GetOwningPlayer(Han___c)
call TriggerRegisterUnitEvent(Han___yoroidmg,Han___c,EVENT_UNIT_DAMAGED)
endif
set i=GetSpellAbilityId()
if i==Han_FUNGOKYAKU then
call Han___FungokyakuCast()
elseif i==Han_FUNSUIKEN then
call Han___FunsuikenCast()
elseif i==0x41304C58 then
call Han___FuttonCast()
elseif i==Han_TSUNOORI then
call Han___HanTsunooriCast(GetSpellTargetUnit())
endif
endfunction
function Han___LearningActions takes unit u returns nothing
if Han___c==null then
set Han___c=u
set Han___p=GetOwningPlayer(Han___c)
call TriggerRegisterUnitEvent(Han___yoroidmg,Han___c,EVENT_UNIT_DAMAGED)
endif
set Han___maxDamage=200
call Han___HanYoroiChangeText()
endfunction
function Han_AddAbility takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Han]then
call Han___LearningActions(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Han_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Han___grFunsuikenReg=CreateGroup()
set Han___grFunsuikenCheck=CreateGroup()
set Han___funsuikenattack=CreateTrigger()
set Han___funsuikendmg=CreateTrigger()
set Han___yoroidmg=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(Han___funsuikenattack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Han___SpellsConditions))
call TriggerAddAction(spells,function Han___SpellsActions)
call TriggerAddCondition(Han___funsuikenattack,Condition(function Han___AttackConditions))
call TriggerAddAction(Han___funsuikenattack,function Han___AttackActions)
call TriggerAddCondition(Han___funsuikendmg,Condition(function Han___FunsuikenGetDamageConditions))
call TriggerAddAction(Han___funsuikendmg,function Han___FunsuikenGetDamageActions)
call TriggerAddCondition(Han___yoroidmg,Condition(function Han___YoroiGetDamageConditions))
call TriggerAddAction(Han___yoroidmg,function Han___YoroiGetDamageActions)
set spells=null
endfunction
function Hanzo___HarakiriRemove takes integer h,group grCheck returns nothing
local integer i=0
local integer max=6
local unit tg
local real dmgadd=.1+GetUnitAbilityLevel(Hanzo___c,Hanzo_SEPPUKU)*.05
local real newdmg=0.
loop
set tg=FirstOfGroup(grCheck)
exitwhen tg==null
call PauseUnit(tg,false)
set newdmg=GetUnitState(tg,UNIT_STATE_MAX_LIFE)*dmgadd
call UnitDamageTarget(Hanzo___c,tg,newdmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call GroupRemoveUnit(grCheck,tg)
endloop
call DestroyGroup(grCheck)
loop
call RemoveUnit(LoadUnitHandle(HH,h,i))
set i=i+1
exitwhen i==max
endloop
set tg=null
endfunction
function Hanzo___IsUnitNeedHarakiri takes unit u returns boolean
local boolean log=false
if GetWidgetLife(u)>.405 and not IsUnitHidden(u)and not IsUnitInvulnerable(u)and not IsUnitType(u,UNIT_TYPE_UNDEAD)and not IsUnitType(u,UNIT_TYPE_STRUCTURE)then
set log=true
endif
return log
endfunction
function Hanzo___HarakiriStun takes real x,real y,real radius,group grCheck returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if Hanzo___IsUnitNeedHarakiri(tg)then
if not IsUnitInGroup(tg,grCheck)then
call GroupAddUnit(grCheck,tg)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\PoisonSting\\PoisonStingTarget.mdl",tg,"chest"))
endif
if IsUnitInGroup(tg,grCheck)and not IsUnitPaused(tg)then
call PauseUnit(tg,true)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__280 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,-1)
local real y=LoadReal(HH,h,-2)
local real radius=LoadReal(HH,h,-3)
local real period=LoadReal(HH,h,-4)
local real time=LoadReal(HH,h,-5)
local group grCheck=LoadGroupHandle(HH,h,-6)
if time>0.then
call Hanzo___HarakiriStun(x,y,radius,grCheck)
call SaveReal(HH,h,-5,time-period)
else
call Hanzo___HarakiriRemove(h,grCheck)
call KillUnit(Hanzo___c)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grCheck=null
set t=null
endfunction
function Hanzo___HarakiriCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=6
local real radius=400.
local real offset=radius/2.
local real time=3.
local real period=.1
local real degree=0.
local real degreeStep=360./max
local group grCheck=CreateGroup()
local real x=GetWidgetX(Hanzo___c)
local real y=GetWidgetY(Hanzo___c)
local real x1
local real y1
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call SaveAgentHandle(HH,h,i,CreateUnit(Hanzo___p,0x68303330,x1,y1,GetRandomReal(0.,360.)))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
call Hanzo___HarakiriStun(x,y,radius,grCheck)
call SaveReal(HH,h,-1,x)
call SaveReal(HH,h,-2,y)
call SaveReal(HH,h,-3,radius)
call SaveReal(HH,h,-4,period)
call SaveReal(HH,h,-5,time)
call SaveAgentHandle(HH,h,-6,grCheck)
call TimerStart(t,period,true,function cj_anonym__280)
set grCheck=null
set t=null
endfunction
function Hanzo___KuchiyoseDokuRemove takes integer h returns nothing
local integer i=0
local integer max=9
loop
call RemoveUnit(LoadUnitHandle(HH,h,i))
set i=i+1
exitwhen i==max
endloop
endfunction
function Hanzo___KuchiyoseDokuDamage takes real x,real y,real radius,real dmg returns nothing
local real newDmg=0.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Hanzo___p)then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\PoisonSting\\PoisonStingTarget.mdl",tg,"chest"))
set newDmg=GetUnitState(tg,UNIT_STATE_MAX_LIFE)*dmg
call UnitDamageTarget(Hanzo___c,tg,newDmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__281 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,-1)
local real y=LoadReal(HH,h,-2)
local real radius=LoadReal(HH,h,-3)
local real dmg=LoadReal(HH,h,-4)
local real period=LoadReal(HH,h,-5)
local real time=LoadReal(HH,h,-6)
if time>0.then
call Hanzo___KuchiyoseDokuDamage(x,y,radius,dmg)
call SaveReal(HH,h,-6,time-period)
else
call Hanzo___KuchiyoseDokuRemove(h)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hanzo___KuchiyoseDokuCast takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=9
local real dmg=.05
local real radius=500.
local real offset=radius/2.
local real time=5.
local real period=1.
local real degree=0.
local real degreeStep=360./max
local real x1
local real y1
call Sound("Hanzo Ibuse Poison.mp3")
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call SaveAgentHandle(HH,h,i,CreateUnit(Hanzo___p,0x68303330,x1,y1,GetRandomReal(0.,360.)))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
call SaveReal(HH,h,-1,x)
call SaveReal(HH,h,-2,y)
call SaveReal(HH,h,-3,radius)
call SaveReal(HH,h,-4,dmg)
call SaveReal(HH,h,-5,period)
call SaveReal(HH,h,-6,time)
call TimerStart(t,period,true,function cj_anonym__281)
set t=null
endfunction
function cj_anonym__282 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real x=LoadReal(HH,h,5)
local real y=LoadReal(HH,h,6)
local group g1=CreateGroup()
local unit tg
if GetWidgetLife(d)>.405 and time>0.then
call GroupEnumUnitsInRect(g1,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitInGroup(tg,g2)then
call UnitDamageTarget(Hanzo___c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
call SaveReal(HH,h,4,time-period)
call SaveReal(HH,h,5,GetWidgetX(d))
call SaveReal(HH,h,6,GetWidgetX(d))
else
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
call SetUnitPosition(tg,x,y)
call PauseUnit(tg,false)
call ShowUnit(tg,true)
call GroupRemoveUnit(g2,tg)
endloop
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set d=null
set tg=null
set t=null
endfunction
function Hanzo___KuchiyoseDotonEatDamage takes unit d,group gr1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local group gr2=CreateGroup()
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real time=4.
local real period=.1
local real dmg=50.*period
local unit tg
loop
set tg=FirstOfGroup(gr1)
exitwhen tg==null
call PauseUnit(tg,true)
call ShowUnit(tg,false)
call GroupAddUnit(gr2,tg)
call GroupRemoveUnit(gr1,tg)
endloop
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,gr2)
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call SaveReal(HH,h,5,x)
call SaveReal(HH,h,6,y)
call TimerStart(t,period,true,function cj_anonym__282)
set gr2=null
set tg=null
set t=null
endfunction
function Hanzo___KuchiyoseDotonEatCast takes unit d returns nothing
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real radius=250.
local group gr1=CreateGroup()
local group gr2
local boolean log=false
local unit tg
call Sound("Hanzo Ibuse Eat.mp3")
if SpecialEffectsShow then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",x,y))
else
call DestroyEffect(AddSpecialEffect("IceSparks.mdx",x,y))
endif
endif
call SetUnitAnimation(d,"attack")
call GroupEnumUnitsInRange(gr1,x,y,radius,null)
loop
set tg=FirstOfGroup(gr1)
exitwhen tg==null
if IsUnitNeedClear(tg,Hanzo___p)then
if not log then
set log=true
set gr2=CreateGroup()
endif
call GroupAddUnit(gr2,tg)
endif
call GroupRemoveUnit(gr1,tg)
endloop
call DestroyGroup(gr1)
if log then
call Hanzo___KuchiyoseDotonEatDamage(d,gr2)
endif
call SetUnitMoveSpeed(d,GetUnitDefaultMoveSpeed(d))
call UnitRemoveAbility(d,0x4130314A)
call SetPlayerAbilityAvailable(Hanzo___p,0x41304D4A,true)
call SetPlayerAbilityAvailable(Hanzo___p,0x41303546,true)
call SetUnitInvulnerable(d,false)
call SetUnitVertexColor(d,255,255,255,255)
set tg=null
set gr1=null
set gr2=null
endfunction
function cj_anonym__283 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
if GetWidgetLife(d)>.405 and GetUnitAbilityLevel(d,0x4130314A)==0 then
if GetWidgetLife(d)>.405 then
call Hanzo___KuchiyoseDotonEatCast(d)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Hanzo___KuchiyoseDotonCast takes unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real ms=GetUnitDefaultMoveSpeed(d)+200.
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real period=.1
call Sound("Hanzo Ibuse Hide.mp3")
if SpecialEffectsShow then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",x,y))
else
call DestroyEffect(AddSpecialEffect("IceSparks.mdx",x,y))
endif
endif
call SetUnitInvulnerable(d,true)
call SetUnitVertexColor(d,255,255,255,0)
call SetUnitMoveSpeed(d,ms)
call SetPlayerAbilityAvailable(Hanzo___p,0x41304D4A,false)
call SetPlayerAbilityAvailable(Hanzo___p,0x41303546,false)
call UnitAddAbility(d,0x4130314A)
call SaveAgentHandle(HH,h,0,d)
call TimerStart(t,period,true,function cj_anonym__283)
set t=null
endfunction
function cj_anonym__284 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real timeLife=LoadReal(HH,h,2)
if GetWidgetLife(d)>.405 and timeLife>0.then
call SaveReal(HH,h,2,timeLife-period)
else
call KuchiyoseCreateDustEffect("end",d,1.75,2.6)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Hanzo___KuchiyoseCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Hanzo___c)
local real y=GetWidgetY(Hanzo___c)
local real timeLife=30.
local real period=.1
local unit d=CreateUnit(Hanzo___p,0x68303252,x,y,GetUnitFacing(Hanzo___c))
call SetPlayerAbilityAvailable(Hanzo___p,0x41304D4A,true)
call SetPlayerAbilityAvailable(Hanzo___p,0x41303546,true)
call KuchiyoseCreateDustEffect("cast",d,1.75,2.6)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,timeLife)
call TimerStart(t,period,true,function cj_anonym__284)
set d=null
set t=null
endfunction
function Hanzo___KatonDamage takes unit tu,real x,real y returns nothing
local integer i=0
local integer max=4
local real dmg=200.
local real adddmg=.15
local real radius=250.
local real x1
local real y1
local real f=GetUnitFacing(tu)
local real offset=radius/2.
local real degree=0.
local real degreeStep=360./max
local group gr=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(gr,x,y,radius,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Hanzo___p)then
call UnitDamageTarget(Hanzo___c,tg,GetNinjutsuDamage(dmg,Hanzo___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 and IsUnitPaused(tg)or GetUnitAbilityLevel(tg,0x42303149)>0 then
call UnitDamageTarget(Hanzo___c,tg,GetNinjutsuDamage(GetUnitState(tg,UNIT_STATE_MAX_LIFE)*adddmg,Hanzo___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call JiraiyaSetFireOil(Hanzo___c,tg)
endif
call GroupRemoveUnit(gr,tg)
endloop
call DestroyGroup(gr)
call FireDestructablesEnum(x,y,radius/2.)
call JiraiyaSetFireSwamp(Hanzo___c,x,y)
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
loop
set x1=x+offset*Cos((f+degree)*bj_DEGTORAD)
set y1=y+offset*Sin((f+degree)*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("Boom.mdx",x1,y1))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
set tg=null
set gr=null
endfunction
function cj_anonym__285 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=18
local unit tu=LoadUnitHandle(HH,h,-1)
local real period=LoadReal(HH,h,-3)
local real time=LoadReal(HH,h,-4)
local real offset=LoadReal(HH,h,-5)
local real angle=LoadReal(HH,h,-6)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real x1
local real y1
local real a
if time>0.and GetWidgetLife(tu)>.405 then
loop
set bj_lastLoadedUnit=LoadUnitHandle(HH,h,i)
set x1=GetWidgetX(bj_lastLoadedUnit)
set y1=GetWidgetY(bj_lastLoadedUnit)
set a=Atan2(y1-y,x1-x)+angle
call SetUnitPosition(bj_lastLoadedUnit,x1-offset*Cos(a),y1-offset*Sin(a))
exitwhen i==max
set i=i+1
endloop
call SaveReal(HH,h,-4,time-period)
else
loop
call RemoveUnit(LoadUnitHandle(HH,h,i))
exitwhen i==max
set i=i+1
endloop
call DestroyEffect(LoadEffectHandle(HH,h,-2))
call Hanzo___KatonDamage(tu,x,y)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set tu=null
set t=null
endfunction
function Hanzo___KatonCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=18
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real f=GetUnitFacing(tu)
local real period=MainPeriod
local real speed=750.
local real offset=speed*period
local real time=2.
local real offsetStart=75.
local real x1
local real y1
local real degree=0.
local real degreeStep=360./(max/2)
local real angle=1.36
call SaveAgentHandle(HH,h,-1,tu)
call SaveAgentHandle(HH,h,-2,AddSpecialEffectTarget("Environment\\LargeBuildingFire\\LargeBuildingFire1.mdl",tu,"origin"))
call SaveReal(HH,h,-3,period)
call SaveReal(HH,h,-4,time)
call SaveReal(HH,h,-5,offset)
call SaveReal(HH,h,-6,angle)
loop
if i==max/2 then
set offsetStart=150.
set degree=0.
endif
set x1=x+offsetStart*Cos((f+degree)*bj_DEGTORAD)
set y1=y+offsetStart*Sin((f+degree)*bj_DEGTORAD)
call SaveAgentHandle(HH,h,i,CreateUnit(Hanzo___p,0x68303253,x1,y1,GetRandomReal(0.,360.)))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
call TimerStart(t,period,true,function cj_anonym__285)
set t=null
endfunction
function Hanzo___GetDamageConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetEventDamageSource(),0x41304742)>0 and not IsUnitIllusion(GetEventDamageSource())and IsUnitInGroup(GetTriggerUnit(),Hanzo___DMGGroup)
endfunction
function Hanzo___GetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
call DisableTrigger(Hanzo___DMG)
if Hanzo___ShunshinTarget!=null and Hanzo___ShunshinNumber<4 then
set Hanzo___ShunshinNumber=Hanzo___ShunshinNumber+1
if Hanzo___ShunshinNumber==4 then
call UnitRemoveAbility(Hanzo___c,0x41304742)
call UnitRemoveAbility(Hanzo___c,0x42303154)
set Hanzo___ShunshinNumber=0
set Hanzo___ShunshinTarget=null
endif
endif
call GroupRemoveUnit(Hanzo___DMGGroup,tu)
call EnableTrigger(Hanzo___DMG)
set tu=null
endfunction
function Hanzo___AttackConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),0x41304742)>0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))
endfunction
function Hanzo___AttackActions takes nothing returns nothing
local unit attacker=GetAttacker()
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Hanzo___DMGGroup)and GetUnitAbilityLevel(attacker,0x41304742)>0 and Hanzo___ShunshinTarget!=null then
if tu==Hanzo___ShunshinTarget then
if not IsUnitInGroup(tu,Hanzo___grReg)then
call GroupAddUnit(Hanzo___grReg,tu)
call TriggerRegisterUnitEvent(Hanzo___DMG,tu,EVENT_UNIT_DAMAGED)
endif
if not IsUnitInGroup(tu,Hanzo___DMGGroup)then
call GroupAddUnit(Hanzo___DMGGroup,tu)
endif
else
call UnitRemoveAbility(attacker,0x41304742)
call UnitRemoveAbility(attacker,0x42303154)
set Hanzo___ShunshinTarget=null
endif
endif
set attacker=null
set tu=null
endfunction
function cj_anonym__287 takes nothing returns nothing
call UnitRemoveAbility(Hanzo___c,0x41304742)
call UnitRemoveAbility(Hanzo___c,0x42303154)
set Hanzo___ShunshinTarget=null
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__286 takes nothing returns nothing
local real x1=GetWidgetX(Hanzo___ShunshinTarget)
local real y1=GetWidgetY(Hanzo___ShunshinTarget)
local real time=4.
if GetWidgetLife(Hanzo___ShunshinTarget)>.405 then
call SetUnitPosition(Hanzo___c,x1,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
call UnitAddAbility(Hanzo___c,0x41304742)
call IssueTargetOrder(Hanzo___c,"attack",Hanzo___ShunshinTarget)
call TimerStart(CreateTimer(),time,false,function cj_anonym__287)
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function Hanzo___ShunshinCast takes unit tu returns nothing
local real time=.2
set Hanzo___ShunshinTarget=tu
call Sound("Akatsuki Jutsu.mp3")
call TimerStart(CreateTimer(),time,false,function cj_anonym__286)
endfunction
function cj_anonym__288 takes nothing returns boolean
if GetUnitTypeId(GetFilterUnit())==0x68303836 or GetUnitTypeId(GetFilterUnit())==0x68303258 then
call RemoveUnit(GetFilterUnit())
endif
return false
endfunction
function Hanzo___HagamaDeleteUnits takes nothing returns nothing
local group gr=CreateGroup()
call GroupEnumUnitsOfPlayer(gr,Hanzo___p,Condition(function cj_anonym__288))
call DestroyGroup(gr)
set gr=null
endfunction
function Hanzo___HagamaStart takes unit tu,unit d,real offset returns nothing
local real dmg=150.
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl",tu,"chest"))
call UnitDamageTarget(Hanzo___c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tu)>.405 then
set bj_lastCreatedUnit=CreateUnit(Hanzo___p,0x6E303042,x,y,GetUnitFacing(tu)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313557)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
endfunction
function cj_anonym__289 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local integer amount=LoadInteger(HH,h,3)
local group gr=LoadGroupHandle(HH,h,4)
local boolean log=LoadBoolean(HH,h,5)
local real offset=LoadReal(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local unit tg
if GetWidgetLife(Hanzo___c)>.405 and amount>0 then
call GroupEnumUnitsInRange(gr,x,y,200.,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null or log
if IsUnitNeedTaijutsu(tg,Hanzo___p)then
call Hanzo___HagamaStart(tg,d,offset)
set log=true
endif
call GroupRemoveUnit(gr,tg)
endloop
call UnitApplyTimedLife(CreateUnit(Hanzo___p,0x68303258,x,y,f),0x42544C46,distance/800.)
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SetUnitFacing(d,a)
if not log then
call SaveInteger(HH,h,3,amount-1)
else
call SaveInteger(HH,h,3,0)
call SaveBoolean(HH,h,5,log)
endif
else
call PauseUnit(Hanzo___c,false)
call DestroyGroup(gr)
call Hanzo___HagamaDeleteUnits()
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set gr=null
set tg=null
set d=null
set t=null
endfunction
function Hanzo___HagamaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Hanzo___c)
local real y=GetWidgetY(Hanzo___c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real speed=1600.
local real period=.025
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call PauseUnit(Hanzo___c,true)
call SaveAgentHandle(HH,h,0,CreateUnit(Hanzo___p,0x68303836,x,y,a))
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveInteger(HH,h,3,R2I(distance/offset))
call SaveAgentHandle(HH,h,4,CreateGroup())
call SaveBoolean(HH,h,5,false)
call SaveReal(HH,h,6,offset)
call TimerStart(t,period,true,function cj_anonym__289)
set t=null
endfunction
function Hanzo___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Hanzo_HAGAMA or i==Hanzo_SHUNSHIN or i==Hanzo_KATON or i==Hanzo_KUCHIYOSE or i==0x41304D4A or i==0x4130314A or i==0x41303546 or i==Hanzo_SEPPUKU
endfunction
function Hanzo___SpellsActions takes nothing returns nothing
local integer i
if Hanzo___c==null then
set Hanzo___c=GetTriggerUnit()
set Hanzo___p=GetOwningPlayer(Hanzo___c)
endif
set i=GetSpellAbilityId()
if i==Hanzo_HAGAMA then
call Hanzo___HagamaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Hanzo_SHUNSHIN then
call Hanzo___ShunshinCast(GetSpellTargetUnit())
elseif i==Hanzo_KATON then
call Hanzo___KatonCast(GetSpellTargetUnit())
elseif i==Hanzo_KUCHIYOSE then
call Hanzo___KuchiyoseCast()
elseif i==0x41304D4A then
call Hanzo___KuchiyoseDotonCast(GetTriggerUnit())
elseif i==0x4130314A then
call UnitRemoveAbility(GetTriggerUnit(),0x4130314A)
elseif i==0x41303546 then
call Hanzo___KuchiyoseDokuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Hanzo_SEPPUKU then
call Hanzo___HarakiriCast()
endif
endfunction
function Hanzo_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
set Hanzo___grReg=CreateGroup()
set Hanzo___DMGGroup=CreateGroup()
set Hanzo___DMG=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Hanzo___SpellsConditions))
call TriggerAddAction(spells,function Hanzo___SpellsActions)
call TriggerAddCondition(attack,Condition(function Hanzo___AttackConditions))
call TriggerAddAction(attack,function Hanzo___AttackActions)
call TriggerAddCondition(Hanzo___DMG,Condition(function Hanzo___GetDamageConditions))
call TriggerAddAction(Hanzo___DMG,function Hanzo___GetDamageActions)
set attack=null
set spells=null
endfunction
function Hashirama___ShinSusenjuChangeCaster takes boolean log returns nothing
local real castTime=1.334
local real height=525.
local real speedH=height/castTime
if log then
call Sound("Hashirama Senpo Mokuton Shin Susenju Cast.mp3")
call SetUnitTypeFlying(Hashirama_c)
call PauseUnit(Hashirama_c,true)
call SetUnitInvulnerable(Hashirama_c,true)
call SetUnitPathing(Hashirama_c,false)
call SetUnitFlyHeight(Hashirama_c,height,speedH)
call AddUnitAnimationProperties(Hashirama_c,"walk fast",true)
else
call Sound("Hashirama Senpo Mokuton Shin Susenju Over.mp3")
call PauseUnit(Hashirama_c,false)
call SetUnitInvulnerable(Hashirama_c,false)
call SetUnitPathing(Hashirama_c,true)
call SetUnitFlyHeight(Hashirama_c,GetUnitDefaultFlyHeight(Hashirama_c),speedH*1.5)
call AddUnitAnimationProperties(Hashirama_c,"walk fast",false)
call SetUnitAnimation(Hashirama_c,"stand ready")
if GetLocalPlayer()==Hashirama___p then
call ClearSelection()
call SelectUnit(Hashirama_c,true)
endif
endif
endfunction
function Hashirama___ChojoKebutsuDamage takes rect r,real dmg returns nothing
local unit tg
call GroupEnumUnitsInRect(Hashirama___grDamage,r,null)
loop
set tg=FirstOfGroup(Hashirama___grDamage)
exitwhen tg==null
if not IsUnitBig(tg)then
if IsUnitNeedTaijutsu(tg,Hashirama___p)then
call UnitDamageTarget(Hashirama_c,tg,GetTaijutsuDamage(dmg,Hashirama_c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
else
if IsUnitNeedClear(tg,Hashirama___p)then
call UnitDamageTarget(Hashirama_c,tg,GetUnitState(tg,UNIT_STATE_MAX_LIFE)*.01,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
endif
call GroupRemoveUnit(Hashirama___grDamage,tg)
endloop
set tg=null
endfunction
function Hashirama___ChojoKebutsuAnimation takes unit d,rect r,real a returns nothing
local integer i=0
local integer max=3
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1
local real y1
local real reverseOffset=375.
local real lifeTime=.5
loop
set x1=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))-reverseOffset*Cos(a*bj_DEGTORAD)
set y1=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))-reverseOffset*Sin(a*bj_DEGTORAD)
call UnitApplyTimedLife(CreateUnit(Hashirama___p,0x6E303141,x1,y1,a),0x42544C46,lifeTime)
set i=i+1
exitwhen i==max
endloop
set x1=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
set y1=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("HelGate.mdx",x1,y1))
endif
endfunction
function cj_anonym__290 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local rect r=LoadRectHandle(HH,h,4)
local real a=LoadReal(HH,h,5)
if time>0.then
call SetUnitAnimation(Hashirama_c,"walk fast")
call Hashirama___ChojoKebutsuDamage(r,dmg)
if time>1.then
call Hashirama___ChojoKebutsuAnimation(d,r,a)
endif
call SaveReal(HH,h,2,time-period)
else
call EnumDestructablesInRect(r,null,function Kill_Destructables)
call KillUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set r=null
set t=null
endfunction
function Hashirama___ChojoKebutsuCast takes unit d,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real time=5.
local real period=.1
local real dmg=300.*period
local real radius=900./2.
call Sound("Hashirama Chojo Kebutsu.mp3")
call SetUnitAnimation(d,"spell two")
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,dmg)
call SaveRectHandle(HH,h,4,Rect(x1-radius,y1-radius,x1+radius,y1+radius))
call SaveReal(HH,h,5,a)
call TimerStart(t,period,true,function cj_anonym__290)
set t=null
endfunction
function cj_anonym__294 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
if GetWidgetLife(d)>.405 and time>0.and GetUnitAbilityLevel(Hashirama_c,0x42303557)>0 then
call SetUnitPosition(Hashirama_c,x,y)
call SetUnitFacing(Hashirama_c,f)
call SetUnitAnimation(Hashirama_c,"walk fast")
call SaveReal(HH,h,2,time-period)
else
call Hashirama___ShinSusenjuChangeCaster(false)
call KillUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__293 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real time=20.
local real period=.1
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call PauseUnit(d,false)
if GetLocalPlayer()==Hashirama___p then
call ClearSelection()
call SelectUnit(d,true)
endif
call SaveAgentHandle(HH,h1,0,d)
call SaveReal(HH,h1,1,period)
call SaveReal(HH,h1,2,time)
call TimerStart(t1,period,true,function cj_anonym__294)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__292 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real castTime=1.333
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SetUnitAnimation(d,"spell one")
call SaveAgentHandle(HH,h1,0,d)
call TimerStart(t1,castTime,false,function cj_anonym__293)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__291 takes nothing returns nothing
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
call DestroyTimer(GetExpiredTimer())
endfunction
function Hashirama___ShinSusenjuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetHeroLevel(Hashirama_c)
local real reverseOffset=80.
local real xHero=GetWidgetX(Hashirama_c)
local real yHero=GetWidgetY(Hashirama_c)
local real a=GetUnitFacing(Hashirama_c)
local real x=xHero-reverseOffset*Cos(a*bj_DEGTORAD)
local real y=yHero-reverseOffset*Sin(a*bj_DEGTORAD)
local real castTime=1.334
local real timeShake=castTime+1.333
local unit d=CreateUnit(Hashirama___p,0x68303137,x,y,a)
if lvl==10 then
call UnitAddAbility(d,Hashirama_CHOJO_KEBUTSU)
endif
call DestroyEffect(AddSpecialEffect("dim.MDx",xHero,yHero))
call Hashirama___ShinSusenjuChangeCaster(true)
call SetUnitAnimation(d,"birth")
call SaveAgentHandle(HH,h,0,d)
call CameraSetTargetNoiseEx(28.,14.*Pow(16.,8.),true)
call CameraSetSourceNoiseEx(28.,14.*Pow(16.,8.),true)
call TimerStart(CreateTimer(),timeShake,false,function cj_anonym__291)
call TimerStart(t,castTime,false,function cj_anonym__292)
set d=null
set t=null
endfunction
function cj_anonym__295 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
local unit tg
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",x,y))
endif
call GroupEnumUnitsInRange(Hashirama___grDamage,x,y,radius,null)
loop
set tg=FirstOfGroup(Hashirama___grDamage)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Hashirama___p)then
call UnitDamageTarget(Hashirama_c,tg,GetTaijutsuDamage(dmg,Hashirama_c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(Hashirama___grDamage,tg)
endloop
call RemoveUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tg=null
set t=null
endfunction
function Hashirama___HoteiNoJutsuStartHands takes real x,real y,real radius,real dmg returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cast_time=.5
local real start_degree=GetRandomReal(1.,360.)
local real start_offset=GetRandomReal(1.,radius/2.)
local real x1=x+start_offset*Cos(start_degree*bj_DEGTORAD)
local real y1=y+start_offset*Sin(start_degree*bj_DEGTORAD)
local real dmg_offset=230.
local real aoe=200.
local unit d=CreateUnit(Hashirama___p,0x6E303139,x1,y1,start_degree)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x1+dmg_offset*Cos(start_degree*bj_DEGTORAD))
call SaveReal(HH,h,2,y1+dmg_offset*Sin(start_degree*bj_DEGTORAD))
call SaveReal(HH,h,3,aoe)
call SaveReal(HH,h,4,dmg)
call TimerStart(t,cast_time,false,function cj_anonym__295)
set d=null
set t=null
endfunction
function cj_anonym__296 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
if GetUnitAbilityLevel(Hashirama_c,0x42303557)>0 and GetUnitCurrentOrder(Hashirama_c)==OrderId("whirlwind")then
call Hashirama___HoteiNoJutsuStartHands(GetWidgetX(Hashirama_c),GetWidgetY(Hashirama_c),LoadReal(HH,h,0),LoadReal(HH,h,1))
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hashirama___HoteiNoJutsuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.2
local real dmg=200.
local real radius=1200.
call Sound("Hashirama Mokuton Hotei no Jutsu.mp3")
call SaveReal(HH,h,0,radius)
call SaveReal(HH,h,1,dmg)
call TimerStart(t,period,true,function cj_anonym__296)
set t=null
endfunction
function cj_anonym__298 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
if GetWidgetLife(tu)>.405 and time>0.then
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call SaveReal(HH,h,4,time-period)
else
call PauseUnit(tu,false)
call SetUnitTimeScale(tu,1.)
call DestroyEffect(LoadEffectHandle(HH,h,2))
call RemoveUnit(LoadUnitHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function cj_anonym__297 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real time=4.
local real period=.1
call PauseUnit(tu,true)
call SetUnitTimeScale(tu,0.)
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetWidgetX(tu),GetWidgetY(tu)))
call DestroyEffect(AddSpecialEffect("tsunadeslam.mdx",GetWidgetX(tu),GetWidgetY(tu)))
endif
call SaveAgentHandle(HH,h1,0,tu)
call SaveAgentHandle(HH,h1,1,LoadUnitHandle(HH,h,1))
call SaveAgentHandle(HH,h1,2,AddSpecialEffectTarget("Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl",tu,"overhead"))
call SaveReal(HH,h1,3,period)
call SaveReal(HH,h1,4,time)
call TimerStart(t1,period,true,function cj_anonym__298)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
set t1=null
endfunction
function Hashirama___MyojinmonCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local unit d=CreateUnit(Hashirama___p,0x6E303448,x,y,GetRandomReal(1.,360.))
local real castTime=.5
local real height_speed=GetUnitFlyHeight(d)/castTime
call Sound("Hashirama Senpo Myojinmon.mp3")
call SetUnitFlyHeight(d,0.,height_speed)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,d)
call TimerStart(t,castTime,false,function cj_anonym__297)
set d=null
set t=null
endfunction
function cj_anonym__299 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real hp_restore=LoadReal(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if GetWidgetLife(Hashirama_c)>.405 and time>0.then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIma\\AImaTarget.mdl",Hashirama_c,"chest"))
call SetWidgetLife(Hashirama_c,GetWidgetLife(Hashirama_c)+GetUnitState(Hashirama_c,UNIT_STATE_MAX_LIFE)*hp_restore)
call SaveReal(HH,h,2,time-period)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hashirama___SaiseiNoryokuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=5.
local real period=1.
local real hp_restore=.1*period
call Sound("Hashirama Saisei Noryoku.mp3")
call SaveReal(HH,h,0,hp_restore)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__299)
set t=null
endfunction
function cj_anonym__300 takes nothing returns nothing
if GetUnitAbilityLevel(Hashirama_c,0x42303557)==0 then
call UnitRemoveAbility(Hashirama_c,0x41304C46)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SHIZEN_ENERUGI,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SAISEI_NORYOKU,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_MYOJINMON,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_HOTEI,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SHIN_SUSENJU,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_MOKUTON_NO_JUTSU,true)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_KOKUANGYO,true)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_JUKAI_KOTAN,true)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SUMMON,true)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SENNIN_MODO,true)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Hashirama___SenninModoCast takes nothing returns nothing
local integer lvl=GetHeroLevel(Hashirama_c)
local real period=.25
call Sound("Hashirama Sennin Modo.mp3")
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_MOKUTON_NO_JUTSU,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_KOKUANGYO,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_JUKAI_KOTAN,false)
if Hashirama___JukaiKotan_radius!=0.then
call SetPlayerAbilityAvailable(Hashirama___p,0x41305348,false)
endif
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SUMMON,false)
if GetUnitAbilityLevel(Hashirama_c,0x4230354E)>0 then
call UnitRemoveAbility(Hashirama_c,0x41305735)
call SetPlayerAbilityAvailable(Hashirama___p,0x41305341,false)
call SetPlayerAbilityAvailable(Hashirama___p,0x41304234,false)
call SetPlayerAbilityAvailable(Hashirama___p,0x41305751,false)
endif
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SENNIN_MODO,false)
if lvl>=5 then
if GetUnitAbilityLevel(Hashirama_c,Hashirama_SHIZEN_ENERUGI)==0 then
call UnitAddAbility(Hashirama_c,Hashirama_SHIZEN_ENERUGI)
endif
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SHIZEN_ENERUGI,true)
call UnitAddAbility(Hashirama_c,0x41304C46)
if lvl>=6 then
if GetUnitAbilityLevel(Hashirama_c,Hashirama_SAISEI_NORYOKU)==0 then
call UnitAddAbility(Hashirama_c,Hashirama_SAISEI_NORYOKU)
endif
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SAISEI_NORYOKU,true)
if lvl>=7 then
if GetUnitAbilityLevel(Hashirama_c,Hashirama_MYOJINMON)==0 then
call UnitAddAbility(Hashirama_c,Hashirama_MYOJINMON)
endif
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_MYOJINMON,true)
if lvl>=8 then
if GetUnitAbilityLevel(Hashirama_c,Hashirama_HOTEI)==0 then
call UnitAddAbility(Hashirama_c,Hashirama_HOTEI)
endif
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_HOTEI,true)
if lvl>=9 then
if GetUnitAbilityLevel(Hashirama_c,Hashirama_SHIN_SUSENJU)==0 then
call UnitAddAbility(Hashirama_c,Hashirama_SHIN_SUSENJU)
endif
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SHIN_SUSENJU,true)
endif
endif
endif
endif
endif
call TimerStart(CreateTimer(),period,true,function cj_anonym__300)
endfunction
function Hashirama___AttackConditions takes nothing returns boolean
return GetUnitTypeId(GetAttacker())==0x68303335 and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitIllusion(GetAttacker())and Hashirama___logGiantAttack
endfunction
function cj_anonym__301 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local unit tu=LoadUnitHandle(HH,h,3)
local real mp=LoadReal(HH,h,4)
local real hpMax
local real addDmg=.1
local real dmg
local real radius=250.
local real randomSize=GetRandomReal(1.2,1.6)
local unit tg
if GetWidgetLife(d)>.405 then
if not IsUnitDisabled(d)then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,randomSize,"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,randomSize,"IceSparks.mdx",8.)
endif
call GroupEnumUnitsInRange(Hashirama___grDamage,x,y,radius,null)
loop
set tg=FirstOfGroup(Hashirama___grDamage)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Hashirama___p)then
if tg==tu then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Feedback\\ArcaneTowerAttack.mdl",tu,"origin"))
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)-GetUnitState(tu,UNIT_STATE_MAX_MANA)*mp)
endif
set hpMax=GetUnitState(tg,UNIT_STATE_MAX_LIFE)
set dmg=hpMax*addDmg
call UnitDamageTarget(d,tg,GetTaijutsuDamage(dmg,d,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(Hashirama___grDamage,tg)
endloop
endif
set Hashirama___logGiantAttack=true
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set d=null
set tg=null
endfunction
function Hashirama___AttackActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit d=GetAttacker()
local unit tu=GetTriggerUnit()
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real mp=.02
local real strikeTime=.666
set Hashirama___logGiantAttack=false
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveAgentHandle(HH,h,3,tu)
call SaveReal(HH,h,4,mp)
call TimerStart(t,strikeTime,false,function cj_anonym__301)
set d=null
set tu=null
set t=null
endfunction
function cj_anonym__304 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real timeLife=LoadReal(HH,h,2)
if GetWidgetLife(d)>.405 and timeLife>0.then
call SaveReal(HH,h,2,timeLife-period)
else
set Hashirama___logGiantAttack=false
call KillUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__303 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real timeLife=20.
local real period=.1
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call PauseUnit(d,false)
call SetUnitInvulnerable(d,false)
call SetUnitAnimation(d,"Stand")
set Hashirama___logGiantAttack=true
call SaveAgentHandle(HH,h1,0,d)
call SaveReal(HH,h1,1,period)
call SaveReal(HH,h1,2,timeLife)
call TimerStart(t1,period,true,function cj_anonym__304)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__302 takes nothing returns nothing
local real x=GetWidgetX(Hashirama_c)
local real y=GetWidgetY(Hashirama_c)
local real f=GetUnitFacing(Hashirama_c)
local real animationTime=3.
local unit d=CreateUnit(Hashirama___p,0x68303335,x,y,f)
local integer lvl=GetHeroLevel(Hashirama_c)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SetPlayerTechResearched(Hashirama___p,0x52303030,lvl)
call PauseUnit(d,true)
call SetUnitInvulnerable(d,true)
call SetUnitAnimation(d,"Morph")
call SaveAgentHandle(HH,h1,0,d)
call TimerStart(t1,animationTime,false,function cj_anonym__303)
call DestroyTimer(GetExpiredTimer())
set d=null
set t1=null
endfunction
function Hashirama___MokujinCast takes nothing returns nothing
local real castTime=.58
call Sound("Hashirama Mokuton Mokujin no Jutsu.mp3")
call UnitRemoveAbility(Hashirama_c,0x4230354E)
call TimerStart(CreateTimer(),castTime,false,function cj_anonym__302)
endfunction
function cj_anonym__305 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real mp=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
if GetWidgetLife(tu)>.405 and time>0.then
if not IsUnitSummon(tu)then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Feedback\\ArcaneTowerAttack.mdl",tu,"origin"))
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)-GetUnitState(tu,UNIT_STATE_MAX_MANA)*mp)
call UnitDamageTarget(Hashirama_c,tu,GetTaijutsuDamage(dmg,Hashirama_c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call SaveReal(HH,h,4,time-period)
else
call RemoveUnit(LoadUnitHandle(HH,h,5))
if GetWidgetLife(tu)>.405 then
if not IsUnitSummon(tu)then
if GetUnitState(tu,UNIT_STATE_MANA)<mp then
call UnitDamageTarget(Hashirama_c,tu,GetTaijutsuDamage(dmg,Hashirama_c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
else
call KillUnit(tu)
endif
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Hashirama___MokuryuCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Hashirama_c)
local real y=GetWidgetY(Hashirama_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real time=3.
local real period=.25
local real mp=.1*period
local real dmg=100.*period
local unit d=CreateUnit(Hashirama___p,0x6E303447,x1,y1,a)
call Sound("Hashirama Mokuton Mokuryu no Jutsu.mp3")
call UnitRemoveAbility(Hashirama_c,0x4230354E)
call SetUnitAnimation(d,"Spell")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,mp)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call SaveAgentHandle(HH,h,5,d)
call TimerStart(t,period,true,function cj_anonym__305)
set d=null
set t=null
endfunction
function Hashirama___MokuBunshinGetDamageConditions takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit())==0x45303049 or GetUnitTypeId(GetEventDamageSource())==0x45303049
endfunction
function Hashirama___MokuBunshinGetDamageActions takes nothing returns nothing
local unit attacker=GetEventDamageSource()
local unit attacked=GetTriggerUnit()
local real dmg=GetEventDamage()
local real value
call DisableTrigger(Hashirama___trgMokuBunshinDamage)
if GetUnitTypeId(attacker)==0x45303049 then
set value=dmg*.9
call SetWidgetLife(attacked,GetWidgetLife(attacked)+value)
elseif GetUnitTypeId(attacked)==0x45303049 then
set value=dmg*3.-1.
call UnitDamageTarget(attacker,attacked,value,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call EnableTrigger(Hashirama___trgMokuBunshinDamage)
set attacked=null
set attacker=null
endfunction
function Hashirama___MokubunshinRegistr takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Hashirama___p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(tg,Hashirama___grMokuBunshinReg)then
call GroupAddUnit(Hashirama___grMokuBunshinReg,tg)
call TriggerRegisterUnitEvent(Hashirama___trgMokuBunshinDamage,tg,EVENT_UNIT_DAMAGED)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__306 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local destructable des=LoadDestructableHandle(HH,h,0)
if GetDestructableLife(des)>0.then
call RemoveUnit(LoadUnitHandle(HH,GetHandleId(des),0))
call KillDestructable(des)
call FlushChildHashtable(HH,GetHandleId(des))
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Hashirama___MokuBunshinOver takes unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real time=180.
local destructable des=CreateDestructable(0x42303232,x,y,GetRandomReal(0.,360.),GetRandomReal(.6,.8),1)
call FlushChildHashtable(HH,GetHandleId(d))
call RemoveUnit(d)
call SaveAgentHandle(HH,h,0,des)
call SaveAgentHandle(HH,GetHandleId(des),0,CreateUnit(Hashirama___p,0x6E303449,x,y,0.))
call TimerStart(t,time,false,function cj_anonym__306)
set des=null
set t=null
endfunction
function cj_anonym__307 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
call SetUnitState(d,UNIT_STATE_MANA,GetUnitState(d,UNIT_STATE_MANA)-GetUnitState(d,UNIT_STATE_MAX_MANA)*.05)
if Hashirama___MokuBunshinNumber==0 or GetWidgetLife(Hashirama_c)<.405 or GetUnitAbilityLevel(Hashirama_c,0x41305735)==0 or GetWidgetLife(d)<.405 or GetUnitState(d,UNIT_STATE_MANA)==0.or GetUnitAbilityLevel(d,0x41305735)==0 then
call Hashirama___MokuBunshinOver(d)
set Hashirama___MokuBunshinNumber=Hashirama___MokuBunshinNumber-1
if Hashirama___MokuBunshinNumber==0 or GetWidgetLife(Hashirama_c)<.405 or GetUnitAbilityLevel(Hashirama_c,0x41305735)==0 then
call DisableTrigger(Hashirama___trgMokuBunshinDamage)
call UnitRemoveAbility(Hashirama_c,0x41305735)
if GetUnitAbilityLevel(Hashirama_c,0x4230354E)>0 then
call SetPlayerAbilityAvailable(Hashirama___p,0x41305341,true)
endif
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Hashirama___MokuBunshinCast takes nothing returns nothing
local timer t
local integer i=5
local real x=GetWidgetX(Hashirama_c)
local real y=GetWidgetY(Hashirama_c)
local real f=GetUnitFacing(Hashirama_c)
set Hashirama___MokuBunshinNumber=i
call Sound("Ping.mp3")
call SetPlayerAbilityAvailable(Hashirama___p,0x41305341,false)
call UnitAddAbility(Hashirama_c,0x41305735)
call UnitRemoveAbility(Hashirama_c,0x4230354E)
call EnableTrigger(Hashirama___trgMokuBunshinDamage)
loop
set t=CreateTimer()
set bj_lastCreatedUnit=CreateUnit(Hashirama___p,0x45303049,x,y,f)
call SetHeroXP(bj_lastCreatedUnit,GetHeroXP(Hashirama_c),false)
call SuspendHeroXP(bj_lastCreatedUnit,false)
call SetUnitState(bj_lastCreatedUnit,UNIT_STATE_MANA,GetUnitState(Hashirama_c,UNIT_STATE_MANA))
call SetWidgetLife(bj_lastCreatedUnit,GetWidgetLife(Hashirama_c))
call UnitAddAbility(bj_lastCreatedUnit,0x41305735)
if GetLocalPlayer()==Hashirama___p then
call SetUnitVertexColor(bj_lastCreatedUnit,78,42,4,255)
endif
call TriggerRegisterUnitEvent(Hashirama___trgMokuBunshinDamage,bj_lastCreatedUnit,EVENT_UNIT_DAMAGED)
call SaveAgentHandle(HH,GetHandleId(t),0,bj_lastCreatedUnit)
call TimerStart(t,1.,true,function cj_anonym__307)
set i=i-1
exitwhen i==0
endloop
call Hashirama___MokubunshinRegistr()
set t=null
endfunction
function cj_anonym__308 takes nothing returns nothing
if GetUnitAbilityLevel(Hashirama_c,0x4230354E)==0 then
call SetPlayerAbilityAvailable(Hashirama___p,0x41305341,false)
call SetPlayerAbilityAvailable(Hashirama___p,0x41304234,false)
call SetPlayerAbilityAvailable(Hashirama___p,0x41305751,false)
if GetUnitAbilityLevel(Hashirama_c,0x42303557)==0 then
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_KOKUANGYO,true)
if Hashirama___JukaiKotan_radius!=0.then
call SetPlayerAbilityAvailable(Hashirama___p,0x41305348,true)
else
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_JUKAI_KOTAN,true)
endif
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SUMMON,true)
endif
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Hashirama___SummonCast takes nothing returns nothing
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_KOKUANGYO,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_JUKAI_KOTAN,false)
call SetPlayerAbilityAvailable(Hashirama___p,0x41305348,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_SUMMON,false)
if GetUnitAbilityLevel(Hashirama_c,0x41305735)==0 then
if GetUnitAbilityLevel(Hashirama_c,0x41305341)==0 then
call UnitAddAbility(Hashirama_c,0x41305341)
endif
call SetPlayerAbilityAvailable(Hashirama___p,0x41305341,true)
endif
if GetUnitAbilityLevel(Hashirama_c,0x41304234)==0 then
call UnitAddAbility(Hashirama_c,0x41304234)
endif
call SetPlayerAbilityAvailable(Hashirama___p,0x41304234,true)
if GetUnitAbilityLevel(Hashirama_c,0x41305751)==0 then
call UnitAddAbility(Hashirama_c,0x41305751)
endif
call SetPlayerAbilityAvailable(Hashirama___p,0x41305751,true)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__308)
endfunction
function Hashirama___MokutonKajukaiKorinClearBuff takes nothing returns nothing
local unit tg
call GroupEnumUnitsInRect(bj_lastCreatedGroup,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
call UnitRemoveAbility(tg,0x42303552)
call UnitRemoveAbility(tg,0x41305147)
call UnitRemoveAbility(tg,0x42303551)
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
endfunction
function Hashirama___MokutonKajukaiKorinKillDestructables takes nothing returns nothing
local destructable des=GetEnumDestructable()
if GetDestructableTypeId(des)==0x42303149 then
call RemoveDestructable(des)
endif
set des=null
endfunction
function Hashirama___MokutonKajukaiKorinSlow takes nothing returns nothing
local unit tg
call GroupEnumUnitsInRect(bj_lastCreatedGroup,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41305657)>0 then
if GetUnitAbilityLevel(tg,0x42303552)>0 then
if GetUnitAbilityLevel(tg,0x41305147)==0 then
call UnitAddAbility(tg,0x41305147)
else
if GetUnitAbilityLevel(tg,0x42303553)==0 then
call SetUnitAbilityLevel(tg,0x41305147,GetUnitAbilityLevel(tg,0x41305147)+1)
if GetUnitAbilityLevel(tg,0x41305147)==5 then
set bj_lastCreatedUnit=CreateUnit(Hashirama___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313735)
call IssueTargetOrder(bj_lastCreatedUnit,"sleep",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call UnitRemoveAbility(tg,0x41305147)
call UnitRemoveAbility(tg,0x42303551)
endif
endif
endif
else
if GetUnitAbilityLevel(tg,0x41305147)>0 then
call UnitRemoveAbility(tg,0x41305147)
call UnitRemoveAbility(tg,0x42303551)
endif
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
endfunction
function cj_anonym__309 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer number=LoadInteger(HH,h,-1)
local real offset_plus=LoadReal(HH,h,-2)
local real offset_cur=LoadReal(HH,h,-3)
local real random_angle=GetRandomReal(1.,360.)
local real random_offset=GetRandomReal(offset_cur,Hashirama___JukaiKotan_radius)
if GetWidgetLife(Hashirama_c)>.405 and Hashirama___JukaiKotan_radius!=0.then
set number=number+1
set bj_lastCreatedDestructable=CreateDestructable(0x42303149,Hashirama___JukaiKotan_x+random_offset*Cos(random_angle*bj_DEGTORAD),Hashirama___JukaiKotan_y+random_offset*Sin(random_angle*bj_DEGTORAD),GetRandomReal(0.,360.),GetRandomReal(2.,2.3),1)
call SaveAgentHandle(HH,h,number,CreateUnit(Hashirama___p,0x6E303444,GetWidgetX(bj_lastCreatedDestructable),GetWidgetY(bj_lastCreatedDestructable),GetRandomReal(0.,360.)))
call Hashirama___MokutonKajukaiKorinSlow()
call SaveInteger(HH,h,-1,number)
call SaveReal(HH,h,-3,offset_cur+offset_plus)
else
loop
call RemoveUnit(LoadUnitHandle(HH,h,number))
set number=number-1
exitwhen number==0
endloop
call EnumDestructablesInRect(bj_mapInitialPlayableArea,null,function Hashirama___MokutonKajukaiKorinKillDestructables)
call Hashirama___MokutonKajukaiKorinClearBuff()
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hashirama___MokutonKajukaiKorinCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real offset_plus=15.
local real period=1.
call Sound("Ping.mp3")
call SaveInteger(HH,h,-1,0)
call SaveReal(HH,h,-2,offset_plus)
call SaveReal(HH,h,-3,offset_plus)
call TimerStart(t,period,true,function cj_anonym__309)
set t=null
endfunction
function Hashirama___IsPointInJukaiKotan takes real x,real y returns boolean
local boolean log=false
local real x1=Hashirama___JukaiKotan_x
local real y1=Hashirama___JukaiKotan_y
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=Hashirama___JukaiKotan_radius then
set log=true
endif
return log
endfunction
function Hashirama___JukaiKotanKillDestructables takes nothing returns nothing
local destructable des=GetEnumDestructable()
if GetWidgetLife(des)>.405 and GetDestructableTypeId(des)==0x42547463 or GetDestructableTypeId(des)==0x5A547463 then
call KillDestructable(des)
endif
set des=null
endfunction
function cj_anonym__311 takes nothing returns boolean
local unit tg=GetFilterUnit()
if GetUnitAbilityLevel(tg,0x41305657)>0 then
call UnitRemoveAbility(tg,0x41305657)
call UnitRemoveAbility(tg,0x42303537)
endif
set tg=null
return false
endfunction
function cj_anonym__310 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real time=LoadReal(HH,h,0)
local real period=LoadReal(HH,h,1)
local rect r=LoadRectHandle(HH,h,2)
local group g=LoadGroupHandle(HH,h,3)
local real x1
local real y1
local unit tg
if time>0 then
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Hashirama___p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if GetUnitAbilityLevel(tg,0x41305657)==0 then
call UnitAddAbility(tg,0x41305657)
endif
else
if GetUnitAbilityLevel(tg,0x41305657)>0 then
call UnitRemoveAbility(tg,0x41305657)
call UnitRemoveAbility(tg,0x42303537)
endif
if GetUnitAbilityLevel(tg,0x41305147)>0 then
call UnitRemoveAbility(tg,0x41305147)
call UnitRemoveAbility(tg,0x42303551)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,0,time-period)
else
if GetUnitAbilityLevel(Hashirama_c,0x4230354E)==0 and GetUnitAbilityLevel(Hashirama_c,0x42303557)==0 then
call SetPlayerAbilityAvailable(Hashirama___p,0x41305348,false)
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_JUKAI_KOTAN,true)
endif
call RemoveUnit(LoadUnitHandle(HH,h,4))
call EnumDestructablesInRect(bj_mapInitialPlayableArea,null,function Hashirama___JukaiKotanKillDestructables)
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,Condition(function cj_anonym__311))
call RemoveRect(r)
call DestroyGroup(g)
set Hashirama___JukaiKotan_radius=0.
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set r=null
set tg=null
set t=null
endfunction
function Hashirama___JukaiKotanCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer number=0
local real period=.25
local real time=30.
local integer id
local real x=GetWidgetX(Hashirama_c)
local real y=GetWidgetY(Hashirama_c)
local real radius=900.
local rect r=Rect(x-radius,y-radius,x+radius,y+radius)
set Hashirama___JukaiKotan_x=x
set Hashirama___JukaiKotan_y=y
set Hashirama___JukaiKotan_radius=radius
call Sound("Hashirama Mokuton Hijutsu Jukai Kotan.mp3")
call SetPlayerAbilityAvailable(Hashirama___p,Hashirama_JUKAI_KOTAN,false)
if GetUnitAbilityLevel(Hashirama_c,0x41305348)==0 then
call UnitAddAbility(Hashirama_c,0x41305348)
endif
call SetPlayerAbilityAvailable(Hashirama___p,0x41305348,true)
loop
if GetRandomInt(1,2)==1 then
set id=0x42547463
else
set id=0x5A547463
endif
call CreateDestructable(id,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),GetRandomReal(0.,360.),GetRandomReal(.8,1.),1)
set number=number+1
exitwhen number==25
endloop
call SaveReal(HH,h,0,time)
call SaveReal(HH,h,1,period)
call SaveAgentHandle(HH,h,2,r)
call SaveAgentHandle(HH,h,3,CreateGroup())
call SaveAgentHandle(HH,h,4,CreateUnit(Hashirama___p,0x68303037,x,y,0.))
call TimerStart(t,period,true,function cj_anonym__310)
set t=null
set r=null
endfunction
function cj_anonym__313 takes nothing returns boolean
local unit tg=GetFilterUnit()
if GetUnitAbilityLevel(tg,0x41305049)>0 then
call UnitRemoveAbility(tg,0x41305049)
call UnitRemoveAbility(tg,0x42303556)
endif
set tg=null
return false
endfunction
function cj_anonym__312 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real time=LoadReal(HH,h,0)
local real period=LoadReal(HH,h,1)
local rect r=LoadRectHandle(HH,h,2)
local group g=LoadGroupHandle(HH,h,3)
local real x1
local real y1
local unit tg
if GetWidgetLife(Hashirama_c)>.405 and time>0.then
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Hashirama___p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if GetUnitAbilityLevel(tg,0x41305049)==0 then
set bj_lastCreatedUnit=CreateUnit(Hashirama___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41303344)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call UnitAddAbility(tg,0x41305049)
endif
else
if GetUnitAbilityLevel(tg,0x41305049)>0 then
call UnitRemoveAbility(tg,0x41305049)
call UnitRemoveAbility(tg,0x42303556)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
if time==10.then
call SetUnitTimeScale(LoadUnitHandle(HH,h,4),0.)
endif
call SaveReal(HH,h,0,time-period)
else
call RemoveUnit(LoadUnitHandle(HH,h,4))
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,Condition(function cj_anonym__313))
call RemoveRect(r)
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set r=null
set tg=null
set t=null
endfunction
function Hashirama___KokuangyoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=10.
local real period=.25
local real x=GetWidgetX(Hashirama_c)
local real y=GetWidgetY(Hashirama_c)
local real radius=1200.
call Sound("Hashirama Kokuangyo no Jutsu.mp3")
call SaveReal(HH,h,0,time)
call SaveReal(HH,h,1,period)
call SaveAgentHandle(HH,h,2,Rect(x-radius,y-radius,x+radius,y+radius))
call SaveAgentHandle(HH,h,3,CreateGroup())
call SaveAgentHandle(HH,h,4,CreateUnit(Hashirama___p,0x6E303446,x,y,0.))
call TimerStart(t,period,true,function cj_anonym__312)
set t=null
endfunction
function cj_anonym__315 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
call RemoveItem(LoadItemHandle(HH,h,1))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
endfunction
function cj_anonym__314 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real x1=LoadReal(HH,h,3)
local real y1=LoadReal(HH,h,4)
local real time=1.
local item art=CreateItem(FUMA_SHURIKEN_ID,x,y)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call UnitAddItem(bj_lastCreatedUnit,art)
call UnitUseItemPoint(bj_lastCreatedUnit,art,x1,y1)
call SaveAgentHandle(HH,h1,0,d)
call SaveAgentHandle(HH,h1,1,art)
call TimerStart(t1,time,false,function cj_anonym__315)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set art=null
set d=null
set t=null
set t1=null
endfunction
function Hashirama___MokutonNoJutsuCastFuma takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real time=.5
set bj_lastCreatedUnit=CreateUnit(Hashirama___p,Hashirama_MOKUTON_NO_JUTSU_FUMA_CAST_ID,x,y,a)
call SetUnitTimeScale(bj_lastCreatedUnit,2.)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveReal(HH,h,3,x1)
call SaveReal(HH,h,4,y1)
call TimerStart(t,time,false,function cj_anonym__314)
set t=null
endfunction
function cj_anonym__316 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(Hashirama_c)
local real y=GetWidgetY(Hashirama_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Hashirama_c)>.405 and GetWidgetLife(tu)>.405 and distance>offset then
if not IsUnitPaused(Hashirama_c)then
call PauseUnit(Hashirama_c,true)
endif
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call SetUnitPosition(tu,x1-offset*Cos(a*bj_DEGTORAD),y1-offset*Sin(a*bj_DEGTORAD))
else
call SetUnitAnimation(Hashirama_c,"Stand Ready")
call SetUnitTimeScale(tu,1.)
call SetUnitPathing(tu,true)
call PauseUnit(Hashirama_c,false)
call PauseUnit(tu,false)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call DestroyEffect(LoadEffectHandle(HH,h,2))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Hashirama___MokutonNoJutsuCastUnitAttraction takes unit tu,real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real speed=600.
local real offset=speed*period
if IsUnitEnemy(tu,Hashirama___p)and Hashirama___IsPointInJukaiKotan(x1,y1)then
call Hashirama___MokutonNoJutsuCastFuma(x,y,x1,y1)
endif
call PauseUnit(Hashirama_c,true)
call PauseUnit(tu,true)
call SetUnitPathing(tu,false)
call SetUnitTimeScale(tu,0.)
call SetUnitAnimation(Hashirama_c,"Spell Throw")
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Mokuton Protective Zahvat [WolSai].mdx",tu,"origin"))
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("Mokuton Protective Zahvat-Udusheniye.mdx",tu,"origin"))
call SaveReal(HH,h,3,offset)
call TimerStart(t,period,true,function cj_anonym__316)
set t=null
endfunction
function Hashirama___MokutonNoJutsuCastUnit takes unit tu,real x,real y,real x1,real y1 returns nothing
local real dmg=50.
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real condition_distance=300.
local real knockback_distance=400.
if distance<=condition_distance then
call UnitApplyTimedLife(CreateUnit(Hashirama___p,0x6E303445,x,y,a),0x42544C46,1.334)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",x1,y1))
call KnockBackUnitEf(tu,knockback_distance,knockback_distance/1000.,a,.025,0,false)
if IsUnitEnemy(tu,Hashirama___p)then
if Hashirama___IsPointInJukaiKotan(x1,y1)then
call Hashirama___MokutonNoJutsuCastFuma(x,y,x1,y1)
endif
call UnitDamageTarget(Hashirama_c,tu,GetTaijutsuDamage(dmg,Hashirama_c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
else
call Hashirama___MokutonNoJutsuCastUnitAttraction(tu,x,y,x1,y1)
endif
endfunction
function cj_anonym__317 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local unit tg
if time>0.then
call GroupAddGroup(g2,g1)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41305657)>0 then
call UnitDamageTarget(Hashirama_c,tg,GetTaijutsuDamage(dmg,Hashirama_c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g1,tg)
endloop
call GroupAddGroup(g1,g2)
call SaveReal(HH,h,4,time-period)
else
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set g1=null
set g2=null
set t=null
endfunction
function Hashirama___MokutonNoJutsuCastDestructable takes destructable des,real x1,real y1 returns nothing
local timer t
local integer h
local boolean log=false
local group g1=CreateGroup()
local group g2=CreateGroup()
local unit tg
local real period=1.
local real time=4.
local real radius=200.
local real dmg=25.*period
call GroupEnumUnitsInRange(g1,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and IsUnitEnemy(tg,Hashirama___p)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
set bj_lastCreatedUnit=CreateUnit(Hashirama___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313734)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call GroupAddUnit(g2,tg)
if not log then
set log=true
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
if log and Hashirama___IsPointInJukaiKotan(x1,y1)then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,g2)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call TimerStart(t,period,true,function cj_anonym__317)
else
call DestroyGroup(g1)
call DestroyGroup(g2)
endif
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function Hashirama___MokujoHekiGuardCast takes real x,real y,real time returns nothing
local integer max=6
local real start_offset=400.
local real degree=0.
local real degree_plus=360./max
loop
call UnitApplyTimedLife(CreateUnit(Hashirama___p,0x6E303442,x+start_offset*Cos(degree*bj_DEGTORAD),y+start_offset*Sin(degree*bj_DEGTORAD),degree),0x42544C46,time)
set degree=degree+degree_plus
set max=max-1
exitwhen max==0
endloop
endfunction
function Hashirama___MokujoHekiGetDamageConditions takes nothing returns boolean
return Hashirama___mokujoheki!=null and GetEventDamage()>0.and GetWidgetLife(GetTriggerUnit())>.405 and IsUnitInGroup(GetTriggerUnit(),Hashirama___grMokujoHekiCheck)
endfunction
function Hashirama___MokujoHekiGetDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local real dmg=GetEventDamage()
local real life=GetWidgetLife(Hashirama___mokujoheki)
if dmg<=life then
call SetWidgetLife(u,GetWidgetLife(u)+dmg)
call SetWidgetLife(Hashirama___mokujoheki,GetWidgetLife(Hashirama___mokujoheki)-dmg)
else
call SetWidgetLife(u,GetWidgetLife(u)+life)
call SetWidgetLife(Hashirama___mokujoheki,GetWidgetLife(Hashirama___mokujoheki)-life)
endif
set u=null
endfunction
function Hashirama___MokujoHekiDefense takes real radius returns nothing
local real x=GetWidgetX(Hashirama___mokujoheki)
local real y=GetWidgetY(Hashirama___mokujoheki)
local real x1
local real y1
local rect r=Rect(x-radius,y-radius,x+radius,y+radius)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if tg!=Hashirama___mokujoheki and IsUnitAlly(tg,Hashirama___p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if not IsUnitInGroup(tg,Hashirama___grMokujoHekiReg)then
call GroupAddUnit(Hashirama___grMokujoHekiReg,tg)
call TriggerRegisterUnitEvent(Hashirama___trgMokujoHekiDamage,tg,EVENT_UNIT_DAMAGED)
endif
if not IsUnitInGroup(tg,Hashirama___grMokujoHekiCheck)then
call GroupAddUnit(Hashirama___grMokujoHekiCheck,tg)
endif
else
call GroupRemoveUnit(Hashirama___grMokujoHekiCheck,tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call RemoveRect(r)
set r=null
set tg=null
set g=null
endfunction
function Hashirama___MokujoHekiRemove takes integer max returns nothing
local integer hd=GetHandleId(Hashirama___mokujoheki)
local integer i=0
loop
call RemoveDestructable(LoadDestructableHandle(HH,hd,i))
set i=i+1
exitwhen i==max
endloop
endfunction
function Hashirama___MokujoHekiCreateBlock takes real radius returns integer
local integer hd=GetHandleId(Hashirama___mokujoheki)
local integer i=0
local integer max=24
local real x=GetWidgetX(Hashirama___mokujoheki)
local real y=GetWidgetY(Hashirama___mokujoheki)
local real startOffset=radius/1.25
local real degree=0.
local real degreeStep=360./max
loop
call SaveDestructableHandle(HH,hd,i,CreateDestructable(0x59546663,x+startOffset*Cos(degree*bj_DEGTORAD),y+startOffset*Sin(degree*bj_DEGTORAD),0.,1.,0))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
return max
endfunction
function cj_anonym__318 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
if time>0.and GetWidgetLife(Hashirama___mokujoheki)>.405 then
call Hashirama___MokujoHekiDefense(radius)
call SaveReal(HH,h,2,time-period)
else
call DisableTrigger(Hashirama___trgMokujoHekiDamage)
call Hashirama___MokujoHekiRemove(LoadInteger(HH,h,0))
call GroupClear(Hashirama___grMokujoHekiCheck)
call RemoveUnit(Hashirama___mokujoheki)
set Hashirama___mokujoheki=null
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hashirama___MokujoHekiCast takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real f=GetUnitFacing(Hashirama_c)
local real period=1.
local real time=5.
local real radius=400.
set Hashirama___mokujoheki=CreateUnit(Hashirama___p,0x6E303441,x,y,f)
if Hashirama___IsPointInJukaiKotan(x,y)then
call Hashirama___MokujoHekiGuardCast(x,y,time)
endif
call EnableTrigger(Hashirama___trgMokujoHekiDamage)
call SaveInteger(HH,h,0,Hashirama___MokujoHekiCreateBlock(radius))
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,radius)
call TimerStart(t,period,true,function cj_anonym__318)
set t=null
endfunction
function Hashirama___MokutonNoJutsuCast takes unit tu,destructable des returns nothing
local real x=GetWidgetX(Hashirama_c)
local real y=GetWidgetY(Hashirama_c)
local real x1
local real y1
local real distance
call Sound("Ping.mp3")
if tu!=null then
set x1=GetWidgetX(tu)
set y1=GetWidgetY(tu)
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if Hashirama_c!=tu then
call Hashirama___MokutonNoJutsuCastUnit(tu,x,y,x1,y1)
else
call Hashirama___MokujoHekiCast(x,y)
endif
elseif des!=null then
set x1=GetWidgetX(des)
set y1=GetWidgetY(des)
call Hashirama___MokutonNoJutsuCastDestructable(des,x1,y1)
endif
endfunction
function Hashirama___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Hashirama_MOKUTON_NO_JUTSU or i==Hashirama_KOKUANGYO or i==Hashirama_JUKAI_KOTAN or i==0x41305348 or i==Hashirama_SUMMON or i==0x41305341 or i==0x41305735 or i==0x41304234 or i==0x41305751 or i==Hashirama_SENNIN_MODO or i==Hashirama_SAISEI_NORYOKU or i==Hashirama_MYOJINMON or i==Hashirama_HOTEI or i==Hashirama_SHIN_SUSENJU or i==Hashirama_CHOJO_KEBUTSU
endfunction
function Hashirama___SpellsActions takes nothing returns nothing
local integer i
if Hashirama_c==null then
set Hashirama_c=GetTriggerUnit()
set Hashirama___p=GetOwningPlayer(Hashirama_c)
endif
set i=GetSpellAbilityId()
if i==Hashirama_MOKUTON_NO_JUTSU then
call Hashirama___MokutonNoJutsuCast(GetSpellTargetUnit(),GetSpellTargetDestructable())
elseif i==Hashirama_KOKUANGYO then
call Hashirama___KokuangyoCast()
elseif i==Hashirama_JUKAI_KOTAN then
call Hashirama___JukaiKotanCast()
elseif i==0x41305348 then
call Hashirama___MokutonKajukaiKorinCast()
elseif i==Hashirama_SUMMON then
call Hashirama___SummonCast()
elseif i==0x41305341 then
call Hashirama___MokuBunshinCast()
elseif i==0x41305735 then
call UnitRemoveAbility(GetTriggerUnit(),0x41305735)
elseif i==0x41304234 then
call Hashirama___MokuryuCast(GetSpellTargetUnit())
elseif i==0x41305751 then
call Hashirama___MokujinCast()
elseif i==Hashirama_SENNIN_MODO then
call Hashirama___SenninModoCast()
elseif i==Hashirama_SAISEI_NORYOKU then
call Hashirama___SaiseiNoryokuCast()
elseif i==Hashirama_MYOJINMON then
call Hashirama___MyojinmonCast(GetSpellTargetUnit())
elseif i==Hashirama_HOTEI then
call Hashirama___HoteiNoJutsuCast()
elseif i==Hashirama_SHIN_SUSENJU then
call Hashirama___ShinSusenjuCast()
elseif i==Hashirama_CHOJO_KEBUTSU then
call Hashirama___ChojoKebutsuCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Hashirama_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
set Hashirama___grDamage=CreateGroup()
set Hashirama___grMokujoHekiReg=CreateGroup()
set Hashirama___grMokujoHekiCheck=CreateGroup()
set Hashirama___trgMokujoHekiDamage=CreateTrigger()
set Hashirama___grMokuBunshinReg=CreateGroup()
set Hashirama___trgMokuBunshinDamage=CreateTrigger()
call DisableTrigger(Hashirama___trgMokuBunshinDamage)
call DisableTrigger(Hashirama___trgMokujoHekiDamage)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41304C46,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Hashirama___SpellsConditions))
call TriggerAddAction(spells,function Hashirama___SpellsActions)
call TriggerAddCondition(attack,Condition(function Hashirama___AttackConditions))
call TriggerAddAction(attack,function Hashirama___AttackActions)
call TriggerAddCondition(Hashirama___trgMokujoHekiDamage,Condition(function Hashirama___MokujoHekiGetDamageConditions))
call TriggerAddAction(Hashirama___trgMokujoHekiDamage,function Hashirama___MokujoHekiGetDamageActions)
call TriggerAddCondition(Hashirama___trgMokuBunshinDamage,Condition(function Hashirama___MokuBunshinGetDamageConditions))
call TriggerAddAction(Hashirama___trgMokuBunshinDamage,function Hashirama___MokuBunshinGetDamageActions)
set attack=null
set spells=null
endfunction
function cj_anonym__319 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real timeDebuff=LoadReal(HH,h,1)
if GetWidgetLife(Hidan_prey)>.405 and timeDebuff>0.then
call SaveReal(HH,h,1,timeDebuff-period)
else
call UnitRemoveAbility(Hidan_prey,0x4130555A)
call UnitRemoveAbility(Hidan_prey,0x42303136)
call UnitRemoveAbility(Hidan_prey,0x41304151)
call UnitRemoveAbility(Hidan_prey,0x42303137)
set Hidan_prey=null
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hidan___SanjinNoOgamaDebuff takes real timeDebuff returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvlUlt=GetUnitAbilityLevel(Hidan_c,Hidan_JUJUTSU)
local real period=.1
call UnitAddAbility(Hidan_prey,0x4130555A)
call Sound("Hidan Sanjin no Ogama Damage.mp3")
if lvlUlt>0 then
call DisplayTimedTextToPlayer(Hidan_p,0.,0.,5.,"|cFFFFCC00Вы добыли кровь героя игрока|r "+GetPlayerNameColored(GetOwningPlayer(Hidan_prey))+"|cFFFFCC00! Теперь вы можете применить Jujutsu: Shiju Hyoketsu и покарать свою жертву в течение "+I2S(R2I(timeDebuff))+" секунд!|r")
else
call DisplayTimedTextToPlayer(Hidan_p,0.,0.,5.,"|cFFFFCC00Вы добыли кровь героя игрока|r "+GetPlayerNameColored(GetOwningPlayer(Hidan_prey))+"|cFFFFCC00! Изучите Jujutsu: Shiju Hyoketsu и покарайте свою жертву в течение "+I2S(R2I(timeDebuff))+" секунд!|r")
endif
call DestroyEffect(AddSpecialEffectTarget("BloodExplosion.mdx",Hidan_prey,"chest"))
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,timeDebuff)
call TimerStart(t,period,true,function cj_anonym__319)
set t=null
endfunction
function Hidan___InoriGetRegeneration takes nothing returns real
local integer lvl=GetUnitAbilityLevel(Hidan_c,Hidan_INORI)
local integer score=10
local real value
local real regen=0.
if lvl==1 then
set value=.001
elseif lvl==2 then
set value=.002
elseif lvl==3 then
set value=.003
elseif lvl==4 then
set value=.004
elseif lvl==5 then
set value=.005
elseif lvl==6 then
set value=.006
endif
if Hidan_jashinPoint>=score then
set regen=Hidan_jashinPoint*value
endif
return regen
endfunction
function cj_anonym__320 takes nothing returns nothing
if GetWidgetLife(Hidan_c)>.405 and not IsUnitInvulnerable(Hidan_c)and Hidan_jashinPoint>0 and not IsUnitDisabled(Hidan_c)then
call SetWidgetLife(Hidan_c,GetWidgetLife(Hidan_c)+Hidan___InoriGetRegeneration())
endif
endfunction
function Hidan_AddAbility_Inori takes nothing returns nothing
local integer i=0
if Hidan_c==null then
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Hidan]then
set Hidan_c=udg_Hero[i]
set Hidan_p=GetOwningPlayer(Hidan_c)
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endif
call TimerStart(CreateTimer(),.1,true,function cj_anonym__320)
endfunction
function cj_anonym__322 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real dmg=LoadReal(HH,h,0)
call Sound("Hidan Ritual Heart.mp3")
call PauseUnit(Hidan_c,false)
call UnitRemoveAbility(Hidan_c,0x41304151)
call UnitRemoveAbility(Hidan_c,0x42303137)
if Hidan_prey!=null then
call UnitRemoveAbility(Hidan_prey,0x41304151)
call UnitRemoveAbility(Hidan_prey,0x42303137)
endif
call UnitDamageTarget(Hidan_c,Hidan_c,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__321 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real period=1.
call Sound("Hidan Ritual Arm.mp3")
call SetUnitAbilityLevel(Hidan_c,0x41304151,2)
if Hidan_prey!=null then
call SetUnitAbilityLevel(Hidan_prey,0x41304151,2)
endif
call SaveReal(HH,h1,0,LoadReal(HH,h,0))
call TimerStart(t1,period,false,function cj_anonym__322)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Hidan___Kutsu takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real maxHP=GetUnitState(Hidan_c,UNIT_STATE_MAX_LIFE)
local real adddmg=.6
local real dmg=maxHP*adddmg
local real period=1.
call PauseUnit(Hidan_c,true)
call UnitAddAbility(Hidan_c,0x41304151)
if Hidan_prey!=null then
call UnitAddAbility(Hidan_prey,0x41304151)
endif
call Sound("Hidan Ritual Leg.mp3")
call SaveReal(HH,h,0,dmg)
call TimerStart(t,period,false,function cj_anonym__321)
set t=null
endfunction
function Hidan___GetDamageRitualConditions takes nothing returns boolean
return Hidan_prey!=null and not IsUnitIllusion(GetTriggerUnit())and GetEventDamage()>0.
endfunction
function Hidan___GetDamageRitualActions takes nothing returns nothing
local real x1=GetWidgetX(Hidan_c)
local real y1=GetWidgetY(Hidan_c)
local real radius=150.
local real dmg=GetEventDamage()
if SquareRoot((Hidan_ritualX-x1)*(Hidan_ritualX-x1)+(Hidan_ritualY-y1)*(Hidan_ritualY-y1))<radius then
call SetWidgetLife(Hidan_c,GetWidgetLife(Hidan_c)+dmg)
call UnitDamageTarget(Hidan_c,Hidan_prey,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
endfunction
function cj_anonym__323 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real time=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
if time>0.then
call SaveReal(HH,h,1,time-period)
else
call DisableTrigger(Hidan_getdmgRitual)
call SetPlayerAbilityAvailable(Hidan_p,0x41304441,false)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call DestroyEffect(Hidan___e)
set Hidan___e=AddSpecialEffectTarget("Hidan Scythe.mdx",Hidan_c,"hand left ref")
call AddUnitAnimationProperties(Hidan_c,"Stand",true)
call AddUnitAnimationProperties(Hidan_c,"Stand ready",true)
call AddUnitAnimationProperties(Hidan_c,"Walk",true)
call AddUnitAnimationProperties(Hidan_c,"Attack 1",true)
call AddUnitAnimationProperties(Hidan_c,"Attack 2",true)
call AddUnitAnimationProperties(Hidan_c,"Attack slam",true)
call AddUnitAnimationProperties(Hidan_c,"Death",true)
call AddUnitAnimationProperties(Hidan_c,"Morph",true)
call AddUnitAnimationProperties(Hidan_c,"Stand alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Stand ready alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Walk alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Attack alternate 1",false)
call AddUnitAnimationProperties(Hidan_c,"Death alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Morph alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Spell alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Spell Channel alternate",false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hidan___JujutsuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Hidan_c)
local real y=GetWidgetY(Hidan_c)
local real time=25.
local real period=1.
set Hidan_ritualX=x
set Hidan_ritualY=y
call DestroyEffect(Hidan___e)
set Hidan___e=AddSpecialEffectTarget("Hidan Bayonet.mdx",Hidan_c,"hand right ref")
if GetRandomInt(1,2)==1 then
call Sound("Hidan Ritual 1.mp3")
else
call Sound("Hidan Ritual 2.mp3")
endif
call AddUnitAnimationProperties(Hidan_c,"Stand alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Stand ready alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Walk alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Attack alternate 1",true)
call AddUnitAnimationProperties(Hidan_c,"Death alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Morph alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Spell alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Spell Channel alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Stand",false)
call AddUnitAnimationProperties(Hidan_c,"Stand ready",false)
call AddUnitAnimationProperties(Hidan_c,"Walk",false)
call AddUnitAnimationProperties(Hidan_c,"Attack 1",false)
call AddUnitAnimationProperties(Hidan_c,"Attack 2",false)
call AddUnitAnimationProperties(Hidan_c,"Attack Slam",false)
call AddUnitAnimationProperties(Hidan_c,"Death",false)
call AddUnitAnimationProperties(Hidan_c,"Morph",false)
if GetUnitAbilityLevel(Hidan_c,0x41304441)==0 then
call UnitAddAbility(Hidan_c,0x41304441)
else
call SetPlayerAbilityAvailable(Hidan_p,0x41304441,true)
endif
call SaveAgentHandle(HH,h,0,CreateUnit(Hidan_p,0x68303334,x,y,GetRandomReal(0.,360.)))
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,period)
call EnableTrigger(Hidan_getdmgRitual)
call IssueImmediateOrder(Hidan_c,"holdposition")
call TimerStart(t,1.,true,function cj_anonym__323)
set t=null
endfunction
function Hidan___KyokenbyoDamage takes real x,real y,real dmg,real radius,real timeDebuff returns nothing
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedClear(tg,Hidan_p)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(Hidan_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if Hidan_prey==null and IsUnitHero(tg)and GetRandomInt(1,33)==1 then
set Hidan_prey=tg
call Hidan___SanjinNoOgamaDebuff(timeDebuff)
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
endfunction
function Hidan___OrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),0x41305A50)>0
endfunction
function Hidan___OrderActions takes nothing returns nothing
set Hidan___kyokenbyoA=bj_RADTODEG*Atan2(GetOrderPointY()-GetWidgetY(Hidan_c),GetOrderPointX()-GetWidgetX(Hidan_c))
endfunction
function cj_anonym__324 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real offset=LoadReal(HH,h,0)
local real radius=LoadReal(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real timeDebuff=LoadReal(HH,h,5)
local real timeAnimation=LoadReal(HH,h,6)
local real x=GetWidgetX(Hidan_c)
local real y=GetWidgetY(Hidan_c)
local real f
if GetUnitAbilityLevel(Hidan_c,0x42303347)>0 and GetUnitAbilityLevel(Hidan_c,0x41305A50)>0 then
call IssueImmediateOrder(Hidan_c,"stop")
if time<.2 then
call SaveReal(HH,h,4,time+period)
else
call Sound("Hidan Kyokenbyo.mp3")
call DestroyEffect(AddSpecialEffectTarget("Hidan Passive.mdx",Hidan_c,"chest"))
call KillDestructablesStart(x,y,radius)
if SpecialEffectsShow then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x,y))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
endif
endif
call Hidan___KyokenbyoDamage(x,y,dmg,radius,timeDebuff)
call SaveReal(HH,h,4,0.)
endif
if timeAnimation<.276 then
call SaveReal(HH,h,6,timeAnimation+period)
else
call SetUnitAnimation(Hidan_c,"spell channel")
call SaveReal(HH,h,6,0.)
endif
call SetUnitFacing(Hidan_c,Hidan___kyokenbyoA)
set f=GetUnitFacing(Hidan_c)
call SetUnitPosition(Hidan_c,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
else
call SetUnitTimeScale(Hidan_c,1.)
call UnitRemoveAbility(Hidan_c,0x41305A50)
call SetPlayerAbilityAvailable(Hidan_p,Hidan_SANJIN_NO_OGAMA,true)
call SetPlayerAbilityAvailable(Hidan_p,Hidan_KYOKENBYO,true)
call SetPlayerAbilityAvailable(Hidan_p,Hidan_JUJUTSU,true)
if not IsTriggerEnabled(Hidan_getdmgRitual)then
call AddUnitAnimationProperties(Hidan_c,"Stand",true)
call AddUnitAnimationProperties(Hidan_c,"Stand ready",true)
call AddUnitAnimationProperties(Hidan_c,"Walk",true)
call AddUnitAnimationProperties(Hidan_c,"Attack 1",true)
call AddUnitAnimationProperties(Hidan_c,"Attack 2",true)
call AddUnitAnimationProperties(Hidan_c,"Attack slam",true)
call AddUnitAnimationProperties(Hidan_c,"Death",true)
call AddUnitAnimationProperties(Hidan_c,"Morph",true)
else
call AddUnitAnimationProperties(Hidan_c,"Stand alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Stand ready alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Walk alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Attack alternate 1",true)
call AddUnitAnimationProperties(Hidan_c,"Death alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Morph alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Spell alternate",true)
call AddUnitAnimationProperties(Hidan_c,"Spell Channel alternate",true)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hidan___KyokenbyoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.01
local real timeDebuff=30.
local real speed=GetUnitMoveSpeed(Hidan_c)*1.3
local real offset=speed*period
local real radius=125.
local real dmg=GetHeroAgi(Hidan_c,true)*.5
local real time=0.
local integer soundRandom=GetRandomInt(1,3)
set Hidan___kyokenbyoA=GetUnitFacing(Hidan_c)
if soundRandom==1 then
call Sound("Hidan Blood Act.mp3")
elseif soundRandom==2 then
call Sound("Hidan Crazy.mp3")
elseif soundRandom==3 then
call Sound("Hidan Range Attack.mp3")
endif
if not IsTriggerEnabled(Hidan_getdmgRitual)then
call AddUnitAnimationProperties(Hidan_c,"Stand",false)
call AddUnitAnimationProperties(Hidan_c,"Stand ready",false)
call AddUnitAnimationProperties(Hidan_c,"Walk",false)
call AddUnitAnimationProperties(Hidan_c,"Attack 1",false)
call AddUnitAnimationProperties(Hidan_c,"Attack 2",false)
call AddUnitAnimationProperties(Hidan_c,"Attack slam",false)
call AddUnitAnimationProperties(Hidan_c,"Death",false)
call AddUnitAnimationProperties(Hidan_c,"Morph",false)
else
call AddUnitAnimationProperties(Hidan_c,"Stand alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Stand ready alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Walk alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Attack alternate 1",false)
call AddUnitAnimationProperties(Hidan_c,"Death alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Morph alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Spell alternate",false)
call AddUnitAnimationProperties(Hidan_c,"Spell Channel alternate",false)
endif
call SetPlayerAbilityAvailable(Hidan_p,Hidan_SANJIN_NO_OGAMA,false)
call SetPlayerAbilityAvailable(Hidan_p,Hidan_KYOKENBYO,false)
call SetPlayerAbilityAvailable(Hidan_p,Hidan_JUJUTSU,false)
call UnitAddAbility(Hidan_c,0x41305A50)
call SetUnitTimeScale(Hidan_c,2.)
call SetUnitAnimation(Hidan_c,"spell channel")
call SaveReal(HH,h,0,offset)
call SaveReal(HH,h,1,radius)
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call SaveReal(HH,h,5,timeDebuff)
call SaveReal(HH,h,6,time)
call TimerStart(t,period,true,function cj_anonym__324)
set t=null
endfunction
function Hidan___SanjinNoOgamaCheck takes group g2,real x,real y,real radius,real dmg,real timeDebuff returns nothing
local group g1=CreateGroup()
local unit tg=null
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedClear(tg,Hidan_p)and not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(Hidan_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if Hidan_prey==null and IsUnitHero(tg)and GetRandomInt(1,4)==1 then
set Hidan_prey=tg
call Hidan___SanjinNoOgamaDebuff(timeDebuff)
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
set g1=null
set tg=null
endfunction
function cj_anonym__325 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real offset=LoadReal(HH,h,0)
local integer amount=LoadInteger(HH,h,1)
local real a=LoadReal(HH,h,2)
local real x=GetWidgetX(Hidan_c)
local real y=GetWidgetY(Hidan_c)
if GetWidgetLife(Hidan_c)>.405 and amount>0 then
call SetUnitPosition(Hidan_c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveInteger(HH,h,1,amount-1)
else
call SetUnitAnimation(Hidan_c,"stand ready")
call PauseUnit(Hidan_c,false)
call SetUnitPathing(Hidan_c,true)
call RemoveUnit(LoadUnitHandle(HH,h,3))
if not IsTriggerEnabled(Hidan_getdmgRitual)then
set Hidan___e=AddSpecialEffectTarget("Hidan Scythe.mdx",Hidan_c,"hand left ref")
else
set Hidan___e=AddSpecialEffectTarget("Hidan Bayonet.mdx",Hidan_c,"hand right ref")
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Hidan___SanjinNoOgamaMovement takes unit d,real x1,real y1,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Hidan_c)
local real y=GetWidgetY(Hidan_c)
local real period=.025
local real speed=900.
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer amount=R2I(distance/offset)
call Sound("Hidan Sanjin no Ogama Move.mp3")
call SetUnitPathing(Hidan_c,false)
call SetUnitAnimation(Hidan_c,"spell channel")
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SaveReal(HH,h,0,offset)
call SaveInteger(HH,h,1,amount)
call SaveReal(HH,h,2,a)
call SaveAgentHandle(HH,h,3,d)
call TimerStart(t,period,true,function cj_anonym__325)
set t=null
endfunction
function cj_anonym__326 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real offsetToReturn=LoadReal(HH,h,2)
local real x=GetWidgetX(Hidan_c)
local real y=GetWidgetY(Hidan_c)
local real x1=GetWidgetX(d)
local real y1=GetWidgetY(d)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Hidan_c)>.405 and distance>offsetToReturn then
call SetUnitPosition(d,x1-offset*Cos(a*bj_DEGTORAD),y1-offset*Sin(a*bj_DEGTORAD))
else
call Sound("Hidan Sanjin no Ogama Return 2.mp3")
call PauseUnit(Hidan_c,false)
call RemoveUnit(d)
if not IsTriggerEnabled(Hidan_getdmgRitual)then
set Hidan___e=AddSpecialEffectTarget("Hidan Scythe.mdx",Hidan_c,"hand left ref")
else
set Hidan___e=AddSpecialEffectTarget("Hidan Bayonet.mdx",Hidan_c,"hand right ref")
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Hidan___SanjinNoOgamaReturn takes unit d,real offset returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real offsetToReturn=offset*2.
call Sound("Hidan Sanjin no Ogama Return 1.mp3")
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,offsetToReturn)
call TimerStart(t,period,true,function cj_anonym__326)
set t=null
endfunction
function cj_anonym__327 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real distance=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real radius=LoadReal(HH,h,4)
local real dmg=LoadReal(HH,h,5)
local real timeDebuff=LoadReal(HH,h,6)
local real a=LoadReal(HH,h,7)
local real x1=LoadReal(HH,h,8)
local real y1=LoadReal(HH,h,9)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if GetWidgetLife(Hidan_c)>.405 and distance>0.then
call Hidan___SanjinNoOgamaCheck(g,x1,y1,radius,dmg,timeDebuff)
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call UnitApplyTimedLife(CreateUnit(Hidan_p,0x6E303038,x,y,a),0x42544C46,(distance/600.))
call SaveReal(HH,h,2,distance-offset)
else
if GetWidgetLife(Hidan_c)>.405 then
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",x,y))
if Hidan_prey==null then
call Hidan___SanjinNoOgamaMovement(d,x1,y1,a)
else
call Hidan___SanjinNoOgamaReturn(d,offset)
endif
else
call GroupClear(g)
call DestroyGroup(g)
call RemoveUnit(d)
if not IsTriggerEnabled(Hidan_getdmgRitual)then
set Hidan___e=AddSpecialEffectTarget("Hidan Scythe.mdx",Hidan_c,"hand left ref")
else
set Hidan___e=AddSpecialEffectTarget("Hidan Bayonet.mdx",Hidan_c,"hand right ref")
endif
call PauseUnit(Hidan_c,false)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set d=null
set t=null
endfunction
function Hidan___SanjinNoOgamaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real timeDebuff=30.
local real dmg=60.
local real period=.025
local real speed=1100.
local real offset=speed*period
local real radius=125.
local real startOffset=offset*2.25
local real xHero=GetWidgetX(Hidan_c)
local real yHero=GetWidgetY(Hidan_c)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local unit d=CreateUnit(Hidan_p,0x68303748,x,y,a)
call Sound("Hidan Sanjin no Ogama Cast.mp3")
call PauseUnit(Hidan_c,true)
call SetUnitPathing(d,false)
call SetUnitTypeFlying(d)
call DestroyEffect(Hidan___e)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,distance)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,radius)
call SaveReal(HH,h,5,dmg)
call SaveReal(HH,h,6,timeDebuff)
call SaveReal(HH,h,7,a)
call SaveReal(HH,h,8,x1)
call SaveReal(HH,h,9,y1)
call TimerStart(t,period,true,function cj_anonym__327)
set d=null
set t=null
endfunction
function Hidan___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Hidan_SANJIN_NO_OGAMA or i==Hidan_KYOKENBYO or i==0x41305A50 or i==Hidan_JUJUTSU or i==0x41304441
endfunction
function Hidan___SpellsActions takes nothing returns nothing
local integer i
if Hidan_c==null then
set Hidan_c=GetTriggerUnit()
set Hidan_p=GetOwningPlayer(Hidan_c)
call TriggerRegisterUnitEvent(Hidan_getdmgRitual,Hidan_c,EVENT_UNIT_DAMAGED)
endif
set i=GetSpellAbilityId()
if i==Hidan_SANJIN_NO_OGAMA then
call Hidan___SanjinNoOgamaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Hidan_KYOKENBYO then
call Hidan___KyokenbyoCast()
elseif i==0x41305A50 then
call UnitRemoveAbility(Hidan_c,0x41305A50)
elseif i==Hidan_JUJUTSU then
call Hidan___JujutsuCast()
elseif i==0x41304441 then
call Hidan___Kutsu()
endif
endfunction
function Hidan___StartJashinkyo takes unit u returns nothing
if Hidan_c==null then
set Hidan_c=u
set Hidan_p=GetOwningPlayer(Hidan_c)
endif
call TriggerRegisterUnitEvent(Hidan_getdmgRitual,Hidan_c,EVENT_UNIT_DAMAGED)
call HidanJashinkyoChangeText()
endfunction
function Hidan_AddJashinkyo takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Hidan]then
call Hidan___StartJashinkyo(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Hidan___StartSanjinNoOgama takes unit u returns nothing
if Hidan_c==null then
set Hidan_c=u
set Hidan_p=GetOwningPlayer(Hidan_c)
endif
set Hidan___e=AddSpecialEffectTarget("Hidan Scythe.mdx",Hidan_c,"hand left ref")
endfunction
function Hidan_AddSanjinNoOgama takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Hidan]then
call Hidan___StartSanjinNoOgama(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Hidan_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger order=CreateTrigger()
set Hidan_getdmgRitual=CreateTrigger()
call DisableTrigger(Hidan_getdmgRitual)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(order,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Hidan___SpellsConditions))
call TriggerAddAction(spells,function Hidan___SpellsActions)
call TriggerAddCondition(Hidan_getdmgRitual,Condition(function Hidan___GetDamageRitualConditions))
call TriggerAddAction(Hidan_getdmgRitual,function Hidan___GetDamageRitualActions)
call TriggerAddCondition(order,Condition(function Hidan___OrderConditions))
call TriggerAddAction(order,function Hidan___OrderActions)
set order=null
set spells=null
endfunction
function Itachi___SusanooChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Itachi___p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFFFE8A0E"+I2S(LoadInteger(HH,GetHandleId(udg_Hero[idp]),0))+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function Itachi___KarasuBunshinRemove takes unit d returns nothing
if Itachi___bunshinNumber>0 then
set Itachi___bunshinNumber=Itachi___bunshinNumber-1
if not Itachi___bunshinOneRemovedLog then
if d==Itachi___bunshinOne then
if GetWidgetLife(Itachi___bunshinTwo)>.405 then
set Itachi___bunshinLast=Itachi___bunshinTwo
else
set Itachi___bunshinTwo=null
endif
set Itachi___bunshinOne=null
elseif d==Itachi___bunshinTwo then
if GetWidgetLife(Itachi___bunshinOne)>.405 then
set Itachi___bunshinLast=Itachi___bunshinOne
else
set Itachi___bunshinOne=null
endif
set Itachi___bunshinTwo=null
endif
endif
set Itachi___bunshinOneRemovedLog=false
endif
if Itachi___bunshinNumber==0 and IsTriggerEnabled(Itachi___bunshingetdmg)then
set Itachi___bunshinOne=null
set Itachi___bunshinTwo=null
set Itachi___bunshinLast=null
call DisableTrigger(Itachi___bunshingetdmg)
call SetPlayerAbilityAvailable(Itachi___p,0x41313353,false)
endif
call RemoveUnit(d)
endfunction
function cj_anonym__329 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=LoadInteger(HH,h,-1)
local real offset=LoadReal(HH,h,max+0)
local real facing=LoadReal(HH,h,max+1)
local real height=LoadReal(HH,h,max+2)
local real period=LoadReal(HH,h,max+3)
local real time=LoadReal(HH,h,max+4)
local unit d
if time>0.then
loop
set d=LoadUnitHandle(HH,h,i)
call SetUnitFlyHeight(d,GetUnitFlyHeight(d)+height,0.)
call SetUnitPosition(d,GetWidgetX(d)+offset*Cos(GetUnitFacing(d)*bj_DEGTORAD),GetWidgetY(d)+offset*Sin(GetUnitFacing(d)*bj_DEGTORAD))
call SetUnitFacing(d,GetUnitFacing(d)+facing)
set i=i+1
exitwhen i==max
endloop
call SaveReal(HH,h,max+4,time-period)
else
call RemoveUnitAlpha(LoadUnitHandle(HH,h,-2),10,.04)
loop
set d=LoadUnitHandle(HH,h,i)
call RemoveUnit(d)
set i=i+1
exitwhen i==max
endloop
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__328 takes nothing returns nothing
call Sound("Itachi Karasu Genjutsu.mp3")
call DestroyTimer(GetExpiredTimer())
endfunction
function Itachi___KarasuGenjutsuCast takes unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real period=MainPeriod
local real time=4.
local real radius=300.
local real speed=300.
local real offset=speed*period
local real facing=3.
local real height=1.5
local real startOffset=radius/10.
local real timeSound=1.
local integer i=0
local integer max=5
local real degree=0.
local real degreeStep=360./max
local group g=CreateGroup()
local unit tg
call Sound("Sharingan Copy.mp3")
call TimerStart(CreateTimer(),timeSound,false,function cj_anonym__328)
call KillUnit(d)
call Itachi___KarasuBunshinRemove(d)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Itachi___p)then
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41305A46)
call IssueTargetOrder(bj_lastCreatedUnit,"sleep",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
loop
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x68303130,x+startOffset*Cos(degree*bj_DEGTORAD),y+startOffset*Sin(degree*bj_DEGTORAD),degree)
call SetUnitAnimation(bj_lastCreatedUnit,"Walk")
call SaveAgentHandle(HH,h,i,bj_lastCreatedUnit)
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
call SaveAgentHandle(HH,h,-2,CreateUnit(Itachi___p,0x6E30314C,x,y,0.))
call SaveInteger(HH,h,-1,max)
call SaveReal(HH,h,max+0,offset)
call SaveReal(HH,h,max+1,facing)
call SaveReal(HH,h,max+2,height)
call SaveReal(HH,h,max+3,period)
call SaveReal(HH,h,max+4,time)
call TimerStart(t,period,true,function cj_anonym__329)
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__330 takes nothing returns nothing
local integer hc=GetHandleId(Itachi___c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
if susanoo!=null then
call SetUnitAnimation(susanoo,"Stand")
call UnitRemoveAbility(Itachi___c,0x41313143)
call UnitRemoveAbility(Itachi___c,0x4131324E)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TOTSUKA,true)
endif
call DestroyTimer(GetExpiredTimer())
set susanoo=null
endfunction
function Itachi___YataNoKagamiCast takes nothing returns nothing
local integer hc=GetHandleId(Itachi___c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
call Sound("Akatsuki Jutsu.mp3")
call SetUnitAnimation(susanoo,"Spell")
call UnitAddAbility(Itachi___c,0x41313143)
call UnitAddAbility(Itachi___c,0x4131324E)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TOTSUKA,false)
call TimerStart(CreateTimer(),4.,false,function cj_anonym__330)
set susanoo=null
endfunction
function Itachi___TotsukaNoTsurugiStart takes unit tu,boolean log returns nothing
if log then
if IsUnitCreep(tu)or IsUnitCreepStart(tu)or IsUnitNC(tu)or IsUnitCreepSpecial(tu)or IsUnitSummon(tu)then
call UnitDamageTarget(Itachi___c,tu,99999.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
else
call PauseUnit(tu,true)
call SetUnitInvulnerable(tu,true)
call ShowUnit(tu,false)
endif
else
if IsUnitHidden(tu)then
call PauseUnit(tu,false)
call SetUnitInvulnerable(tu,false)
call ShowUnit(tu,true)
endif
endif
endfunction
function cj_anonym__333 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Itachi___TotsukaNoTsurugiStart(LoadUnitHandle(HH,h,0),false)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__332 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer hc=GetHandleId(Itachi___c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
local real time=2.67
local timer t1=CreateTimer()
if susanoo!=null then
call SetUnitAnimation(susanoo,"Stand")
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YATA,true)
call UnitRemoveAbility(Itachi___c,0x41313143)
set Itachi___totsukaOn=false
endif
call SaveAgentHandle(HH,GetHandleId(t1),0,LoadUnitHandle(HH,h,0))
call TimerStart(t1,time,false,function cj_anonym__333)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set susanoo=null
set t=null
set t1=null
endfunction
function cj_anonym__331 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer hc=GetHandleId(Itachi___c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
local real castOverTime=.61
local timer t1
if susanoo!=null then
set t1=CreateTimer()
call SetUnitAnimation(susanoo,"Spell two")
call SaveUnitHandle(HH,GetHandleId(t1),0,LoadUnitHandle(HH,h,0))
call TimerStart(t1,castOverTime,false,function cj_anonym__332)
else
call Itachi___TotsukaNoTsurugiStart(LoadUnitHandle(HH,h,0),false)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set susanoo=null
set t=null
set t1=null
endfunction
function Itachi___TotsukaNoTsurugiCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer hc=GetHandleId(Itachi___c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
local real castTime=.72
set Itachi___totsukaOn=true
call Sound("Itachi Totsuka no Tsurugi.mp3")
call SetUnitAnimation(susanoo,"Spell one")
call UnitAddAbility(Itachi___c,0x41313143)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YATA,false)
call Itachi___TotsukaNoTsurugiStart(tu,true)
call SaveAgentHandle(HH,GetHandleId(t),0,tu)
call TimerStart(t,castTime,false,function cj_anonym__331)
set susanoo=null
set t=null
endfunction
function Itachi___YasakaNoMagatamaDamage takes real x,real y returns nothing
local real radius=400.
local real dmg=400.
local real size=1.75
local group g=CreateGroup()
local unit tg
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,size,"NewDirtEXNofire.mdx",4.)
else
call CreateEffect(x,y,size,"IceSparks.mdx",4.)
endif
call CreateEffect(x,y,size,"EarthShock.mdx",2.)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Itachi___p)then
call UnitDamageTarget(Itachi___c,tg,GetNinjutsuDamage(dmg,Itachi___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__334 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local integer amount=LoadInteger(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SaveInteger(HH,h,4,amount-1)
else
call Itachi___YasakaNoMagatamaDamage(x,y)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Itachi___YasakaNoMagatamaCreate takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real speed=1200.
local real offset=speed*period
local real distance
local real moveTime
local real speedHeight
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local integer amount
local unit d
set d=CreateUnit(Itachi___p,0x6E303330,x,y,a)
call SetUnitTimeScale(d,1.5)
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
set moveTime=distance/speed
set speedHeight=GetUnitFlyHeight(d)/moveTime
set amount=R2I(distance/offset)
call SetUnitFlyHeight(d,0.,speedHeight)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,offset)
call SaveInteger(HH,h,4,amount)
call TimerStart(t,period,true,function cj_anonym__334)
set d=null
set t=null
endfunction
function cj_anonym__335 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local real radius=GetRandomReal(1.,400./2.)
local real randomAgnle=GetRandomReal(1.,360.)
if LoadUnitHandle(HH,GetHandleId(Itachi___c),3)!=null then
call Itachi___YasakaNoMagatamaCreate(x,y,x1+radius*Cos(randomAgnle*bj_DEGTORAD),y1+radius*Sin(randomAgnle*bj_DEGTORAD))
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Itachi___YasakaNoMagatamaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Itachi___c)
local real yHero=GetWidgetY(Itachi___c)
local real startAngleOffset=200.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real xAngle=xHero+startAngleOffset*Cos((a-90.)*bj_DEGTORAD)
local real yAngle=yHero+startAngleOffset*Sin((a-90.)*bj_DEGTORAD)
local real startOffset=350.
local real x=xAngle+startOffset*Cos(a*bj_DEGTORAD)
local real y=yAngle+startOffset*Sin(a*bj_DEGTORAD)
local real castTime=.5
local integer hc=GetHandleId(Itachi___c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
call Sound("Itachi Yasaka no Magatama.mp3")
call SetUnitFacing(susanoo,a)
call SetUnitAnimation(susanoo,"Spell One")
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,x1)
call SaveReal(HH,h,3,y1)
call TimerStart(t,castTime,false,function cj_anonym__335)
set susanoo=null
set t=null
endfunction
function Itachi___AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitIllusion(GetAttacker())and not LoadBoolean(HH,GetHandleId(GetAttacker()),2)and GetUnitAbilityLevel(GetAttacker(),Itachi_SUSANOO_SLOW)>0 or GetUnitAbilityLevel(GetAttacker(),0x41304347)>0
endfunction
function cj_anonym__336 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real hpMax
local real addDmg=.15
local real dmg
local real radius=400.
local real randomSize=GetRandomReal(1.75,2.)
local integer hu=GetHandleId(Itachi___c)
local string str=LoadStr(HH,hu,1)
local unit susanoo=LoadUnitHandle(HH,hu,3)
local group g=CreateGroup()
local unit tg
if GetWidgetLife(Itachi___c)>.405 and susanoo!=null then
if str=="susanoo"then
set addDmg=addDmg/2.
set radius=radius/2.
set randomSize=randomSize/1.75
elseif str=="susanoo full"then
call TerrainDeformRipple(x,y,radius,60.,500,1,250.,4.,.5,false)
endif
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,randomSize,"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,randomSize,"IceSparks.mdx",8.)
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Itachi___p)then
set hpMax=GetUnitState(tg,UNIT_STATE_MAX_LIFE)
if IsUnitBig(tg)then
set addDmg=addDmg/4.
endif
set dmg=hpMax*addDmg
call UnitDamageTarget(Itachi___c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveBoolean(HH,hu,2,false)
else
call FlushChildHashtable(HH,hu)
endif
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set susanoo=null
set tg=null
set g=null
endfunction
function Itachi___AttackActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit tu=GetTriggerUnit()
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real strikeTime=.4
local integer randomAnimation=GetRandomInt(1,2)
local integer hu=GetHandleId(Itachi___c)
local string str=LoadStr(HH,hu,1)
local unit susanoo=LoadUnitHandle(HH,hu,3)
call IssueImmediateOrder(Itachi___c,"stop")
if str=="susanoo"then
if randomAnimation==1 then
set strikeTime=.703
call SetUnitAnimation(susanoo,"Attack 1")
elseif randomAnimation==2 then
set strikeTime=.642
call SetUnitAnimation(susanoo,"Attack 2")
endif
elseif str=="susanoo full"then
if randomAnimation==1 then
call SetUnitAnimation(susanoo,"Attack 1")
elseif randomAnimation==2 then
call SetUnitAnimation(susanoo,"Attack 2")
endif
endif
call SaveBoolean(HH,hu,2,true)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call TimerStart(t,strikeTime,false,function cj_anonym__336)
set susanoo=null
set tu=null
set t=null
endfunction
function cj_anonym__337 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real mp=LoadReal(HH,h,1)
local real hp=LoadReal(HH,h,2)
local real x=GetWidgetX(Itachi___c)
local real y=GetWidgetY(Itachi___c)
local real x1=GetWidgetX(d)
local real y1=GetWidgetY(d)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer hu=GetHandleId(Itachi___c)
local string str=LoadStr(HH,hu,1)
call SetWidgetLife(Itachi___c,GetWidgetLife(Itachi___c)-GetUnitState(Itachi___c,UNIT_STATE_MAX_LIFE)*hp)
call SetUnitState(Itachi___c,UNIT_STATE_MANA,GetUnitState(Itachi___c,UNIT_STATE_MANA)-mp)
if GetWidgetLife(Itachi___c)>GetUnitState(Itachi___c,UNIT_STATE_MAX_LIFE)*hp*100.and GetWidgetLife(d)>.405 and GetUnitState(Itachi___c,UNIT_STATE_MANA)>0.and GetUnitAbilityLevel(Itachi___c,Itachi_RIBU_CANCEL)>0 and GetUnitAbilityLevel(Itachi___c,0x4230344D)>0 then
if not IsUnitDisabled(Itachi___c)and distance<125.then
call SetUnitX(d,x)
call SetUnitY(d,y)
call SetUnitFacing(d,GetUnitFacing(Itachi___c))
endif
if distance<125.then
if str=="susanoo"then
if GetUnitAbilityLevel(Itachi___c,Itachi_SUSANOO_SLOW)==0 then
call Sound("Madara Susanoo Restore.mp3")
if GetUnitAbilityLevel(Itachi___c,Itachi_YASAKA)>0 then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YASAKA,true)
endif
if GetUnitAbilityLevel(Itachi___c,Itachi_SUSANOO_FULL)>0 then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO_FULL,true)
endif
call UnitAddAbility(Itachi___c,Itachi_SUSANOO_SLOW)
endif
elseif str=="susanoo full"then
if GetUnitAbilityLevel(Itachi___c,0x41304347)==0 then
call Sound("Madara Susanoo Restore.mp3")
call UnitAddAbility(Itachi___c,0x41304347)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TOTSUKA,true)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YATA,true)
endif
endif
else
if str=="susanoo"then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YASAKA,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO_FULL,false)
call UnitRemoveAbility(Itachi___c,Itachi_SUSANOO_SLOW)
call UnitRemoveAbility(Itachi___c,0x42303450)
elseif str=="susanoo full"then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TOTSUKA,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YATA,false)
if GetUnitAbilityLevel(Itachi___c,0x4131324E)>0 then
call UnitRemoveAbility(Itachi___c,0x41313143)
call UnitRemoveAbility(Itachi___c,0x4131324E)
endif
call UnitRemoveAbility(Itachi___c,0x41304347)
call UnitRemoveAbility(Itachi___c,0x42303452)
endif
endif
else
if GetUnitTypeId(d)==0x6E303259 and str=="susanoo"and not Itachi___susanooFullOn then
call UnitRemoveAbility(Itachi___c,Itachi_RIBU_CANCEL)
call UnitRemoveAbility(Itachi___c,Itachi_SUSANOO_SLOW)
call UnitRemoveAbility(Itachi___c,0x42303450)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YASAKA,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO_FULL,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_GOKAKYU,true)
if GetUnitAbilityLevel(Itachi___c,0x4230344D)>0 and not Itachi___susanooFullOn then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUKUYOMI,true)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_AMATERASU,true)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_RIBU,true)
endif
if not Itachi___susanooFullOn then
call Sound("Itachi_Susanoo 4.mp3")
call SetUnitPathing(Itachi___c,true)
call SaveInteger(HH,GetHandleId(Itachi___c),0,0)
call FlushChildHashtable(HH,GetHandleId(Itachi___c))
call Itachi___SusanooChangeText(false)
endif
elseif GetUnitTypeId(d)==0x6E30325A and str=="susanoo full"and Itachi___susanooFullOn then
set Itachi___susanooFullOn=false
call UnitRemoveAbility(Itachi___c,Itachi_RIBU_CANCEL)
call UnitRemoveAbility(Itachi___c,0x41304347)
call UnitRemoveAbility(Itachi___c,0x42303452)
if GetUnitAbilityLevel(Itachi___c,0x4131324E)>0 then
call UnitRemoveAbility(Itachi___c,0x41313143)
call UnitRemoveAbility(Itachi___c,0x4131324E)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TOTSUKA,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YATA,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_GOKAKYU,true)
if GetUnitAbilityLevel(Itachi___c,0x4230344D)>0 then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUKUYOMI,true)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_AMATERASU,true)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_RIBU,true)
endif
call Sound("Itachi_Susanoo 4.mp3")
call SetUnitPathing(Itachi___c,true)
call SaveInteger(HH,GetHandleId(Itachi___c),0,0)
call FlushChildHashtable(HH,GetHandleId(Itachi___c))
call Itachi___SusanooChangeText(false)
endif
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Itachi___SusanooCast takes integer what returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer hu=GetHandleId(Itachi___c)
local integer HPcur=LoadInteger(HH,hu,0)
local real period=.01
local real x=GetWidgetX(Itachi___c)
local real y=GetWidgetY(Itachi___c)
local real f=GetUnitFacing(Itachi___c)
local real mp=15.*period
local real hp=.01*period
local integer level=GetHeroLevel(Itachi___c)
local integer id
local unit d
if what==1 then
call Sound("Itachi Susanoo Form 2.mp3")
set id=0x6E303259
set Itachi_ribuMax=3000
call SaveStr(HH,hu,1,"susanoo")
call UnitAddAbility(Itachi___c,Itachi_SUSANOO_SLOW)
call UnitRemoveAbility(Itachi___c,Itachi_RIBU_SLOW)
call UnitRemoveAbility(Itachi___c,0x4230344F)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_GOKAKYU,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUKUYOMI,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_AMATERASU,false)
if level>=9 then
if GetUnitAbilityLevel(Itachi___c,Itachi_YASAKA)==0 then
call UnitAddAbility(Itachi___c,Itachi_YASAKA)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YASAKA,true)
if level==10 then
if GetUnitAbilityLevel(Itachi___c,Itachi_SUSANOO_FULL)==0 then
call UnitAddAbility(Itachi___c,Itachi_SUSANOO_FULL)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO_FULL,true)
endif
endif
call SetUnitPathing(Itachi___c,false)
elseif what==2 then
call Sound("Itachi Susanoo Form 3.mp3")
set Itachi___susanooFullOn=true
set id=0x6E30325A
set Itachi_ribuMax=4000
set hp=.02*period
call SaveStr(HH,hu,1,"susanoo full")
call UnitAddAbility(Itachi___c,0x41304347)
call UnitRemoveAbility(Itachi___c,Itachi_SUSANOO_SLOW)
call UnitRemoveAbility(Itachi___c,0x42303450)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YASAKA,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO_FULL,false)
if GetUnitAbilityLevel(Itachi___c,Itachi_TOTSUKA)==0 then
call UnitAddAbility(Itachi___c,Itachi_TOTSUKA)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TOTSUKA,true)
if GetUnitAbilityLevel(Itachi___c,Itachi_YATA)==0 then
call UnitAddAbility(Itachi___c,Itachi_YATA)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_YATA,true)
call KillUnit(LoadUnitHandle(HH,hu,3))
endif
set d=CreateUnit(Itachi___p,id,x,y,f)
call SaveAgentHandle(HH,hu,3,d)
set HPcur=Itachi_ribuMax
call SaveInteger(HH,hu,0,HPcur)
call Itachi___SusanooChangeText(true)
call SetUnitX(d,x)
call SetUnitY(d,y)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,mp)
call SaveReal(HH,h,2,hp)
call TimerStart(t,period,true,function cj_anonym__337)
set d=null
set t=null
endfunction
function Itachi___RibuDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and GetUnitAbilityLevel(GetTriggerUnit(),Itachi_RIBU_CANCEL)>0
endfunction
function Itachi___RibuDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer hu=GetHandleId(u)
local integer HPcur=LoadInteger(HH,hu,0)
local integer dmg=R2I(GetEventDamage())
local real value=0.
call UnitAddAbility(u,0x41304D48)
if dmg<HPcur then
set value=I2R(dmg)
set HPcur=HPcur-dmg
else
set value=I2R(HPcur)
set HPcur=HPcur-HPcur
endif
call UnitRemoveAbility(u,0x41304D48)
call SetWidgetLife(u,GetWidgetLife(u)+value)
call SaveInteger(HH,hu,0,HPcur)
set HPcur=LoadInteger(HH,hu,0)
if HPcur<=0 then
call UnitRemoveAbility(u,Itachi_RIBU_CANCEL)
call UnitRemoveAbility(u,Itachi_RIBU_SLOW)
call UnitRemoveAbility(u,0x4230344F)
endif
call Itachi___SusanooChangeText(true)
set u=null
endfunction
function cj_anonym__338 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real mp=LoadReal(HH,h,0)
local real hp=LoadReal(HH,h,1)
local integer hu=GetHandleId(Itachi___c)
call SetWidgetLife(Itachi___c,GetWidgetLife(Itachi___c)-GetUnitState(Itachi___c,UNIT_STATE_MAX_LIFE)*hp)
call SetUnitState(Itachi___c,UNIT_STATE_MANA,GetUnitState(Itachi___c,UNIT_STATE_MANA)-mp)
if GetWidgetLife(Itachi___c)<.405 or GetUnitState(Itachi___c,UNIT_STATE_MANA)<=0.or GetUnitAbilityLevel(Itachi___c,Itachi_RIBU_CANCEL)==0 or GetUnitAbilityLevel(Itachi___c,0x4230344D)==0 then
call UnitRemoveAbility(Itachi___c,Itachi_RIBU_SLOW)
call UnitRemoveAbility(Itachi___c,0x4230344F)
if LoadStr(HH,hu,1)=="ribu"then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO,false)
call UnitRemoveAbility(Itachi___c,Itachi_RIBU_CANCEL)
if GetUnitAbilityLevel(Itachi___c,0x4230344D)>0 then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_RIBU,true)
endif
call SaveInteger(HH,hu,0,0)
set Itachi_ribuMax=0
call FlushChildHashtable(HH,hu)
call Itachi___SusanooChangeText(false)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Itachi___RibuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer hu=GetHandleId(Itachi___c)
local integer HPcur
local integer level=GetHeroLevel(Itachi___c)
local real period=.1
local real mp=15.*period
local real hp=.01*period
set Itachi_ribuMax=500
set HPcur=Itachi_ribuMax
call SetPlayerAbilityAvailable(Itachi___p,Itachi_RIBU,false)
call UnitAddAbility(Itachi___c,Itachi_RIBU_CANCEL)
call UnitAddAbility(Itachi___c,Itachi_RIBU_SLOW)
if level>=8 then
if GetUnitAbilityLevel(Itachi___c,Itachi_SUSANOO)==0 then
call UnitAddAbility(Itachi___c,Itachi_SUSANOO)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO,true)
endif
if not Itachi___ribuReg then
set Itachi___ribuReg=true
call TriggerRegisterUnitEvent(Itachi___ribudmg,Itachi___c,EVENT_UNIT_DAMAGED)
endif
call SaveReal(HH,h,0,mp)
call SaveReal(HH,h,1,hp)
call SaveInteger(HH,hu,0,HPcur)
call SaveStr(HH,hu,1,"ribu")
call Itachi___SusanooChangeText(true)
call TimerStart(t,period,true,function cj_anonym__338)
set t=null
endfunction
function cj_anonym__339 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local unit tg
if time>0.and GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(tu,0x41304159)>0 then
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,150.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41304159)==0 and not IsUnitInvulnerable(tg)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41305748)
call IssueTargetOrder(bj_lastCreatedUnit,"shadowstrike",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call UnitDamageTarget(Itachi___c,tu,GetNinjutsuDamage(dmg,Itachi___c,tu,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveReal(HH,h,4,time-period)
else
call UnitRemoveAbility(tu,0x41304159)
call UnitRemoveAbility(tu,0x4230344E)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set tu=null
set t=null
endfunction
function Itachi___AmaterasuStartActions takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
local real time=4.
local real dmg=100.
call UnitAddAbility(tu,0x41304159)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("amaterasu2.mdx",tu,"origin"))
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call TimerStart(t,period,true,function cj_anonym__339)
set t=null
endfunction
function Itachi___OrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),0x4130574A)>0
endfunction
function Itachi___OrderActions takes nothing returns nothing
local real x=GetWidgetX(Itachi___c)
local real y=GetWidgetY(Itachi___c)
local real x1=GetWidgetX(Itachi___amaterasu)
local real y1=GetWidgetY(Itachi___amaterasu)
local real x2=GetOrderPointX()
local real y2=GetOrderPointY()
local real distance=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))
if distance<=Itachi___amaterasuMaxRange then
call Sound("Itachi Amaterasu Movement.mp3")
set Itachi___amaterasuMoving=false
set Itachi___amaterasuA=bj_RADTODEG*Atan2(y2-y1,x2-x1)
set Itachi___amaterasuCurDistance=0.
set Itachi___amaterasuMaxDistance=SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
set Itachi___amaterasuMoving=true
call SetUnitPosition(Itachi___amaterasuMS,x2,y2)
else
call DisplayTimedTextToPlayer(Itachi___p,0.,0.,1.,"Слишком большое расстояние для |cFFFFCC00Amaterasu|r")
endif
endfunction
function cj_anonym__341 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real mp=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real distanceForMP=LoadReal(HH,h,3)
local real radius=LoadReal(HH,h,4)
local group g=LoadGroupHandle(HH,h,5)
local real x=GetWidgetX(Itachi___c)
local real y=GetWidgetY(Itachi___c)
local real x1=GetWidgetX(Itachi___amaterasu)
local real y1=GetWidgetY(Itachi___amaterasu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real effSize=2.
local real effTime
local real offset
local unit tg
set Itachi___amaterasuSpeed=GetUnitMoveSpeed(Itachi___c)
set offset=Itachi___amaterasuSpeed*period
set effTime=5.22/offset
call IssueImmediateOrder(Itachi___c,"stop")
call SetUnitAnimation(Itachi___c,"Spell channel")
call SetUnitFacing(Itachi___c,a)
if Itachi___amaterasuMoving then
if distanceForMP<100.then
call SaveReal(HH,h,3,distanceForMP+offset)
else
call SetUnitState(Itachi___c,UNIT_STATE_MANA,GetUnitState(Itachi___c,UNIT_STATE_MANA)-GetUnitState(Itachi___c,UNIT_STATE_MAX_MANA)*mp)
call SaveReal(HH,h,3,0.)
endif
if Itachi___amaterasuCurDistance<Itachi___amaterasuMaxDistance then
call SetUnitPosition(Itachi___amaterasu,x1+offset*Cos(Itachi___amaterasuA*.0174532),y1+offset*Sin(Itachi___amaterasuA*.0174532))
set Itachi___amaterasuCurDistance=Itachi___amaterasuCurDistance+offset
else
set Itachi___amaterasuMoving=false
endif
endif
if GetWidgetLife(Itachi___c)>.405 and GetUnitState(Itachi___c,UNIT_STATE_MANA)>0.and time>0.and GetUnitAbilityLevel(Itachi___c,0x4130574A)>0 and GetUnitAbilityLevel(Itachi___c,0x4230344D)>0 and not IsUnitDisabled(Itachi___c)then
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41304159)==0 and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
call Itachi___AmaterasuStartActions(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,1,time-period)
else
if GetWidgetLife(Itachi___c)>.405 then
call Sound("Itachi Amaterasu End.mp3")
endif
call DestroyGroup(g)
call RemoveUnit(Itachi___amaterasuMS)
call KillUnit(Itachi___amaterasu)
call UnitRemoveAbility(Itachi___c,0x4130574A)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_GOKAKYU,true)
if GetUnitAbilityLevel(Itachi___c,0x4230344D)>0 then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUKUYOMI,true)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_AMATERASU,true)
if LoadStr(HH,GetHandleId(Itachi___c),1)!="ribu"and LoadStr(HH,GetHandleId(Itachi___c),1)!="susanoo"and LoadStr(HH,GetHandleId(Itachi___c),1)!="susanoo full"then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_RIBU,true)
elseif LoadStr(HH,GetHandleId(Itachi___c),1)=="ribu"then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO,true)
endif
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
set Itachi___amaterasu=null
endif
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__340 takes nothing returns nothing
set Itachi___amaterasuCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Itachi___AmaterasuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.01
local real time=20.
local real mp=.01
local real radius=200.
set Itachi___amaterasuCD=true
call TimerStart(CreateTimer(),24.3,false,function cj_anonym__340)
call Sound("Itachi Amaterasu Cast.mp3")
set Itachi___amaterasu=CreateUnit(Itachi___p,0x6E303035,x1,y1,0.)
set Itachi___amaterasuMS=CreateUnit(Itachi___p,0x6E303142,x1,y1,0.)
call SetUnitScale(Itachi___amaterasuMS,2.,2.,2.)
set Itachi___amaterasuSpeed=GetUnitMoveSpeed(Itachi___c)
set Itachi___amaterasuMoving=false
call SetPlayerAbilityAvailable(Itachi___p,Itachi_GOKAKYU,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUKUYOMI,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_AMATERASU,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_RIBU,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_SUSANOO,false)
call UnitAddAbility(Itachi___c,0x4130574A)
call SaveReal(HH,h,0,mp)
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,0.)
call SaveReal(HH,h,4,radius)
call SaveAgentHandle(HH,h,5,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__341)
set t=null
endfunction
function Itachi___TsukuyomiEnd takes unit tu returns nothing
local real mpCur=GetUnitState(Itachi___c,UNIT_STATE_MANA)
local real hpMax=GetUnitState(tu,UNIT_STATE_MAX_LIFE)
local real chakraConst=1.4
local real addDmg=.2
local real dmgMain=GetHeroAgi(Itachi___c,true)*4.
local real dmgChakra=hpMax*addDmg
local real needChakra=dmgChakra*chakraConst
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Itachi___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x6830304C then
call CreateEffect(GetWidgetX(tg),GetWidgetY(tg),1.,"Crow Jutsu Feather SFX_squished.mdx",1.)
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call PauseUnit(tu,false)
call UnitDamageTarget(Itachi___c,tu,dmgMain,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tu)>.405 then
if mpCur>=needChakra then
call SetUnitState(Itachi___c,UNIT_STATE_MANA,mpCur-needChakra)
call UnitDamageTarget(Itachi___c,tu,dmgChakra,true,false,ATTACK_TYPE_CHAOS,null,null)
else
if mpCur>0.then
loop
set addDmg=addDmg-.01
set dmgChakra=hpMax*addDmg
set needChakra=dmgChakra*chakraConst
exitwhen mpCur<=needChakra or addDmg==0.
endloop
if addDmg>0.then
call SetUnitState(Itachi___c,UNIT_STATE_MANA,mpCur-needChakra)
call UnitDamageTarget(Itachi___c,tu,dmgChakra,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
endif
endif
endif
set tg=null
set g=null
endfunction
function cj_anonym__343 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.then
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call SaveReal(HH,h,2,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,4))
call DestroyEffect(LoadEffectHandle(HH,h,6))
call RemoveUnit(LoadUnitHandle(HH,h,3))
call RemoveUnit(LoadUnitHandle(HH,h,5))
call RemoveUnit(LoadUnitHandle(HH,h,7))
call Itachi___TsukuyomiEnd(tu)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function cj_anonym__342 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer time=LoadInteger(HH,h,0)
local unit tg
if time<4 then
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup,Itachi___p,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if GetUnitTypeId(tg)==0x6830304C then
call SetUnitAnimation(tg,"spell five")
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call SaveInteger(HH,h,0,time+1)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set t=null
endfunction
function Itachi___ItachiTsukuyomiCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=4.-period
local real f=GetUnitFacing(tu)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real x1=x+100.*Cos(f*bj_DEGTORAD)
local real y1=y+100.*Sin(f*bj_DEGTORAD)
call Sound("Itachi Tsukuyomi.mp3")
call PauseUnit(tu,true)
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6830304C,x1,y1,f+180.)
call SetUnitAnimation(bj_lastCreatedUnit,"spell four")
set f=0.
loop
exitwhen f>360.
set x1=x+200.*Cos(f*bj_DEGTORAD)
set y1=y+200.*Sin(f*bj_DEGTORAD)
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6830304C,x1,y1,57.2958279087*Atan2(y-y1,x-x1))
call SetUnitAnimation(bj_lastCreatedUnit,"spell four")
set f=f+30.
endloop
set f=0.
loop
exitwhen f>360.
set x1=x+350.*Cos(f*bj_DEGTORAD)
set y1=y+350.*Sin(f*bj_DEGTORAD)
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6830304C,x1,y1,57.2958279087*Atan2(y-y1,x-x1))
call SetUnitAnimation(bj_lastCreatedUnit,"spell four")
set f=f+10.
endloop
call TimerStart(CreateTimer(),1.5,true,function cj_anonym__342)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6E303042,x,y,0.)
call PauseUnit(bj_lastCreatedUnit,true)
call SetUnitScale(bj_lastCreatedUnit,1.15,1.15,1.15)
call SetUnitFlyHeight(bj_lastCreatedUnit,0.,0.)
call SaveAgentHandle(HH,h,3,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,4,AddSpecialEffectTarget("Tsukoyomi Dome v4.mdx",bj_lastCreatedUnit,"origin"))
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6E303042,x,y,0.)
call PauseUnit(bj_lastCreatedUnit,true)
call SetUnitScale(bj_lastCreatedUnit,1.1,1.1,1.1)
call SetUnitFlyHeight(bj_lastCreatedUnit,0.,0.)
call SaveAgentHandle(HH,h,5,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,6,AddSpecialEffectTarget("Itachi's Tsukuyomi Rood.mdx",bj_lastCreatedUnit,"origin"))
call SaveAgentHandle(HH,h,7,CreateUnit(Itachi___p,0x6E303142,x,y,0.))
call TimerStart(t,period,true,function cj_anonym__343)
set t=null
endfunction
function cj_anonym__344 takes nothing returns nothing
if GetUnitAbilityLevel(Itachi___c,0x4230344D)==0 then
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUKUYOMI,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_AMATERASU,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_RIBU,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUMABENI,true)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_BUNSHIN,true)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_IZANAMI,true)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Itachi___MangekyoSharinganCast takes nothing returns nothing
local integer lvl=GetHeroLevel(Itachi___c)
call Sound("Itachi Mangekyo Sharingan.mp3")
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUMABENI,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_BUNSHIN,false)
call SetPlayerAbilityAvailable(Itachi___p,Itachi_IZANAMI,false)
if lvl>=5 then
if GetUnitAbilityLevel(Itachi___c,Itachi_TSUKUYOMI)==0 then
call UnitAddAbility(Itachi___c,Itachi_TSUKUYOMI)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_TSUKUYOMI,true)
endif
if lvl>=6 then
if GetUnitAbilityLevel(Itachi___c,Itachi_AMATERASU)==0 then
call UnitAddAbility(Itachi___c,Itachi_AMATERASU)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_AMATERASU,true)
endif
if lvl>=7 then
if GetUnitAbilityLevel(Itachi___c,Itachi_RIBU)==0 then
call UnitAddAbility(Itachi___c,Itachi_RIBU)
endif
call SetPlayerAbilityAvailable(Itachi___p,Itachi_RIBU,true)
endif
if Itachi___bunshinOne!=null then
call Itachi___KarasuGenjutsuCast(Itachi___bunshinOne)
endif
if Itachi___bunshinTwo!=null then
call Itachi___KarasuGenjutsuCast(Itachi___bunshinTwo)
endif
call TimerStart(CreateTimer(),.1,true,function cj_anonym__344)
endfunction
function cj_anonym__345 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real xold=LoadReal(HH,h,1)
local real yold=LoadReal(HH,h,2)
local real lost=LoadReal(HH,h,3)
local real distanceOld=LoadReal(HH,h,4)
local real xnew=GetWidgetX(tu)
local real ynew=GetWidgetY(tu)
local real distanceNew=SquareRoot((xold-xnew)*(xold-xnew)+(yold-ynew)*(yold-ynew))
if GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(tu,0x42303157)>0 then
if distanceOld>0.then
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)-GetUnitState(tu,UNIT_STATE_MAX_MANA)*lost)
set distanceOld=0.
else
call UnitDamageTarget(Itachi___c,tu,GetUnitState(tu,UNIT_STATE_MAX_LIFE)*lost,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call SaveReal(HH,h,1,xnew)
call SaveReal(HH,h,2,ynew)
call SaveReal(HH,h,4,distanceOld+distanceNew)
else
call SetUnitPosition(tu,LoadReal(HH,h,5),LoadReal(HH,h,6))
call UnitRemoveAbility(tu,0x42303157)
call UnitRemoveAbility(tu,0x42303245)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Itachi___ItachiIzanamiCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real period=.1
local real lost=(10.*.01)*period
call Sound("Itachi_Genjutsu.mp3")
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6E303042,x,y,0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313545)
call IssuePointOrder(bj_lastCreatedUnit,"silence",x,y)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveReal(HH,h,3,lost)
call SaveReal(HH,h,4,0.)
call SaveReal(HH,h,5,x)
call SaveReal(HH,h,6,y)
call TimerStart(t,period,true,function cj_anonym__345)
set t=null
endfunction
function Itachi___KarasuKawarimiCast takes nothing returns nothing
local real x=GetWidgetX(Itachi___c)
local real y=GetWidgetY(Itachi___c)
local real f=GetUnitFacing(Itachi___c)
local real x1=GetWidgetX(Itachi___bunshinLast)
local real y1=GetWidgetY(Itachi___bunshinLast)
local real f1=GetUnitFacing(Itachi___bunshinLast)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real needRange=1500.
if Itachi___bunshinLast!=null and distance<=needRange then
call SetUnitPathing(Itachi___c,false)
call SetUnitPathing(Itachi___bunshinLast,false)
call SetUnitPosition(Itachi___c,x1,y1)
call SetUnitFacing(Itachi___c,f1)
call SetUnitPosition(Itachi___bunshinLast,x,y)
call SetUnitFacing(Itachi___bunshinLast,f)
call SetUnitPathing(Itachi___bunshinLast,true)
call SetUnitPathing(Itachi___c,true)
else
call DisplayTimedTextToPlayer(Itachi___p,0.,0.,1.,"|cFFFFCC00Слишком большое расстояние!|r")
endif
endfunction
function Itachi___BunshinDMGConditions takes nothing returns boolean
return GetEventDamage()>0.
endfunction
function Itachi___BunshinDMGActions takes nothing returns nothing
call Itachi___KarasuGenjutsuCast(GetTriggerUnit())
endfunction
function cj_anonym__346 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.and GetWidgetLife(d)>.405 then
call SaveReal(HH,h,2,time-period)
else
if GetWidgetLife(d)>.405 and not Itachi___bunshinOneRemovedLog then
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(d),GetWidgetY(d)))
call KillUnit(d)
call Itachi___KarasuBunshinRemove(d)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Itachi___ItachiBunshinCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Itachi___c)
local real y=GetWidgetY(Itachi___c)
local real lifeTime=20.
local real period=.1
local integer hd
set Itachi___bunshinNumber=Itachi___bunshinNumber+1
call Sound("Blink.mp3")
if GetUnitAbilityLevel(Itachi___c,0x41313353)==0 then
call UnitAddAbility(Itachi___c,0x41313353)
endif
call SetPlayerAbilityAvailable(Itachi___p,0x41313353,true)
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x4F303044,x1,y1,GetUnitFacing(Itachi___c))
call SetHeroXP(bj_lastCreatedUnit,GetHeroXP(Itachi___c),false)
call SuspendHeroXP(bj_lastCreatedUnit,false)
call SetWidgetLife(bj_lastCreatedUnit,GetWidgetLife(Itachi___c))
call SetUnitState(bj_lastCreatedUnit,UNIT_STATE_MANA,GetUnitState(Itachi___c,UNIT_STATE_MANA))
set hd=GetHandleId(bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,lifeTime)
call TriggerRegisterUnitEvent(Itachi___bunshingetdmg,bj_lastCreatedUnit,EVENT_UNIT_DAMAGED)
if Itachi___bunshinOne==null and Itachi___bunshinTwo==null then
set Itachi___bunshinOne=bj_lastCreatedUnit
set Itachi___bunshinOneRemovedLog=false
elseif Itachi___bunshinOne!=null and Itachi___bunshinTwo==null then
set Itachi___bunshinTwo=bj_lastCreatedUnit
elseif Itachi___bunshinOne==null and Itachi___bunshinTwo!=null then
set Itachi___bunshinOne=bj_lastCreatedUnit
elseif Itachi___bunshinOne!=null and Itachi___bunshinTwo!=null then
set Itachi___bunshinOneRemovedLog=true
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(Itachi___bunshinOne),GetWidgetY(Itachi___bunshinOne)))
call KillUnit(Itachi___bunshinOne)
call Itachi___KarasuBunshinRemove(Itachi___bunshinOne)
set Itachi___bunshinOne=Itachi___bunshinTwo
set Itachi___bunshinTwo=bj_lastCreatedUnit
endif
set Itachi___bunshinLast=bj_lastCreatedUnit
if not IsTriggerEnabled(Itachi___bunshingetdmg)then
call EnableTrigger(Itachi___bunshingetdmg)
endif
call TimerStart(t,period,true,function cj_anonym__346)
set t=null
endfunction
function cj_anonym__347 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real timeDebuff=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real rangeMax=LoadReal(HH,h,5)
local real rangeCur=LoadReal(HH,h,6)
local real radius=LoadReal(HH,h,7)
local real dmg=LoadReal(HH,h,8)
local real randomDegree=LoadReal(HH,h,9)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SetUnitFacing(d,f+randomDegree)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or rangeCur==rangeMax
if IsUnitNeedClear(tg,Itachi___p)then
call Sound3D(Itachi___c,"ITEM Kunai Touch.mp3")
call UnitTempSpell(tg,0x4130514C,0x42303453,timeDebuff,0,false)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl",tg,"chest"))
if not IsUnitBig(tg)then
call UnitDamageTarget(Itachi___c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
else
call UnitDamageTarget(Itachi___c,tg,dmg/4.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
set rangeCur=rangeMax
elseif IsUnitWeapon(d,tg,Itachi___p)then
call RemoveUnit(tg)
call UnitWeaponDestroy(x,y)
set rangeCur=rangeMax
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,6,rangeCur+offset)
else
call DestroyEffect(LoadEffectHandle(HH,h,2))
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set d=null
set tg=null
set t=null
endfunction
function Itachi___ShurikenCast takes unit l__Itachi___c,real x,real y,real x1,real y1,real randomDegreeCast,real randomDegreeStepMax returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real randomDegree=GetRandomReal(4.,14.)
local real flyDegree=9.
local real a
local real period=.05
local real dmg=15.+GetHeroLevel(l__Itachi___c)*5.
local real speed=750.
local real const=.07
local real offset=speed*period
local real radius=60.
local real rangeMax=900.
local real rangeCur=0.
local real timeDebuff=4.
local unit d
if randomDegreeCast<=180.then
set a=bj_RADTODEG*Atan2(y1-y,x1-x)-randomDegree
call SaveReal(HH,h,9,flyDegree*const)
elseif randomDegreeCast>180.then
set a=bj_RADTODEG*Atan2(y1-y,x1-x)+randomDegree
call SaveReal(HH,h,9,-flyDegree*const)
endif
set d=CreateUnit(Itachi___p,0x68303833,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl",d,"chest"))
call SaveReal(HH,h,3,timeDebuff)
call SaveReal(HH,h,4,offset)
call SaveReal(HH,h,5,rangeMax)
call SaveReal(HH,h,6,rangeCur)
call SaveReal(HH,h,7,radius)
call SaveReal(HH,h,8,dmg)
call TimerStart(t,period,true,function cj_anonym__347)
set d=null
set t=null
endfunction
function cj_anonym__349 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real xHero=GetWidgetX(Itachi___c)
local real yHero=GetWidgetY(Itachi___c)
local real startOffset=100.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real radius=300.
local real randomDegreeStepMin=50.
local real randomDegreeStepMax=radius/4.
local real randomOffset
local real randomDegree
local integer i=0
local integer max=12
loop
set randomOffset=GetRandomReal(randomDegreeStepMin,randomDegreeStepMax)
set randomDegree=GetRandomReal(1.,360.)
set randomDegreeStepMin=randomDegreeStepMin+5.
call Itachi___ShurikenCast(Itachi___c,x+randomOffset*Cos(randomDegree*bj_DEGTORAD),y+randomOffset*Sin(randomDegree*bj_DEGTORAD),x1,y1,randomDegree,randomDegreeStepMax*2.)
set i=i+1
exitwhen i==max
endloop
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__348 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real xHero=GetWidgetX(Itachi___c)
local real yHero=GetWidgetY(Itachi___c)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local timer t1=CreateTimer()
local real castTime=.667
call SetUnitAnimation(Itachi___c,"Attack")
set bj_lastCreatedUnit=CreateUnit(Itachi___p,0x6E303331,x,y,a)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,castTime)
call KnockBackUnitEf(bj_lastCreatedUnit,150.,.4,a,.025,0,false)
call SaveReal(HH,GetHandleId(t1),0,x1)
call SaveReal(HH,GetHandleId(t1),1,y1)
call TimerStart(t1,castTime,false,function cj_anonym__349)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Itachi___KatonHosenkaTsumabeniCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local real castTime=1.167
call Sound("Itachi Katon Hosenka Tsumabeni.mp3")
call SaveReal(HH,GetHandleId(t),0,x1)
call SaveReal(HH,GetHandleId(t),1,y1)
call TimerStart(t,castTime,false,function cj_anonym__348)
set t=null
endfunction
function cj_anonym__351 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g1=LoadGroupHandle(HH,h,1)
local group g2=LoadGroupHandle(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real distance=LoadReal(HH,h,4)
local real offset=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local unit tg
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if distance>0.then
if LoadInteger(HH,h,7)<5 then
call SaveInteger(HH,h,7,LoadInteger(HH,h,7)+1)
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call SaveInteger(HH,h,7,0)
endif
call GroupEnumUnitsInRange(g1,x,y,250.,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Itachi___p)and not IsUnitInGroup(tg,g2)then
call UnitDamageTarget(Itachi___c,tg,GetNinjutsuDamage(dmg,Itachi___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call GroupAddUnit(g2,tg)
call JiraiyaSetFireOil(Itachi___c,tg)
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
call FireDestructablesEnum(x,y,250./2.)
call JiraiyaSetFireSwamp(Itachi___c,x,y)
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,4,distance-offset)
else
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call CreateEffect(x,y,1.2,"Boom.mdx",1.)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set tg=null
set d=null
set t=null
endfunction
function cj_anonym__350 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real xHero=GetWidgetX(Itachi___c)
local real yHero=GetWidgetY(Itachi___c)
local real startOffset=175.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real time=2.
local real dmg=60.+GetHeroAgi(Itachi___c,true)*1.5
local real distance=1000.
local real offset=distance/(time/MainPeriod)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call SaveAgentHandle(HH,h1,0,CreateUnit(Itachi___p,0x68303049,x,y,a))
call SaveAgentHandle(HH,h1,1,CreateGroup())
call SaveAgentHandle(HH,h1,2,CreateGroup())
call SaveReal(HH,h1,3,dmg)
call SaveReal(HH,h1,4,distance)
call SaveReal(HH,h1,5,offset)
call SaveReal(HH,h1,6,a)
call TimerStart(t1,MainPeriod,true,function cj_anonym__351)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Itachi___ItachiGoukakyuuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=1.35
call Sound("Itachi Katon Gokakyu no Jutsu.mp3")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,castTime,false,function cj_anonym__350)
set t=null
endfunction
function Itachi___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Itachi_GOKAKYU or i==Itachi_TSUMABENI or i==Itachi_BUNSHIN or i==0x41303638 or i==0x41313353 or i==Itachi_IZANAMI or i==Itachi_MANGEKYO or i==Itachi_TSUKUYOMI or i==Itachi_AMATERASU or i==0x41305748 or i==0x4130574A or i==Itachi_RIBU or i==Itachi_RIBU_CANCEL or i==Itachi_SUSANOO or i==Itachi_YASAKA or i==Itachi_SUSANOO_FULL or i==Itachi_TOTSUKA or i==Itachi_YATA
endfunction
function Itachi___SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
if Itachi___c==null then
set Itachi___c=GetTriggerUnit()
set Itachi___p=GetOwningPlayer(Itachi___c)
endif
if i==Itachi_GOKAKYU then
call Itachi___ItachiGoukakyuuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Itachi_TSUMABENI then
call Itachi___KatonHosenkaTsumabeniCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Itachi_BUNSHIN then
call Itachi___ItachiBunshinCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41303638 then
call Itachi___KarasuGenjutsuCast(GetTriggerUnit())
elseif i==0x41313353 then
call Itachi___KarasuKawarimiCast()
elseif i==Itachi_IZANAMI then
call Itachi___ItachiIzanamiCast(GetSpellTargetUnit())
elseif i==Itachi_MANGEKYO then
if GetUnitAbilityLevel(Itachi___c,0x4230344D)==0 then
call Itachi___MangekyoSharinganCast()
endif
elseif i==Itachi_TSUKUYOMI then
call Itachi___ItachiTsukuyomiCast(GetSpellTargetUnit())
elseif i==Itachi_AMATERASU then
call Itachi___AmaterasuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41305748 then
call Itachi___AmaterasuStartActions(GetSpellTargetUnit())
elseif i==0x4130574A then
call UnitRemoveAbility(Itachi___c,0x4130574A)
elseif i==Itachi_RIBU then
call Itachi___RibuCast()
elseif i==Itachi_RIBU_CANCEL then
call UnitRemoveAbility(Itachi___c,Itachi_RIBU_CANCEL)
elseif i==Itachi_SUSANOO then
call Itachi___SusanooCast(1)
elseif i==Itachi_YASAKA then
call Itachi___YasakaNoMagatamaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Itachi_SUSANOO_FULL then
call Itachi___SusanooCast(2)
elseif i==Itachi_TOTSUKA then
call Itachi___TotsukaNoTsurugiCast(GetSpellTargetUnit())
elseif i==Itachi_YATA then
call Itachi___YataNoKagamiCast()
endif
endfunction
function Itachi_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger order=CreateTrigger()
local trigger attack=CreateTrigger()
set Itachi___bunshingetdmg=CreateTrigger()
set Itachi___getdmg=CreateTrigger()
set Itachi___ribudmg=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(order,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x4131324E,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Itachi___SpellsConditions))
call TriggerAddAction(spells,function Itachi___SpellsActions)
call TriggerAddCondition(Itachi___bunshingetdmg,Condition(function Itachi___BunshinDMGConditions))
call TriggerAddAction(Itachi___bunshingetdmg,function Itachi___BunshinDMGActions)
call TriggerAddCondition(Itachi___ribudmg,Condition(function Itachi___RibuDamageConditions))
call TriggerAddAction(Itachi___ribudmg,function Itachi___RibuDamageActions)
call TriggerAddCondition(order,Condition(function Itachi___OrderConditions))
call TriggerAddAction(order,function Itachi___OrderActions)
call DisableTrigger(Itachi___bunshingetdmg)
call TriggerAddCondition(attack,Condition(function Itachi___AttackConditions))
call TriggerAddAction(attack,function Itachi___AttackActions)
set attack=null
set spells=null
set order=null
endfunction
function Jiraiya___GetDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and GetUnitAbilityLevel(GetTriggerUnit(),0x41305659)>0
endfunction
function Jiraiya___GetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real adddmg=.3
local real dmg=GetEventDamage()*adddmg
call UnitDamageTarget(Jiraiya___c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
set tu=null
endfunction
function cj_anonym__352 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real time=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local group g1=LoadGroupHandle(HH,h,3)
local group g2=LoadGroupHandle(HH,h,4)
local unit tg
if time>0.then
if g1!=null then
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitInGroup(tg,g2)then
if not IsUnitPaused(tg)then
call PauseUnit(tg,true)
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
endif
call SaveReal(HH,h,1,time-period)
else
call DisableTrigger(Jiraiya___getdmg)
if g1!=null then
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41305659)
call UnitRemoveAbility(tg,0x4230315A)
call PauseUnit(tg,false)
call GroupRemoveUnit(g2,tg)
endloop
call DestroyGroup(g1)
call DestroyGroup(g2)
endif
call RemoveUnit(LoadUnitHandle(HH,h,0))
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function Jiraiya___UltCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=3.
local real period=.1
local real radius=300.
local group g1=CreateGroup()
local group g2=CreateGroup()
local boolean log=false
local unit tg
call Sound("Jiraiya SM Gamarinsho.mp3")
call GroupEnumUnitsInRange(g1,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitEnemy(tg,Jiraiya___p)and not IsUnitInvulnerable(tg)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
if not log then
set log=true
endif
call PauseUnit(tg,true)
call UnitAddAbility(tg,0x41305659)
call UnitRemoveInvisible(tg)
if not IsUnitInGroup(tg,Jiraiya___grReg)then
call GroupAddUnit(Jiraiya___grReg,tg)
call TriggerRegisterUnitEvent(Jiraiya___getdmg,tg,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(g2,tg)
endif
call GroupRemoveUnit(g1,tg)
endloop
call SaveAgentHandle(HH,h,0,CreateUnit(Jiraiya___p,0x6830375A,x1,y1,0.))
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,period)
if log then
call EnableTrigger(Jiraiya___getdmg)
call SaveAgentHandle(HH,h,3,g1)
call SaveAgentHandle(HH,h,4,g2)
endif
call TimerStart(t,period,true,function cj_anonym__352)
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function cj_anonym__353 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real a=LoadReal(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local integer amount=LoadInteger(HH,h,3)
local group g=LoadGroupHandle(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local unit tg
local boolean log
if amount>0 then
set log=false
call GroupEnumUnitsInRange(g,x,y,20.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Jiraiya___p)then
if not log then
set log=true
endif
call UnitDamageTarget(Jiraiya___c,tg,GetNinjutsuDamage(dmg,Jiraiya___c,tg,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call SetUnitPosition(d,x+40.*Cos(a),y+40.*Sin(a))
if not log then
call SaveInteger(HH,h,3,amount-1)
else
call SaveInteger(HH,h,3,0)
endif
else
call DestroyGroup(g)
call RemoveUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g=null
set tg=null
set d=null
set t=null
endfunction
function Jiraiya___KebariSenbonCreateUnit takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real dmg=40.
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call SaveAgentHandle(HH,h,0,CreateUnit(Jiraiya___p,0x6E303048,x,y,a))
call SaveReal(HH,h,1,a*bj_DEGTORAD)
call SaveReal(HH,h,2,dmg)
call SaveInteger(HH,h,3,R2I(distance/40.))
call SaveAgentHandle(HH,h,4,CreateGroup())
call TimerStart(t,MainPeriod,true,function cj_anonym__353)
set t=null
endfunction
function cj_anonym__354 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real f=LoadReal(HH,h,0)
local real range=LoadReal(HH,h,1)
local rect r=LoadRectHandle(HH,h,2)
local real mp=LoadReal(HH,h,3)
local real x=GetWidgetX(Jiraiya___c)+75.*Cos(f*bj_DEGTORAD)
local real y=GetWidgetY(Jiraiya___c)+75.*Sin(f*bj_DEGTORAD)
local real x1=x+range*Cos(f*bj_DEGTORAD)
local real y1=y+range*Sin(f*bj_DEGTORAD)
call SetUnitState(Jiraiya___c,UNIT_STATE_MANA,GetUnitState(Jiraiya___c,UNIT_STATE_MANA)-mp)
if GetUnitState(Jiraiya___c,UNIT_STATE_MANA)>0.and GetUnitCurrentOrder(Jiraiya___c)==OrderId("breathoffrost")then
call Jiraiya___KebariSenbonCreateUnit(x,y,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)))
else
call RemoveRect(r)
if GetUnitCurrentOrder(Jiraiya___c)==OrderId("breathoffrost")and GetWidgetLife(Jiraiya___c)>.405 then
call IssueImmediateOrder(Jiraiya___c,"stop")
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set r=null
set t=null
endfunction
function Jiraiya___KebariSenbonCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.04
local real radius=500.
local real range=500.
local real mp=25.*period
local real a=bj_RADTODEG*Atan2(y1-GetWidgetY(Jiraiya___c),x1-GetWidgetX(Jiraiya___c))
call Sound("Jiraya SM Kebari Senbon.mp3")
call SaveReal(HH,h,0,a)
call SaveReal(HH,h,1,range)
call SaveAgentHandle(HH,h,2,Rect(x1-radius/2.,y1-radius/2.,x1+radius/2.,y1+radius/2.))
call SaveReal(HH,h,3,mp)
call TimerStart(t,period,true,function cj_anonym__354)
set t=null
endfunction
function cj_anonym__355 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local real range=LoadReal(HH,h,5)
local real heightConst=LoadReal(HH,h,6)
local group g=LoadGroupHandle(HH,h,7)
local unit tg
if time>0.and GetWidgetLife(Jiraiya___c)>.405 then
call SetUnitAnimationByIndex(Jiraiya___c,17)
call SetUnitFlyHeight(Jiraiya___c,heightConst,0.)
call CreateEffect(x,y,1.75,"IceNova.mdx",2.)
call GroupEnumUnitsInRange(g,x,y,range,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Jiraiya___p)then
call UnitDamageTarget(Jiraiya___c,tg,GetNinjutsuDamage(dmg,Jiraiya___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,3,time-period)
else
call DestroyGroup(g)
call DestroyEffect(LoadEffectHandle(HH,h,8))
call SetUnitFlyHeight(Jiraiya___c,GetUnitDefaultFlyHeight(Jiraiya___c),1600.)
call SetUnitTimeScale(Jiraiya___c,1.)
call SetUnitAnimation(Jiraiya___c,"stand ready")
call PauseUnit(Jiraiya___c,false)
call SetUnitPathing(Jiraiya___c,true)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g=null
set tg=null
set t=null
endfunction
function Jiraiya___ChoOdamaRasenganStartAct takes real x1,real y1,real heightConst,effect e returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=1.3
local real period=.1
local real dmg=(250./time)*period
local real range=400.
call SetUnitAnimationByIndex(Jiraiya___c,17)
call Sound("Jiraya Cho Odama Rasengan.mp3")
call TerrainDeformRipple(x1,y1,400.,50.,1800,1,4.,3.,400.,false)
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,time)
call SaveReal(HH,h,4,period)
call SaveReal(HH,h,5,range)
call SaveReal(HH,h,6,heightConst)
call SaveAgentHandle(HH,h,7,CreateGroup())
call SaveAgentHandle(HH,h,8,e)
call TimerStart(t,period,true,function cj_anonym__355)
set t=null
endfunction
function cj_anonym__356 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real heightStep=LoadReal(HH,h,4)
local real heightConst=LoadReal(HH,h,5)
local real period=LoadReal(HH,h,6)
local real flyTimeMax=LoadReal(HH,h,7)
local real flyTimeCur=LoadReal(HH,h,8)
local real heightCur=GetUnitFlyHeight(Jiraiya___c)
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
if flyTimeCur>0.and GetWidgetLife(Jiraiya___c)>.405 then
call SetUnitPosition(Jiraiya___c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
if flyTimeCur>=flyTimeMax/2.then
call SetUnitAnimationByIndex(Jiraiya___c,17)
call SetUnitFlyHeight(Jiraiya___c,heightCur+heightStep,0.)
else
if heightCur>=heightConst then
call SetUnitFlyHeight(Jiraiya___c,heightCur-heightStep,0.)
else
call SetUnitFlyHeight(Jiraiya___c,heightConst,0.)
endif
endif
call SaveReal(HH,h,8,flyTimeCur-period)
else
if GetWidgetLife(Jiraiya___c)>.405 then
call Jiraiya___ChoOdamaRasenganStartAct(x1,y1,heightConst,LoadEffectHandle(HH,h,0))
else
call SetUnitFlyHeight(Jiraiya___c,GetUnitDefaultFlyHeight(Jiraiya___c),1600.)
call PauseUnit(Jiraiya___c,false)
call SetUnitPathing(Jiraiya___c,true)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Jiraiya___ChoOdamaRasenganCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real period=MainPeriod
local real flyTime=.7
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real speed=distance/flyTime
local real offset=speed*period
local real heightStep=12.5
local real heightConst=250.
call Sound("Naruto Rassengan Cast.mp3")
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call PauseUnit(Jiraiya___c,true)
call SetUnitPathing(Jiraiya___c,false)
call SetUnitTypeFlying(Jiraiya___c)
call SetUnitAnimationByIndex(Jiraiya___c,17)
call SaveAgentHandle(HH,h,0,AddSpecialEffectTarget("ChoOdamaRasenganNew.mdx",Jiraiya___c,"hand right"))
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,heightStep)
call SaveReal(HH,h,5,heightConst)
call SaveReal(HH,h,6,period)
call SaveReal(HH,h,7,flyTime)
call SaveReal(HH,h,8,flyTime)
call TimerStart(t,period,true,function cj_anonym__356)
set t=null
endfunction
function cj_anonym__357 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real period=LoadReal(HH,h,5)
local group g=LoadGroupHandle(HH,h,6)
local unit tg
if GetUnitCurrentOrder(Jiraiya___c)==OrderId("clusterrockets")and time>0.then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Jiraiya___p)then
if GetUnitAbilityLevel(tg,0x4131304E)==0 then
call UnitAddAbility(tg,0x4131304E)
endif
call UnitDamageTarget(Jiraiya___c,tg,GetNinjutsuDamage(dmg,Jiraiya___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call FireDestructablesEnum(x,y,radius/2.)
call SaveReal(HH,h,4,time-period)
else
if GetUnitCurrentOrder(Jiraiya___c)==OrderId("clusterrockets")and GetWidgetLife(Jiraiya___c)>.405 then
call IssueImmediateOrder(Jiraiya___c,"stop")
endif
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x4131304E)>0 then
call UnitRemoveAbility(tg,0x4131304E)
call UnitRemoveAbility(tg,0x42303635)
endif
call GroupRemoveUnit(g,tg)
endloop
call RemoveUnit(LoadUnitHandle(HH,h,7))
call GroupEnumUnitsOfPlayer(g,Jiraiya___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303754 or GetUnitTypeId(tg)==0x68303751 or GetUnitTypeId(tg)==0x68303755 then
call UnitApplyTimedLife(tg,0x42544C46,.1)
elseif GetUnitTypeId(tg)==0x68303756 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g=null
set tg=null
set t=null
endfunction
function Jiraiya___GoemonStart takes real x,real y,real f returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=4.
local real period=.1
local real radius=600.
local real dmg=50.*period
call CreateUnit(Jiraiya___p,0x68303755,x+250.*Cos((f+120.)*.017),y+250.*Sin((f+120.)*.017),GetRandomReal(0.,360.))
call CreateUnit(Jiraiya___p,0x68303755,x+250.*Cos((f+240.)*.017),y+250.*Sin((f+240.)*.017),GetRandomReal(0.,360.))
call CreateUnit(Jiraiya___p,0x68303755,x+250.*Cos((f+360.)*.017),y+250.*Sin((f+360.)*.017),GetRandomReal(0.,360.))
call CreateUnit(Jiraiya___p,0x68303755,x+400.*Cos((f+75.)*.017),y+400.*Sin((f+75.)*.017),GetRandomReal(0.,360.))
call CreateUnit(Jiraiya___p,0x68303755,x+400.*Cos((f+90.)*.017),y+400.*Sin((f+90.)*.017),GetRandomReal(0.,360.))
call CreateUnit(Jiraiya___p,0x68303755,x+400.*Cos((f+105.)*.017),y+400.*Sin((f+105.)*.017),GetRandomReal(0.,360.))
call CreateUnit(Jiraiya___p,0x68303755,x+400.*Cos((f-75.)*.017),y+400.*Sin((f-75.)*.017),GetRandomReal(0.,360.))
call CreateUnit(Jiraiya___p,0x68303755,x+400.*Cos((f-90.)*.017),y+400.*Sin((f-90.)*.017),GetRandomReal(0.,360.))
call CreateUnit(Jiraiya___p,0x68303755,x+400.*Cos((f-105.)*.017),y+400.*Sin((f-105.)*.017),GetRandomReal(0.,360.))
set bj_lastCreatedUnit=CreateUnit(Jiraiya___p,0x68303757,x,y,f)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,time)
call SaveReal(HH,h,5,period)
call SaveAgentHandle(HH,h,6,CreateGroup())
call SaveAgentHandle(HH,h,7,bj_lastCreatedUnit)
call TimerStart(t,period,true,function cj_anonym__357)
set t=null
endfunction
function cj_anonym__358 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit oil=LoadUnitHandle(HH,h,0)
local unit fire=LoadUnitHandle(HH,h,1)
local unit wind=LoadUnitHandle(HH,h,2)
local integer amount=LoadInteger(HH,h,3)
local real a=LoadReal(HH,h,4)
local real x1=LoadReal(HH,h,5)
local real y1=LoadReal(HH,h,6)
local real size=LoadReal(HH,h,7)
local real x=GetWidgetX(oil)
local real y=GetWidgetY(oil)
if amount>0 then
set bj_lastCreatedUnit=CreateUnit(Jiraiya___p,0x68303754,x,y,GetRandomReal(0.,360.))
call SetUnitScale(bj_lastCreatedUnit,1.+size,1.+size,1.+size)
call SetUnitPosition(oil,x+40.*Cos(a*.0174532),y+40.*Sin(a*.0174532))
set x=GetWidgetX(fire)
set y=GetWidgetY(fire)
set bj_lastCreatedUnit=CreateUnit(Jiraiya___p,0x68303756,x,y,GetUnitFacing(fire))
call SetUnitScale(bj_lastCreatedUnit,.3+size/2.,.3+size/2.,.3+size/2.)
call SetUnitPosition(fire,x+40.*Cos((a-6.)*.0174532),y+40.*Sin((a-6.)*.0174532))
set x=GetWidgetX(wind)
set y=GetWidgetY(wind)
set bj_lastCreatedUnit=CreateUnit(Jiraiya___p,0x68303751,x,y,GetUnitFacing(wind)+50.)
call SetUnitScale(bj_lastCreatedUnit,1.5+size,1.5+size,1.5+size)
call SetUnitPosition(wind,x+40.*Cos((a+6.)*.0174532),y+40.*Sin((a+6.)*.0174532))
call SaveInteger(HH,h,3,amount-1)
call SaveReal(HH,h,7,size+.1)
else
call Jiraiya___GoemonStart(x1,y1,a)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set wind=null
set fire=null
set oil=null
set t=null
endfunction
function Jiraiya___GoemonCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call Sound("Jiraya SM Goemon.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Jiraiya___p,0x68303754,x+70.*Cos(a*.017),y+70.*Sin(a*.017),a))
call SaveAgentHandle(HH,h,1,CreateUnit(Jiraiya___p,0x68303756,x+55.*Cos((a-6.)*.017),y+55.*Sin((a-6.)*.017),a+55.))
call SaveAgentHandle(HH,h,2,CreateUnit(Jiraiya___p,0x68303751,x+55.*Cos((a+6.)*.017),y+55.*Sin((a+6.)*.017),a+5.))
call SaveInteger(HH,h,3,R2I(distance/40.))
call SaveReal(HH,h,4,a)
call SaveReal(HH,h,5,x1)
call SaveReal(HH,h,6,y1)
call SaveReal(HH,h,7,.1)
call TimerStart(t,MainPeriod,true,function cj_anonym__358)
set t=null
endfunction
function cj_anonym__359 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real dis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if Jiraiya___SenmodState and GetWidgetLife(Jiraiya___c)>.405 and GetWidgetLife(tu)>.405 and time>0.then
if not IsUnitPaused(Jiraiya___c)then
call PauseUnit(Jiraiya___c,true)
endif
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",tu,"chest"))
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x1,y1))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x1,y1))
endif
call SetUnitFacing(d,a)
call SetUnitFacing(Jiraiya___c,a)
call SetUnitScale(d,dis/2000.,dis/2000.,dis/2000.)
call UnitDamageTarget(Jiraiya___c,tu,GetNinjutsuDamage(dmg,Jiraiya___c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveReal(HH,h,3,time-period)
else
call PauseUnit(Jiraiya___c,false)
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x1,y1))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Jiraiya___ZessenzakuCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real time=1.
local real start_offset=25.
local real start_angle=45.
local real dmg=140.*period
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,CreateUnit(Jiraiya___p,0x6E303351,x+start_offset*Cos((a-start_angle)*bj_DEGTORAD),y+start_offset*Sin((a-start_angle)*bj_DEGTORAD),a))
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call SaveReal(HH,h,4,dmg)
call TimerStart(t,period,true,function cj_anonym__359)
set t=null
endfunction
function Jiraiya___ZessenbakuRemove takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Jiraiya___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x6E303350 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__360 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.and Jiraiya___SenmodState and GetWidgetLife(Jiraiya___c)>.405 and GetWidgetLife(tu)>.405 then
if not IsUnitPaused(Jiraiya___c)then
call PauseUnit(Jiraiya___c,true)
endif
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call SaveReal(HH,h,2,time-period)
else
call PauseUnit(tu,false)
if GetWidgetLife(Jiraiya___c)>.405 and GetWidgetLife(tu)>.405 and Jiraiya___SenmodState then
call Jiraiya___ZessenzakuCast(tu)
else
call PauseUnit(Jiraiya___c,false)
endif
call Jiraiya___ZessenbakuRemove()
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Jiraiya___ZessenbakuStun takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=3.
local real period=.1
call UnitRemoveInvisible(tu)
call PauseUnit(tu,true)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__360)
set t=null
endfunction
function cj_anonym__361 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
if GetWidgetLife(Jiraiya___c)>.405 and GetWidgetLife(tu)>.405 and SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))>offset then
call CreateUnit(Jiraiya___p,0x6E303350,x,y,GetUnitFacing(d))
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a)
if not IsUnitPaused(Jiraiya___c)then
call PauseUnit(Jiraiya___c,true)
endif
else
if GetWidgetLife(Jiraiya___c)>.405 and GetWidgetLife(tu)>.405 then
call Jiraiya___ZessenbakuStun(tu)
else
call Jiraiya___ZessenbakuRemove()
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Jiraiya___ZessenbakuStart takes real x,real y,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real start_offset=25.
local real start_angle=45.
local real period=.025
local real speed=900.
local real offset=speed*period
call Sound("Jiraiya Combo.mp3")
call PauseUnit(Jiraiya___c,true)
call SetUnitFacing(Jiraiya___c,a)
call SaveAgentHandle(HH,h,0,CreateUnit(Jiraiya___p,0x6E303350,x+start_offset*Cos((a+start_angle)*bj_DEGTORAD),y+start_offset*Sin((a+start_angle)*bj_DEGTORAD),a))
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call TimerStart(t,period,true,function cj_anonym__361)
set t=null
endfunction
function cj_anonym__363 takes nothing returns nothing
if Jiraiya___SenmodState then
call UnitRemoveAbility(Jiraiya___c,Jiraiya_COMBO)
call UnitAddAbility(Jiraiya___c,Jiraiya_COMBO)
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__362 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Jiraiya___ZessenbakuStart(LoadReal(HH,h,1),LoadReal(HH,h,2),LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Jiraiya___ComboCast takes nothing returns nothing
local timer t
local integer h
local group g=CreateGroup()
local unit tg
local unit tu=null
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real x1
local real y1
local real start=1.
local real cd_unluck=3.
local real distance=0.
local real range=1200.
call Sound("Jiraiya Combo Cast.mp3")
call GroupEnumUnitsInRange(g,x,y,range,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Jiraiya___p)and GetWidgetLife(tg)>.405 and HasUnitInvisible(tg)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))>distance then
set tu=tg
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if tu!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call TimerStart(t,start,false,function cj_anonym__362)
else
call DisplayTimedTextToPlayer(Jiraiya___p,0.,0.,5.,"|cFFFFCC00Шима не нашла подходящих целей.|r")
call TimerStart(CreateTimer(),cd_unluck,false,function cj_anonym__363)
endif
set tu=null
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__364 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if GetWidgetLife(Jiraiya___c)>.405 and time>0.then
call SaveReal(HH,h,1,time-period)
else
set Jiraiya___SenmodState=false
call AddUnitAnimationProperties(Jiraiya___c,"Stand",true)
call AddUnitAnimationProperties(Jiraiya___c,"Stand Ready",true)
call AddUnitAnimationProperties(Jiraiya___c,"Walk",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Channel",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Slam",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Two",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Throw",true)
call AddUnitAnimationProperties(Jiraiya___c,"Attack - 1",true)
call AddUnitAnimationProperties(Jiraiya___c,"Attack - 2",true)
call AddUnitAnimationProperties(Jiraiya___c,"Attack Slam",true)
call AddUnitAnimationProperties(Jiraiya___c,"Attack 1 Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Attack 2 Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Channel 2 Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Channel Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Slam Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Throw Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Two Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Stand Alternate",false)
call AddUnitAnimationProperties(Jiraiya___c,"Walk Alternate",false)
call UnitRemoveAbility(Jiraiya___c,0x41304D4E)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_ENERUGI,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_COMBO,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GOEMON,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_CHOODAMA_RASENGAN,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_KEBARI_SENBON,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GENJUTSU,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_RASENGAN,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_KATON_ENDAN,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_YOMI_NUMA,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_HARI_JIZO,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAYUDAN,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAGAKURE,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAGUCHI,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAKEN,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_RYOSEI,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Jiraiya___RyoseiStart takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetHeroLevel(Jiraiya___c)
local real time=30.
local real period=.1
set Jiraiya___SenmodState=true
call SetUnitAnimation(Jiraiya___c,"Morph")
call AddUnitAnimationProperties(Jiraiya___c,"Attack 1 Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Attack 2 Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Channel 2 Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Channel Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Slam Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Throw Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Two Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Stand Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Walk Alternate",true)
call AddUnitAnimationProperties(Jiraiya___c,"Stand",false)
call AddUnitAnimationProperties(Jiraiya___c,"Stand Ready",false)
call AddUnitAnimationProperties(Jiraiya___c,"Walk",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Channel",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Slam",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Two",false)
call AddUnitAnimationProperties(Jiraiya___c,"Spell Throw",false)
call AddUnitAnimationProperties(Jiraiya___c,"Attack - 1",false)
call AddUnitAnimationProperties(Jiraiya___c,"Attack - 2",false)
call AddUnitAnimationProperties(Jiraiya___c,"Attack Slam",false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_KATON_ENDAN,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAYUDAN,false)
if GetUnitAbilityLevel(Jiraiya___c,Jiraiya_ENERUGI)>0 then
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_ENERUGI,true)
else
call UnitAddAbility(Jiraiya___c,Jiraiya_ENERUGI)
endif
if lvl>=6 then
if GetUnitAbilityLevel(Jiraiya___c,Jiraiya_COMBO)>0 then
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_COMBO,true)
else
call UnitAddAbility(Jiraiya___c,Jiraiya_COMBO)
endif
if lvl>=7 then
if GetUnitAbilityLevel(Jiraiya___c,Jiraiya_GOEMON)>0 then
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GOEMON,true)
else
call UnitAddAbility(Jiraiya___c,Jiraiya_GOEMON)
endif
if lvl>=8 then
if GetUnitAbilityLevel(Jiraiya___c,Jiraiya_CHOODAMA_RASENGAN)>0 then
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_CHOODAMA_RASENGAN,true)
else
call UnitAddAbility(Jiraiya___c,Jiraiya_CHOODAMA_RASENGAN)
endif
if lvl>=9 then
if GetUnitAbilityLevel(Jiraiya___c,Jiraiya_KEBARI_SENBON)>0 then
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_KEBARI_SENBON,true)
else
call UnitAddAbility(Jiraiya___c,Jiraiya_KEBARI_SENBON)
endif
if lvl==10 then
if GetUnitAbilityLevel(Jiraiya___c,Jiraiya_GENJUTSU)>0 then
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GENJUTSU,true)
else
call UnitAddAbility(Jiraiya___c,Jiraiya_GENJUTSU)
endif
endif
endif
endif
endif
endif
call UnitAddAbility(Jiraiya___c,0x41304D4E)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call TimerStart(t,period,true,function cj_anonym__364)
set t=null
endfunction
function cj_anonym__365 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if GetWidgetLife(Jiraiya___c)>.405 and time>0.and GetUnitAbilityLevel(Jiraiya___c,0x41303846)>0 then
if GetUnitAbilityLevel(Jiraiya___c,0x41313143)==0 then
call UnitAddAbility(Jiraiya___c,0x41313143)
endif
call SaveReal(HH,h,1,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,2))
call UnitRemoveAbility(Jiraiya___c,0x41313143)
call UnitRemoveAbility(Jiraiya___c,0x41303846)
if GetWidgetLife(Jiraiya___c)>.405 and time==0.then
call Jiraiya___RyoseiStart()
else
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_RASENGAN,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_YOMI_NUMA,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_HARI_JIZO,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAGAKURE,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAGUCHI,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAKEN,true)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_RYOSEI,true)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Jiraiya___RyoseiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=10.
local real period=.1
call Sound("Jiraiya Senpo Ryosei no Jutsu.mp3")
call UnitAddAbility(Jiraiya___c,0x41313143)
call UnitAddAbility(Jiraiya___c,0x41303846)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_RASENGAN,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_YOMI_NUMA,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_HARI_JIZO,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAGAKURE,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAGUCHI,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_GAMAKEN,false)
call SetPlayerAbilityAvailable(Jiraiya___p,Jiraiya_RYOSEI,false)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("SaninAuraDir.mdx",Jiraiya___c,"chest"))
call TimerStart(t,period,true,function cj_anonym__365)
set t=null
endfunction
function Jiraiya___KatonGamayuEndanDamagePeriodic takes real x,real y,real radius,real dmg returns nothing
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Jiraiya___p)then
call UnitDamageTarget(Jiraiya___c,tg,GetNinjutsuDamage(dmg,Jiraiya___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call FireDestructablesEnum(x,y,radius/2.)
set tg=null
endfunction
function cj_anonym__366 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit u1=LoadUnitHandle(HH,h,1)
local unit u2=LoadUnitHandle(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
if GetUnitCurrentOrder(d)==OrderId("breathoffire")then
call Jiraiya___KatonGamayuEndanDamagePeriodic(GetWidgetX(u2),GetWidgetY(u2),radius,dmg)
else
call RemoveUnit(u1)
call KillUnit(u2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set u1=null
set u2=null
set t=null
endfunction
function Jiraiya___KatonGamayuEndanDamageStartFire takes unit d,unit u,real startOffset,real a,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(d)
local real yHero=GetWidgetY(d)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real period=.1
local real radius=800.
local real dmg=(GetHeroStr(Jiraiya___c,true)*1.5)*period
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,u)
call SaveAgentHandle(HH,h,2,CreateUnit(Jiraiya___p,0x6E303355,x1,y1,0.))
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,dmg)
call TimerStart(t,period,true,function cj_anonym__366)
set t=null
endfunction
function cj_anonym__367 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
if GetUnitCurrentOrder(d)==OrderId("breathoffire")then
call Jiraiya___KatonGamayuEndanDamageStartFire(d,LoadUnitHandle(HH,h,1),LoadReal(HH,h,2),LoadReal(HH,h,3),LoadReal(HH,h,4),LoadReal(HH,h,5))
else
call RemoveUnit(d)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
endfunction
function Jiraiya___KatonGamayuEndanStartFlow takes unit d,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real startOffset=100.
local real xHero=GetWidgetX(d)
local real yHero=GetWidgetY(d)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real castTime=.75
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateUnit(Jiraiya___p,0x6E303354,x,y,a+90.))
call SaveReal(HH,h,2,startOffset)
call SaveReal(HH,h,3,a)
call SaveReal(HH,h,4,x1)
call SaveReal(HH,h,5,y1)
call TimerStart(t,castTime,false,function cj_anonym__367)
set t=null
endfunction
function cj_anonym__368 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
if GetUnitCurrentOrder(d)==OrderId("breathoffire")then
call Jiraiya___KatonGamayuEndanStartFlow(d,LoadReal(HH,h,1),LoadReal(HH,h,2))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Jiraiya___KatonGamayuEndanCast takes unit d,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=1.75
call Sound("Jiraiya Katon Gamayu Endan.mp3")
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call TimerStart(t,time,false,function cj_anonym__368)
set t=null
endfunction
function cj_anonym__371 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
call SetUnitPosition(Jiraiya___c,x,y)
if GetWidgetLife(d)>.405 and GetUnitAbilityLevel(d,0x41305054)>0 and time>0.then
call SaveReal(HH,h,3,time-period)
else
set udg_Hero[GetPlayerId(Jiraiya___p)]=Jiraiya___c
call DestroyEffect(LoadEffectHandle(HH,h,1))
call PauseUnit(Jiraiya___c,false)
call SetUnitInvulnerable(Jiraiya___c,false)
call ShowUnit(Jiraiya___c,true)
if GetLocalPlayer()==Jiraiya___p then
call ClearSelection()
call SelectUnit(Jiraiya___c,true)
endif
call KuchiyoseCreateDustEffect("end",d,1.75,2.6)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__370 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit d=CreateUnit(Jiraiya___p,0x68303444,LoadReal(HH,h,0),LoadReal(HH,h,1),GetUnitFacing(Jiraiya___c))
local real lifeTime=25.
local real period=.05
set udg_Hero[GetPlayerId(Jiraiya___p)]=d
call PauseUnit(Jiraiya___c,true)
call SetUnitInvulnerable(Jiraiya___c,true)
call ShowUnit(Jiraiya___c,false)
if GetLocalPlayer()==Jiraiya___p then
call ClearSelection()
call SelectUnit(d,true)
endif
call KuchiyoseCreateDustEffect("cast",d,1.75,2.6)
call SaveAgentHandle(HH,h1,0,d)
call SaveAgentHandle(HH,h1,1,AddSpecialEffectTarget("EroSennin_PE.mdx",d,"head"))
call SaveReal(HH,h1,2,period)
call SaveReal(HH,h1,3,lifeTime)
call TimerStart(t1,period,true,function cj_anonym__371)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__369 takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real period=.67
call KuchiyoseEffect(x,y,3.)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call TimerStart(t,period,false,function cj_anonym__370)
call DestroyTimer(GetExpiredTimer())
set t=null
endfunction
function Jiraiya___GamakenCast takes nothing returns nothing
call Sound("Jiraiya Kuchiyose no Jutsu Gamaken.mp3")
call TimerStart(CreateTimer(),.33,false,function cj_anonym__369)
endfunction
function Jiraiya___GamaguchiDamage takes real x,real y,real radius,real dmg returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Jiraiya___p)then
call UnitDamageTarget(Jiraiya___c,tg,GetNinjutsuDamage(dmg,Jiraiya___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__372 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local real time=LoadReal(HH,h,5)
if time>0.then
call Jiraiya___GamaguchiDamage(x,y,radius,dmg)
call SaveReal(HH,h,5,time-period)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Jiraiya___GamaguchiStartDamage takes real x,real y,real radius,real time,real dmg returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,period)
call SaveReal(HH,h,5,time)
call TimerStart(t,period,true,function cj_anonym__372)
set t=null
endfunction
function cj_anonym__373 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer i=4
call RemoveUnit(LoadUnitHandle(HH,h,0))
loop
exitwhen i>23
call RemoveDestructable(LoadDestructableHandle(HH,h,i))
set i=i+1
endloop
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Jiraiya___GamaguchiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real time=6.
local real start_offset=300.
local real radius=600.
local real dmg=20.
local real a=GetUnitFacing(Jiraiya___c)
local real x1=x+start_offset*Cos(a*bj_DEGTORAD)
local real y1=y+start_offset*Sin(a*bj_DEGTORAD)
call Sound("Jiraiya Gamaguchi Shibari.mp3")
call Jiraiya___GamaguchiStartDamage(x,y,radius,time,dmg)
call SaveDestructableHandle(HH,h,4,CreateDestructable(0x42304256,x1+300.*Cos((a+90.)*.017),y1+300.*Sin((a+90.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,5,CreateDestructable(0x42304256,x1+150.*Cos((a+90.)*.017),y1+150.*Sin((a+90.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,6,CreateDestructable(0x42304256,x1,y1,0.,1.,0))
call SaveDestructableHandle(HH,h,7,CreateDestructable(0x42304256,x1+150.*Cos((a-90.)*.017),y1+150.*Sin((a-90.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,8,CreateDestructable(0x42304256,x1+300.*Cos((a-90.)*.017),y1+300.*Sin((a-90.)*.017),0.,1.,0))
set x1=x+300.*Cos((a+90.)*bj_DEGTORAD)
set y1=y+300.*Sin((a+90.)*bj_DEGTORAD)
call SaveDestructableHandle(HH,h,9,CreateDestructable(0x42304256,x1+300.*Cos((a+180.)*.017),y1+300.*Sin((a+180.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,10,CreateDestructable(0x42304256,x1+150.*Cos((a+180.)*.017),y1+150.*Sin((a+180.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,11,CreateDestructable(0x42304256,x1,y1,0.,1.,0))
call SaveDestructableHandle(HH,h,12,CreateDestructable(0x42304256,x1+150.*Cos((a-180.)*.017),y1+150.*Sin((a-180.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,13,CreateDestructable(0x42304256,x1+300.*Cos((a-180.)*.017),y1+300.*Sin((a-180.)*.017),0.,1.,0))
set x1=x+300.*Cos((a-90.)*bj_DEGTORAD)
set y1=y+300.*Sin((a-90.)*bj_DEGTORAD)
call SaveDestructableHandle(HH,h,14,CreateDestructable(0x42304256,x1+300.*Cos((a+180.)*.017),y1+300.*Sin((a+180.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,15,CreateDestructable(0x42304256,x1+150.*Cos((a+180.)*.017),y1+150.*Sin((a+180.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,16,CreateDestructable(0x42304256,x1,y1,0.,1.,0))
call SaveDestructableHandle(HH,h,17,CreateDestructable(0x42304256,x1+150.*Cos((a-180.)*.017),y+150.*Sin((a-180.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,18,CreateDestructable(0x42304256,x1+300.*Cos((a-180.)*.017),y1+300.*Sin((a-180.)*.017),0.,1.,0))
set x1=x-300.*Cos(a*bj_DEGTORAD)
set y1=y-300.*Sin(a*bj_DEGTORAD)
call SaveDestructableHandle(HH,h,19,CreateDestructable(0x42304256,x1+300.*Cos((a+90.)*.017),y1+300.*Sin((a+90.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,20,CreateDestructable(0x42304256,x1+150.*Cos((a+90.)*.017),y1+150.*Sin((a+90.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,21,CreateDestructable(0x42304256,x1,y1,0.,1.,0))
call SaveDestructableHandle(HH,h,22,CreateDestructable(0x42304256,x1+150.*Cos((a-90.)*.017),y1+150.*Sin((a-90.)*.017),0.,1.,0))
call SaveDestructableHandle(HH,h,23,CreateDestructable(0x42304256,x1+300.*Cos((a-90.)*.017),y1+300.*Sin((a-90.)*.017),0.,1.,0))
call SaveAgentHandle(HH,h,0,CreateUnit(Jiraiya___p,0x6E30334F,x,y,GetUnitFacing(Jiraiya___c)))
call TimerStart(t,time,false,function cj_anonym__373)
set t=null
endfunction
function cj_anonym__374 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call CreateEffect(LoadReal(HH,h,1),LoadReal(HH,h,2),.75,"Smoke.mdx",2.)
call Sound("Bunshin Poff.wav")
call SetUnitInvulnerable(Jiraiya___c,false)
call PauseUnit(Jiraiya___c,false)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Jiraiya___GamagakureEnd takes unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
call Sound("Jiraiya Gamagakure.mp3")
call ShowUnit(Jiraiya___c,true)
if GetLocalPlayer()==Jiraiya___p then
call ClearSelection()
call SelectUnit(Jiraiya___c,true)
endif
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
if GetWidgetLife(d)>.405 then
call SetUnitInvulnerable(d,true)
call PauseUnit(d,true)
endif
call TimerStart(t,.5,false,function cj_anonym__374)
set t=null
endfunction
function cj_anonym__376 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
call SetUnitPosition(Jiraiya___c,GetWidgetX(d),GetWidgetY(d))
if GetWidgetLife(d)<.405 or GetUnitAbilityLevel(d,0x41305057)==0 or RectContainsCoords(gg_rct_Duel,GetWidgetX(d),GetWidgetY(d))then
call Jiraiya___GamagakureEnd(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__375 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit d=LoadUnitHandle(HH,h,0)
local real period=.05
call Sound("Jiraiya Gamagakure.mp3")
call ShowUnit(Jiraiya___c,false)
call SetUnitInvulnerable(d,false)
call PauseUnit(d,false)
if GetLocalPlayer()==GetOwningPlayer(d)then
call ClearSelection()
call SelectUnit(d,true)
endif
call SaveAgentHandle(HH,h1,0,d)
call SaveReal(HH,h1,1,GetWidgetX(d))
call SaveReal(HH,h1,2,GetWidgetY(d))
call TimerStart(t1,period,true,function cj_anonym__376)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set d=null
set t=null
set t1=null
endfunction
function Jiraiya___GamagakureCast takes nothing returns nothing
local timer t=CreateTimer()
local unit d=CreateUnit(Jiraiya___p,0x6E30334C,GetWidgetX(Jiraiya___c),GetWidgetY(Jiraiya___c),GetUnitFacing(Jiraiya___c))
call SetUnitInvulnerable(d,true)
call PauseUnit(d,true)
call SetUnitInvulnerable(Jiraiya___c,true)
call PauseUnit(Jiraiya___c,true)
call Sound("Bunshin Poff.wav")
call CreateEffect(GetWidgetX(d),GetWidgetY(d),.75,"Smoke.mdx",2.)
call SaveAgentHandle(HH,GetHandleId(t),0,d)
call TimerStart(t,.5,false,function cj_anonym__375)
set d=null
set t=null
endfunction
function Jiraiya___GamayudanCast takes unit tu returns nothing
call Sound("Jiraiya Gamayudan.mp3")
endfunction
function Jiraiya___RanjishigamiOver takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Jiraiya___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x6E30334E then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__377 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
if GetWidgetLife(Jiraiya___c)>.405 and GetWidgetLife(tu)>.405 and time>0.then
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call UnitDamageTarget(Jiraiya___c,tu,GetNinjutsuDamage(dmg,Jiraiya___c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveReal(HH,h,3,time-period)
else
call Jiraiya___RanjishigamiOver()
call PauseUnit(Jiraiya___c,false)
call PauseUnit(tu,false)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set tu=null
set t=null
endfunction
function Jiraiya___Ranjishigami takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=2.
local real dmg=100.*period
call PauseUnit(tu,true)
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",GetWidgetX(tu),GetWidgetY(tu)))
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl",tu,"overhead"))
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call SaveReal(HH,h,4,dmg)
call TimerStart(t,period,true,function cj_anonym__377)
set t=null
endfunction
function cj_anonym__379 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real size=LoadReal(HH,h,2)
local real size_plus=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))>offset and GetWidgetLife(Jiraiya___c)>.405 and GetWidgetLife(tu)>.405 then
if not IsUnitPaused(Jiraiya___c)then
call PauseUnit(Jiraiya___c,true)
endif
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a)
call SetUnitScale(d,size+size_plus,size+size_plus,size+size_plus)
set bj_lastCreatedUnit=CreateUnit(Jiraiya___p,0x6E30334E,x,y,a)
call SetUnitScale(bj_lastCreatedUnit,size,size,size)
call SaveReal(HH,h,2,size+size_plus)
else
if GetWidgetLife(Jiraiya___c)>.405 and GetWidgetLife(tu)>.405 then
call Jiraiya___Ranjishigami(tu)
else
call PauseUnit(Jiraiya___c,false)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set d=null
set t=null
endfunction
function cj_anonym__378 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if GetWidgetLife(Jiraiya___c)>.405 and time>0.then
if not IsUnitPaused(Jiraiya___c)then
call PauseUnit(Jiraiya___c,true)
endif
call SetUnitAnimationByIndex(Jiraiya___c,8)
call SaveReal(HH,h,2,time-period)
else
call UnitRemoveAbility(Jiraiya___c,0x41303656)
call DestroyEffect(LoadEffectHandle(HH,h,0))
call PauseUnit(Jiraiya___c,false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Jiraiya___HariJizoCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(Jiraiya___c,Jiraiya_HARI_JIZO)
local real period
local real time
local real speed
local real offset
local real size_plus
local real size
local real x
local real y
local real x1
local real y1
if Jiraiya___c==tu then
call Sound("Jiraiya Hari Jizo.mp3")
set period=.1
set time=3.
call UnitAddAbility(Jiraiya___c,0x41303656)
if not IsUnitPaused(Jiraiya___c)then
call PauseUnit(Jiraiya___c,true)
endif
call SaveAgentHandle(HH,h,0,AddSpecialEffectTarget("Hari Jizou.mdx",Jiraiya___c,"chest"))
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__378)
else
call Sound("Jiraiya Ranjishigami.mp3")
set x=GetWidgetX(Jiraiya___c)
set y=GetWidgetY(Jiraiya___c)
set x1=GetWidgetX(tu)
set y1=GetWidgetY(tu)
set period=.025
set speed=900.
set offset=speed*period
set size_plus=.02
set size=.3
if not IsUnitPaused(Jiraiya___c)then
call PauseUnit(Jiraiya___c,true)
endif
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,CreateUnit(Jiraiya___p,0x6E30334E,x,y,bj_RADTODEG*Atan2(y1-y,x1-x)))
call SaveReal(HH,h,2,size)
call SaveReal(HH,h,3,size_plus)
call SaveReal(HH,h,4,offset)
call TimerStart(t,period,true,function cj_anonym__379)
endif
set t=null
endfunction
function Jiraiya___YomiNumaClear takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x42303549)>0 then
call UnitRemoveAbility(tg,0x42303549)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Jiraiya___YomiNumaUnmoveCast takes real x1,real y1,real radius returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Jiraiya___p)and GetUnitAbilityLevel(tg,0x42303549)==0 then
set bj_lastCreatedUnit=CreateUnit(Jiraiya___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41304D38)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__380 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if time>0.then
call Jiraiya___YomiNumaUnmoveCast(GetWidgetX(Jiraiya_yominuma),GetWidgetY(Jiraiya_yominuma),LoadReal(HH,h,2))
call SaveReal(HH,h,1,time-period)
else
call Jiraiya___YomiNumaClear()
call RemoveUnit(Jiraiya_yominuma)
set Jiraiya_yominuma=null
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Jiraiya___YomiNumaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real radius=800.
local real period=.25
local real time=5.
call Sound("Jiraiya Doton Yomi Numa.mp3")
call Jiraiya___YomiNumaUnmoveCast(x1,y1,radius)
set Jiraiya_yominuma=CreateUnit(Jiraiya___p,0x6E30334D,x1,y1,GetRandomReal(0.,360.))
call TerrainDeformRipple(x1,y1,radius,100.,8000,1,10.,time,radius,false)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,radius)
call TimerStart(t,period,true,function cj_anonym__380)
set t=null
endfunction
function cj_anonym__381 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
if GetUnitAbilityLevel(Jiraiya___c,0x42303545)==0 then
call UnitRemoveAbility(Jiraiya___c,0x41304C34)
call UnitRemoveAbility(Jiraiya___c,0x4230354C)
call DestroyEffect(LoadEffectHandle(HH,h,0))
call DestroyEffect(LoadEffectHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Jiraiya___GoenRasengan takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call Sound("Naruto Rassengan Cast.mp3")
call UnitAddAbility(Jiraiya___c,0x41304C34)
call SaveAgentHandle(HH,h,0,AddSpecialEffectTarget("Goen Rasengan.mdx",Jiraiya___c,"hand right"))
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Environment\\LargeBuildingFire\\LargeBuildingFire1.mdl",Jiraiya___c,"hand right"))
call TimerStart(t,.1,true,function cj_anonym__381)
set t=null
endfunction
function Jiraiya___KatonEndanDamage takes real x,real y,real aoe,real dmg returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,aoe,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Jiraiya___p)then
call UnitDamageTarget(Jiraiya___c,tg,GetNinjutsuDamage(dmg,Jiraiya___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Jiraiya___c,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call FireDestructablesEnum(x,y,aoe/2.)
call JiraiyaSetFireSwamp(Jiraiya___c,x,y)
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__382 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u1=LoadUnitHandle(HH,h,0)
local unit u2=LoadUnitHandle(HH,h,1)
local real distance_cur=LoadReal(HH,h,2)
local real aoe=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
local real offset=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local real size=LoadReal(HH,h,7)
local real sizePlus=LoadReal(HH,h,8)
local real x=GetWidgetX(u1)
local real y=GetWidgetY(u1)
if distance_cur>0.then
call Jiraiya___KatonEndanDamage(x,y,aoe,dmg)
call SetUnitPosition(u1,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitScale(u1,size,size,size)
call SetUnitScale(u2,size*1.25,size*1.25,size*1.25)
call SaveReal(HH,h,7,size+sizePlus)
call SaveReal(HH,h,2,distance_cur-offset)
else
call KillUnit(u1)
call RemoveUnit(u2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u1=null
set u2=null
set t=null
endfunction
function Jiraiya___KatonEndanStart takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real start_offset=70.
local real period=.04
local real distance=800.
local real aoe=200.
local real dmg=200.*period
local real speed=800.
local real offset=speed*period
local real sizePlus=.02
local real size=.4+sizePlus
call Sound("Jiraiya Katon Endan.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Jiraiya___p,0x68303443,x+start_offset*Cos(a*bj_DEGTORAD),y+start_offset*Sin(a*bj_DEGTORAD),a))
call SaveAgentHandle(HH,h,1,CreateUnit(Jiraiya___p,0x6E303352,x+start_offset*Cos(a*bj_DEGTORAD),y+start_offset*Sin(a*bj_DEGTORAD),a+90.))
call SaveReal(HH,h,2,distance)
call SaveReal(HH,h,3,aoe)
call SaveReal(HH,h,4,dmg)
call SaveReal(HH,h,5,offset)
call SaveReal(HH,h,6,a)
call SaveReal(HH,h,7,size)
call SaveReal(HH,h,8,sizePlus)
call TimerStart(t,period,true,function cj_anonym__382)
set t=null
endfunction
function Jiraiya___KatonEndanCast takes unit tu returns nothing
if Jiraiya___c!=tu then
call Jiraiya___KatonEndanStart(tu)
else
if GetUnitAbilityLevel(Jiraiya___c,0x42303545)>0 then
call Jiraiya___GoenRasengan()
else
call RecastSkills(Jiraiya___c,Jiraiya_KATON_ENDAN,1,125.)
call DisplayTextToPlayer(Jiraiya___p,0.,0.,"|cFFFFCC00Для применения Goen Rasengan требуется сначала активировать Rasengan, а затем Katon: Endan|r")
endif
endif
endfunction
function cj_anonym__383 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
if time>0.and GetWidgetLife(tu)>.405 then
call UnitDamageTarget(Jiraiya___c,tu,GetNinjutsuDamage(dmg,Jiraiya___c,tu,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveReal(HH,h,3,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,4))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Jiraiya___GoenRasenganStrike takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
local real time=4.
local real dmg=50.*period
call UnitRemoveAbility(Jiraiya___c,0x41304C34)
call UnitRemoveAbility(Jiraiya___c,0x4230354C)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call SaveAgentHandle(HH,h,4,AddSpecialEffectTarget("Environment\\LargeBuildingFire\\LargeBuildingFire1.mdl",tu,"origin"))
call TimerStart(t,period,true,function cj_anonym__383)
set t=null
endfunction
function Jiraiya___RasenganConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),0x42303545)>0 and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)
endfunction
function Jiraiya___RasenganActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real dmg=200.
local real x=GetWidgetX(Jiraiya___c)
local real y=GetWidgetY(Jiraiya___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
call Sound("Jiraiya Rasengan.mp3")
call UnitRemoveAbility(Jiraiya___c,0x42303545)
call SetUnitAnimation(Jiraiya___c,"Spell Two")
call CreateEffect(x1,y1,1.75,"Wave.mdx",1.)
call KnockBackUnitEf(tu,750.,.75,bj_RADTODEG*Atan2(y1-y,x1-x),.025,7,false)
call UnitDamageTarget(Jiraiya___c,tu,GetNinjutsuDamage(dmg,Jiraiya___c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetUnitAbilityLevel(Jiraiya___c,0x4230354C)>0 then
call Jiraiya___GoenRasenganStrike(tu)
endif
set tu=null
endfunction
function Jiraiya___RasenganCast takes nothing returns nothing
call Sound("Naruto Rassengan Cast.mp3")
endfunction
function Jiraiya___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Jiraiya_RASENGAN or i==Jiraiya_KATON_ENDAN or i==Jiraiya_YOMI_NUMA or i==Jiraiya_HARI_JIZO or i==Jiraiya_GAMAYUDAN or i==Jiraiya_GAMAGAKURE or i==0x41305057 or i==Jiraiya_GAMAGUCHI or i==Jiraiya_GAMAKEN or i==0x41305054 or i==0x41305635 or i==Jiraiya_RYOSEI or i==0x41303846 or i==Jiraiya_COMBO or i==Jiraiya_GOEMON or i==Jiraiya_CHOODAMA_RASENGAN or i==Jiraiya_KEBARI_SENBON or i==Jiraiya_GENJUTSU
endfunction
function Jiraiya___SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
if Jiraiya___c==null then
set Jiraiya___c=GetTriggerUnit()
set Jiraiya___p=GetOwningPlayer(Jiraiya___c)
endif
if i==Jiraiya_RASENGAN then
call Jiraiya___RasenganCast()
elseif i==Jiraiya_KATON_ENDAN then
call Jiraiya___KatonEndanCast(GetSpellTargetUnit())
elseif i==Jiraiya_YOMI_NUMA then
call Jiraiya___YomiNumaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Jiraiya_HARI_JIZO then
call Jiraiya___HariJizoCast(GetSpellTargetUnit())
elseif i==Jiraiya_GAMAYUDAN then
call Jiraiya___GamayudanCast(GetSpellTargetUnit())
elseif i==Jiraiya_GAMAGAKURE then
call Jiraiya___GamagakureCast()
elseif i==0x41305057 then
call UnitRemoveAbility(GetTriggerUnit(),0x41305057)
elseif i==Jiraiya_GAMAGUCHI then
call Jiraiya___GamaguchiCast()
elseif i==Jiraiya_GAMAKEN then
call Jiraiya___GamakenCast()
elseif i==0x41305054 then
call UnitRemoveAbility(GetTriggerUnit(),0x41305054)
elseif i==0x41305635 then
call Jiraiya___KatonGamayuEndanCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==Jiraiya_RYOSEI then
call Jiraiya___RyoseiCast()
elseif i==0x41303846 then
call UnitRemoveAbility(Jiraiya___c,0x41303846)
elseif i==Jiraiya_COMBO then
call Jiraiya___ComboCast()
elseif i==Jiraiya_GOEMON then
call Jiraiya___GoemonCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Jiraiya_CHOODAMA_RASENGAN then
call Jiraiya___ChoOdamaRasenganCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Jiraiya_KEBARI_SENBON then
call Jiraiya___KebariSenbonCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Jiraiya_GENJUTSU then
call Jiraiya___UltCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Jiraiya_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger rasengan=CreateTrigger()
set Jiraiya___grReg=CreateGroup()
set Jiraiya___getdmg=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(rasengan,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41303656,false)
call SetPlayerAbilityAvailable(Player(i),0x41304D4E,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Jiraiya___SpellsConditions))
call TriggerAddAction(spells,function Jiraiya___SpellsActions)
call TriggerAddCondition(Jiraiya___getdmg,Condition(function Jiraiya___GetDamageConditions))
call TriggerAddAction(Jiraiya___getdmg,function Jiraiya___GetDamageActions)
call TriggerAddCondition(rasengan,Condition(function Jiraiya___RasenganConditions))
call TriggerAddAction(rasengan,function Jiraiya___RasenganActions)
set spells=null
set rasengan=null
endfunction
function cj_anonym__384 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real startOffset=150.
local real a=GetUnitFacing(Jugo___c)
local real xHero=GetWidgetX(Jugo___c)
local real yHero=GetWidgetY(Jugo___c)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real dmg=400.
local real radius=350.
local unit tg
call Sound("Juugo Strike Act.mp3")
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Jugo___p)then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",tg,"origin"))
call KnockBackUnitEf(tg,500.,.3,a,.025,3,false)
call UnitDamageTarget(Jugo___c,tg,GetNinjutsuDamage(dmg,Jugo___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call UnitApplyTimedLife(CreateUnit(Jugo___p,0x68303147,x,y,a+90.),0x42544C46,1.5)
call UnitApplyTimedLife(CreateUnit(Jugo___p,0x6830304E,x,y,a+90.),0x42544C46,4.)
call SetUnitVertexColor(d,255,255,255,0)
call SetUnitFacing(d,a)
call KnockBackUnitEf(d,1500.,.5,a,.025,2,true)
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x,y))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
endif
set d=null
set tg=null
set t=null
endfunction
function Jugo___UltCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call Sound("Juugo Strike Charge.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Jugo___p,0x68303146,GetWidgetX(Jugo___c),GetWidgetY(Jugo___c),GetUnitFacing(Jugo___c)-45.))
call TimerStart(t,2.77,false,function cj_anonym__384)
set t=null
endfunction
function Jugo___JotaiNiChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Jugo___p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFF959697"+I2S(Jugo___jumpNumber)+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function Jugo___JotaiNiDamage takes real x,real y returns nothing
local real x1
local real y1
local real radius=125.
local real distance=radius/2.
local real dmg
local unit target=null
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedClear(tg,Jugo___p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=distance then
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
set target=tg
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
if target!=null then
set dmg=GetUnitState(target,UNIT_STATE_MAX_LIFE)*.15
call DestroyEffect(AddSpecialEffectTarget("BloodExplosion.mdx",target,"chest"))
call UnitDamageTarget(Jugo___c,target,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
set target=null
set tg=null
endfunction
function cj_anonym__385 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real a=LoadReal(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local real maxdis=LoadReal(HH,h,4)
local real x=GetWidgetX(Jugo___c)
local real y=GetWidgetY(Jugo___c)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Jugo___c)>.405 and curdis>offset then
call SetUnitFlyHeight(Jugo___c,1100./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SetUnitPosition(Jugo___c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
call Jugo___JotaiNiDamage(x,y)
call SetUnitFlyHeight(Jugo___c,GetUnitDefaultFlyHeight(Jugo___c),0.)
call PauseUnit(Jugo___c,false)
call SetUnitPathing(Jugo___c,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Jugo___JotaiNiJumpStart takes real x,real y,real x1,real y1,real distance returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=900.
local real period=.025
local real offset=speed*period
set Jugo___jumpNumber=Jugo___jumpNumber-1
call Jugo___JotaiNiChangeText(true)
call Sound("Juugo Laughter 2.mp3")
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call PauseUnit(Jugo___c,true)
call SetUnitPathing(Jugo___c,false)
call SetUnitTypeFlying(Jugo___c)
call SetUnitFacing(Jugo___c,a)
call SetUnitAnimation(Jugo___c,"slam")
call SaveReal(HH,h,0,a)
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,x1)
call SaveReal(HH,h,3,y1)
call SaveReal(HH,h,4,distance)
call TimerStart(t,period,true,function cj_anonym__385)
set t=null
endfunction
function Jugo___JotaiNiJump takes unit tu returns nothing
local real x=GetWidgetX(Jugo___c)
local real y=GetWidgetY(Jugo___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<=600.then
call Jugo___JotaiNiJumpStart(x,y,x1,y1,distance)
endif
endfunction
function Jugo___OrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),0x4230304A)>0 and IsUnitEnemy(GetOrderTargetUnit(),GetOwningPlayer(GetTriggerUnit()))and Jugo___jumpNumber>0 and GetUnitCurrentOrder(GetTriggerUnit())!=OrderId("chainlightning")
endfunction
function Jugo___OrderActions takes nothing returns nothing
call Jugo___JotaiNiJump(GetOrderTargetUnit())
endfunction
function cj_anonym__386 takes nothing returns nothing
set Jugo___jumpNumber=0
call Jugo___JotaiNiChangeText(false)
call DestroyTimer(GetExpiredTimer())
endfunction
function Jugo___JumpCast takes nothing returns nothing
set Jugo___jumpNumber=3
call Jugo___JotaiNiChangeText(true)
call TimerStart(CreateTimer(),12.,false,function cj_anonym__386)
endfunction
function Jugo___IshikkiCast takes unit tu returns nothing
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real dmg=200.
call Sound("Juugo Angry.mp3")
call CreateEffect(x1,y1,GetRandomReal(1.5,2.),"Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",4.)
call UnitDamageTarget(Jugo___c,tu,GetTaijutsuDamage(dmg,Jugo___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endfunction
function Jugo___KusariRemoveDummy takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Jugo___p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303153 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=null
set tg=null
endfunction
function cj_anonym__387 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real x1=GetWidgetX(Jugo___c)
local real y1=GetWidgetY(Jugo___c)
local real x2=GetWidgetX(d)
local real y2=GetWidgetY(d)
local real a=57.295*Atan2(y1-y,x1-x)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))>offset and GetWidgetLife(Jugo___c)>.405 and GetWidgetLife(tu)>.405 then
call SetUnitPosition(tu,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SetUnitPosition(d,x2+offset*Cos(a*.017),y2+offset*Sin(a*.017))
else
call PauseUnit(Jugo___c,false)
call SetUnitPathing(tu,true)
call Jugo___KusariRemoveDummy()
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set tu=null
set t=null
endfunction
function Jugo___KusariStartMoving takes unit tu,unit d,real offset returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real stunTime=3.
call Sound("Juugo Laughter.mp3")
call SetUnitPathing(tu,false)
if IsUnitEnemy(tu,Jugo___p)then
call GetStun(tu,stunTime)
endif
call SetUnitTimeScale(Jugo___c,1.)
call SetUnitAnimation(Jugo___c,"attack")
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,d)
call SaveReal(HH,h,2,offset)
call TimerStart(t,period,true,function cj_anonym__387)
set t=null
endfunction
function Jugo___KusariCheckTheUnit takes unit u returns boolean
local boolean log=false
if u!=Jugo___c and GetWidgetLife(u)>.405 and IsUnitCreep(u)or IsUnitNC(u)or IsUnitHero(u)or IsUnitPuppet(u)or IsUnitOutpost(u)then
set log=true
endif
return log
endfunction
function cj_anonym__388 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local integer amount=LoadInteger(HH,h,3)
local group gr=LoadGroupHandle(HH,h,4)
local boolean log=LoadBoolean(HH,h,5)
local real offset=LoadReal(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real a=57.295*Atan2(y1-y,x1-x)
local unit tg
if GetWidgetLife(Jugo___c)>.405 and amount>0 then
call GroupEnumUnitsInRange(gr,x,y,125.,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null or log
if Jugo___KusariCheckTheUnit(tg)then
call Jugo___KusariStartMoving(tg,d,offset)
set log=true
endif
call GroupRemoveUnit(gr,tg)
endloop
call UnitApplyTimedLife(CreateUnit(Jugo___p,0x68303153,x,y,f),0x42544C46,distance/1000.)
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SetUnitFacing(d,a)
if not log then
call SaveInteger(HH,h,3,amount-1)
else
call SaveInteger(HH,h,3,0)
call SaveBoolean(HH,h,5,log)
endif
else
call DestroyGroup(gr)
if not log then
call SetUnitTimeScale(Jugo___c,1.)
call PauseUnit(Jugo___c,false)
call Jugo___KusariRemoveDummy()
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set gr=null
set tg=null
set d=null
set t=null
endfunction
function Jugo___KusariCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Jugo___c)
local real y=GetWidgetY(Jugo___c)
local real a=57.295*Atan2(y1-y,x1-x)
local real speed=1300.
local real period=.025
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call PauseUnit(Jugo___c,true)
call SetUnitTimeScale(Jugo___c,0.)
call SaveAgentHandle(HH,h,0,CreateUnit(Jugo___p,0x68303153,x,y,a))
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveInteger(HH,h,3,R2I(distance/offset))
call SaveAgentHandle(HH,h,4,CreateGroup())
call SaveBoolean(HH,h,5,false)
call SaveReal(HH,h,6,offset)
call TimerStart(t,period,true,function cj_anonym__388)
set t=null
endfunction
function Jugo___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Jugo_KUSARI or i==Jugo_ISHIKKI or i==Jugo_JUMP or i==Jugo_ULT
endfunction
function Jugo___SpellsActions takes nothing returns nothing
local integer i
if Jugo___c==null then
set Jugo___c=GetTriggerUnit()
set Jugo___p=GetOwningPlayer(Jugo___c)
endif
set i=GetSpellAbilityId()
if i==Jugo_KUSARI then
call Jugo___KusariCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Jugo_ISHIKKI then
call Jugo___IshikkiCast(GetSpellTargetUnit())
elseif i==Jugo_JUMP then
call Jugo___JumpCast()
elseif i==Jugo_ULT then
call Jugo___UltCast()
endif
endfunction
function Jugo_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger order=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(order,Player(i),EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Jugo___SpellsConditions))
call TriggerAddAction(spells,function Jugo___SpellsActions)
call TriggerAddCondition(order,Condition(function Jugo___OrderConditions))
call TriggerAddAction(order,function Jugo___OrderActions)
set order=null
set spells=null
endfunction
function cj_anonym__389 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real x=GetWidgetX(Kabuto___c)
local real y=GetWidgetY(Kabuto___c)
local real x1
local real y1
local rect r=Rect(x-radius/2.,y-radius/2.,x+radius/2.,y+radius/2.)
local unit tg
if time>0.and GetUnitAbilityLevel(Kabuto___c,0x42303030)>0 then
call GroupEnumUnitsInRect(g1,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if IsUnitEnemy(tg,Kabuto___p)then
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
endif
if not IsUnitPaused(tg)then
call PauseUnit(tg,true)
endif
else
call GroupRemoveUnit(g2,tg)
call PauseUnit(tg,false)
endif
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
call SaveReal(HH,h,4,time-period)
else
call UnitRemoveAbility(Kabuto___c,0x42303030)
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
call PauseUnit(tg,false)
call SetUnitInvulnerable(tg,false)
call GroupRemoveUnit(g2,tg)
endloop
call RemoveRect(r)
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set r=null
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function Kabuto___UltCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=MainPeriod
local real time=4.
local real radius=900.
call Sound("Kabuto Sennin Modo Mugen Onsa.mp3")
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call TimerStart(t,period,true,function cj_anonym__389)
set t=null
endfunction
function cj_anonym__390 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real timeDebuff=LoadReal(HH,h,3)
local real radius=LoadReal(HH,h,4)
local group g=LoadGroupHandle(HH,h,5)
local unit tg
call UnitApplyTimedLife(CreateUnit(Kabuto___p,0x68303735,x,y,0.),0x42544C46,1.)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Kabuto___p)then
call UnitDamageTarget(Kabuto___c,tg,GetNinjutsuDamage(dmg,Kabuto___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
set bj_lastCreatedUnit=CreateUnit(Kabuto___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41305A36)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set g=null
set tg=null
set t=null
endfunction
function Kabuto___HakugekiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Kabuto___c)
local real y=GetWidgetY(Kabuto___c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real period=1.143
local real dmg=80.+(GetHeroInt(Kabuto___c,true)*1.5)
local real timeDebuff=7.
local real radius=400.
call Sound("Kabuto Sennin Modo Hakugeki no Jutsu.mp3")
call UnitApplyTimedLife(CreateUnit(Kabuto___p,0x6E30305A,x1,y1,a),0x42544C46,3.306)
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,timeDebuff)
call SaveReal(HH,h,4,radius)
call SaveAgentHandle(HH,h,5,CreateGroup())
call TimerStart(t,period,false,function cj_anonym__390)
set t=null
endfunction
function cj_anonym__391 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer alpha=LoadInteger(HH,h,1)
if alpha<255 then
call SetUnitVertexColor(d,255,255,255,alpha)
call SaveInteger(HH,h,1,alpha+5)
else
call UnitApplyTimedLife(d,0x42544C46,3.235)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Kabuto___KumoSokaiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alpha=35
local real period=.015
local real radius=500.
local group g=CreateGroup()
local unit tg
call Sound("Kabuto Sennin Modo Kumo Sokai.mp3")
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Kabuto___p)and not IsUnitHidden(tg)and not HasUnitInvisible(tg)and IsUnitHero(tg)then
set bj_lastCreatedUnit=CreateUnit(Kabuto___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41303032)
call IssueTargetOrder(bj_lastCreatedUnit,"ensnare",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set bj_lastCreatedUnit=CreateUnit(Kabuto___p,0x68303432,x1,y1,0.)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,alpha)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveInteger(HH,h,1,alpha)
call TimerStart(t,period,true,function cj_anonym__391)
set g=null
set tg=null
set t=null
endfunction
function cj_anonym__393 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set t=null
endfunction
function cj_anonym__392 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real life=LoadReal(HH,h,4)
local group g=LoadGroupHandle(HH,h,5)
local rect r=LoadRectHandle(HH,h,6)
local real x1
local real y1
local unit tg
local timer t1
call SetWidgetLife(Kabuto___c,GetWidgetLife(Kabuto___c)-life)
if GetWidgetLife(Kabuto___c)>life and GetUnitCurrentOrder(Kabuto___c)==OrderId("breathoffire")then
set x1=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
set y1=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
set t1=CreateTimer()
call SaveAgentHandle(HH,GetHandleId(t1),0,CreateUnit(Kabuto___p,0x68303642,x1,y1,GetRandomReal(0.,360.)))
call TimerStart(t1,1.,false,function cj_anonym__393)
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Kabuto___p)then
call UnitDamageTarget(Kabuto___c,tg,GetNinjutsuDamage(dmg,Kabuto___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
else
call DestroyGroup(g)
call RemoveRect(r)
call IssueImmediateOrder(Kabuto___c,"stop")
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g=null
set r=null
set tg=null
set t=null
set t1=null
endfunction
function Kabuto___MukeTenseiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real chakra=GetUnitState(Kabuto___c,UNIT_STATE_MAX_MANA)*.004
local real life=GetUnitState(Kabuto___c,UNIT_STATE_MAX_LIFE)*.004
local real period=.1
local real dmg=(40.+chakra)*period
local real radius=600.
call Sound("Kabuto Sennin Modo Muki Tensei.mp3")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,life)
call SaveAgentHandle(HH,h,5,CreateGroup())
call SaveAgentHandle(HH,h,6,Rect(x1-radius/2.,y1-radius/2.,x1+radius/2.,y1+radius/2.))
call TimerStart(t,period,true,function cj_anonym__392)
set t=null
endfunction
function Kabuto___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Kabuto_MUKI_TENSEI or i==Kabuto_KUMO_SOKAI or i==Kabuto_HAKUGEKI or i==Kabuto_ULT
endfunction
function Kabuto___SpellsActions takes nothing returns nothing
local integer i
local integer cost
if Kabuto___c==null then
set Kabuto___c=GetTriggerUnit()
set Kabuto___p=GetOwningPlayer(Kabuto___c)
endif
set i=GetSpellAbilityId()
if i==Kabuto_MUKI_TENSEI then
call Kabuto___MukeTenseiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Kabuto_KUMO_SOKAI then
call Kabuto___KumoSokaiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Kabuto_HAKUGEKI then
call Kabuto___HakugekiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Kabuto_ULT then
if GetUnitAbilityLevel(Kabuto___c,0x42303030)==0 then
call Kabuto___UltCast()
else
call UnitRemoveAbility(Kabuto___c,0x42303030)
endif
endif
endfunction
function Kabuto_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Kabuto___SpellsConditions))
call TriggerAddAction(spells,function Kabuto___SpellsActions)
set spells=null
endfunction
function Kakashi___KamuiRaikiriDamage takes group grCheck,real x,real y,real radius,real dmg returns nothing
local group g=CreateGroup()
local unit tg
call SetUnitAnimation(Kakashi___c,"spell two")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Kakashi___p)and not IsUnitInGroup(tg,grCheck)then
call GroupAddUnit(grCheck,tg)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
if IsUnitDisabled(tg)then
call UnitDamageTarget(Kakashi___c,tg,GetNinjutsuDamage(dmg*2.,Kakashi___c,tg,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
else
call UnitDamageTarget(Kakashi___c,tg,GetNinjutsuDamage(dmg,Kakashi___c,tg,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__395 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real distance=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local real dmg=LoadReal(HH,h,6)
local real a=LoadReal(HH,h,7)
local group grCheck=LoadGroupHandle(HH,h,8)
local real x=GetWidgetX(Kakashi___c)
local real y=GetWidgetY(Kakashi___c)
if distance>0.then
call Kakashi___KamuiRaikiriDamage(grCheck,x,y,radius,dmg)
call SetUnitPosition(Kakashi___c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(Kakashi___c,a)
call SaveReal(HH,h,3,distance-offset)
else
call GroupClear(grCheck)
call DestroyGroup(grCheck)
call DestroyEffect(LoadEffectHandle(HH,h,0))
call DestroyEffect(LoadEffectHandle(HH,h,1))
call DestroyEffect(LoadEffectHandle(HH,h,2))
call SetUnitInvulnerable(Kakashi___c,false)
call SetUnitPathing(Kakashi___c,true)
call PauseUnit(Kakashi___c,false)
call SetUnitAnimation(Kakashi___c,"stand ready")
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grCheck=null
set t=null
endfunction
function cj_anonym__394 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real x=GetWidgetX(Kakashi___c)
local real y=GetWidgetY(Kakashi___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real speedCur=GetUnitMoveSpeed(Kakashi___c)
local real speed=speedCur*3.
local real dmg=120.+GetHeroAgi(Kakashi___c,true)*2.
local real offset=speed*MainPeriod
local real radius=125.
local timer t1
local integer h1
if GetWidgetLife(Kakashi___c)>.405 then
set t1=CreateTimer()
set h1=GetHandleId(t1)
call Sound("Kakashi Raikiri.mp3")
call PauseUnit(Kakashi___c,true)
call SetUnitInvulnerable(Kakashi___c,true)
call SetUnitPathing(Kakashi___c,false)
call SetUnitAnimation(Kakashi___c,"spell two")
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SaveAgentHandle(HH,h1,0,LoadEffectHandle(HH,h,0))
call SaveAgentHandle(HH,h1,1,AddSpecialEffectTarget("Chidori.mdx",Kakashi___c,"hand right"))
call SaveAgentHandle(HH,h1,2,AddSpecialEffectTarget("SasukeChidori.mdx",Kakashi___c,"hand right"))
call SaveReal(HH,h1,3,distance)
call SaveReal(HH,h1,4,offset)
call SaveReal(HH,h1,5,radius)
call SaveReal(HH,h1,6,dmg)
call SaveReal(HH,h1,7,a)
call SaveAgentHandle(HH,h1,8,CreateGroup())
call TimerStart(t1,.025,true,function cj_anonym__395)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Kakashi___KamuiRaikiriCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Kakashi___c)
local real y=GetWidgetY(Kakashi___c)
local real castTime=.7
call Sound("Kakashi Mangekyo.mp3")
call DestroyEffect(AddSpecialEffectTarget("Chidori sword.mdx",Kakashi___c,"hand right"))
call DestroyEffect(AddSpecialEffect("Lightning Wind.mdx",x,y))
call SaveAgentHandle(HH,h,0,AddSpecialEffectTarget("sharingan kakashi.mdx",Kakashi___c,"origin"))
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call TimerStart(t,castTime,false,function cj_anonym__394)
set t=null
endfunction
function Kakashi___KamuiDamage takes real x,real y returns nothing
local group g=CreateGroup()
local unit tg
local real radius=150.
local real adddmg=.15
local real dmg
call Sound("Kakashi Kamui 2.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Kakashi___p)then
set dmg=GetUnitState(tg,UNIT_STATE_MAX_LIFE)*adddmg
call UnitDamageTarget(Kakashi___c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Kakashi___KamuiMovement takes real x,real y,real radius,real offset,real angle returns nothing
local group g=CreateGroup()
local unit tg
local real x1
local real y1
local real a
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Kakashi___p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
set a=Atan2(y1-y,x1-x)+angle
call SetUnitX(tg,x1-offset*Cos(a))
call SetUnitY(tg,y1-offset*Sin(a))
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__396 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real x=LoadReal(HH,h,3)
local real y=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local real offset=LoadReal(HH,h,6)
local real angle=LoadReal(HH,h,7)
if time>0.then
call Kakashi___KamuiMovement(x,y,radius,offset,angle)
call SaveReal(HH,h,2,time-period)
else
call Kakashi___KamuiDamage(x,y)
call KillUnit(LoadUnitHandle(HH,h,0))
call RemoveUnit(LoadUnitHandle(HH,h,8))
call DestroyEffect(LoadEffectHandle(HH,h,9))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Kakashi___KamuiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=2.
local real period=.025
local real speed=400.
local real offset=speed*period
local real angle=1.36
local real radius=300.
local unit d=CreateUnit(Kakashi___p,0x68303046,x1,y1,0.)
call Sound("Kakashi Kamui.mp3")
call SetUnitAnimation(d,"Birth")
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,x1)
call SaveReal(HH,h,4,y1)
call SaveReal(HH,h,5,radius)
call SaveReal(HH,h,6,offset)
call SaveReal(HH,h,7,angle)
call SaveAgentHandle(HH,h,8,CreateUnit(Kakashi___p,0x6E303143,x1,y1,0.))
call SaveAgentHandle(HH,h,9,AddSpecialEffectTarget("sharingan kakashi.mdx",Kakashi___c,"origin"))
call TimerStart(t,period,true,function cj_anonym__396)
set d=null
set t=null
endfunction
function cj_anonym__397 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit caster=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local unit d=LoadUnitHandle(HH,h,2)
local real maxdistance=LoadReal(HH,h,4)
local real offset=LoadReal(HH,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance>offset and GetWidgetLife(tu)>.405 then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call CreateEffect(x,y,2.5,"Chidori.mdx",1.)
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x,y))
else
if distance<=offset and GetWidgetLife(tu)>.405 then
call UnitDamageTarget(Kakashi___c,tu,GetNinjutsuDamage(LoadReal(HH,h,3),Kakashi___c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",x,y))
call DestroyEffect(LoadEffectHandle(HH,h,6))
call RemoveUnit(d)
call PauseUnit(caster,false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set d=null
set caster=null
set t=null
endfunction
function Kakashi___DogRaikiriCast takes unit caster,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(caster)
local real y=GetWidgetY(caster)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real dmg=150.
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real offset=50.
set bj_lastCreatedUnit=CreateUnit(Kakashi___p,0x68303245,x,y,a)
call Sound("Kakashi Dog-Raikiri.mp3")
call PauseUnit(caster,true)
call SetUnitTimeScale(bj_lastCreatedUnit,3.)
call SetUnitAnimation(bj_lastCreatedUnit,"walk")
call SaveAgentHandle(HH,h,0,caster)
call SaveAgentHandle(HH,h,1,tu)
call SaveAgentHandle(HH,h,2,bj_lastCreatedUnit)
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,distance)
call SaveReal(HH,h,5,offset)
call SaveAgentHandle(HH,h,6,AddSpecialEffectTarget("lightning_ball.mdx",bj_lastCreatedUnit,"chest"))
call TimerStart(t,MainPeriod,true,function cj_anonym__397)
set t=null
endfunction
function Kakashi___GetDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and GetUnitAbilityLevel(GetTriggerUnit(),0x4130324E)>0
endfunction
function Kakashi___GetDamageActions takes nothing returns nothing
local group g=CreateGroup()
local unit tg
local unit b=GetTriggerUnit()
local real x=GetWidgetX(b)
local real y=GetWidgetY(b)
local real time=3.
call Sound("Bunshin Poff.wav")
call SetUnitInvulnerable(b,true)
call PauseUnit(b,true)
call UnitRemoveAbility(b,0x4130324E)
call DestroyEffect(AddSpecialEffect("ThunderAura.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl",x,y))
call GroupEnumUnitsInRange(g,x,y,300.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Kakashi___p)then
call DestroyEffect(AddSpecialEffectTarget("ThunderAura.mdx",tg,"chest"))
call UnitTempSpell(tg,0x41304757,0x42303339,time,0,false)
endif
call GroupRemoveUnit(g,tg)
endloop
set b=null
set tg=null
set g=null
endfunction
function cj_anonym__398 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit b=LoadUnitHandle(HH,h,0)
local real mana=LoadReal(HH,h,1)
call SetUnitState(b,UNIT_STATE_MANA,GetUnitState(b,UNIT_STATE_MANA)-GetUnitState(b,UNIT_STATE_MAX_MANA)*mana)
if GetUnitState(b,UNIT_STATE_MANA)==0.or GetWidgetLife(b)<.405 or GetUnitAbilityLevel(Kakashi___c,0x4130324E)==0 or GetUnitAbilityLevel(b,0x4130324E)==0 then
if GetUnitAbilityLevel(Kakashi___c,0x4130324E)==0 or Kakashi___bunshinCancel or GetUnitState(b,UNIT_STATE_MANA)==0.then
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(b),GetWidgetY(b)))
endif
call UnitRemoveAbility(Kakashi___c,0x4130324E)
call SetPlayerAbilityAvailable(Kakashi___p,Kakashi_BUNSHIN,true)
call DisableTrigger(Kakashi___getdmg)
call RemoveUnit(b)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set b=null
set t=null
endfunction
function Kakashi___BunshinCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Kakashi___c)
local real y=GetWidgetY(Kakashi___c)
local real f=GetUnitFacing(Kakashi___c)
local real mp=GetUnitState(Kakashi___c,UNIT_STATE_MANA)
local real period=.1
local real mana=.05*period
local unit b
set Kakashi___bunshinCancel=false
call Sound("Blink.mp3")
call SetUnitPosition(Kakashi___c,x1,y1)
set b=CreateUnit(Kakashi___p,0x4F303037,x,y,f)
call SetHeroXP(b,GetHeroXP(Kakashi___c),false)
call SuspendHeroXP(b,false)
call SetWidgetLife(b,GetWidgetLife(Kakashi___c))
call SetUnitState(b,UNIT_STATE_MANA,mp/2.)
call SetUnitState(Kakashi___c,UNIT_STATE_MANA,mp/2.)
call SetPlayerAbilityAvailable(Kakashi___p,Kakashi_BUNSHIN,false)
call UnitAddAbility(Kakashi___c,0x4130324E)
if GetLocalPlayer()==Kakashi___p then
call ClearSelection()
call SelectUnit(Kakashi___c,true)
endif
call TriggerRegisterUnitEvent(Kakashi___getdmg,b,EVENT_UNIT_DAMAGED)
call EnableTrigger(Kakashi___getdmg)
call SaveAgentHandle(HH,h,0,b)
call SaveReal(HH,h,1,mana)
call TimerStart(t,period,true,function cj_anonym__398)
set b=null
set t=null
endfunction
function cj_anonym__399 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,-3)
local integer i=LoadInteger(HH,h,-2)
local integer max=LoadInteger(HH,h,-1)
call Sound("Bunshin Poff.wav")
call SetUnitPathing(tu,true)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(tu),GetWidgetY(tu)))
call DestroyEffect(AddSpecialEffect("ValkDust.mdx",GetWidgetX(tu),GetWidgetY(tu)))
loop
call RemoveUnit(LoadUnitHandle(HH,h,i))
set i=i+1
exitwhen i==max
endloop
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Kakashi___DogsCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local integer max=8
local real offset=60.
local real degree=0.
local real degreeStep=360./max
local real waitTime=2.5
local real dmg=200.
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real x1
local real y1
call SetUnitPathing(tu,false)
call Sound("Kakashi Tsuiga no Jutsu.mp3")
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
set bj_lastCreatedUnit=CreateUnit(Kakashi___p,0x6E303041,x1,y1,bj_RADTODEG*Atan2(y-y1,x-x1))
call IssueTargetOrder(bj_lastCreatedUnit,"attack",tu)
call SaveAgentHandle(HH,h,i,bj_lastCreatedUnit)
set degree=degree+degreeStep
set i=i+1
exitwhen degree==360.
endloop
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",x,y))
call UnitDamageTarget(Kakashi___c,tu,GetTaijutsuDamage(dmg,Kakashi___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call SaveAgentHandle(HH,h,-3,tu)
call SaveInteger(HH,h,-2,0)
call SaveInteger(HH,h,-1,max)
call TimerStart(t,waitTime,false,function cj_anonym__399)
set t=null
endfunction
function Kakashi___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Kakashi_TSUIGA or i==Kakashi_BUNSHIN or i==0x4130324E or i==0x41305747 or i==Kakashi_KAMUI or i==Kakashi_KAMUI_RAIKIRI
endfunction
function Kakashi___SpellsActions takes nothing returns nothing
local integer id
if Kakashi___c==null then
set Kakashi___c=GetTriggerUnit()
set Kakashi___p=GetOwningPlayer(Kakashi___c)
endif
set id=GetSpellAbilityId()
if id==Kakashi_TSUIGA then
call Kakashi___DogsCast(GetSpellTargetUnit())
elseif id==Kakashi_BUNSHIN then
call Kakashi___BunshinCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==0x4130324E then
set Kakashi___bunshinCancel=true
call UnitRemoveAbility(GetTriggerUnit(),0x4130324E)
elseif id==0x41305747 then
call Kakashi___DogRaikiriCast(GetTriggerUnit(),GetSpellTargetUnit())
elseif id==Kakashi_KAMUI then
call Kakashi___KamuiCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Kakashi_KAMUI_RAIKIRI then
call Kakashi___KamuiRaikiriCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Kakashi_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Kakashi___getdmg=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Kakashi___SpellsConditions))
call TriggerAddAction(spells,function Kakashi___SpellsActions)
call TriggerAddCondition(Kakashi___getdmg,Condition(function Kakashi___GetDamageConditions))
call TriggerAddAction(Kakashi___getdmg,function Kakashi___GetDamageActions)
set spells=null
endfunction
function cj_anonym__401 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real regen=LoadReal(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
call SetWidgetLife(Madara_c,GetWidgetLife(Madara_c)+regen)
if time>0.and GetWidgetLife(Madara_c)>.405 and GetWidgetLife(Madara_c)<GetUnitState(Madara_c,UNIT_STATE_MAX_LIFE)then
call SaveReal(HH,h,2,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,3))
set Madara___bGudodamaRegenOn=false
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function cj_anonym__400 takes nothing returns nothing
set Madara___bGudodamaRegenCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Madara___GudodamaRegenStart takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=10.
local real period=1.
local real regen=(GetUnitState(Madara_c,UNIT_STATE_MAX_LIFE)*.1)*period
local integer random=GetRandomInt(1,3)
local real cd=60.
set Madara___bGudodamaRegenCD=true
call TimerStart(CreateTimer(),cd,false,function cj_anonym__400)
if random==1 then
call Sound("Madara Gudodama Regen 1.mp3")
elseif random==2 then
call Sound("Madara Gudodama Regen 2.mp3")
elseif random==3 then
call Sound("Madara Gudodama Regen 3.mp3")
endif
set Madara___bGudodamaRegenOn=true
set Madara___rlGudodamaTime=0.
call SaveReal(HH,h,0,regen)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveAgentHandle(HH,h,3,AddSpecialEffectTarget("Abilities\\Spells\\Other\\Drain\\DrainTarget.mdl",Madara_c,"origin"))
call TimerStart(t,period,true,function cj_anonym__401)
set t=null
endfunction
function Madara___GudodamaRegenCanUse takes nothing returns nothing
local group g=CreateGroup()
local unit tg
local boolean log=false
call GroupEnumUnitsInRange(g,GetWidgetX(Madara_c),GetWidgetY(Madara_c),1200.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitEnemy(tg,Madara_p)and IsUnitVisible(tg,Madara_p)and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
set log=true
endif
call GroupRemoveUnit(g,tg)
endloop
if not log then
set Madara___rlGudodamaTime=Madara___rlGudodamaTime+1.
endif
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__402 takes nothing returns nothing
if GetWidgetLife(Madara_c)>.405 and GetWidgetLife(Madara_c)<GetUnitState(Madara_c,UNIT_STATE_MAX_LIFE)and not Madara___bGudodamaRegenOn and not Madara___bGudodamaRegenCD then
call Madara___GudodamaRegenCanUse()
if Madara___rlGudodamaTime==5.then
call Madara___GudodamaRegenStart()
endif
endif
endfunction
function Madara_GudodamaRegenCast takes nothing returns nothing
set Madara___rlGudodamaTime=0.
call TimerStart(CreateTimer(),1.,true,function cj_anonym__402)
endfunction
function cj_anonym__404 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.then
if not IsUnitPaused(Madara_c)then
call PauseUnit(Madara_c,true)
endif
call SetUnitPosition(d,GetWidgetX(Madara_c),GetWidgetY(Madara_c))
call SaveReal(HH,h,2,time-period)
else
call SetUnitInvulnerable(Madara_c,false)
call PauseUnit(Madara_c,false)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__403 takes nothing returns nothing
set Madara_bGudodamaCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Madara_GudodamaSphereCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real time=2.
local real size=30.
local real cd=30.
local unit d=CreateUnit(Madara_p,0x6E303451,GetWidgetX(Madara_c),GetWidgetY(Madara_c),0.)
set Madara_bGudodamaCD=true
call TimerStart(CreateTimer(),cd,false,function cj_anonym__403)
call Sound("Madara Gudodama Defense.mp3")
call PauseUnit(Madara_c,true)
call SetUnitInvulnerable(Madara_c,true)
call SetUnitAnimation(Madara_c,"spell")
call SetUnitTimeScale(d,0.)
call SetUnitScale(d,size,size,size)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__404)
set d=null
set t=null
endfunction
function Madara___GudodamaGetDamageConditions takes nothing returns boolean
return not Madara___bGudodamaAttackCD and GetEventDamage()>.0 and GetUnitAbilityLevel(GetEventDamageSource(),Madara_GUDODAMA)>0 and IsUnitInGroup(GetTriggerUnit(),Madara___grGudodamaCheck)
endfunction
function cj_anonym__405 takes nothing returns nothing
set Madara___bGudodamaAttackCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Madara___GudodamaGetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real dmg_add=40.
local real cd=3.
set Madara___bGudodamaAttackCD=true
call DisableTrigger(Madara___trgGudodamaDamage)
call TimerStart(CreateTimer(),cd,false,function cj_anonym__405)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(Madara_c,tu,dmg_add,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call GroupRemoveUnit(Madara___grGudodamaCheck,tu)
call EnableTrigger(Madara___trgGudodamaDamage)
set tu=null
endfunction
function Madara___GudodamaAttackConditions takes nothing returns boolean
return not Madara___bGudodamaAttackCD and GetUnitAbilityLevel(GetAttacker(),Madara_GUDODAMA)>0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(GetTriggerUnit(),Madara___grGudodamaCheck)
endfunction
function Madara___GudodamaAttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Madara___grGudodamaReg)then
call GroupAddUnit(Madara___grGudodamaReg,tu)
call TriggerRegisterUnitEvent(Madara___trgGudodamaDamage,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Madara___grGudodamaCheck,tu)
set tu=null
endfunction
function Madara___MugenTsukuyomiCreateShiroZetsu takes unit u returns nothing
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
local real f=GetUnitFacing(Madara_c)
if GetRandomInt(1,4)==1 then
if GetWidgetLife(Madara_c)<=.405 then
set x=GetStartLocationX(GetPlayerStartLocation(Madara_p))
set y=GetStartLocationY(GetPlayerStartLocation(Madara_p))
set f=GetRandomReal(1.,360.)
endif
call UnitApplyTimedLife(CreateUnit(Madara_p,0x6830315A,x,y,f),0x42544C46,60.)
endif
call KillUnit(u)
endfunction
function cj_anonym__406 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local unit tg
if time>0.then
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if not IsUnitPaused(tg)then
call PauseUnit(tg,true)
endif
call GroupRemoveUnit(g1,tg)
endloop
call GroupAddGroup(g2,g1)
call SaveReal(HH,h,4,time-period)
else
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
call Madara___MugenTsukuyomiCreateShiroZetsu(tg)
call GroupRemoveUnit(g1,tg)
endloop
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call DestroyEffect(LoadEffectHandle(HH,h,2))
call SetUnitFlyHeight(Madara_c,GetUnitDefaultFlyHeight(Madara_c),500.)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function Madara___MugenTsukuyomiStart takes effect e returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local group gr_loop=CreateGroup()
local group gr_saved=CreateGroup()
local unit tg
local real time=5.
local real period=.25
call GroupEnumUnitsInRect(gr_loop,gg_rct_Weather,null)
loop
set tg=FirstOfGroup(gr_loop)
exitwhen tg==null
if GetWidgetLife(tg)>.405 and GetUnitAbilityLevel(tg,ItemsActiveInstantly_EDOTENSEI_SCROLL_SPELL)==0 and IsUnitCreep(tg)or IsUnitNC(tg)then
call GroupAddUnit(gr_saved,tg)
call SetUnitPathing(tg,false)
call PauseUnit(tg,true)
call SetUnitInvulnerable(tg,true)
call SetUnitAnimation(tg,"stand")
call UnitAddAbility(tg,0x4130514F)
call UnitApplyTimedLife(CreateUnit(Madara_p,0x6E303452,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)),0x42544C46,time)
endif
call GroupRemoveUnit(gr_loop,tg)
endloop
call GroupAddGroup(gr_saved,gr_loop)
call SaveAgentHandle(HH,h,0,gr_loop)
call SaveAgentHandle(HH,h,1,gr_saved)
call SaveAgentHandle(HH,h,2,e)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call TimerStart(t,period,true,function cj_anonym__406)
set tg=null
set gr_loop=null
set gr_saved=null
set t=null
endfunction
function cj_anonym__407 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Madara___MugenTsukuyomiStart(LoadEffectHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___MugenTsukuyomiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cast_time=5.
local real need_height=500.
local real speed_height=need_height/cast_time
call Sound("Madara Mugen Tsukuyomi.mp3")
call SetUnitTypeFlying(Madara_c)
call SetUnitFlyHeight(Madara_c,need_height,speed_height)
call SaveAgentHandle(HH,h,0,AddSpecialEffectTarget("Mugen Tsukuyomi.mdl",Madara_c,"origin"))
call TimerStart(t,cast_time,false,function cj_anonym__407)
set t=null
endfunction
function cj_anonym__408 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g
local unit tg
local real dmg=500.
local real radius=300.
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if GetWidgetLife(d)>.405 then
call CreateEffect(x,y,.75,"3036_tsunadeslam.mdx",2.)
call CreateEffect(x,y,1.75,"EarthShock.mdx",2.)
set g=CreateGroup()
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Madara_p)then
call UnitDamageTarget(Madara_c,tg,GetTaijutsuDamage(dmg,Madara_c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
endif
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tg=null
set g=null
set d=null
set t=null
endfunction
function Madara___ChibakuTenseiFall takes unit meteor returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real meteor_height_need=150.
local real meteor_height_cur=GetUnitFlyHeight(meteor)-meteor_height_need
local real meteor_height_speed=400.
local real move_time=meteor_height_cur/meteor_height_speed
call SetUnitFlyHeight(meteor,meteor_height_need,meteor_height_speed)
call SaveAgentHandle(HH,h,0,meteor)
call TimerStart(t,move_time,false,function cj_anonym__408)
set t=null
endfunction
function Madara___ChibakuTenseiEarthStrike takes real x,real y,real radius returns nothing
local real time=5.
local integer l__Madara___number=8
local real start_offset=radius/2.
local real degree=0.
local real degree_step=360./l__Madara___number
loop
call UnitApplyTimedLife(CreateUnit(Madara_p,0x6E303458,x+start_offset*Cos(degree*bj_DEGTORAD),y+start_offset*Sin(degree*bj_DEGTORAD),degree),0x42544C46,time)
set degree=degree+degree_step
set l__Madara___number=l__Madara___number-1
exitwhen l__Madara___number==0
endloop
set l__Madara___number=5
set start_offset=radius/4.
set degree=0.
loop
call UnitApplyTimedLife(CreateUnit(Madara_p,0x6E303458,x+start_offset*Cos(degree*bj_DEGTORAD),y+start_offset*Sin(degree*bj_DEGTORAD),degree),0x42544C46,time)
set degree=degree+degree_step
set l__Madara___number=l__Madara___number-1
exitwhen l__Madara___number==0
endloop
call UnitApplyTimedLife(CreateUnit(Madara_p,0x6E303458,x,y,0.),0x42544C46,time)
endfunction
function cj_anonym__409 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer l__Madara___number=LoadInteger(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local real time=LoadReal(HH,h,5)
local real size_plus=LoadReal(HH,h,6)
local group g1=LoadGroupHandle(HH,h,7)
local group g2=LoadGroupHandle(HH,h,8)
local group g3=LoadGroupHandle(HH,h,9)
local unit tg
local unit meteor
local real random_offset
local real random_degree
local real random_height
local real size
local real random_size
if time>0.then
if time>2.then
if l__Madara___number>0 then
if LoadInteger(HH,h,10)==1 then
set random_offset=GetRandomReal(1.,radius/2.)
set random_degree=GetRandomReal(1.,360.)
set random_height=GetRandomReal(500.,800.)
set tg=CreateUnit(Madara_p,0x6E303454,x+random_offset*Cos(random_degree*bj_DEGTORAD),y+random_offset*Sin(random_degree*bj_DEGTORAD),0.)
call SetUnitFlyHeight(tg,random_height,0.)
call GroupAddUnit(g1,tg)
set l__Madara___number=l__Madara___number-1
call SaveInteger(HH,h,0,l__Madara___number)
call SaveInteger(HH,h,10,0)
else
call SaveInteger(HH,h,10,1)
endif
elseif l__Madara___number==0 then
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
set random_size=GetRandomReal(.1,.3)
set meteor=CreateUnit(Madara_p,0x6E303455,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg))
call SetUnitFlyHeight(meteor,GetUnitFlyHeight(tg),0.)
call SetUnitAnimation(meteor,"stand alternate")
call SaveReal(HH,GetHandleId(meteor),0,random_size)
call GroupAddUnit(g2,meteor)
call GroupAddUnit(g3,meteor)
call RemoveUnit(tg)
call GroupRemoveUnit(g1,tg)
endloop
call GroupClear(g1)
call DestroyGroup(g1)
call SaveInteger(HH,h,0,-1)
elseif l__Madara___number==-1 then
loop
set meteor=FirstOfGroup(g2)
exitwhen meteor==null
if GetWidgetLife(meteor)>.405 then
set size=LoadReal(HH,GetHandleId(meteor),0)+size_plus
call SetUnitScale(meteor,size,size,size)
call SaveReal(HH,GetHandleId(meteor),0,size)
endif
call GroupRemoveUnit(g2,meteor)
endloop
call GroupAddGroup(g3,g2)
endif
elseif time==2.then
call Sound("Madara Chibaku Tensei Damage.mp3")
endif
call SaveReal(HH,h,5,time-period)
else
loop
set meteor=FirstOfGroup(g2)
exitwhen meteor==null
if GetWidgetLife(meteor)>.405 then
call Madara___ChibakuTenseiFall(meteor)
endif
call FlushChildHashtable(HH,GetHandleId(meteor))
call GroupRemoveUnit(g2,meteor)
endloop
call GroupClear(g3)
call DestroyGroup(g2)
call DestroyGroup(g3)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set meteor=null
set tg=null
set g1=null
set g2=null
set g3=null
set t=null
endfunction
function Madara___ChibakuTenseiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=7.
local real period=.05
local real radius=1800.
local real size_plus=.05*period
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
local integer l__Madara___number=20
call Sound("Madara Chibaku Tensei Cast.mp3")
call Madara___ChibakuTenseiEarthStrike(x,y,radius)
call SaveInteger(HH,h,0,l__Madara___number)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,period)
call SaveReal(HH,h,5,time)
call SaveReal(HH,h,6,size_plus)
call SaveAgentHandle(HH,h,7,CreateGroup())
call SaveAgentHandle(HH,h,8,CreateGroup())
call SaveAgentHandle(HH,h,9,CreateGroup())
call SaveInteger(HH,h,10,1)
call TimerStart(t,period,true,function cj_anonym__409)
set t=null
endfunction
function Madara___RinboHengokuRemove takes nothing returns nothing
local group g=CreateGroup()
local unit tg=null
call Sound("Madara Rinbo Hengoku Over.mp3")
call GroupEnumUnitsOfPlayer(g,Madara_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==Madara_RINBO_ID then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=null
set g=null
endfunction
function Madara___RinboHengokuGetRandomUnit takes nothing returns unit
local group g=CreateGroup()
local unit tg=null
local unit u=null
call GroupEnumUnitsOfPlayer(g,Madara_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or u!=null
if GetUnitTypeId(tg)==Madara_RINBO_ID then
set u=tg
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=null
set g=null
set cj_v666_unit=u
set u=null
return cj_v666_unit
endfunction
function Madara___RinboGetDamageConditions takes nothing returns boolean
return GetEventDamage()>.0 and IsUnitInGroup(GetTriggerUnit(),Madara___grRinboCheck)
endfunction
function Madara___RinboGetDamageKnockback takes unit damager,unit tu returns nothing
local real x=GetWidgetX(damager)
local real y=GetWidgetY(damager)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real range=500.
local real cd=4.
call Sound3D(damager,"Madara Rinbo Hengoku Attack.mp3")
call DestroyEffect(AddSpecialEffect("EarthShock.mdx",x1,y1))
if not IsUnitType(tu,UNIT_TYPE_STRUCTURE)then
call KnockBackUnitEf(tu,range,range/1000.,a,.025,2,false)
endif
call UnitTempSpell(damager,0x41313143,0,cd,0,false)
endfunction
function cj_anonym__410 takes nothing returns nothing
set Madara___bRinboDefenseCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Madara___RinboGetDamageDefense takes unit damager,real dmg returns nothing
local unit u=Madara___RinboHengokuGetRandomUnit()
local integer id=GetUnitTypeId(damager)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetWidgetX(Madara_c)
local real y1=GetWidgetY(Madara_c)
local real cd=2.
if u!=null then
call Sound3D(Madara_c,"Madara Rinbo Hengoku Defense.mp3")
set Madara___bRinboDefenseCD=true
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
call SetWidgetLife(Madara_c,GetWidgetLife(Madara_c)+dmg)
call SetUnitPosition(u,x1,y1)
call SetUnitFacing(u,GetUnitFacing(Madara_c))
if id==heroes_rikudo_rawcode[Naruto]or id==heroes_rikudo_rawcode[Obito]then
call UnitDamageTarget(damager,u,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call TimerStart(CreateTimer(),cd,false,function cj_anonym__410)
endif
set u=null
endfunction
function Madara___RinboGetDamageActions takes nothing returns nothing
local unit damager=GetEventDamageSource()
local unit tu=GetTriggerUnit()
local real dmg=GetEventDamage()
local integer id=GetUnitTypeId(tu)
local integer id_dmg=GetUnitTypeId(damager)
if id==heroes_rikudo_rawcode[Madara]then
if not Madara___bRinboDefenseCD then
call Madara___RinboGetDamageDefense(damager,dmg)
endif
elseif id==Madara_RINBO_ID then
if id_dmg!=heroes_rikudo_rawcode[Naruto]and id_dmg!=heroes_rikudo_rawcode[Obito]then
call SetWidgetLife(tu,GetWidgetLife(tu)+dmg)
endif
else
call Madara___RinboGetDamageKnockback(damager,tu)
endif
call GroupRemoveUnit(Madara___grRinboCheck,tu)
set damager=null
set tu=null
endfunction
function Madara___RinboAttackConditions takes nothing returns boolean
return not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and GetUnitTypeId(GetTriggerUnit())==heroes_rikudo_rawcode[Madara]or GetUnitTypeId(GetTriggerUnit())==Madara_RINBO_ID or GetUnitTypeId(GetAttacker())==Madara_RINBO_ID
endfunction
function Madara___RinboAttackActions takes nothing returns nothing
local unit attacker=GetAttacker()
local unit attacked=GetTriggerUnit()
if GetUnitTypeId(attacked)==heroes_rikudo_rawcode[Madara]then
call GroupAddUnit(Madara___grRinboCheck,attacked)
elseif GetUnitTypeId(attacked)==Madara_RINBO_ID then
call GroupAddUnit(Madara___grRinboCheck,attacked)
elseif GetUnitTypeId(attacker)==Madara_RINBO_ID then
if not IsUnitInGroup(attacked,Madara___grRinboReg)then
call GroupAddUnit(Madara___grRinboReg,attacked)
call TriggerRegisterUnitEvent(Madara_trgRinboDamage,attacked,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Madara___grRinboCheck,attacked)
endif
set attacker=null
set attacked=null
endfunction
function Madara___RinboHengokuTurnOffAnotherRikudo takes nothing returns nothing
local integer i=0
local integer id
loop
set id=GetUnitTypeId(udg_Hero[i])
if id==heroes_rikudo_rawcode[Naruto]or id==heroes_rikudo_rawcode[Obito]or id==heroes_rikudo_rawcode[Sasuke]then
call MadaraRikudoRinboGetVisionCheck(Player(i),false)
endif
set i=i+1
exitwhen i==10
endloop
endfunction
function Madara___RinboHengokuTurnOnAnotherRikudo takes nothing returns nothing
local integer i=0
local integer id
loop
set id=GetUnitTypeId(udg_Hero[i])
if id==heroes_rikudo_rawcode[Naruto]or id==heroes_rikudo_rawcode[Obito]then
call MadaraRikudoRinboGetVisionCheck(Player(i),true)
elseif id==heroes_rikudo_rawcode[Sasuke]and GetUnitAbilityLevel(Sasuke_c,Sasuke_RINNEGAN_BUFF)>0 then
call MadaraRikudoRinboGetVisionCheck(Player(i),true)
endif
set i=i+1
exitwhen i==10
endloop
endfunction
function cj_anonym__411 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if time>0.and Madara___RinboHengokuGetRandomUnit()!=null then
call SaveReal(HH,h,1,time-period)
else
call DisableTrigger(Madara_trgRinboDamage)
call Madara___RinboHengokuTurnOffAnotherRikudo()
if Madara___RinboHengokuGetRandomUnit()!=null then
call Madara___RinboHengokuRemove()
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Madara___RinboHengokuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer l__Madara___number=4
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
local real f=GetUnitFacing(Madara_c)
local real start_offset=250.
local real degree=0.
local real degree_step=360./l__Madara___number
local real time=20.
local real period=1.
local integer xp=GetHeroXP(Madara_c)
local real life=GetWidgetLife(Madara_c)
local real mana=GetUnitState(Madara_c,UNIT_STATE_MANA)
local unit d
call Sound("Madara Rinbo Hengoku Cast.mp3")
call EnableTrigger(Madara_trgRinboDamage)
loop
set d=CreateUnit(Madara_p,Madara_RINBO_ID,x+start_offset*Cos(degree*bj_DEGTORAD),y+start_offset*Sin(degree*bj_DEGTORAD),f)
call SetUnitVertexColor(d,255,255,255,0)
call AddUnitAnimationProperties(d,"Attack Alternate",true)
call AddUnitAnimationProperties(d,"Attack Alternate - 2",true)
call AddUnitAnimationProperties(d,"Walk Alternate",true)
call AddUnitAnimationProperties(d,"Stand Alternate",true)
call AddUnitAnimationProperties(d,"Attack - 1",false)
call AddUnitAnimationProperties(d,"Attack - 2",false)
call AddUnitAnimationProperties(d,"Walk",false)
call AddUnitAnimationProperties(d,"Stand",false)
call TriggerRegisterUnitEvent(Madara_trgRinboDamage,d,EVENT_UNIT_DAMAGED)
call SetHeroXP(d,xp,false)
call SetWidgetLife(d,life)
call SetUnitState(d,UNIT_STATE_MANA,mana)
set degree=degree+degree_step
set l__Madara___number=l__Madara___number-1
exitwhen l__Madara___number==0
endloop
call MadaraRikudoRinboGetVisionCheck(Madara_p,true)
call Madara___RinboHengokuTurnOnAnotherRikudo()
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call TimerStart(t,period,true,function cj_anonym__411)
set d=null
set t=null
endfunction
function cj_anonym__412 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real range=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
local real a=LoadReal(HH,h,5)
local group g1=LoadGroupHandle(HH,h,6)
local group g2=LoadGroupHandle(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local unit tg
if range>offset then
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Madara_p)and not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(dmg,Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g1,tg)
endloop
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,2,range-offset)
else
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set g1=null
set g2=null
set d=null
set t=null
endfunction
function Madara___SenpoRantonKogaStart takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Madara_c)
local real yHero=GetWidgetY(Madara_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real start_offset=100.
local real x=xHero+start_offset*Cos(a*bj_DEGTORAD)
local real y=yHero+start_offset*Sin(a*bj_DEGTORAD)
local real period=.025
local real range=1200.
local real speed=1200.
local real offset=speed*period
local real dmg=525.
local real radius=50.
call PauseUnit(Madara_c,false)
call SaveAgentHandle(HH,h,0,CreateUnit(Madara_p,0x6E303453,x,y,a))
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,range)
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,dmg)
call SaveReal(HH,h,5,a)
call SaveAgentHandle(HH,h,6,CreateGroup())
call SaveAgentHandle(HH,h,7,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__412)
set t=null
endfunction
function cj_anonym__413 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Madara___SenpoRantonKogaStart(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___SenpoRantonKogaCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cast_time=.5
call Sound("Madara Senpo Ranton Koga.mp3")
call PauseUnit(Madara_c,true)
call SetUnitAnimation(Madara_c,"spell one")
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,cast_time,false,function cj_anonym__413)
set t=null
endfunction
function cj_anonym__414 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call RemoveUnit(LoadUnitHandle(HH,h,1))
call RemoveUnit(LoadUnitHandle(HH,h,2))
call RemoveUnit(LoadUnitHandle(HH,h,3))
call RemoveUnit(LoadUnitHandle(HH,h,4))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___SenpoIntonRaihaRemove takes unit d1,unit d2,unit d3,unit d4,unit d5 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=.67
call SaveAgentHandle(HH,h,0,d1)
call SaveAgentHandle(HH,h,1,d2)
call SaveAgentHandle(HH,h,2,d3)
call SaveAgentHandle(HH,h,3,d4)
call SaveAgentHandle(HH,h,4,d5)
call TimerStart(t,time,false,function cj_anonym__414)
set t=null
endfunction
function Madara___SenpoIntonRaihaDamage takes real x,real y,real radius,real dmg returns nothing
local group gr=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(gr,x,y,radius,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Madara_p)then
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(dmg,Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(gr,tg)
endloop
call DestroyGroup(gr)
set tg=null
set gr=null
endfunction
function cj_anonym__415 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,5)
local real y1=LoadReal(HH,h,6)
call Madara___SenpoIntonRaihaDamage(x1,y1,LoadReal(HH,h,7),LoadReal(HH,h,8))
call UnitApplyTimedLife(CreateUnit(Madara_p,0x6E303456,x1,y1,GetRandomReal(1.,360.)),0x42544C46,1.)
call PauseUnit(Madara_c,false)
call Madara___SenpoIntonRaihaRemove(LoadUnitHandle(HH,h,0),LoadUnitHandle(HH,h,1),LoadUnitHandle(HH,h,2),LoadUnitHandle(HH,h,3),LoadUnitHandle(HH,h,4))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___SenpoIntonRaihaStart takes unit d1,unit d2,unit d3,unit d4,unit d5,real x1,real y1,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=400.
local real radius=400.
local real time=.33
call Sound("Madara Senpo Inton Raiha Damage.mp3")
call SaveAgentHandle(HH,h,0,d1)
call SaveAgentHandle(HH,h,1,d2)
call SaveAgentHandle(HH,h,2,d3)
call SaveAgentHandle(HH,h,3,d4)
call SaveAgentHandle(HH,h,4,d5)
call SaveReal(HH,h,5,x1)
call SaveReal(HH,h,6,y1)
call SaveReal(HH,h,7,radius)
call SaveReal(HH,h,8,dmg)
call TimerStart(t,time,false,function cj_anonym__415)
set t=null
endfunction
function cj_anonym__416 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Madara___SenpoIntonRaihaStart(LoadUnitHandle(HH,h,0),LoadUnitHandle(HH,h,1),LoadUnitHandle(HH,h,2),LoadUnitHandle(HH,h,3),LoadUnitHandle(HH,h,4),LoadReal(HH,h,5),LoadReal(HH,h,6),LoadReal(HH,h,7))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___SenpoIntonRaihaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cast_time=.734
local real xHero=GetWidgetX(Madara_c)
local real yHero=GetWidgetY(Madara_c)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real start_offset=25.
local real x=xHero+start_offset*Cos(a*bj_DEGTORAD)
local real y=yHero+start_offset*Sin(a*bj_DEGTORAD)
local real light_offset=50.
call Sound("Madara Senpo Inton Raiha Cast.mp3")
call PauseUnit(Madara_c,true)
call SetUnitAnimation(Madara_c,"Spell Throw")
call SaveAgentHandle(HH,h,0,CreateUnit(Madara_p,0x6E303457,x+light_offset*Cos((a+90.)*bj_DEGTORAD),y+light_offset*Sin((a+90.)*bj_DEGTORAD),a+20.))
set light_offset=25.
call SaveAgentHandle(HH,h,1,CreateUnit(Madara_p,0x6E303457,x+light_offset*Cos((a+90.)*bj_DEGTORAD),y+light_offset*Sin((a+90.)*bj_DEGTORAD),a+10.))
call SaveAgentHandle(HH,h,2,CreateUnit(Madara_p,0x6E303457,x,y,a))
set light_offset=25.
call SaveAgentHandle(HH,h,3,CreateUnit(Madara_p,0x6E303457,x+light_offset*Cos((a-90.)*bj_DEGTORAD),y+light_offset*Sin((a-90.)*bj_DEGTORAD),a-10.))
set light_offset=50.
call SaveAgentHandle(HH,h,4,CreateUnit(Madara_p,0x6E303457,x+light_offset*Cos((a-90.)*bj_DEGTORAD),y+light_offset*Sin((a-90.)*bj_DEGTORAD),a-20.))
call SaveReal(HH,h,5,x1)
call SaveReal(HH,h,6,y1)
call SaveReal(HH,h,7,a)
call TimerStart(t,cast_time,false,function cj_anonym__416)
set t=null
endfunction
function Madara___SenpoCast takes real x1,real y1,unit tu returns nothing
if tu==null then
call Madara___SenpoIntonRaihaCast(x1,y1)
else
call Madara___SenpoRantonKogaCast(tu)
endif
endfunction
function Madara___SusanooChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Madara_p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFF0090D4"+I2S(LoadInteger(HH,GetHandleId(udg_Hero[idp]),0))+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function cj_anonym__417 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if GetWidgetLife(d)>.405 and GetWidgetLife(Madara_c)>.405 then
if not IsTerrainPathable(x,y,PATHING_TYPE_WALKABILITY)or not IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call SetUnitPosition(Madara_c,x,y)
else
set x=GetWidgetX(Madara_c)
set y=GetWidgetY(Madara_c)
call SetUnitPosition(d,x,y)
endif
call SetUnitFacing(Madara_c,GetUnitFacing(d))
call SetUnitAnimation(Madara_c,"Stand Ready")
else
set udg_Hero[GetPlayerId(Madara_p)]=Madara_c
set Madara___susanooKanseitai=false
call Sound("Itachi_Susanoo 4.mp3")
call ShowUnit(Madara_c,true)
call SetUnitFlyHeight(Madara_c,GetUnitDefaultFlyHeight(Madara_c),900.)
call SetUnitInvulnerable(Madara_c,false)
call SetUnitPathing(Madara_c,true)
call PauseUnit(Madara_c,false)
if GetLocalPlayer()==Madara_p then
call ClearSelection()
call SelectUnit(Madara_c,true)
endif
call DestroyEffect(LoadEffectHandle(HH,h,1))
call RemoveUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set t=null
endfunction
function Madara___KanseitaiSusanooStart takes unit d,effect e,real time returns nothing
local timer t
local integer h
local unit kyubi=null
set kyubi=Combo_GetMadaraKyubi(Madara_c,Madara_p)
if kyubi==null then
set t=CreateTimer()
call Sound("Madara Susanoo.mp3")
call SetUnitInvulnerable(d,false)
call PauseUnit(d,false)
call UnitApplyTimedLife(d,0x42544C46,time)
if GetLocalPlayer()==Madara_p then
call ClearSelection()
call SelectUnit(d,true)
endif
call SaveAgentHandle(HH,GetHandleId(t),0,d)
call SaveAgentHandle(HH,GetHandleId(t),1,e)
call TimerStart(t,.01,true,function cj_anonym__417)
else
set Madara___susanooKanseitai=false
call RemoveUnit(d)
call DestroyEffect(e)
call SetUnitFlyHeight(Madara_c,GetUnitDefaultFlyHeight(Madara_c),900.)
call SetUnitPathing(Madara_c,true)
call Combo_StartMadaraKyubi(kyubi)
endif
set t=null
set kyubi=null
endfunction
function cj_anonym__418 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer alpha=LoadInteger(HH,h,2)
if alpha<255 then
call SetUnitVertexColor(d,255,255,255,alpha)
call SaveInteger(HH,h,2,alpha+10)
else
call Madara___KanseitaiSusanooStart(d,LoadEffectHandle(HH,h,1),LoadReal(HH,h,3))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Madara___KanseitaiSusanooCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alpha=10
local real period=.025
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
local real f=GetUnitFacing(Madara_c)
local real time=25.
local unit d=CreateUnit(Madara_p,0x6830314A,x,y,f)
set Madara___susanooKanseitai=true
set udg_Hero[GetPlayerId(Madara_p)]=d
call Sound("Itachi_Susanoo 1.mp3")
call UnitRemoveAbility(Madara_c,0x4131304B)
call PauseUnit(d,true)
call SetUnitInvulnerable(d,true)
call SetUnitPathing(d,false)
call SetUnitVertexColor(d,255,255,255,alpha)
call SetUnitAnimation(Madara_c,"spell")
call PauseUnit(Madara_c,true)
call SetUnitInvulnerable(Madara_c,true)
call SetUnitPathing(Madara_c,false)
call SetUnitTypeFlying(Madara_c)
call SetUnitFlyHeight(Madara_c,725.,600.)
call ShowUnit(Madara_c,false)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Sharingan eternal madara.mdx",Madara_c,"origin"))
call SaveInteger(HH,h,2,alpha)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__418)
set d=null
set t=null
endfunction
function Madara___IsUnitNeedTengaiShinsei takes unit u returns boolean
local boolean log=false
if GetWidgetLife(u)>.405 and not IsUnitHidden(u)and not IsUnitInvulnerable(u)and not IsUnitType(u,UNIT_TYPE_UNDEAD)and not IsUnitType(u,UNIT_TYPE_MAGIC_IMMUNE)and GetUnitAbilityLevel(u,0x41313351)==0 then
set log=true
endif
return log
endfunction
function Madara___TengaiDestroyMeteorEffect takes real x,real y,real radius,integer count returns nothing
local real degree=0.
local real degreeStep=72.
local real offset
local real x1
local real y1
local integer i=0
local integer max=5
if SpecialEffectsShow then
if count==0 then
set offset=radius/4.5
set degreeStep=degreeStep/2.
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("EarthShock.mdx",x1,y1))
set degree=degree+degreeStep
exitwhen degree==360.
endloop
set degree=0.
set offset=radius/3.
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("EarthShock.mdx",x1,y1))
set degree=degree+degreeStep
exitwhen degree==360.
endloop
set degree=0.
set offset=radius/1.5
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("EarthShock.mdx",x1,y1))
set degree=degree+degreeStep
exitwhen degree==360.
endloop
elseif count==1 or count==2 then
set degree=0.
set offset=radius/2.8
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("3036_tsunadeslam.mdx",x1,y1))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
set degree=36.
set offset=radius/2.6
set i=0
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("3036_tsunadeslam.mdx",x1,y1))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
if count==2 then
set i=0
set degree=0.
set offset=radius/3.6
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("3036_tsunadeslam.mdx",x1,y1))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
set i=0
set degree=36.
set offset=radius/2.4
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("3036_tsunadeslam.mdx",x1,y1))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
endif
endif
endif
endfunction
function cj_anonym__424 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__423 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__422 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
call SetUnitFlyHeight(u,0.,500.)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function cj_anonym__421 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit meteor=LoadUnitHandle(HH,h,0)
local real periodEf=LoadReal(HH,h,1)
local real timeEf=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real radiusEfStep=LoadReal(HH,h,4)
local real radiusEf=LoadReal(HH,h,5)
local real degreeStepPlus=LoadReal(HH,h,6)
local real degreeStepNew=LoadReal(HH,h,7)
local real degree=0.+degreeStepNew
local real x=GetWidgetX(meteor)
local real y=GetWidgetY(meteor)
local real x1
local real y1
local real degreeStep=72.+degreeStepNew
local real offset=radius/radiusEf
local integer i=0
local integer max=4
if timeEf>0.then
if SpecialEffectsShow then
loop
set x1=x+offset*Cos(degree*bj_DEGTORAD)
set y1=y+offset*Sin(degree*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("3036_tsunadeslam.mdx",x1,y1))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
endif
set degreeStepNew=degreeStepNew+degreeStepPlus
call SaveReal(HH,h,2,timeEf-periodEf)
call SaveReal(HH,h,5,radiusEf-radiusEfStep)
call SaveReal(HH,h,7,degreeStepNew)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set meteor=null
set t=null
endfunction
function cj_anonym__420 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local integer alphaStep=LoadInteger(HH,h,1)
local integer alpha=LoadInteger(HH,h,2)
local real sizeStep=LoadReal(HH,h,3)
local real size=LoadReal(HH,h,4)
local integer count=LoadInteger(HH,h,5)
if alpha>0 then
call SetUnitVertexColor(u,255,255,255,alpha)
call SetUnitScale(u,size,size,size)
call SaveInteger(HH,h,2,alpha-alphaStep)
call SaveReal(HH,h,4,size+sizeStep)
else
if count==2 then
call ResetToGameCamera(0.)
endif
call RemoveUnit(u)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function cj_anonym__419 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Madara___TengaiDestroyMeteorEffect(LoadReal(HH,h,0),LoadReal(HH,h,1),LoadReal(HH,h,2),2)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___TengaiOver takes unit meteor,unit dust,real x,real y,real radius,integer count returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alphaStep=5
local integer alpha=255-alphaStep
local real secondMeteorHeightTime=1.
local real sizeStep=.2
local real size=2.4+sizeStep
local real period=.025
local real removeTime=3.
local real periodEf=.2
local real timeEf=1.
local real radiusEf=2.4
local real radiusEfStep=.2
local real degreeStepPlus=14.4
local real secondMeteorRemoveEff=removeTime-.35
local real dustRemoveTime=.876
local unit d
if count==1 then
call CameraSetTargetNoiseEx(25.,5000.,true)
call Madara___TengaiDestroyMeteorEffect(x,y,radius,0)
elseif count==2 then
call Madara___TengaiDestroyMeteorEffect(x,y,radius,1)
call TerrainDeformRipple(x,y,radius*2.,100.,3000,1,200.,5.,.4,false)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,radius*2.)
call TimerStart(t,secondMeteorRemoveEff,false,function cj_anonym__419)
endif
set d=CreateUnit(Madara_p,0x68303154,x,y,0.)
call SetUnitScale(d,7.,7.,7.)
call SetUnitFlyHeight(d,100.,0.)
call UnitApplyTimedLife(d,0x42544C46,1.)
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,CreateUnit(Madara_p,0x68303152,x,y,0.))
call SaveInteger(HH,h,1,alphaStep)
call SaveInteger(HH,h,2,alpha)
call SaveReal(HH,h,3,sizeStep)
call SaveReal(HH,h,4,size)
call SaveInteger(HH,h,5,count)
call TimerStart(t,period,true,function cj_anonym__420)
if count==1 then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,meteor)
call SaveReal(HH,h,1,periodEf)
call SaveReal(HH,h,2,timeEf)
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,radiusEfStep)
call SaveReal(HH,h,5,radiusEf)
call SaveReal(HH,h,6,degreeStepPlus)
call SaveReal(HH,h,7,0.)
call TimerStart(t,periodEf,true,function cj_anonym__421)
elseif count==2 then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,meteor)
call TimerStart(t,secondMeteorHeightTime,false,function cj_anonym__422)
endif
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,meteor)
call TimerStart(t,removeTime,false,function cj_anonym__423)
set t=CreateTimer()
set h=GetHandleId(t)
call SetUnitAnimation(dust,"stand")
call SaveAgentHandle(HH,h,0,dust)
call TimerStart(t,dustRemoveTime,false,function cj_anonym__424)
set d=null
set t=null
endfunction
function cj_anonym__426 takes nothing returns nothing
local timer t=GetExpiredTimer()
local timer t1=CreateTimer()
local integer h=GetHandleId(t)
local integer count=LoadInteger(HH,h,0)
local unit meteor=LoadUnitHandle(HH,h,1)
local unit dust=LoadUnitHandle(HH,h,2)
local real dmg=150.
local real adddmg=GetHeroLevel(Madara_c)*.03
local real finaldmg
local real x=GetWidgetX(meteor)
local real y=GetWidgetY(meteor)
local real radius=1200./2.
local rect r=Rect(x-radius,y-radius,x+radius,y+radius)
local group gr=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(gr,r,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
if Madara___IsUnitNeedTengaiShinsei(tg)then
set finaldmg=dmg+GetUnitState(tg,UNIT_STATE_MAX_LIFE)*adddmg
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(finaldmg,Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(gr,tg)
endloop
call EnumDestructablesInRect(r,null,function Kill_Destructables)
call DestroyGroup(gr)
call RemoveRect(r)
call Madara___TengaiOver(meteor,dust,x,y,radius,count)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set gr=null
set r=null
set tg=null
set meteor=null
set dust=null
set t=null
set t1=null
endfunction
function cj_anonym__425 takes nothing returns nothing
call Sound("Madara Tengai Shinsei 1.mp3")
call DestroyTimer(GetExpiredTimer())
endfunction
function Madara___TengaiHitDamage takes real x1,real y1,integer count returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit meteor=CreateUnit(Madara_p,0x6E30314D,x1,y1,0.)
local unit dust=CreateUnit(Madara_p,0x6E30314E,x1,y1,0.)
local real castTime=3.
local real constHeight=500.
local real curHeight=GetUnitFlyHeight(meteor)
local real needHeight=0.
local real speed=curHeight/castTime
local real soundTime=.4
if count==2 then
call Sound("Madara Tengai Shinsei 2.mp3")
set needHeight=250.
endif
if count==1 then
call Sound("Akatsuki Jutsu.mp3")
call TimerStart(CreateTimer(),soundTime,false,function cj_anonym__425)
endif
call SetUnitAnimation(meteor,"stand alternate")
call SetUnitFlyHeight(meteor,curHeight+constHeight,0.)
call SetUnitFlyHeight(meteor,needHeight,speed)
call SetUnitAnimation(dust,"death")
call SetUnitFlyHeight(dust,curHeight+constHeight,0.)
call SetUnitFlyHeight(dust,needHeight,speed)
call SaveInteger(HH,h,0,count)
call SaveAgentHandle(HH,h,1,meteor)
call SaveAgentHandle(HH,h,2,dust)
call TimerStart(t,castTime,false,function cj_anonym__426)
set meteor=null
set dust=null
set t=null
endfunction
function cj_anonym__430 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Madara___TengaiHitDamage(LoadReal(HH,h,0),LoadReal(HH,h,1),2)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__429 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__428 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit black=LoadUnitHandle(HH,h,0)
local real removeTime=4.
call SetUnitTimeScale(black,0.)
call SaveAgentHandle(HH,h1,0,black)
call TimerStart(t1,removeTime,false,function cj_anonym__429)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set black=null
set t=null
set t1=null
endfunction
function cj_anonym__427 takes nothing returns nothing
if LoadUnitHandle(HH,GetHandleId(Madara_c),3)!=null then
call SetUnitAnimation(LoadUnitHandle(HH,GetHandleId(Madara_c),3),"Stand")
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function Madara___TengaiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local integer hc=GetHandleId(Madara_c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
local real castTime=3.
local real blackStopTime=2.
local real castOverTime=1.5
local real timeEff=castTime*2.
local unit black=CreateUnit(Madara_p,0x6E303146,x1,y1,0.)
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
call SetUnitAnimation(susanoo,"Spell Three")
call TimerStart(CreateTimer(),castOverTime,false,function cj_anonym__427)
call CreateAttachedEffect(Madara_c,"Rinnegan.mdx","origin",timeEff)
call SetUnitTimeScale(black,.1)
call SaveAgentHandle(HH,h,0,black)
call TimerStart(t,blackStopTime,false,function cj_anonym__428)
call Madara___TengaiHitDamage(x1,y1,1)
set t=CreateTimer()
set h=GetHandleId(t)
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,castTime,false,function cj_anonym__430)
set susanoo=null
set t=null
set black=null
set t1=null
endfunction
function Madara___YasakaNoMagatamaDamage takes real x,real y returns nothing
local real radius=200.
local real dmg=75.
local real randomSize=GetRandomReal(.75,1.2)
local group g=CreateGroup()
local unit tg
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,randomSize,"NewDirtEXNofire.mdx",4.)
else
call CreateEffect(x,y,randomSize,"IceSparks.mdx",4.)
endif
call DestroyEffect(AddSpecialEffect("EarthShock.mdx",x,y))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Madara_p)then
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(dmg,Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__431 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local integer amount=LoadInteger(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SaveInteger(HH,h,4,amount-1)
else
call Madara___YasakaNoMagatamaDamage(x,y)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Madara___YasakaNoMagatamaCreate takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real speed=1200.
local real offset=speed*period
local real startOffset=300.
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)-90.
local real distance
local real moveTime
local real speedHeight
local integer amount
local unit d
set x=x+startOffset*Cos(a*bj_DEGTORAD)
set y=y+startOffset*Sin(a*bj_DEGTORAD)
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
set d=CreateUnit(Madara_p,0x6E303150,x,y,a)
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
set moveTime=distance/speed
set speedHeight=GetUnitFlyHeight(d)/moveTime
set amount=R2I(distance/offset)
call SetUnitFlyHeight(d,0.,speedHeight)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,offset)
call SaveInteger(HH,h,4,amount)
call TimerStart(t,period,true,function cj_anonym__431)
set d=null
set t=null
endfunction
function cj_anonym__433 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local integer i=0
local integer max=10
local real radius
local real randomAgnle
if LoadUnitHandle(HH,GetHandleId(Madara_c),3)!=null then
loop
set radius=GetRandomReal(1.,400./2.)
set randomAgnle=GetRandomReal(1.,360.)
call Madara___YasakaNoMagatamaCreate(x,y,x1+radius*Cos(randomAgnle*bj_DEGTORAD),y1+radius*Sin(randomAgnle*bj_DEGTORAD))
set i=i+1
exitwhen i==max
endloop
endif
call PauseUnit(Madara_c,false)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__432 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real animationTime=.887
local timer t1
local integer h1
if LoadUnitHandle(HH,GetHandleId(Madara_c),3)!=null then
set t1=CreateTimer()
set h1=GetHandleId(t1)
call SetUnitTimeScale(LoadUnitHandle(HH,GetHandleId(Madara_c),3),1.)
call SetUnitAnimation(LoadUnitHandle(HH,GetHandleId(Madara_c),3),"Spell Two")
call SaveReal(HH,h1,0,LoadReal(HH,h,0))
call SaveReal(HH,h1,1,LoadReal(HH,h,1))
call SaveReal(HH,h1,2,LoadReal(HH,h,2))
call SaveReal(HH,h1,3,LoadReal(HH,h,3))
call TimerStart(t1,animationTime,false,function cj_anonym__433)
else
call PauseUnit(Madara_c,false)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Madara___YasakaNoMagatamaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Madara_c)
local real yHero=GetWidgetY(Madara_c)
local real startAngleOffset=400.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real xAngle=xHero+startAngleOffset*Cos((a+90.)*bj_DEGTORAD)
local real yAngle=yHero+startAngleOffset*Sin((a+90.)*bj_DEGTORAD)
local real startOffset=550.
local real x=xAngle+startOffset*Cos(a*bj_DEGTORAD)
local real y=yAngle+startOffset*Sin(a*bj_DEGTORAD)
local real animationTime=1.224
local integer hc=GetHandleId(Madara_c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
call Sound("Akatsuki Jutsu.mp3")
call PauseUnit(Madara_c,true)
call SetUnitFacing(susanoo,a)
call SetUnitTimeScale(susanoo,1.2)
call SetUnitAnimation(susanoo,"Spell One")
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,x1)
call SaveReal(HH,h,3,y1)
call TimerStart(t,animationTime,false,function cj_anonym__432)
set susanoo=null
set t=null
endfunction
function Madara___AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitBiju(GetAttacker())and not IsUnitIllusion(GetAttacker())and not LoadBoolean(HH,GetHandleId(GetAttacker()),2)and GetUnitAbilityLevel(GetAttacker(),Madara_SUSANOO_SLOW)>0 or GetUnitAbilityLevel(GetAttacker(),0x41304E51)>0
endfunction
function cj_anonym__434 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real hpMax
local real addDmg=.3
local real dmg
local real radius=400.
local real randomSize=GetRandomReal(1.75,2.5)
local integer hu=GetHandleId(u)
local unit susanoo=LoadUnitHandle(HH,GetHandleId(Madara_c),3)
local group g=CreateGroup()
local unit tg
local boolean log=false
if GetWidgetLife(u)>.405 then
if GetUnitAbilityLevel(u,0x41305530)>0 then
if susanoo!=null then
set log=true
endif
set addDmg=addDmg/2.
set radius=radius/2.
set randomSize=randomSize/2.
else
set log=true
call TerrainDeformRipple(x,y,radius,60.,500,1,250.,4.,.5,false)
endif
if log then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,randomSize,"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,randomSize,"IceSparks.mdx",8.)
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Madara_p)then
set hpMax=GetUnitState(tg,UNIT_STATE_MAX_LIFE)
if IsUnitBig(tg)then
set addDmg=addDmg/4.
endif
set dmg=hpMax*addDmg
call UnitDamageTarget(u,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveBoolean(HH,hu,2,false)
endif
else
call FlushChildHashtable(HH,hu)
endif
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set susanoo=null
set u=null
set tg=null
set g=null
endfunction
function Madara___AttackActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit u=GetAttacker()
local unit tu=GetTriggerUnit()
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real strikeTime=1.413
local integer randomAnimation
local integer hu=GetHandleId(u)
local unit susanoo=LoadUnitHandle(HH,hu,3)
if GetUnitAbilityLevel(u,0x41305530)>0 then
call IssueImmediateOrder(u,"stop")
set randomAnimation=GetRandomInt(1,3)
if randomAnimation==1 then
set strikeTime=.676
call SetUnitAnimation(susanoo,"Attack - 1")
elseif randomAnimation==2 then
set strikeTime=.635
call SetUnitAnimation(susanoo,"Attack - 2")
elseif randomAnimation==3 then
set strikeTime=.6
call SetUnitAnimation(susanoo,"Attack - 3")
endif
endif
call SaveBoolean(HH,hu,2,true)
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call TimerStart(t,strikeTime,false,function cj_anonym__434)
set susanoo=null
set u=null
set tu=null
set t=null
endfunction
function Madara___SusanooBunshinCheck takes nothing returns nothing
local unit tg
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup,Madara_p,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if GetUnitTypeId(tg)==0x4F303131 and GetWidgetLife(tg)>.405 then
call IssueImmediateOrder(tg,"darkportal")
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
endfunction
function cj_anonym__435 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local unit de=LoadUnitHandle(HH,h,2)
local real mp=LoadReal(HH,h,5)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetWidgetX(d)
local real y1=GetWidgetY(d)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)-mp)
if GetWidgetLife(u)>.405 and GetUnitState(u,UNIT_STATE_MANA)>0.and GetUnitAbilityLevel(u,0x4131304B)>0 then
if not IsUnitDisabled(u)and distance<125.then
call SetUnitX(d,x)
call SetUnitY(d,y)
call SetUnitFacing(d,GetUnitFacing(u))
endif
if distance<125.then
if GetUnitAbilityLevel(u,Madara_SUSANOO_SLOW)==0 then
call Sound("Madara Susanoo Restore.mp3")
call UnitAddAbility(u,Madara_SUSANOO_SLOW)
call UnitAddAbility(u,0x41305530)
if GetUnitAbilityLevel(u,Madara_YASAKA)>0 then
call SetPlayerAbilityAvailable(Madara_p,Madara_YASAKA,true)
endif
if GetUnitAbilityLevel(u,Madara_TENGAI)>0 then
call SetPlayerAbilityAvailable(Madara_p,Madara_TENGAI,true)
endif
if GetUnitAbilityLevel(u,Madara_KANSEITAI)>0 then
call SetPlayerAbilityAvailable(Madara_p,Madara_KANSEITAI,true)
endif
endif
else
call SetPlayerAbilityAvailable(Madara_p,Madara_YASAKA,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_TENGAI,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_KANSEITAI,false)
call UnitRemoveAbility(u,0x41305530)
call UnitRemoveAbility(u,Madara_SUSANOO_SLOW)
call UnitRemoveAbility(u,0x42303437)
endif
call SetUnitPosition(de,GetWidgetX(d),GetWidgetY(d))
else
call UnitRemoveAbility(u,0x4131304B)
call UnitRemoveAbility(u,0x41305530)
call UnitRemoveAbility(u,Madara_SUSANOO_SLOW)
call UnitRemoveAbility(u,0x42303437)
if GetUnitTypeId(u)==heroes_rawcode[Madara]then
call SetPlayerAbilityAvailable(Madara_p,Madara_YASAKA,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_TENGAI,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_KANSEITAI,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_GOKA_MEKKYAKU,true)
call SetPlayerAbilityAvailable(Madara_p,Madara_HAIJINGAKURE,true)
call SetPlayerAbilityAvailable(Madara_p,Madara_RYUEN_HOKA,true)
call SetPlayerAbilityAvailable(Madara_p,Madara_KYUIN,true)
call SetPlayerAbilityAvailable(Madara_p,Madara_MOKTON,true)
call SetPlayerAbilityAvailable(Madara_p,Madara_KAJUKAI,true)
call Madara___SusanooChangeText(false)
endif
call DestroyEffect(LoadEffectHandle(HH,h,3))
call DestroyEffect(LoadEffectHandle(HH,h,4))
call RemoveUnit(de)
call RemoveUnit(d)
if not Madara___susanooKanseitai then
call Sound("Itachi_Susanoo 4.mp3")
call SetUnitPathing(u,true)
endif
call UnitAddAbility(u,Madara_RIBU)
if GetHeroLevel(u)>5 then
call SetUnitAbilityLevel(u,Madara_RIBU,2)
endif
call SaveInteger(HH,GetHandleId(u),0,0)
call FlushChildHashtable(HH,GetHandleId(u))
if GetUnitTypeId(u)==heroes_rawcode[Madara]then
call Madara___SusanooChangeText(false)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set d=null
set de=null
set t=null
endfunction
function Madara___SusanooStart takes unit u,unit d,unit de,effect e1,effect e2 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.01
local real mp=30.*period
local integer level=GetHeroLevel(u)
call Sound("Madara Susanoo Restore.mp3")
if GetUnitTypeId(u)==heroes_rawcode[Madara]then
call SetPlayerAbilityAvailable(Madara_p,Madara_GOKA_MEKKYAKU,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_HAIJINGAKURE,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_RYUEN_HOKA,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_KYUIN,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_MOKTON,false)
call SetPlayerAbilityAvailable(Madara_p,Madara_KAJUKAI,false)
if level>=8 then
if GetUnitAbilityLevel(u,Madara_YASAKA)==0 then
call UnitAddAbility(u,Madara_YASAKA)
endif
call SetPlayerAbilityAvailable(Madara_p,Madara_YASAKA,true)
if level>=9 then
if GetUnitAbilityLevel(u,Madara_TENGAI)==0 then
call UnitAddAbility(u,Madara_TENGAI)
endif
call SetPlayerAbilityAvailable(Madara_p,Madara_TENGAI,true)
if level==10 then
if GetUnitAbilityLevel(u,Madara_KANSEITAI)==0 then
call UnitAddAbility(u,Madara_KANSEITAI)
endif
call SetPlayerAbilityAvailable(Madara_p,Madara_KANSEITAI,true)
endif
endif
endif
call Madara___SusanooBunshinCheck()
endif
call UnitAddAbility(u,0x41305530)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,d)
call SaveAgentHandle(HH,h,2,de)
call SaveAgentHandle(HH,h,3,e1)
call SaveAgentHandle(HH,h,4,e2)
call SaveReal(HH,h,5,mp)
call TimerStart(t,period,true,function cj_anonym__435)
set t=null
endfunction
function cj_anonym__436 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local unit de=LoadUnitHandle(HH,h,2)
local integer alpha=LoadInteger(HH,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if alpha<255 and GetWidgetLife(u)>.405 then
call SaveInteger(HH,h,5,alpha+5)
call SetUnitVertexColor(d,255,255,255,alpha)
call SetUnitVertexColor(de,255,255,255,alpha)
else
call PauseUnit(u,false)
if GetWidgetLife(u)>.405 then
call Madara___SusanooStart(u,d,de,LoadEffectHandle(HH,h,3),LoadEffectHandle(HH,h,4))
else
call DestroyEffect(LoadEffectHandle(HH,h,3))
call DestroyEffect(LoadEffectHandle(HH,h,4))
call RemoveUnit(de)
call RemoveUnit(d)
if not Madara___susanooKanseitai then
call Sound("Itachi_Susanoo 4.mp3")
call SetUnitPathing(u,true)
endif
call UnitRemoveAbility(u,Madara_SUSANOO_SLOW)
call UnitRemoveAbility(u,0x42303437)
call UnitRemoveAbility(u,0x4131304B)
call UnitAddAbility(u,Madara_RIBU)
if GetHeroLevel(u)>5 then
call SetUnitAbilityLevel(u,Madara_RIBU,2)
endif
call SaveInteger(HH,GetHandleId(u),0,0)
set Madara_ribuMax=0
call FlushChildHashtable(HH,GetHandleId(u))
if GetUnitTypeId(u)==heroes_rawcode[Madara]then
call Madara___SusanooChangeText(false)
endif
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set de=null
set d=null
set u=null
set t=null
endfunction
function Madara___SusanooCast takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alpha=10
local integer hu=GetHandleId(u)
local integer HPcur=LoadInteger(HH,hu,0)
local real period=.025
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real f=GetUnitFacing(u)
local unit d=CreateUnit(Madara_p,0x6E30314F,x,y,f)
local unit de=CreateUnit(Madara_p,0x6E303042,x,y,0.)
call Sound("Itachi_Susanoo 1.mp3")
call SaveStr(HH,hu,1,"susanoo")
call SaveAgentHandle(HH,hu,3,d)
set Madara_ribuMax=3000
set HPcur=Madara_ribuMax
call SaveInteger(HH,hu,0,HPcur)
if GetUnitTypeId(u)==heroes_rawcode[Madara]then
call Madara___SusanooChangeText(true)
endif
call UnitAddAbility(u,Madara_SUSANOO_SLOW)
call UnitRemoveAbility(u,Madara_RIBU_BUFF)
call UnitRemoveAbility(u,Madara_SUSANOO)
call PauseUnit(u,true)
call SetUnitPathing(u,false)
call SetUnitScale(de,2.2,2.2,2.2)
call SetUnitTimeScale(de,.5)
call SetUnitVertexColor(d,255,255,255,alpha)
call PauseUnit(d,true)
call SetUnitX(d,x)
call SetUnitY(d,y)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,d)
call SaveAgentHandle(HH,h,2,de)
call SaveAgentHandle(HH,h,3,AddSpecialEffectTarget("BlueChakra.mdx",de,"origin"))
call SaveAgentHandle(HH,h,4,AddSpecialEffectTarget("Sharingan eternal madara.mdx",u,"origin"))
call SaveInteger(HH,h,5,alpha)
call TimerStart(t,period,true,function cj_anonym__436)
set de=null
set d=null
set t=null
endfunction
function Madara___RibuDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and GetUnitAbilityLevel(GetTriggerUnit(),Madara_RIBU_BUFF)>0 or GetUnitAbilityLevel(GetTriggerUnit(),Madara_SUSANOO_SLOW)>0
endfunction
function Madara___RibuDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer hu=GetHandleId(u)
local integer HPcur=LoadInteger(HH,hu,0)
local integer dmg=R2I(GetEventDamage())
local real value=0.
call UnitAddAbility(u,0x41304D48)
if dmg<HPcur then
set value=I2R(dmg)
set HPcur=HPcur-dmg
else
set value=I2R(HPcur)
set HPcur=HPcur-HPcur
endif
call UnitRemoveAbility(u,0x41304D48)
call SetWidgetLife(u,GetWidgetLife(u)+value)
call SaveInteger(HH,hu,0,HPcur)
set HPcur=LoadInteger(HH,hu,0)
if HPcur<=0 then
call UnitRemoveAbility(u,0x4131304B)
call UnitRemoveAbility(u,Madara_RIBU_BUFF)
endif
if GetUnitTypeId(u)==heroes_rawcode[Madara]then
call Madara___SusanooChangeText(true)
endif
set u=null
endfunction
function cj_anonym__437 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real mp=LoadReal(HH,h,1)
local integer hu=GetHandleId(u)
local integer idu=GetUnitTypeId(u)
call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)-mp)
if GetWidgetLife(u)<.405 or GetUnitState(u,UNIT_STATE_MANA)<=0.or GetUnitAbilityLevel(u,Madara_RIBU_BUFF)==0 or GetUnitAbilityLevel(u,0x4131304B)==0 then
call UnitRemoveAbility(u,Madara_RIBU_BUFF)
if LoadStr(HH,hu,1)=="ribu"then
call UnitRemoveAbility(u,Madara_SUSANOO)
call UnitRemoveAbility(u,0x4131304B)
call UnitAddAbility(u,Madara_RIBU)
if GetHeroLevel(u)>5 then
call SetUnitAbilityLevel(u,Madara_RIBU,2)
endif
call SaveInteger(HH,hu,0,0)
set Madara_ribuMax=0
call FlushChildHashtable(HH,hu)
if GetUnitTypeId(u)==heroes_rawcode[Madara]then
call Madara___SusanooChangeText(false)
endif
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function Madara___RibuCast takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer hu=GetHandleId(u)
local integer idu=GetUnitTypeId(u)
local integer HPcur=LoadInteger(HH,hu,0)
local integer level=GetHeroLevel(u)
local real period=.1
local real mp=30.*period
local unit tg
set Madara_ribuMax=GetUnitAbilityLevel(u,Madara_RIBU)*250+250
if idu==heroes_rawcode[Madara]then
if not Madara___ribuReg then
set Madara___ribuReg=true
call TriggerRegisterUnitEvent(Madara___ribudmg,u,EVENT_UNIT_DAMAGED)
endif
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup,Madara_p,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if GetUnitTypeId(tg)==0x4F303131 and GetWidgetLife(tg)>.405 then
call IssueImmediateOrder(tg,"berserk")
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
else
call TriggerRegisterUnitEvent(Madara___ribudmg,u,EVENT_UNIT_DAMAGED)
endif
call UnitRemoveAbility(u,Madara_RIBU)
call UnitAddAbility(u,0x4131304B)
if level>=7 then
call UnitAddAbility(u,Madara_SUSANOO)
endif
set HPcur=Madara_ribuMax
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,mp)
call SaveInteger(HH,hu,0,HPcur)
call SaveStr(HH,hu,1,"ribu")
if GetUnitTypeId(u)==heroes_rawcode[Madara]then
call Madara___SusanooChangeText(true)
endif
call TimerStart(t,period,true,function cj_anonym__437)
set tg=null
set t=null
endfunction
function Madara___MokutonKajukaiKorinKillDestructables takes nothing returns nothing
local destructable des=GetEnumDestructable()
if GetDestructableTypeId(des)==0x42304248 then
call RemoveDestructable(des)
endif
set des=null
endfunction
function cj_anonym__438 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer time=LoadInteger(HH,h,-1)
local real x=LoadReal(HH,h,-2)
local real y=LoadReal(HH,h,-3)
local real range=LoadReal(HH,h,-4)
local real dmg=LoadReal(HH,h,-5)
local real x1
local real y1
local real distance
local unit tg
if time>0 then
call GroupEnumUnitsInRect(bj_lastCreatedGroup,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedClear(tg,Madara_p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<=range then
if GetUnitAbilityLevel(tg,0x41303749)==0 then
call UnitAddAbility(tg,0x41303749)
else
call SetUnitAbilityLevel(tg,0x41303749,GetUnitAbilityLevel(tg,0x41303749)+1)
endif
else
if GetUnitAbilityLevel(tg,0x41303749)>0 then
call UnitRemoveAbility(tg,0x41303749)
call UnitRemoveAbility(tg,0x42303438)
endif
endif
call UnitDamageTarget(Madara_c,tg,dmg*GetUnitState(tg,UNIT_STATE_MAX_LIFE),true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call SaveInteger(HH,h,-1,time-1)
else
set time=0
loop
call DestroyEffect(LoadEffectHandle(HH,h,time))
set time=time+1
exitwhen time==25
endloop
call RemoveUnit(LoadUnitHandle(HH,h,-6))
call EnumDestructablesInRect(bj_mapInitialPlayableArea,null,function Madara___MokutonKajukaiKorinKillDestructables)
call GroupEnumUnitsInRect(bj_lastCreatedGroup,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41303749)>0 then
call UnitRemoveAbility(tg,0x41303749)
call UnitRemoveAbility(tg,0x42303438)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set tg=null
set t=null
endfunction
function Madara___MokutonKajukaiKorinCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer l__Madara___number=0
local integer time=20
local integer id=0x42304248
local real radius=1200.
local real offsetPlus=15.
local real dmg=.01
local real randomAngle
local real randomOffset
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
call Sound("Madara Mokuton Kajukai Korin.mp3")
loop
set randomAngle=GetRandomReal(1.,360.)
set randomOffset=GetRandomReal(offsetPlus,radius/2.)
set bj_lastCreatedDestructable=CreateDestructable(id,x+randomOffset*Cos(randomAngle*bj_DEGTORAD),y+randomOffset*Sin(randomAngle*bj_DEGTORAD),GetRandomReal(0.,360.),GetRandomReal(1.5,2.),1)
call SaveAgentHandle(HH,h,l__Madara___number,AddSpecialEffect("Pilca [WolSai].mdx",GetWidgetX(bj_lastCreatedDestructable),GetWidgetY(bj_lastCreatedDestructable)))
set offsetPlus=offsetPlus+15.
set l__Madara___number=l__Madara___number+1
exitwhen l__Madara___number==25
endloop
call SaveInteger(HH,h,-1,time)
call SaveReal(HH,h,-2,x)
call SaveReal(HH,h,-3,y)
call SaveReal(HH,h,-4,radius/2.)
call SaveReal(HH,h,-5,dmg)
call SaveAgentHandle(HH,h,-6,CreateUnit(Madara_p,0x6830304B,x,y,0.))
call TimerStart(t,1.,true,function cj_anonym__438)
set t=null
endfunction
function cj_anonym__439 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
if time>0.and GetWidgetLife(tu)>.405 then
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
if time==.5 or time==1.or time==1.5 or time==2.or time==2.5 then
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)-60.)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Feedback\\ArcaneTowerAttack.mdl",GetWidgetX(tu),GetWidgetY(tu)))
endif
call SaveReal(HH,h,3,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,1))
call PauseUnit(tu,false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Madara___MoktonTargetSave takes unit tu,real timeStun returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
call PauseUnit(tu,true)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Mokuton Protective Zahvat-Udusheniye.mdx",tu,"origin"))
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,timeStun)
call TimerStart(t,period,true,function cj_anonym__439)
set t=null
endfunction
function cj_anonym__440 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tg=LoadUnitHandle(HH,h,0)
local group g1=LoadGroupHandle(HH,h,1)
local group g2=LoadGroupHandle(HH,h,2)
local real distance=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real a=LoadReal(HH,h,5)
local real radius=LoadReal(HH,h,6)
local real timeStun=LoadReal(HH,h,7)
local integer createPeriod=LoadInteger(HH,h,8)
local real x=GetWidgetX(tg)
local real y=GetWidgetY(tg)
local rect r
if distance>0.then
call SetUnitPosition(tg,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
set r=Rect(x-radius/2.,y-radius/2.,x+radius/2.,y+radius/2.)
call GroupEnumUnitsInRect(g1,r,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedClear(tg,Madara_p)and not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
call Madara___MoktonTargetSave(tg,timeStun)
endif
call GroupRemoveUnit(g1,tg)
endloop
if createPeriod>0 then
call SaveInteger(HH,h,8,createPeriod-1)
else
set tg=CreateUnit(Madara_p,0x6E303130,x,y,a)
call SetUnitScale(tg,GetRandomReal(.85,.95),GetRandomReal(.85,.95),GetRandomReal(.85,.95))
call SaveInteger(HH,h,8,7)
endif
set tg=CreateUnit(Madara_p,0x68303136,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),GetRandomReal(0.,360.))
call SetUnitScale(tg,GetRandomReal(.95,1.05),GetRandomReal(.95,1.05),GetRandomReal(.95,1.05))
call RemoveRect(r)
call SaveReal(HH,h,3,distance-offset)
else
call GroupEnumUnitsOfPlayer(g1,Madara_p,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if GetUnitTypeId(tg)==0x6E303130 or GetUnitTypeId(tg)==0x68303136 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g1,tg)
endloop
call GroupClear(g1)
call DestroyGroup(g1)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set r=null
set tg=null
set g1=null
set g2=null
set t=null
endfunction
function Madara___MoktonCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real range=900.
local real radius=600.
local real startOffset=300.
local real offset=15.
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real timeStun=2.5
local integer createPeriod=7
call Sound("Madara Mokuton Jukai Kotan.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Madara_p,0x6E303130,x+startOffset*Cos(a*.017),y+startOffset*Sin(a*.017),a))
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveReal(HH,h,3,range)
call SaveReal(HH,h,4,offset)
call SaveReal(HH,h,5,a)
call SaveReal(HH,h,6,radius)
call SaveReal(HH,h,7,timeStun)
call SaveInteger(HH,h,8,createPeriod)
call TimerStart(t,MainPeriod,true,function cj_anonym__440)
set t=null
endfunction
function Madara___GetDamageConditions takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit())==0x4F303131 or GetUnitTypeId(GetEventDamageSource())==0x4F303131
endfunction
function Madara___GetDamageActions takes nothing returns nothing
local unit attacker=GetEventDamageSource()
local unit attacked=GetTriggerUnit()
local real dmg=GetEventDamage()
local real value
call DisableTrigger(Madara___getdmg)
if GetUnitTypeId(attacker)==0x4F303131 then
set value=dmg*.9
call SetWidgetLife(attacked,GetWidgetLife(attacked)+value)
elseif GetUnitTypeId(attacked)==0x4F303131 then
set value=dmg*3.-1.
call UnitDamageTarget(attacker,attacked,value,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call EnableTrigger(Madara___getdmg)
set attacked=null
set attacker=null
endfunction
function Madara___MokubunshinRegistr takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Madara_p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(tg,Madara___grRegBunshin)then
call GroupAddUnit(Madara___grRegBunshin,tg)
call TriggerRegisterUnitEvent(Madara___getdmg,tg,EVENT_UNIT_DAMAGED)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__441 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
call SetUnitState(d,UNIT_STATE_MANA,GetUnitState(d,UNIT_STATE_MANA)-GetUnitState(d,UNIT_STATE_MAX_MANA)*.05)
if Madara___number==0 or GetWidgetLife(Madara_c)<.405 or GetUnitAbilityLevel(Madara_c,0x4130544D)==0 or GetWidgetLife(d)<.405 or GetUnitState(d,UNIT_STATE_MANA)==0.or GetUnitAbilityLevel(d,0x4130544D)==0 then
set Madara___number=Madara___number-1
if Madara___number==0 or GetWidgetLife(Madara_c)<.405 or GetUnitAbilityLevel(Madara_c,0x4130544D)==0 then
call UnitRemoveAbility(Madara_c,0x4130544D)
call SetPlayerAbilityAvailable(Madara_p,Madara_MOKUBUNSHIN,true)
endif
call FlushChildHashtable(HH,GetHandleId(d))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Madara___MokubunshinCast takes nothing returns nothing
local timer t
local integer lvlRibu=GetUnitAbilityLevel(Madara_c,Madara_RIBU)
local integer lvlRibuBuff=GetUnitAbilityLevel(Madara_c,Madara_RIBU_BUFF)
local integer lvlSusanoo=GetUnitAbilityLevel(Madara_c,Madara_SUSANOO_SLOW)
local integer i=5
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
local real f=GetUnitFacing(Madara_c)
set Madara___number=5
call Sound("Ping.mp3")
call SetPlayerAbilityAvailable(Madara_p,Madara_MOKUBUNSHIN,false)
call UnitAddAbility(Madara_c,0x4130544D)
loop
set t=CreateTimer()
set bj_lastCreatedUnit=CreateUnit(Madara_p,0x4F303131,x,y,f)
call SetHeroXP(bj_lastCreatedUnit,GetHeroXP(Madara_c),false)
call SuspendHeroXP(bj_lastCreatedUnit,false)
call SetUnitState(bj_lastCreatedUnit,UNIT_STATE_MANA,GetUnitState(Madara_c,UNIT_STATE_MANA))
call SetWidgetLife(bj_lastCreatedUnit,GetWidgetLife(Madara_c))
call UnitAddAbility(bj_lastCreatedUnit,0x4130544D)
if GetLocalPlayer()==Madara_p then
call SetUnitVertexColor(bj_lastCreatedUnit,78,42,4,255)
endif
if lvlRibu>0 or lvlRibuBuff>0 or lvlSusanoo>0 then
call UnitAddAbility(bj_lastCreatedUnit,Madara_RIBU)
if GetHeroLevel(bj_lastCreatedUnit)>5 then
call SetUnitAbilityLevel(bj_lastCreatedUnit,Madara_RIBU,2)
endif
endif
call TriggerRegisterUnitEvent(Madara___getdmg,bj_lastCreatedUnit,EVENT_UNIT_DAMAGED)
call SaveAgentHandle(HH,GetHandleId(t),0,bj_lastCreatedUnit)
call TimerStart(t,1.,true,function cj_anonym__441)
set i=i-1
exitwhen i==0
endloop
call Madara___MokubunshinRegistr()
set t=null
endfunction
function Madara___KyuinDamage takes unit u returns nothing
local real radius=200.
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real dmg=100.
local group g=CreateGroup()
local unit tg
set bj_lastCreatedUnit=CreateUnit(Madara_p,0x6E303042,x,y,GetUnitFacing(u)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x4130424A)
call IssueTargetOrder(bj_lastCreatedUnit,"purge",u)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call DestroyEffect(AddSpecialEffect("Energy Release.mdx",x,y))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Madara_p)then
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(dmg,Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=null
set tg=null
endfunction
function cj_anonym__442 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.and GetWidgetLife(u)>.405 then
call SaveReal(HH,h,2,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,3))
call DestroyEffect(LoadEffectHandle(HH,h,4))
call UnitRemoveAbility(u,0x41313351)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function Madara___KyuinCast takes nothing returns nothing
local timer t
local integer h
local group g=CreateGroup()
local real period=.1
local real time=4.-period
local unit tg
call Sound("Madara Fujutsu Kyuin.mp3")
call GroupEnumUnitsOfPlayer(g,Madara_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x4F303131 or GetUnitTypeId(tg)==0x4F30304C then
call Madara___KyuinDamage(tg)
set t=CreateTimer()
set h=GetHandleId(t)
call UnitAddAbility(tg,0x41313351)
call SaveAgentHandle(HH,h,0,tg)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveAgentHandle(HH,h,3,AddSpecialEffectTarget("Shield.mdx",tg,"chest"))
call SaveAgentHandle(HH,h,4,AddSpecialEffectTarget("Rinnegan.mdx",tg,"origin"))
call TimerStart(t,period,true,function cj_anonym__442)
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=null
set g=null
set t=null
endfunction
function Madara___RyuenHokaDamage takes real x,real y,real radius,real dmg returns nothing
local unit tg
call GroupEnumUnitsInRange(Madara___grRyuenDamage,x,y,radius,null)
loop
set tg=FirstOfGroup(Madara___grRyuenDamage)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Madara_p)then
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(dmg,Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Madara_c,tg)
endif
call GroupRemoveUnit(Madara___grRyuenDamage,tg)
endloop
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call FireDestructablesEnum(x,y,radius/2.)
call JiraiyaSetFireSwamp(Madara_c,x,y)
set tg=null
endfunction
function cj_anonym__443 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real maxdis=LoadReal(HH,h,4)
local integer amount=LoadInteger(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SetUnitFlyHeight(d,1400./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SaveInteger(HH,h,7,amount-1)
else
call Madara___RyuenHokaDamage(x,y,LoadReal(HH,h,5),LoadReal(HH,h,6))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Madara___RyuenHokaCreate takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real speed=1040.
local real offset=speed*period
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real radius=250.
local real dmg=40.+GetHeroInt(Madara_c,true)*1.2
local unit d=CreateUnit(Madara_p,0x6E303251,x,y,a)
local integer amount=R2I(distance/offset)
call SetUnitTimeScale(d,.8)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,distance)
call SaveReal(HH,h,5,radius)
call SaveReal(HH,h,6,dmg)
call SaveInteger(HH,h,7,amount)
call TimerStart(t,period,true,function cj_anonym__443)
set d=null
set t=null
endfunction
function cj_anonym__444 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local integer i=0
local integer max=5
local real xHero=GetWidgetX(Madara_c)
local real yHero=GetWidgetY(Madara_c)
local real startOffset=100.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real radius
local real randomAgnle
local real offsetPlus=25.
loop
set radius=GetRandomReal(offsetPlus,500./2.)
set randomAgnle=GetRandomReal(1.,360.)
set offsetPlus=offsetPlus+25.
call Madara___RyuenHokaCreate(x,y,x1+radius*Cos(randomAgnle*bj_DEGTORAD),y1+radius*Sin(randomAgnle*bj_DEGTORAD))
set i=i+1
exitwhen i==max
endloop
call SetUnitTimeScale(Madara_c,1.)
call PauseUnit(Madara_c,false)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___RyuenHokaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=.7
call Sound("Madara Katon Ryuen Hoka no Jutsu.mp3")
call PauseUnit(Madara_c,true)
call SetUnitTimeScale(Madara_c,1.35)
call SetUnitAnimation(Madara_c,"Spell two")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,castTime,false,function cj_anonym__444)
set t=null
endfunction
function Madara___HaijingakureDamage takes real x,real y returns nothing
local real dmg=50.
local real addDmg=.1
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,500.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Madara_p)then
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(dmg+(GetUnitState(tg,UNIT_STATE_MAX_LIFE)*addDmg),Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Madara_c,tg)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call FireDestructablesEnum(x,y,500./2.)
call JiraiyaSetFireSwamp(Madara_c,x,y)
set tg=null
endfunction
function cj_anonym__446 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call RemoveUnit(LoadUnitHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__445 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real castTime=2.
local real offset=250.
local real degree=0.
local real degreeStep=72.
call Madara___HaijingakureDamage(x,y)
loop
call DestroyEffect(AddSpecialEffect("Boom.mdx",x+offset*Cos(degree*bj_DEGTORAD),y+offset*Sin(degree*bj_DEGTORAD)))
set degree=degree+degreeStep
exitwhen degree==360.
endloop
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call SaveAgentHandle(HH,h1,0,LoadUnitHandle(HH,h,0))
call SaveAgentHandle(HH,h1,1,CreateUnit(Madara_p,0x6E30324E,x,y,0.))
call TimerStart(t1,castTime,false,function cj_anonym__446)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Madara___HaijingakureCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=2.
local real x=GetWidgetX(Madara_c)
local real y=GetWidgetY(Madara_c)
set bj_lastCreatedUnit=CreateUnit(Madara_p,0x6E30324D,x,y,0.)
call Sound("Madara Katon Haijingakure no Jutsu.mp3")
call SetUnitTimeScale(bj_lastCreatedUnit,.7)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call TimerStart(t,castTime,false,function cj_anonym__445)
set t=null
endfunction
function Madara___GokaMesshitsuDamagePeriodic takes real x,real y,real radius,real dmg returns nothing
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Madara_p)then
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(dmg,Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Madara_c,tg)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call FireDestructablesEnum(x,y,radius/2.)
call JiraiyaSetFireSwamp(Madara_c,x,y)
set tg=null
endfunction
function cj_anonym__447 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u1=LoadUnitHandle(HH,h,1)
local unit u2=LoadUnitHandle(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real radiusPlus=LoadReal(HH,h,4)
local real size=LoadReal(HH,h,5)
local real sizePlus=LoadReal(HH,h,6)
local real period=LoadReal(HH,h,7)
local real time=LoadReal(HH,h,8)
local real dmg=LoadReal(HH,h,9)
if time>0.and GetUnitCurrentOrder(Madara_c)==OrderId("whirlwind")then
call Madara___GokaMesshitsuDamagePeriodic(GetWidgetX(u1),GetWidgetY(u1),radius,dmg)
call SetUnitScale(u1,size,size,size)
call SetUnitScale(u2,size*1.25,size*1.25,size*1.25)
call SaveReal(HH,h,3,radius+radiusPlus)
call SaveReal(HH,h,5,size+sizePlus)
call SaveReal(HH,h,8,time-period)
else
if GetUnitCurrentOrder(Madara_c)==OrderId("whirlwind")then
call IssueImmediateOrder(Madara_c,"stop")
endif
call SetUnitAnimation(Madara_c,"Stand")
call RemoveUnit(LoadUnitHandle(HH,h,0))
call KillUnit(u1)
call KillUnit(u2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u1=null
set u2=null
set t=null
endfunction
function Madara___GokaMesshitsuDamageStartFire takes unit u,real startOffset,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Madara_c)
local real yHero=GetWidgetY(Madara_c)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real period=.1
local real time=3.
local real radius=300.
local real offset=750.-startOffset
local real radiusPlus=200.*period
local real dmg=(20.+GetHeroInt(Madara_c,true)*1.1)*period
local real sizePlus=.03
local real size=.5+sizePlus
local real x1=x+offset*Cos(a*bj_DEGTORAD)
local real y1=y+offset*Sin(a*bj_DEGTORAD)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,CreateUnit(Madara_p,0x6E303250,x1,y1,0.))
call SaveAgentHandle(HH,h,2,CreateUnit(Madara_p,0x68303142,x1,y1,0.))
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,radiusPlus)
call SaveReal(HH,h,5,size)
call SaveReal(HH,h,6,sizePlus)
call SaveReal(HH,h,7,period)
call SaveReal(HH,h,8,time)
call SaveReal(HH,h,9,dmg)
call TimerStart(t,period,true,function cj_anonym__447)
set t=null
endfunction
function cj_anonym__448 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetUnitCurrentOrder(Madara_c)==OrderId("whirlwind")then
call Madara___GokaMesshitsuDamageStartFire(u,LoadReal(HH,h,1),LoadReal(HH,h,2))
else
call SetUnitAnimation(Madara_c,"Stand Ready")
call RemoveUnit(u)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Madara___GokaMesshitsuDamageStartFlow takes real startOffset,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Madara_c)
local real yHero=GetWidgetY(Madara_c)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real castTime=1.
set bj_lastCreatedUnit=CreateUnit(Madara_p,0x6E30324F,x,y,a+90.)
call SetUnitAnimation(Madara_c,"Spell Four")
call SetUnitTimeScale(bj_lastCreatedUnit,2.)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveReal(HH,h,1,startOffset)
call SaveReal(HH,h,2,a)
call TimerStart(t,castTime,false,function cj_anonym__448)
set t=null
endfunction
function cj_anonym__449 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
if GetUnitCurrentOrder(Madara_c)==OrderId("whirlwind")then
call Madara___GokaMesshitsuDamageStartFlow(LoadReal(HH,h,0),LoadReal(HH,h,1))
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___GokaMesshitsuStart takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Madara_c)
local real yHero=GetWidgetY(Madara_c)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real castTime=.5
call SetUnitAnimation(Madara_c,"Spell two")
call SaveReal(HH,h,0,startOffset)
call SaveReal(HH,h,1,a)
call TimerStart(t,castTime,false,function cj_anonym__449)
set t=null
endfunction
function cj_anonym__450 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if time>0.and GetUnitCurrentOrder(Madara_c)==OrderId("whirlwind")then
call SaveReal(HH,h,1,time-period)
else
call SetUnitTimeScale(Madara_c,1.)
if GetUnitCurrentOrder(Madara_c)==OrderId("whirlwind")then
call Madara___GokaMesshitsuStart(LoadReal(HH,h,2),LoadReal(HH,h,3))
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Madara___GokaMesshitsuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=.55
call Sound("Madara Katon Goka Messhitsu.mp3")
call SetUnitTimeScale(Madara_c,3.)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,x1)
call SaveReal(HH,h,3,y1)
call TimerStart(t,period,true,function cj_anonym__450)
set t=null
endfunction
function Madara___GokaMekkyakuDMG takes real x,real y,real dmg returns nothing
local rect r=Rect(x-225.,y-450.,x+225.,y+450.)
local group gr=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(gr,r,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Madara_p)then
call UnitDamageTarget(Madara_c,tg,GetNinjutsuDamage(dmg,Madara_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Madara_c,tg)
endif
call GroupRemoveUnit(gr,tg)
endloop
call DestroyGroup(gr)
call RemoveRect(r)
call FireDestructablesEnum(x,y,900./2.)
call JiraiyaSetFireSwamp(Madara_c,x,y)
set r=null
set gr=null
set tg=null
endfunction
function cj_anonym__451 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit fireJet=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real dmg=LoadReal(HH,h,6)
local real size=LoadReal(HH,h,7)
local real range=LoadReal(HH,h,8)
local real offset=LoadReal(HH,h,9)
local real distance=LoadReal(HH,h,10)
local integer count=LoadInteger(HH,h,11)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if GetUnitCurrentOrder(Madara_c)==OrderId("breathoffire")and distance<range then
call SaveReal(HH,h,7,size+.035)
call SaveReal(HH,h,10,distance+offset)
if count<6 then
call SaveInteger(HH,h,11,count+1)
else
set bj_lastCreatedUnit=CreateUnit(Madara_p,0x68303142,x,y,GetRandomReal(0.,360.))
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call SetUnitScale(bj_lastCreatedUnit,size,size,size)
call SaveInteger(HH,h,11,0)
endif
call SetUnitScale(fireJet,size*1.5,size*1.5,size*1.5)
set count=1
loop
exitwhen count>5
set d=LoadUnitHandle(HH,h,count)
call SetUnitPosition(d,GetWidgetX(d)+offset*Cos(GetUnitFacing(d)*bj_DEGTORAD),GetWidgetY(d)+offset*Sin(GetUnitFacing(d)*bj_DEGTORAD))
set count=count+1
endloop
call Madara___GokaMekkyakuDMG(x,y,dmg)
else
if GetUnitCurrentOrder(Madara_c)==OrderId("breathoffire")then
call IssueImmediateOrder(Madara_c,"stop")
endif
call KillUnit(fireJet)
set count=1
loop
exitwhen count>5
set d=LoadUnitHandle(HH,h,count)
call CreateEffect(GetWidgetX(d),GetWidgetY(d),1.35,"Boom.mdx",1.)
call RemoveUnit(d)
set count=count+1
endloop
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set fireJet=null
set d=null
set t=null
endfunction
function Madara___GokaMekkyakuStart takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Madara_c)
local real yHero=GetWidgetY(Madara_c)
local real fireJetOffset=50.
local real startOffset=175.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real xFireJet=xHero+fireJetOffset*Cos(a*bj_DEGTORAD)
local real yFireJet=yHero+fireJetOffset*Sin(a*bj_DEGTORAD)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real dmg=(30.+GetHeroInt(Madara_c,true)*1.5)*MainPeriod
local real size=.65
local real range=1200.
local real speed=600.
local real offset=speed*MainPeriod
local real time=2.
set bj_lastCreatedUnit=CreateUnit(Madara_p,0x6E30324F,xFireJet,yFireJet,a+90.)
call Sound("Madara Katon Goka Mekkyaku Cast 2.mp3")
call SetUnitScale(bj_lastCreatedUnit,size,size,size)
call SetUnitAnimation(Madara_c,"Spell Four")
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,1,CreateUnit(Madara_p,0x68303049,x,y,a))
call SaveAgentHandle(HH,h,2,CreateUnit(Madara_p,0x68303049,x+180.*Cos((a+90.)*.017),y+180.*Sin((a+90.)*.017),a))
call SaveAgentHandle(HH,h,3,CreateUnit(Madara_p,0x68303049,x+180.*Cos((a-90.)*.017),y+180.*Sin((a-90.)*.017),a))
call SaveAgentHandle(HH,h,4,CreateUnit(Madara_p,0x68303049,x+360.*Cos((a+90.)*.017),y+360.*Sin((a+90.)*.017),a))
call SaveAgentHandle(HH,h,5,CreateUnit(Madara_p,0x68303049,x+360.*Cos((a-90.)*.017),y+360.*Sin((a-90.)*.017),a))
call SaveReal(HH,h,6,dmg)
call SaveReal(HH,h,7,size)
call SaveReal(HH,h,8,range)
call SaveReal(HH,h,9,offset)
call SaveReal(HH,h,10,0.)
call TimerStart(t,MainPeriod,true,function cj_anonym__451)
set t=null
endfunction
function cj_anonym__452 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
if GetUnitCurrentOrder(Madara_c)==OrderId("breathoffire")then
call Madara___GokaMekkyakuStart(LoadReal(HH,h,0),LoadReal(HH,h,1))
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Madara___GokaMekkyakuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=.2
call Sound("Madara Katon Goka Mekkyaku.mp3")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,castTime,false,function cj_anonym__452)
set t=null
endfunction
function Madara___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Madara_GOKA_MEKKYAKU or i==Madara_GOKA_MESSHITSU or i==Madara_HAIJINGAKURE or i==Madara_RYUEN_HOKA or i==Madara_KYUIN or i==Madara_MOKUBUNSHIN or i==0x4130544D or i==Madara_MOKTON or i==Madara_KAJUKAI or i==Madara_RIBU or i==0x4131304B or i==Madara_SUSANOO or i==Madara_YASAKA or i==Madara_TENGAI or i==Madara_KANSEITAI or i==Madara_SENPO or i==Madara_RINBO or i==Madara_CHIBAKU_TENSEI or i==Madara_MUGEN_TSUKUYOMI
endfunction
function Madara___SpellsActions takes nothing returns nothing
local integer id
if Madara_c==null then
set Madara_c=GetTriggerUnit()
set Madara_p=GetOwningPlayer(Madara_c)
endif
set id=GetSpellAbilityId()
if id==Madara_GOKA_MEKKYAKU then
call Madara___GokaMekkyakuCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Madara_GOKA_MESSHITSU then
call Madara___GokaMesshitsuCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Madara_HAIJINGAKURE then
call Madara___HaijingakureCast()
elseif id==Madara_RYUEN_HOKA then
call Madara___RyuenHokaCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Madara_KYUIN then
call Madara___KyuinCast()
elseif id==Madara_MOKUBUNSHIN then
call Madara___MokubunshinCast()
elseif id==0x4130544D then
call UnitRemoveAbility(GetTriggerUnit(),0x4130544D)
elseif id==Madara_MOKTON then
call Madara___MoktonCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Madara_KAJUKAI then
call Madara___MokutonKajukaiKorinCast()
elseif id==Madara_RIBU then
call Madara___RibuCast(GetTriggerUnit())
elseif id==0x4131304B then
call UnitRemoveAbility(GetTriggerUnit(),0x4131304B)
elseif id==Madara_SUSANOO then
call Madara___SusanooCast(GetTriggerUnit())
elseif id==Madara_YASAKA then
call Madara___YasakaNoMagatamaCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Madara_TENGAI then
call Madara___TengaiCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Madara_KANSEITAI then
call Madara___KanseitaiSusanooCast()
elseif id==Madara_SENPO then
call Madara___SenpoCast(GetSpellTargetX(),GetSpellTargetY(),GetSpellTargetUnit())
elseif id==Madara_RINBO then
call Madara___RinboHengokuCast()
elseif id==Madara_CHIBAKU_TENSEI then
call Madara___ChibakuTenseiCast()
elseif id==Madara_MUGEN_TSUKUYOMI then
call Madara___MugenTsukuyomiCast()
endif
endfunction
function Madara_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
local trigger attack_gudodama=CreateTrigger()
local trigger attack_rinbo=CreateTrigger()
set Madara___ribudmg=CreateTrigger()
set Madara___getdmg=CreateTrigger()
set Madara___grRyuenDamage=CreateGroup()
set Madara___trgGudodamaDamage=CreateTrigger()
set Madara___grGudodamaReg=CreateGroup()
set Madara___grGudodamaCheck=CreateGroup()
set Madara_trgRinboDamage=CreateTrigger()
set Madara___grRinboReg=CreateGroup()
set Madara___grRinboCheck=CreateGroup()
call DisableTrigger(Madara_trgRinboDamage)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attack_gudodama,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attack_rinbo,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Madara___SpellsConditions))
call TriggerAddAction(spells,function Madara___SpellsActions)
call TriggerAddCondition(Madara___getdmg,Condition(function Madara___GetDamageConditions))
call TriggerAddAction(Madara___getdmg,function Madara___GetDamageActions)
call TriggerAddCondition(Madara___ribudmg,Condition(function Madara___RibuDamageConditions))
call TriggerAddAction(Madara___ribudmg,function Madara___RibuDamageActions)
call TriggerAddCondition(attack,Condition(function Madara___AttackConditions))
call TriggerAddAction(attack,function Madara___AttackActions)
call TriggerAddCondition(attack_gudodama,Condition(function Madara___GudodamaAttackConditions))
call TriggerAddAction(attack_gudodama,function Madara___GudodamaAttackActions)
call TriggerAddCondition(Madara___trgGudodamaDamage,Condition(function Madara___GudodamaGetDamageConditions))
call TriggerAddAction(Madara___trgGudodamaDamage,function Madara___GudodamaGetDamageActions)
call TriggerAddCondition(attack_rinbo,Condition(function Madara___RinboAttackConditions))
call TriggerAddAction(attack_rinbo,function Madara___RinboAttackActions)
call TriggerAddCondition(Madara_trgRinboDamage,Condition(function Madara___RinboGetDamageConditions))
call TriggerAddAction(Madara_trgRinboDamage,function Madara___RinboGetDamageActions)
set attack_gudodama=null
set attack_rinbo=null
set spells=null
set attack=null
endfunction
function Mei___SuiryudanDamage takes real x1,real y1,real radius,real dmg returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Mei___p)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call UnitDamageTarget(Mei___c,tg,GetNinjutsuDamage(dmg,Mei___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call TerrainDeformRipple(x1,y1,radius,60.,500,1,250.,4.,.5,false)
call CreateEffect(x1,y1,GetRandomReal(2.,2.5),"IceSparks.mdx",8.)
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x1,y1))
call CreateEffect(x1,y1,3.,"WaterBlast.mdx",2.)
set tg=null
set g=null
endfunction
function cj_anonym__453 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u1=LoadUnitHandle(HH,h,0)
local unit u2=LoadUnitHandle(HH,h,1)
local integer alphaStep=LoadInteger(HH,h,3)
local integer alpha=LoadInteger(HH,h,4)
if alpha>alphaStep then
call SetUnitVertexColor(u1,255,255,255,alpha)
call SetUnitVertexColor(u1,255,255,255,alpha)
call SaveInteger(HH,h,4,alpha-alphaStep)
else
call RemoveUnit(u1)
call RemoveUnit(u2)
call RemoveUnit(LoadUnitHandle(HH,h,2))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u1=null
set u2=null
set t=null
endfunction
function Mei___SuiryudanRemoveCast takes unit u1,unit u2,unit u3 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alphaStep=10
local integer alpha=255-alphaStep
call SaveAgentHandle(HH,h,0,u1)
call SaveAgentHandle(HH,h,1,u2)
call SaveAgentHandle(HH,h,2,u3)
call SaveInteger(HH,h,3,alphaStep)
call SaveInteger(HH,h,4,alpha)
call TimerStart(t,MainPeriod,true,function cj_anonym__453)
set t=null
endfunction
function cj_anonym__455 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Mei___SuiryudanDamage(LoadReal(HH,h,1),LoadReal(HH,h,2),LoadReal(HH,h,3),LoadReal(HH,h,4))
call RemoveUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__454 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,3)
local real x1=LoadReal(HH,h,4)
local real y1=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local real castTime=.7
local real needHeight=0.
local real speedHeight=(1000./castTime)*.9
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call Mei___SuiryudanRemoveCast(LoadUnitHandle(HH,h,0),LoadUnitHandle(HH,h,1),LoadUnitHandle(HH,h,2))
call RemoveUnit(u)
set u=CreateUnit(Mei___p,0x6E303149,x1,y1,a)
call SetUnitPathing(u,false)
call SetUnitTypeFlying(u)
call SetUnitAnimation(u,"walk")
call SetUnitFlyHeight(u,needHeight,speedHeight)
call SaveAgentHandle(HH,h1,0,u)
call SaveReal(HH,h1,1,x1)
call SaveReal(HH,h1,2,y1)
call SaveReal(HH,h1,3,LoadReal(HH,h,7))
call SaveReal(HH,h1,4,LoadReal(HH,h,8))
call TimerStart(t1,castTime,false,function cj_anonym__455)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function Mei___SuiryudanCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real startOffset=300.
local real xHero=GetWidgetX(Mei___c)
local real yHero=GetWidgetY(Mei___c)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero-startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero-startOffset*Sin(a*bj_DEGTORAD)
local real castTime=1.6
local real needHeight=2000.
local real speedHeight=(needHeight/castTime)*.9
local real radius=350.
local real dmg=150.+GetHeroInt(Mei___c,true)*3.
local unit u=CreateUnit(Mei___p,0x6E303148,x,y,a)
local unit pilar=CreateUnit(Mei___p,0x6E303058,x,y,a)
call Sound("Ping.mp3")
call SetUnitFlyHeight(pilar,-300.,0.)
call SetUnitAnimation(u,"spell")
call SetUnitTimeScale(u,1.-.3)
call SetUnitPathing(u,false)
call SetUnitTypeFlying(u)
call SetUnitFlyHeight(u,needHeight,speedHeight)
call SaveAgentHandle(HH,h,0,CreateUnit(Mei___p,0x6E30314A,x,y,a))
call SaveAgentHandle(HH,h,1,CreateUnit(Mei___p,0x6E30314B,x,y,a))
call SaveAgentHandle(HH,h,2,pilar)
call SaveAgentHandle(HH,h,3,u)
call SaveReal(HH,h,4,x1)
call SaveReal(HH,h,5,y1)
call SaveReal(HH,h,6,a)
call SaveReal(HH,h,7,radius)
call SaveReal(HH,h,8,dmg)
call TimerStart(t,castTime,false,function cj_anonym__454)
set pilar=null
set u=null
set t=null
endfunction
function cj_anonym__456 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tg=LoadUnitHandle(HH,h,1)
local integer alpha=LoadInteger(HH,h,0)
if alpha>0 then
call SaveInteger(HH,h,0,alpha-5)
call SetUnitVertexColor(tg,255,255,255,alpha)
call SetUnitVertexColor(LoadUnitHandle(HH,h,2),255,255,255,alpha)
call SetUnitVertexColor(LoadUnitHandle(HH,h,3),255,255,255,alpha)
call SetUnitVertexColor(LoadUnitHandle(HH,h,4),255,255,255,alpha)
call SetUnitVertexColor(LoadUnitHandle(HH,h,5),255,255,255,alpha)
else
call RemoveUnit(tg)
call RemoveUnit(LoadUnitHandle(HH,h,2))
call RemoveUnit(LoadUnitHandle(HH,h,3))
call RemoveUnit(LoadUnitHandle(HH,h,4))
call RemoveUnit(LoadUnitHandle(HH,h,5))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set t=null
endfunction
function Mei___MeiKirigakureClear takes unit u1,unit u2,unit u3,unit u4,unit u5 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call SaveInteger(HH,h,0,245)
call SaveAgentHandle(HH,h,1,u1)
call SaveAgentHandle(HH,h,2,u2)
call SaveAgentHandle(HH,h,3,u3)
call SaveAgentHandle(HH,h,4,u4)
call SaveAgentHandle(HH,h,5,u5)
call TimerStart(t,.05,true,function cj_anonym__456)
set t=null
endfunction
function cj_anonym__458 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local rect r=LoadRectHandle(HH,h,1)
local integer time=LoadInteger(HH,h,2)
local unit tg
local real x1
local real y1
if time>0 then
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Mei___p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if GetUnitAbilityLevel(tg,0x41304E36)==0 then
call UnitAddAbility(tg,0x41304E36)
endif
if GetUnitAbilityLevel(tg,0x42303342)==0 then
set bj_lastCreatedUnit=CreateUnit(Mei___p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41303747)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
else
if GetUnitAbilityLevel(tg,0x42303342)>0 then
call UnitRemoveAbility(tg,0x41304E36)
call UnitRemoveAbility(tg,0x4230314C)
call UnitRemoveAbility(tg,0x42303342)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveInteger(HH,h,2,time-1)
else
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41304E36)
call UnitRemoveAbility(tg,0x4230314C)
call UnitRemoveAbility(tg,0x42303342)
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call RemoveRect(r)
call Mei___MeiKirigakureClear(LoadUnitHandle(HH,h,3),LoadUnitHandle(HH,h,4),LoadUnitHandle(HH,h,5),LoadUnitHandle(HH,h,6),LoadUnitHandle(HH,h,7))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set r=null
set g=null
set tg=null
set t=null
endfunction
function cj_anonym__457 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tg=LoadUnitHandle(HH,h,1)
local integer alpha=LoadInteger(HH,h,0)
if alpha<255 and GetWidgetLife(tg)>.405 then
call SaveInteger(HH,h,0,alpha+5)
call SetUnitVertexColor(tg,255,255,255,alpha)
call SetUnitVertexColor(LoadUnitHandle(HH,h,2),255,255,255,alpha)
call SetUnitVertexColor(LoadUnitHandle(HH,h,3),255,255,255,alpha)
call SetUnitVertexColor(LoadUnitHandle(HH,h,4),255,255,255,alpha)
call SetUnitVertexColor(LoadUnitHandle(HH,h,5),255,255,255,alpha)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set t=null
endfunction
function Mei___MeiKirigakureCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local integer time=15
local real x=GetWidgetX(Mei___c)
local real y=GetWidgetY(Mei___c)
local real f=GetUnitFacing(Mei___c)
local real scale=.65
local real range=600.
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,Rect(x-range,y-range,x+range,y+range))
call SaveInteger(HH,h,2,time)
call SaveInteger(HH,h1,0,10)
set bj_lastCreatedUnit=CreateUnit(Mei___p,0x68303630,x+250.*Cos(f*.017),y+250.*Sin(f*.017),0.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
call SaveAgentHandle(HH,h,3,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h1,1,bj_lastCreatedUnit)
set bj_lastCreatedUnit=CreateUnit(Mei___p,0x68303630,x+250.*Cos((f+72.)*.017),y+250.*Sin((f+72.)*.017),72.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
call SaveAgentHandle(HH,h,4,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h1,2,bj_lastCreatedUnit)
set bj_lastCreatedUnit=CreateUnit(Mei___p,0x68303630,x+250.*Cos((f+144.)*.017),y+250.*Sin((f+144.)*.017),144.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
call SaveAgentHandle(HH,h,5,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h1,3,bj_lastCreatedUnit)
set bj_lastCreatedUnit=CreateUnit(Mei___p,0x68303630,x+250.*Cos((f+216.)*.017),y+250.*Sin((f+216.)*.017),216.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
call SaveAgentHandle(HH,h,6,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h1,4,bj_lastCreatedUnit)
set bj_lastCreatedUnit=CreateUnit(Mei___p,0x68303630,x+250.*Cos((f+288.)*.017),y+250.*Sin((f+288.)*.017),288.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
call SaveAgentHandle(HH,h,7,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h1,5,bj_lastCreatedUnit)
call TimerStart(t1,.05,true,function cj_anonym__457)
call TimerStart(t,1.,true,function cj_anonym__458)
set t=null
set t1=null
endfunction
function cj_anonym__460 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer i=0
loop
exitwhen i>360
call RemoveDestructable(LoadDestructableHandle(HH,h,i))
set i=i+18
endloop
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__459 takes nothing returns nothing
local timer t=GetExpiredTimer()
local timer t1=CreateTimer()
local integer h=GetHandleId(t)
local integer h1=GetHandleId(t1)
local integer i=0
local real x=LoadReal(HH,h,3)
local real y=LoadReal(HH,h,4)
call DestroyEffect(LoadEffectHandle(HH,h,2))
call RemoveUnit(LoadUnitHandle(HH,h,0))
call RemoveUnit(LoadUnitHandle(HH,h,1))
loop
exitwhen i>360
call SaveDestructableHandle(HH,h1,i,CreateDestructable(0x42303351,x+375.*Cos(I2R(i)*.017),y+375.*Sin(I2R(i)*.017),GetRandomReal(0.,360.),1.,0))
set i=i+18
endloop
call TimerStart(t1,3.5,false,function cj_anonym__460)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Mei___MeiYokaiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Mei___c)
local real y=GetWidgetY(Mei___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real time=1.5
local real dmg=50.+GetHeroInt(Mei___c,true)*1.5
local group g=CreateGroup()
local unit tg
call Sound("Mei Yokai no Jutsu.mp3")
call GroupEnumUnitsInRange(g,x1,y1,400.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Mei___p)then
call UnitDamageTarget(Mei___c,tg,GetNinjutsuDamage(dmg,Mei___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set bj_lastCreatedUnit=CreateUnit(Mei___p,0x6E303042,x+300.*Cos(a*bj_DEGTORAD),y+300.*Sin(a*bj_DEGTORAD),a)
call SetUnitScale(bj_lastCreatedUnit,1.8,1.8,1.8)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,1,CreateUnit(Mei___p,0x68303651,x1,y1,GetRandomReal(0.,360.)))
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("LavaBreath.mdx",bj_lastCreatedUnit,"chest"))
call SaveReal(HH,h,3,x1)
call SaveReal(HH,h,4,y1)
call TimerStart(t,time,false,function cj_anonym__459)
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__461 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local rect r=LoadRectHandle(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local integer time=LoadInteger(HH,h,3)
local unit tg
local real x1
local real y1
if time>0 then
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Mei___p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if GetUnitAbilityLevel(tg,0x41313237)>0 then
call SetUnitAbilityLevel(tg,0x41313237,GetUnitAbilityLevel(tg,0x41313237)+1)
else
call UnitAddAbility(tg,0x41313237)
endif
call UnitDamageTarget(Mei___c,tg,GetNinjutsuDamage(dmg,Mei___c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
if HasUnitSusanooBuff(tg)then
call UnitDamageTarget(Mei___c,tg,UnitSusanooStateDamage(tg),true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
endif
else
if GetUnitAbilityLevel(tg,0x41313237)>0 then
call UnitRemoveAbility(tg,0x41313237)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveInteger(HH,h,3,time-1)
else
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41313237)
call GroupRemoveUnit(g,tg)
endloop
set time=4
loop
exitwhen time>19
call RemoveUnit(LoadUnitHandle(HH,h,time))
set time=time+1
endloop
call DestroyGroup(g)
call RemoveRect(r)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set r=null
set tg=null
set t=null
endfunction
function Mei___MeiKomoCast takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer time=5
local real rangeOne=600./4.
local real rangeTwo=600./2.
local real dmg=50.
call Sound("Mei Futton Komo no Jutsu.mp3")
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,Rect(x-rangeTwo,y-rangeTwo,x+rangeTwo,y+rangeTwo))
call SaveReal(HH,h,2,dmg)
call SaveInteger(HH,h,3,time)
call SaveAgentHandle(HH,h,4,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(5.355),y+rangeTwo*Sin(5.355),0.))
call SaveAgentHandle(HH,h,5,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(6.12),y+rangeTwo*Sin(6.12),0.))
call SaveAgentHandle(HH,h,6,CreateUnit(Mei___p,0x68303339,x,y,0.))
call SaveAgentHandle(HH,h,7,CreateUnit(Mei___p,0x68303339,x+rangeOne*Cos(1.02),y+rangeOne*Sin(1.02),0.))
call SaveAgentHandle(HH,h,8,CreateUnit(Mei___p,0x68303339,x+rangeOne*Cos(2.04),y+rangeOne*Sin(2.04),0.))
call SaveAgentHandle(HH,h,9,CreateUnit(Mei___p,0x68303339,x+rangeOne*Cos(3.06),y+rangeOne*Sin(3.06),0.))
call SaveAgentHandle(HH,h,10,CreateUnit(Mei___p,0x68303339,x+rangeOne*Cos(4.08),y+rangeOne*Sin(4.08),0.))
call SaveAgentHandle(HH,h,11,CreateUnit(Mei___p,0x68303339,x+rangeOne*Cos(5.1),y+rangeOne*Sin(5.1),0.))
call SaveAgentHandle(HH,h,12,CreateUnit(Mei___p,0x68303339,x+rangeOne*Cos(6.12),y+rangeOne*Sin(6.12),0.))
call SaveAgentHandle(HH,h,13,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(.765),y+rangeTwo*Sin(.765),0.))
call SaveAgentHandle(HH,h,14,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(1.53),y+rangeTwo*Sin(1.53),0.))
call SaveAgentHandle(HH,h,15,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(2.295),y+rangeTwo*Sin(2.295),0.))
call SaveAgentHandle(HH,h,16,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(3.06),y+rangeTwo*Sin(3.06),0.))
call SaveAgentHandle(HH,h,17,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(3.825),y+rangeTwo*Sin(3.825),0.))
call SaveAgentHandle(HH,h,18,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(4.59),y+rangeTwo*Sin(4.59),0.))
call SaveAgentHandle(HH,h,19,CreateUnit(Mei___p,0x68303339,x+rangeTwo*Cos(5.1),y+rangeTwo*Sin(5.1),0.))
call TimerStart(t,1.,true,function cj_anonym__461)
set t=null
endfunction
function Mei___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Mei_KOMO or i==Mei_YOKAI or i==Mei_KIRIGAKURE or i==Mei_SUIRYUDAN
endfunction
function Mei___SpellsActions takes nothing returns nothing
local integer i
if Mei___c==null then
set Mei___c=GetTriggerUnit()
set Mei___p=GetOwningPlayer(Mei___c)
endif
set i=GetSpellAbilityId()
if i==Mei_KOMO then
call Mei___MeiKomoCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Mei_YOKAI then
call Mei___MeiYokaiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Mei_KIRIGAKURE then
call Mei___MeiKirigakureCast()
elseif i==Mei_SUIRYUDAN then
call Mei___SuiryudanCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Mei_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Mei___SpellsConditions))
call TriggerAddAction(spells,function Mei___SpellsActions)
set spells=null
endfunction
function Minato___HasMinatoStealInt takes real dmg returns real
if GetUnitAbilityLevel(Minato___c,0x41313230)>0 then
set dmg=dmg+(GetUnitAbilityLevel(Minato___c,0x41313230)*10.)
endif
return dmg
endfunction
function Minato___DeathGodChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Minato___p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFFA5FDA9"+I2S(Minato___shikifujinTime)+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function Minato___RasenganDamage takes unit tu returns nothing
local real dmg=Minato___HasMinatoStealInt(200.)
local real x=GetWidgetX(Minato___c)
local real y=GetWidgetY(Minato___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
call SetUnitAnimation(Minato___c,"Spell Two")
call CreateEffect(x1,y1,1.75,"Wave.mdx",1.)
call KnockBackUnitEf(tu,750.,.75,57.2958279087*Atan2(y1-y,x1-x),.025,7,false)
call UnitDamageTarget(Minato___c,tu,GetNinjutsuDamage(dmg,Minato___c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endfunction
function cj_anonym__462 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real x=GetWidgetX(Minato___c)
local real y=GetWidgetY(Minato___c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Minato___deathgod)>.405 and time>0.and distance<=300.then
if not IsUnitPaused(Minato___c)then
call PauseUnit(Minato___c,true)
endif
call SaveReal(HH,h,2,time-period)
else
call PauseUnit(Minato___c,false)
if GetLocalPlayer()==GetOwningPlayer(tu)then
call SetUnitVertexColor(Minato___deathgod,255,255,255,0)
endif
call UnitRemoveAbility(tu,Minato_DEATH_GOD_SOUL_BUFF)
if GetWidgetLife(Minato___deathgod)>.405 and time==0.and distance<=300.then
if IsUnitHero(tu)then
if GetUnitAbilityLevel(Minato___c,0x41313230)==0 then
call UnitAddAbility(Minato___c,0x41313230)
call UnitAddAbility(Minato___c,0x41304930)
else
call SetUnitAbilityLevel(Minato___c,0x41313230,GetUnitAbilityLevel(Minato___c,0x41313230)+1)
call SetUnitAbilityLevel(Minato___c,0x41304930,GetUnitAbilityLevel(Minato___c,0x41304930)+1)
endif
if GetUnitAbilityLevel(tu,0x41313231)==0 then
call UnitAddAbility(tu,0x41313231)
call UnitAddAbility(tu,0x41304930)
else
call SetUnitAbilityLevel(tu,0x41313231,GetUnitAbilityLevel(Minato___c,0x41313231)+1)
call SetUnitAbilityLevel(tu,0x41304930,GetUnitAbilityLevel(tu,0x41304930)+1)
endif
endif
call UnitAddAbility(tu,Minato_DEATH_GOD_AFTER)
call UnitApplyTimedLife(CreateUnit(Minato___p,0x6E303245,GetWidgetX(Minato___deathgod),GetWidgetY(Minato___deathgod),bj_RADTODEG*Atan2(y1-y,x1-x)),0x42544C46,.8)
call UnitDamageTarget(Minato___c,tu,99999.,true,false,null,null,null)
call UnitRemoveAbility(Minato___c,0x41313555)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Minato___DeathGodSoulCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=3.
local real period=.1
if GetLocalPlayer()==GetOwningPlayer(tu)then
call SetUnitVertexColor(Minato___deathgod,255,255,255,192)
endif
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__462)
set t=null
endfunction
function cj_anonym__463 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer time=LoadInteger(HH,h,0)
local real a=GetUnitFacing(Minato___c)
local real x=GetWidgetX(Minato___c)-150.*Cos(a*bj_DEGTORAD)
local real y=GetWidgetY(Minato___c)-150.*Sin(a*bj_DEGTORAD)
if GetWidgetLife(Minato___c)>.405 and GetUnitAbilityLevel(Minato___c,0x41313555)>0 and Minato___shikifujinTime>0 then
call SetUnitX(Minato___deathgod,x)
call SetUnitY(Minato___deathgod,y)
call SetUnitFacing(Minato___deathgod,a)
set time=time-1
call SaveInteger(HH,h,0,time)
if time==Minato___shikifujinTime*100 then
set Minato___shikifujinTime=Minato___shikifujinTime-1
call Minato___DeathGodChangeText(true)
endif
else
set Minato___shikifujinTime=0
call Minato___DeathGodChangeText(false)
call UnitRemoveAbility(Minato___c,0x41313555)
call SetPlayerAbilityAvailable(Minato___p,Minato_RASENGAN,true)
call SetPlayerAbilityAvailable(Minato___p,Minato_HIRAISHIN,true)
call SetPlayerAbilityAvailable(Minato___p,Minato_ULT,true)
call SetPlayerAbilityAvailable(Minato___p,Minato_DEATH_GOD,true)
call KillUnit(Minato___c)
call KillUnit(Minato___deathgod)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Minato___DeathGodCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(Minato___c,Minato_DEATH_GOD)
local real x=GetWidgetX(Minato___c)
local real y=GetWidgetY(Minato___c)
local real a=GetUnitFacing(Minato___c)
set Minato_shikifujinOn=true
set Minato___shikifujinTime=5+lvl*5
call Minato___DeathGodChangeText(true)
call Sound("Minato Fuinjutsu Shiki Fujin Cast.mp3")
set Minato___deathgod=CreateUnit(Minato___p,0x6E303244,x-150.*Cos(a*bj_DEGTORAD),y-150.*Sin(a*bj_DEGTORAD),a)
call SetUnitVertexColor(Minato___deathgod,255,255,255,0)
if GetLocalPlayer()==Minato___p then
call SetUnitVertexColor(Minato___deathgod,255,255,255,192)
endif
call SetPlayerAbilityAvailable(Minato___p,Minato_RASENGAN,false)
call SetPlayerAbilityAvailable(Minato___p,Minato_HIRAISHIN,false)
call SetPlayerAbilityAvailable(Minato___p,Minato_ULT,false)
call SetPlayerAbilityAvailable(Minato___p,Minato_DEATH_GOD,false)
call UnitAddAbility(Minato___c,0x41313555)
call SaveInteger(HH,h,0,Minato___shikifujinTime*100+100)
call TimerStart(t,.01,true,function cj_anonym__463)
set t=null
endfunction
function Minato___UltGetEnemy takes group g,real x1,real y1,real radius,real dmg returns boolean
local unit tg
local real x=GetWidgetX(Minato___c)
local real y=GetWidgetY(Minato___c)
local boolean rasenganOn=false
local boolean log=false
if GetUnitAbilityLevel(Minato___c,0x42303530)>0 then
set rasenganOn=true
endif
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if not rasenganOn then
if IsUnitNeedTaijutsu(tg,Minato___p)then
if not Minato___ultStart then
set Minato___ultStart=true
call Sound("Minato Hiraishin.mp3")
call PauseUnit(Minato___c,true)
call SetUnitInvulnerable(Minato___c,true)
call SetUnitPathing(Minato___c,false)
call SetUnitTimeScale(Minato___c,4.)
endif
call DestroyEffect(AddSpecialEffect("Yellow_Flash2.mdx",x,y))
call SetUnitPosition(Minato___c,x1,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
if GetRandomInt(1,2)==1 then
call SetUnitAnimation(Minato___c,"Spell Six")
else
call SetUnitAnimation(Minato___c,"Spell Seven")
endif
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl",tg,"chest"))
call UnitDamageTarget(Minato___c,tg,GetTaijutsuDamage(dmg,Minato___c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
set log=true
endif
else
if IsUnitNeedNinjutsu(tg,Minato___p)then
if not Minato___ultStart then
set Minato___ultStart=true
call Sound("Minato Hiraishin.mp3")
call PauseUnit(Minato___c,true)
call SetUnitInvulnerable(Minato___c,true)
call SetUnitPathing(Minato___c,false)
call SetUnitTimeScale(Minato___c,4.)
endif
call DestroyEffect(AddSpecialEffect("Yellow_Flash2.mdx",x,y))
call SetUnitPosition(Minato___c,x1,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
call Minato___RasenganDamage(tg)
set log=true
endif
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=null
return log
endfunction
function cj_anonym__464 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer amount=LoadInteger(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real radius=LoadReal(HH,h,4)
local real a=LoadReal(HH,h,5)
local group g=LoadGroupHandle(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local boolean log
if amount>0 then
set log=Minato___UltGetEnemy(g,x,y,radius,dmg)
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
if not log then
call SaveInteger(HH,h,1,amount-1)
else
call SaveInteger(HH,h,1,0)
endif
else
set Minato___ultNumber=Minato___ultNumber-1
if Minato___ultStart and Minato___ultNumber==0 then
set Minato___ultStart=false
call PauseUnit(Minato___c,false)
call SetUnitInvulnerable(Minato___c,false)
call SetUnitPathing(Minato___c,true)
call SetUnitTimeScale(Minato___c,1.)
if GetUnitAbilityLevel(Minato___c,0x42303530)>0 then
call UnitRemoveAbility(Minato___c,0x42303530)
endif
endif
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set d=null
set t=null
endfunction
function Minato___UltStart takes unit tu,real x,real y,real radius,real period,real offset,real dmg,real maxdistance returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
set Minato___ultNumber=Minato___ultNumber+1
call SaveAgentHandle(HH,h,0,CreateUnit(Minato___p,Minato_HIRAISHIN_KUNAI_FLY_ID,x,y,a))
call SaveInteger(HH,h,1,R2I(maxdistance/offset))
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,radius)
call SaveReal(HH,h,5,a)
call SaveAgentHandle(HH,h,6,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__464)
set t=null
endfunction
function Minato___UltCast takes real x1,real y1 returns nothing
local integer lvlHiraishin=GetUnitAbilityLevel(Minato___c,Minato_HIRAISHIN)
local integer numberKunai=GetItemCharges(Minato_hiraishinKunaiArt)
local real x=GetWidgetX(Minato___c)
local real y=GetWidgetY(Minato___c)
local real maxdistance=900.
local real radius=600.
local real radiusStrike=50.
local real speed=2500.
local real period=.025
local real dmg=GetHeroAgi(Minato___c,true)*4.
local real offset
local group g=CreateGroup()
local unit tg=null
set offset=speed*period
set Minato___ultNumber=0
if GetInventoryIndexOfItemTypeBJ(Minato___c,ITEM_HIRAISHIN_KUNAI_ID)>0 and lvlHiraishin>0 and numberKunai>0 then
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or numberKunai==0
if IsUnitNeedTaijutsu(tg,Minato___p)then
call Minato___UltStart(tg,x,y,radiusStrike,period,offset,dmg,maxdistance)
set numberKunai=numberKunai-1
endif
call GroupRemoveUnit(g,tg)
endloop
call SetItemCharges(Minato_hiraishinKunaiArt,numberKunai)
else
call DisplayTimedTextToPlayer(Minato___p,0.,0.,4.,"|cFFFFCC00Техника не сработала!|r")
endif
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Minato___TeppoudamaDamage takes unit caster,real x,real y,real range,real dmg returns nothing
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,range,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Minato___p)then
call UnitDamageTarget(caster,tg,GetNinjutsuDamage(dmg,caster,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x,y))
call DestroyEffect(AddSpecialEffect("IceSparks.mdx",x,y))
set tg=null
endfunction
function cj_anonym__465 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer amount=LoadInteger(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real angle=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(angle*bj_DEGTORAD),y+offset*Sin(angle*bj_DEGTORAD))
call SaveInteger(HH,h,1,amount-1)
else
call Minato___TeppoudamaDamage(LoadUnitHandle(HH,h,4),x,y,LoadReal(HH,h,5),LoadReal(HH,h,6))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Minato___TeppoudamaCreateSphere takes unit caster,real x1,real y1,real radius returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(caster)
local real yHero=GetWidgetY(caster)
local real startOffset=300.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real distanceRandom=GetRandomReal(0.,radius/2.)
local real angleRandom=GetRandomReal(0.,360.)
local real offset=GetRandomReal(65.,80.)
local real x2=x1+distanceRandom*Cos(angleRandom*bj_DEGTORAD)
local real y2=y1+distanceRandom*Sin(angleRandom*bj_DEGTORAD)
local real angle=bj_RADTODEG*Atan2(y2-y,x2-x)
local real distance=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))
local unit d=CreateUnit(Minato___p,0x6E303242,x,y,angle)
call Sound("Gamabunta Teppoudama Strike.mp3")
call SetUnitFlyHeight(d,0.,175.)
call SetUnitPathing(d,false)
call SetUnitTimeScale(d,2.)
call SetUnitFlyHeight(d,0.,distance/(offset*.015))
call SaveAgentHandle(HH,h,0,d)
call SaveInteger(HH,h,1,R2I(distance/offset))
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,angle)
call SaveAgentHandle(HH,h,4,caster)
call SaveReal(HH,h,5,125.)
call SaveReal(HH,h,6,75.)
call TimerStart(t,.04,true,function cj_anonym__465)
set d=null
set t=null
endfunction
function cj_anonym__467 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit caster=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local integer count=LoadInteger(HH,h,4)
if GetWidgetLife(caster)>.405 and count<4 then
call Minato___TeppoudamaCreateSphere(caster,x1,y1,radius)
call SaveInteger(HH,h,4,count+1)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set caster=null
set t=null
endfunction
function cj_anonym__466 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
if GetRandomInt(1,2)==1 then
call Sound("Gamabunta Teppoudama Cast Var 1.mp3")
else
call Sound("Gamabunta Teppoudama Cast Var 2.mp3")
endif
call SaveAgentHandle(HH,h1,0,LoadUnitHandle(HH,h,0))
call SaveReal(HH,h1,1,LoadReal(HH,h,1))
call SaveReal(HH,h1,2,LoadReal(HH,h,2))
call SaveReal(HH,h1,3,LoadReal(HH,h,3))
call TimerStart(t1,.2,true,function cj_anonym__467)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Minato___TeppoudamaCast takes unit caster,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call Sound("Gamabunta Teppoudama Cast.mp3")
call SaveAgentHandle(HH,h,0,caster)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,350.)
call TimerStart(t,.5,false,function cj_anonym__466)
set t=null
endfunction
function Minato___KuchiyoseStun takes unit d returns nothing
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real radius=400.
local unit tg
call Sound("Minato Kuchiyose Stun.mp3")
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitEnemy(tg,Minato___p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
call GetStun(tg,2.)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call KillDestructablesStart(x,y,radius/2.)
call CreateEffect(x,y,2.,"Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",3.)
call TerrainDeformRipple(x,y,550.,75.,2500,1,600.,6.,.5,false)
set tg=null
endfunction
function cj_anonym__471 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
if GetWidgetLife(d)<.405 then
call KuchiyoseCreateDustEffect("end",d,2.,2.6)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__470 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer lvl=GetHeroLevel(Minato___c)
local real lifeTime=25.
local real period=.1
local timer t1=CreateTimer()
call Minato___KuchiyoseStun(d)
call PauseUnit(d,false)
call SetUnitInvulnerable(d,false)
call UnitApplyTimedLife(d,0x42544C46,lifeTime)
call SetPlayerTechResearched(Minato___p,0x52303031,lvl)
call SetUnitAnimation(d,"stand ready")
call SaveAgentHandle(HH,GetHandleId(t1),0,d)
call TimerStart(t1,period,true,function cj_anonym__471)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__469 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real a=LoadReal(HH,h,2)
local unit d=CreateUnit(Minato___p,0x68303349,x1,y1,a)
local timer t1=CreateTimer()
call KuchiyoseCreateDustEffect("cast",d,2.,2.6)
call SetUnitTypeFlying(d)
call SetUnitFlyHeight(d,800.,0.)
call SetUnitFlyHeight(d,0.,1200.)
call SetUnitInvulnerable(d,true)
call PauseUnit(d,true)
call SetUnitAnimation(d,"attack - 2")
call SaveAgentHandle(HH,GetHandleId(t1),0,d)
call TimerStart(t1,.66,false,function cj_anonym__470)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__468 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real a=LoadReal(HH,h,2)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call KuchiyoseEffect(x1,y1,4.)
call SaveReal(HH,h1,0,x1)
call SaveReal(HH,h1,1,y1)
call SaveReal(HH,h1,2,a)
call TimerStart(t1,.43,false,function cj_anonym__469)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Minato___KuchiyoseCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Minato___c)
local real y=GetWidgetY(Minato___c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
call Sound("Minato Kuchiyose.mp3")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call SaveReal(HH,h,2,a)
call TimerStart(t,.597,false,function cj_anonym__468)
set t=null
endfunction
function cj_anonym__472 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
if GetWidgetLife(Minato___c)>.405 and GetWidgetLife(tu)>.405 and time>0.then
if not IsUnitPaused(Minato___c)then
call PauseUnit(Minato___c,true)
endif
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call SetUnitPosition(Minato___c,x,y)
call SetUnitAnimation(Minato___c,"Spell Four")
call SetUnitAnimation(tu,"death")
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",x,y))
call SaveReal(HH,h,4,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,1))
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("NewDirtEXNofire.mdx",x,y))
else
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x,y))
endif
call CreateEffect(x,y,1.25,"IceNova.mdx",2.)
call TerrainDeformRipple(x,y,600.,50.,1800,1,4.,3.,600.,false)
if GetWidgetLife(tu)>.405 then
call UnitDamageTarget(Minato___c,tu,GetNinjutsuDamage(LoadReal(HH,h,2),Minato___c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call PauseUnit(Minato___c,false)
call PauseUnit(tu,false)
call SetUnitPathing(Minato___c,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Minato___HiraishinRasenganCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=200.*2.
local real period=.1
local real time=1.
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
call UnitRemoveAbility(Minato___c,0x42303530)
call PauseUnit(Minato___c,true)
call PauseUnit(tu,true)
call SetUnitPathing(Minato___c,false)
call SetUnitPosition(Minato___c,x,y)
call SetUnitAnimation(Minato___c,"Spell Four")
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("newrasengan3.mdx",Minato___c,"hand left"))
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call TimerStart(t,period,true,function cj_anonym__472)
set t=null
endfunction
function Minato___HiraishinGetNearestKunai takes nothing returns unit
local real x
local real y
local real x1
local real y1
local group g=CreateGroup()
local real distance=99999.
local unit tg
local unit kunai=null
if IsUnitAlly(Minato___c,Player(5))then
set x=GetWidgetX(gg_unit_h06W_0003)
set y=GetWidgetY(gg_unit_h06W_0003)
elseif IsUnitAlly(Minato___c,Player(11))then
set x=GetWidgetX(gg_unit_h07D_0070)
set y=GetWidgetY(gg_unit_h07D_0070)
endif
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==Minato_HIRAISHIN_KUNAI_UNIT_ID then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<distance then
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
set kunai=tg
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
set cj_v666_unit=kunai
set kunai=null
return cj_v666_unit
endfunction
function Minato___HiraishinGetNeedChakra takes real manaXX,real x,real y,real x1,real y1 returns real
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real manaNeed=distance/manaXX
return manaNeed
endfunction
function Minato___HiraishinDoesHaveNeedChakra takes real mana,real manaXX,real x,real y,real x1,real y1 returns boolean
local boolean log=false
local real manaFinal=Minato___HiraishinGetNeedChakra(manaXX,x,y,x1,y1)
if GetUnitState(Minato___c,UNIT_STATE_MANA)>manaFinal+mana then
set log=true
endif
return log
endfunction
function Minato___IsHiraishinCanUse takes real x1,real y1 returns boolean
local group g=CreateGroup()
local real radius=200.
local boolean log=false
local unit tg
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if tg!=Minato___c and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
if GetUnitAbilityLevel(tg,0x41304443)>0 then
set log=true
elseif GetUnitTypeId(tg)==Minato_HIRAISHIN_KUNAI_UNIT_ID then
set log=true
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
return log
endfunction
function Minato___HiraishinCast takes real x1,real y1,unit tu returns nothing
local real x=GetWidgetX(Minato___c)
local real y=GetWidgetY(Minato___c)
local real dmg=GetHeroAgi(Minato___c,true)*1.
local real manaXX=100.
local real manacost=120.
local unit kunai=null
if tu!=Minato___c then
if Minato___IsHiraishinCanUse(x1,y1)then
if Minato___HiraishinDoesHaveNeedChakra(manacost,manaXX,x,y,x1,y1)then
call Sound("Minato Hiraishin.mp3")
call SetUnitState(Minato___c,UNIT_STATE_MANA,GetUnitState(Minato___c,UNIT_STATE_MANA)-Minato___HiraishinGetNeedChakra(manaXX,x,y,x1,y1))
call DestroyEffect(AddSpecialEffect("Yellow_Flash2.mdx",x,y))
call SetUnitPosition(Minato___c,x1,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
if GetLocalPlayer()==Minato___p then
call PanCameraToTimed(x1,y1,0.)
endif
if tu!=null then
if IsUnitEnemy(tu,Minato___p)and GetUnitAbilityLevel(Minato___c,0x42303530)>0 then
call Minato___HiraishinRasenganCast(tu)
else
if GetRandomInt(1,2)==1 then
call SetUnitAnimation(Minato___c,"Spell Six")
else
call SetUnitAnimation(Minato___c,"Spell Seven")
endif
if IsUnitEnemy(tu,Minato___p)then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl",tu,"chest"))
call IssueTargetOrder(Minato___c,"attack",tu)
call UnitDamageTarget(Minato___c,tu,GetTaijutsuDamage(dmg,Minato___c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
endif
endif
else
call IssueImmediateOrder(Minato___c,"stop")
call SetUnitState(Minato___c,UNIT_STATE_MANA,GetUnitState(Minato___c,UNIT_STATE_MANA)+manacost)
call DisplayTimedTextToPlayer(Minato___p,0.,0.,3.,"Не хватает |cFF0090D4"+I2S(R2I(Minato___HiraishinGetNeedChakra(manaXX,x,y,x1,y1)+manacost-(GetUnitState(Minato___c,UNIT_STATE_MANA)-manacost)))+"|r чакры!")
endif
else
call IssueImmediateOrder(Minato___c,"stop")
call SetUnitState(Minato___c,UNIT_STATE_MANA,GetUnitState(Minato___c,UNIT_STATE_MANA)+manacost)
call DisplayTimedTextToPlayer(Minato___p,0.,0.,3.,"Требуется применить |cFFFFCC00Jutsushiki|r на цель!")
endif
else
set kunai=Minato___HiraishinGetNearestKunai()
if kunai!=null then
set x1=GetWidgetX(kunai)
set y1=GetWidgetY(kunai)
if Minato___HiraishinDoesHaveNeedChakra(manacost,manaXX,x,y,x1,y1)then
call Sound("Minato Hiraishin.mp3")
call SetUnitState(Minato___c,UNIT_STATE_MANA,GetUnitState(Minato___c,UNIT_STATE_MANA)-Minato___HiraishinGetNeedChakra(manaXX,x,y,x1,y1))
call SetUnitAnimation(Minato___c,"Spell Three")
call DestroyEffect(AddSpecialEffect("Yellow_Flash2.mdx",x,y))
call SetUnitPosition(Minato___c,x1,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
if GetLocalPlayer()==Minato___p then
call PanCameraToTimed(x1,y1,0.)
endif
else
call IssueImmediateOrder(Minato___c,"stop")
call SetUnitState(Minato___c,UNIT_STATE_MANA,GetUnitState(Minato___c,UNIT_STATE_MANA)+manacost)
call DisplayTimedTextToPlayer(Minato___p,0.,0.,3.,"Не хватает |cFF0090D4"+I2S(R2I(Minato___HiraishinGetNeedChakra(manaXX,x,y,x1,y1)+manacost-(GetUnitState(Minato___c,UNIT_STATE_MANA)-manacost)))+"|r чакры!")
endif
else
call IssueImmediateOrder(Minato___c,"stop")
call SetUnitState(Minato___c,UNIT_STATE_MANA,GetUnitState(Minato___c,UNIT_STATE_MANA)+manacost)
call DisplayTimedTextToPlayer(Minato___p,0.,0.,3.,"|cFFFFCC00На карте нет ваших кунаев!|r")
endif
endif
set kunai=null
endfunction
function cj_anonym__474 takes nothing returns nothing
set Minato___jutsushikiCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__473 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,2)
if GetWidgetLife(tu)>.405 then
if d!=null then
call SetUnitPosition(d,GetWidgetX(tu),GetWidgetY(tu))
endif
else
if d!=null then
call RemoveUnit(d)
endif
call DestroyEffect(LoadEffectHandle(HH,h,1))
call UnitRemoveAbility(tu,0x41304443)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Minato___JutsushikiStartTimer takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local string s=""
set Minato___jutsushikiCD=true
call UnitAddAbility(tu,0x41304443)
call SaveAgentHandle(HH,h,0,tu)
if GetLocalPlayer()==Minato___p then
set s="heraishin.mdx"
endif
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget(s,tu,"overhead"))
if IsUnitEnemy(tu,Minato___p)then
call SaveAgentHandle(HH,h,2,CreateUnit(Minato___p,0x6E303243,GetWidgetX(tu),GetWidgetY(tu),0.))
endif
call TimerStart(t,1.,true,function cj_anonym__473)
call TimerStart(CreateTimer(),5.,false,function cj_anonym__474)
set t=null
endfunction
function Minato___JutsushikiDamageConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetEventDamageSource(),0x41313334)>0 and GetRandomInt(1,5)==1 and not Minato___jutsushikiCD and GetUnitState(GetEventDamageSource(),UNIT_STATE_MANA)>25.and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetEventDamageSource()))
endfunction
function Minato___JutsushikiDamageActions takes nothing returns nothing
if GetUnitAbilityLevel(GetTriggerUnit(),0x41304443)==0 and GetWidgetLife(GetTriggerUnit())>.405 then
call SetUnitState(Minato___c,UNIT_STATE_MANA,GetUnitState(Minato___c,UNIT_STATE_MANA)-25.)
call Minato___JutsushikiStartTimer(GetTriggerUnit())
endif
endfunction
function Minato___JutsushikiRegistrConditions takes nothing returns boolean
return not IsUnitType(GetTriggerUnit(),UNIT_TYPE_UNDEAD)
endfunction
function Minato___JutsushikiRegistrActions takes nothing returns nothing
call TriggerRegisterUnitEvent(Minato___jutsushikiDamageTrig,GetTriggerUnit(),EVENT_UNIT_DAMAGED)
endfunction
function Minato___JutsushikiCast takes unit tu returns nothing
if GetUnitAbilityLevel(tu,0x41304443)==0 then
call Minato___JutsushikiStartTimer(tu)
else
call DisplayTimedTextToPlayer(Minato___p,0.,0.,3.,"|cFFFFCC00На этом шиноби уже есть печать!|r")
endif
endfunction
function Minato___RasenganConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),0x42303530)>0 and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)
endfunction
function Minato___RasenganActions takes nothing returns nothing
call UnitRemoveAbility(GetAttacker(),0x42303530)
call Minato___RasenganDamage(GetTriggerUnit())
endfunction
function Minato___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Minato_RASENGAN or i==0x41313334 or i==Minato_HIRAISHIN or i==Minato_KUCHIYOSE or i==0x41303847 or i==Minato_ULT or i==Minato_DEATH_GOD or i==0x41313555
endfunction
function Minato___SpellsActions takes nothing returns nothing
local integer i
if Minato___c==null then
set Minato___c=GetTriggerUnit()
set Minato___p=GetOwningPlayer(Minato___c)
endif
set i=GetSpellAbilityId()
if i==Minato_RASENGAN then
call Sound("Minato Rasengan.mp3")
elseif i==0x41313334 then
call Minato___JutsushikiCast(GetSpellTargetUnit())
elseif i==Minato_HIRAISHIN then
call Minato___HiraishinCast(GetSpellTargetX(),GetSpellTargetY(),GetSpellTargetUnit())
elseif i==Minato_KUCHIYOSE then
call Minato___KuchiyoseCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41303847 then
call Minato___TeppoudamaCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==Minato_ULT then
call Minato___UltCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Minato_DEATH_GOD then
call Minato___DeathGodCast()
elseif i==0x41313555 then
call Minato___DeathGodSoulCast(GetSpellTargetUnit())
endif
endfunction
function Minato___LearningActions takes unit u returns nothing
if Minato___c==null then
set Minato___c=u
set Minato___p=GetOwningPlayer(Minato___c)
endif
set Minato_hiraishinKunaiArt=CreateItem(ITEM_HIRAISHIN_KUNAI_ID,GetWidgetX(Minato___c),GetWidgetY(Minato___c))
call UnitAddItem(Minato___c,Minato_hiraishinKunaiArt)
call UnitAddAbility(Minato___c,0x41313334)
call EnableTrigger(Minato___jutsushikiDamageTrig)
endfunction
function Minato_AddAbility takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Minato]then
call Minato___LearningActions(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Minato_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger rasengan=CreateTrigger()
local trigger enter=CreateTrigger()
set Minato___jutsushikiDamageTrig=CreateTrigger()
call DisableTrigger(Minato___jutsushikiDamageTrig)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(rasengan,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerRegisterEnterRectSimple(enter,gg_rct_Weather)
call TriggerAddCondition(enter,Condition(function Minato___JutsushikiRegistrConditions))
call TriggerAddAction(enter,function Minato___JutsushikiRegistrActions)
call TriggerAddCondition(Minato___jutsushikiDamageTrig,Condition(function Minato___JutsushikiDamageConditions))
call TriggerAddAction(Minato___jutsushikiDamageTrig,function Minato___JutsushikiDamageActions)
call TriggerAddCondition(spells,Condition(function Minato___SpellsConditions))
call TriggerAddAction(spells,function Minato___SpellsActions)
call TriggerAddCondition(rasengan,Condition(function Minato___RasenganConditions))
call TriggerAddAction(rasengan,function Minato___RasenganActions)
set enter=null
set rasengan=null
set spells=null
endfunction
function cj_anonym__475 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if GetWidgetLife(c)>.405 and GetUnitAbilityLevel(c,0x42303451)==0 then
if time>0.then
call SaveReal(HH,h,2,time-period)
else
if GetUnitCurrentOrder(c)!=OrderId("attack")and GetUnitCurrentOrder(c)!=OrderId("move")then
call Sound("Mu Mujin Meisai.mp3")
call UnitAddAbility(c,0x41305455)
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(c),0x6E303042,GetWidgetX(c),GetWidgetY(c),GetUnitFacing(c)+180.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call UnitAddAbility(bj_lastCreatedUnit,0x41305451)
call IssueTargetOrder(bj_lastCreatedUnit,"invisibility",c)
if not Mu_bunretsuLog then
set time=3.
else
set time=6.
endif
else
set time=period
endif
call SaveReal(HH,h,2,time)
endif
elseif GetWidgetLife(c)<=.405 and GetUnitTypeId(c)==0x4F303143 then
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set c=null
set t=null
endfunction
function Mu___StartInvisibility takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer id=GetUnitTypeId(c)
local real time=3.
local real period=.1
if Mu_bunretsuLog then
set time=time*2.
endif
call SaveAgentHandle(HH,h,0,c)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__475)
set t=null
endfunction
function Mu___KanchiAct takes unit c,group g,real radius,real period returns nothing
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local player p=GetOwningPlayer(c)
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
call UnitApplyTimedLife(CreateUnit(p,0x6E303258,GetWidgetX(tg),GetWidgetY(tg),0.),0x42544C46,period)
endif
call GroupRemoveUnit(g,tg)
endloop
set p=null
set tg=null
endfunction
function cj_anonym__476 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
if GetUnitAbilityLevel(c,0x4230344B)>0 then
if Mu_bunretsuLog then
call Mu___KanchiAct(c,g,radius/2.,period)
else
call Mu___KanchiAct(c,g,radius,period)
endif
else
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set c=null
set t=null
endfunction
function Mu___KanchiCast takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(c,Mu_KANCHI)
local real period=.5
local real radius=600.+200.*lvl
local group g=CreateGroup()
if Mu_bunretsuLog then
call Mu___KanchiAct(c,g,radius/2.,period)
else
call Mu___KanchiAct(c,g,radius,period)
endif
call SaveAgentHandle(HH,h,0,c)
call SaveAgentHandle(HH,h,1,g)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,period)
call TimerStart(t,period,true,function cj_anonym__476)
set g=null
set t=null
endfunction
function cj_anonym__477 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local real mpMax=GetUnitState(c,UNIT_STATE_MAX_MANA)
local real dmgAdd=.8
local real dmg=mpMax*dmgAdd
local real radius=200.
local player p=GetOwningPlayer(c)
local group g=CreateGroup()
local unit tg
if Mu_bunretsuLog then
set dmg=dmg/2.
endif
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,p)then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call UnitDamageTarget(c,tg,GetNinjutsuDamage(dmg,c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("IceNova.mdx",x1,y1))
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",x1,y1))
call DestroyEffect(AddSpecialEffect("AerialExplosionV3.mdx",x1,y1))
endif
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set p=null
set g=null
set d=null
set tg=null
set c=null
set t=null
endfunction
function Mu___UltCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=2.
call Sound("Muu Jinton Genkai Hakure no Jutsu.mp3")
call SaveAgentHandle(HH,h,0,c)
call SaveAgentHandle(HH,h,1,CreateUnit(GetOwningPlayer(c),0x68303257,x1,y1,GetRandomReal(0.,360.)))
call SaveReal(HH,h,2,x1)
call SaveReal(HH,h,3,y1)
call TimerStart(t,castTime,false,function cj_anonym__477)
set t=null
endfunction
function Mu___BunretsuCast takes unit c returns nothing
local integer lvlinv=GetUnitAbilityLevel(c,Mu_MEISAI)
local integer lvllev=GetUnitAbilityLevel(c,Mu_KEIJUGAN)
local integer lvlult=GetUnitAbilityLevel(c,Mu_ULT)
local integer lvlkanchi=GetUnitAbilityLevel(c,Mu_KANCHI)
local integer i=0
local real time=60.
local real mpCur=GetUnitState(c,UNIT_STATE_MANA)
local unit b
set Mu_bunretsuLog=true
call SetUnitPathing(c,false)
call SetUnitState(c,UNIT_STATE_MANA,mpCur/2.)
set b=CreateUnit(GetOwningPlayer(c),0x4F303143,GetWidgetX(c),GetWidgetY(c),GetUnitFacing(c))
loop
exitwhen i>5
if GetItemTypeId(UnitItemInSlot(c,i))!=RYUJIN_ID then
set bj_lastCreatedItem=CreateItem(GetItemTypeId(UnitItemInSlot(c,i)),0.,0.)
else
set bj_lastCreatedItem=CreateItem(0x49303049,0.,0.)
endif
call UnitAddItem(b,bj_lastCreatedItem)
set i=i+1
endloop
call SetHeroXP(b,GetHeroXP(c),false)
call SuspendHeroXP(b,false)
call SetWidgetLife(b,GetWidgetLife(c))
call SetUnitState(b,UNIT_STATE_MANA,mpCur/2.)
if lvlinv>0 then
call UnitAddAbility(b,Mu_MEISAI)
call Mu___StartInvisibility(b)
endif
if lvllev>0 then
call UnitAddAbility(b,Mu_KEIJUGAN)
endif
if lvlult>0 then
call UnitAddAbility(b,Mu_ULT)
endif
if lvlkanchi>0 then
call UnitAddAbility(b,Mu_KANCHI)
call SetUnitAbilityLevel(b,Mu_KANCHI,lvlkanchi)
endif
call IssuePointOrder(b,"move",GetWidgetX(b)+400.*Cos(GetUnitFacing(b)*.017),GetWidgetY(b)+400.*Cos(GetUnitFacing(b)*.017))
call UnitApplyTimedLife(b,0x42544C46,time)
call SetUnitPathing(c,true)
if GetLocalPlayer()==GetOwningPlayer(b)then
call ClearSelection()
call SelectUnit(b,true)
endif
set b=null
endfunction
function cj_anonym__478 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(HH,h,0)
if GetWidgetLife(c)>.405 and GetUnitAbilityLevel(c,Mu_KEIJUGAN_BUFF)>0 then
if GetUnitAbilityLevel(c,0x41313143)==0 then
call UnitAddAbility(c,0x41313143)
endif
else
call AddUnitAnimationProperties(c,"Walk",true)
call AddUnitAnimationProperties(c,"Walk Alternate",false)
call SetUnitAnimation(c,"Spell slam")
call SetUnitFlyHeight(c,GetUnitDefaultFlyHeight(c),LoadReal(HH,h,1))
call UnitRemoveAbility(c,0x41313143)
call UnitRemoveAbility(c,0x41303541)
call UnitRemoveAbility(c,0x42303148)
call SetUnitPathing(c,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set c=null
set t=null
endfunction
function Mu___KeijuganCast takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real needHeight=500.
local real timeHeight=.5
local real speedHeight=needHeight/timeHeight
call Sound("Ping.mp3")
call SetUnitAnimation(c,"Spell slam")
call DestroyEffect(AddSpecialEffect("dim.MDx",GetWidgetX(c),GetWidgetY(c)))
call SetUnitPathing(c,false)
call SetUnitTypeFlying(c)
call UnitAddAbility(c,0x41303541)
if not Mu_bunretsuLog then
call SetUnitAbilityLevel(c,0x4130524C,1)
else
call SetUnitAbilityLevel(c,0x4130524C,2)
endif
call UnitAddAbility(c,0x41313143)
call AddUnitAnimationProperties(c,"Walk Alternate",true)
call AddUnitAnimationProperties(c,"Walk",false)
call SetUnitFlyHeight(c,needHeight,speedHeight)
call SaveAgentHandle(HH,h,0,c)
call SaveReal(HH,h,1,speedHeight)
call TimerStart(t,.1,true,function cj_anonym__478)
set t=null
endfunction
function Mu___GetDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and GetUnitAbilityLevel(GetEventDamageSource(),0x41305455)>0 and IsUnitInGroup(GetTriggerUnit(),Mu___grMeisaiCheck)
endfunction
function Mu___GetDamageActions takes nothing returns nothing
call UnitRemoveAbility(GetEventDamageSource(),0x41305455)
endfunction
function Mu___AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)and GetUnitAbilityLevel(GetAttacker(),0x41305455)>0 and not IsUnitInGroup(GetTriggerUnit(),Mu___grMeisaiCheck)
endfunction
function Mu___AttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Mu___grMeisaiReg)then
call GroupAddUnit(Mu___grMeisaiReg,tu)
call TriggerRegisterUnitEvent(Mu___meisaiudmg,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Mu___grMeisaiCheck,tu)
set tu=null
endfunction
function Mu_AddAbility takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Mu]then
call Mu___StartInvisibility(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Mu___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Mu_KEIJUGAN or i==Mu_BUNRETSU or i==Mu_ULT or i==Mu_KANCHI
endfunction
function Mu___SpellsActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local integer i=GetSpellAbilityId()
if i==Mu_KEIJUGAN then
if GetUnitAbilityLevel(c,Mu_KEIJUGAN_BUFF)==0 then
call Mu___KeijuganCast(c)
else
call UnitRemoveAbility(c,Mu_KEIJUGAN_BUFF)
endif
elseif i==Mu_BUNRETSU then
call Mu___BunretsuCast(c)
elseif i==Mu_ULT then
call Mu___UltCast(c,GetSpellTargetX(),GetSpellTargetY())
elseif i==Mu_KANCHI then
call Mu___KanchiCast(c)
endif
set c=null
endfunction
function Mu_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Mu___meisaiattack=CreateTrigger()
set Mu___meisaiudmg=CreateTrigger()
set Mu___grMeisaiReg=CreateGroup()
set Mu___grMeisaiCheck=CreateGroup()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(Mu___meisaiattack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41305455,false)
call SetPlayerAbilityAvailable(Player(i),0x41303541,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Mu___SpellsConditions))
call TriggerAddAction(spells,function Mu___SpellsActions)
call TriggerAddCondition(Mu___meisaiattack,Condition(function Mu___AttackConditions))
call TriggerAddAction(Mu___meisaiattack,function Mu___AttackActions)
call TriggerAddCondition(Mu___meisaiudmg,Condition(function Mu___GetDamageConditions))
call TriggerAddAction(Mu___meisaiudmg,function Mu___GetDamageActions)
set spells=null
endfunction
function Nagato___GetPainCastTime takes unit caster,unit body returns real
local real x=GetWidgetX(caster)
local real y=GetWidgetY(caster)
local real x1=GetWidgetX(body)
local real y1=GetWidgetY(body)
local real l__Nagato_value=50000.
local real castTime=(SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1)))/l__Nagato_value
return castTime
endfunction
function Nagato___ChibakuTenseiOver takes unit d returns nothing
local group g=CreateGroup()
local unit tg
call KillUnit(d)
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x4130474C)>0 then
call SetUnitFlyHeight(tg,GetUnitDefaultFlyHeight(tg),750.)
call UnitRemoveAbility(tg,0x4130474C)
call UnitRemoveAbility(tg,0x42303458)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Nagato___ChibakuTenseiGravity takes unit d,real radius,real offset,real heightUp returns nothing
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1
local real y1
local real a
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Nagato_p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
call SetUnitPosition(tg,x1-offset*Cos(a*bj_DEGTORAD),y1-offset*Sin(a*bj_DEGTORAD))
if GetUnitAbilityLevel(tg,0x4130474C)==0 then
call SetUnitTypeFlying(tg)
call UnitAddAbility(tg,0x4130474C)
endif
if GetUnitFlyHeight(tg)<550.then
call SetUnitFlyHeight(tg,GetUnitFlyHeight(tg)+heightUp,0.)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__479 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit meteor=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if time>0.and GetWidgetLife(d)>.405 then
call Nagato___ChibakuTenseiGravity(meteor,LoadReal(HH,h,4),LoadReal(HH,h,5),LoadReal(HH,h,6))
call SaveReal(HH,h,3,time-period)
else
call RemoveUnit(d)
call Nagato___ChibakuTenseiOver(meteor)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set meteor=null
set d=null
set t=null
endfunction
function Nagato___ChibakuTenseiStartGravity takes unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real period=.05
local real time=8.
local unit meteor=CreateUnit(Nagato_p,0x6E303333,x,y,0.)
call Sound("Nagato Chibaku Tensei 2.mp3")
call SetUnitAnimation(meteor,"Stand")
call SaveAgentHandle(HH,h,0,meteor)
call SaveAgentHandle(HH,h,1,d)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call SaveReal(HH,h,4,600.)
call SaveReal(HH,h,5,15.)
call SaveReal(HH,h,6,10.)
call TimerStart(t,period,true,function cj_anonym__479)
set meteor=null
set t=null
endfunction
function cj_anonym__480 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real distance=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real heightUp=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=GetUnitFacing(d)
if distance>0.then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFlyHeight(d,GetUnitFlyHeight(d)+heightUp,0.)
call SaveReal(HH,h,1,distance-offset)
else
call Nagato___ChibakuTenseiStartGravity(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Nagato___ChibakuTenseiStartMovement takes unit u,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real speed=600.
local real period=.05
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real needHeight=500.
local real timeMove=distance/speed
local real heightUp=(needHeight/timeMove)*period
call SaveAgentHandle(HH,h,0,CreateUnit(Nagato_p,0x6E303334,x,y,bj_RADTODEG*Atan2(y1-GetWidgetY(u),x1-GetWidgetX(u))))
call SaveReal(HH,h,1,distance)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,heightUp)
call TimerStart(t,period,true,function cj_anonym__480)
set t=null
endfunction
function cj_anonym__482 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call PauseUnit(u,false)
call Nagato___ChibakuTenseiStartMovement(u,LoadReal(HH,h,1),LoadReal(HH,h,2))
endif
if GetUnitCurrentOrder(Nagato_c)==OrderId("flamestrike")then
call IssueImmediateOrder(Nagato_c,"stop")
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function cj_anonym__481 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real castTime=1.2
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call SetUnitAnimation(u,"Spell Channel Two")
endif
call SaveAgentHandle(HH,h1,0,u)
call SaveReal(HH,h1,1,LoadReal(HH,h,1))
call SaveReal(HH,h1,2,LoadReal(HH,h,2))
call TimerStart(t1,castTime,false,function cj_anonym__482)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function Nagato___ChibakuTenseiStart takes unit u,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=2.
call Sound("Nagato Chibaku Tensei 1.mp3")
call IssueImmediateOrder(u,"stop")
call PauseUnit(u,true)
call SetUnitFacing(u,bj_RADTODEG*Atan2(y1-GetWidgetY(u),x1-GetWidgetX(u)))
call SetUnitAnimation(u,"Spell Channel One")
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call TimerStart(t,castTime,false,function cj_anonym__481)
set t=null
endfunction
function Nagato___ChibakuTenseiCheck takes unit u,real x1,real y1 returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<=200000.then
call Nagato___ChibakuTenseiStart(u,x1,y1)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
if GetUnitCurrentOrder(Nagato_c)==OrderId("flamestrike")then
call IssueImmediateOrder(Nagato_c,"stop")
endif
call RecastSkills(Nagato_c,0x41303457,1,500.)
call IssuePointOrder(u,"attack",x1,y1)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"Расстояние превышает допустимое на |cFFFFCC00"+I2S(R2I(distance-200000.))+"|r ед.")
endif
endif
endfunction
function cj_anonym__483 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitCurrentOrder(Nagato_c)==OrderId("flamestrike")and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___ChibakuTenseiCheck(u,LoadReal(HH,h,1),LoadReal(HH,h,2))
else
if GetUnitCurrentOrder(Nagato_c)==OrderId("flamestrike")then
call IssueImmediateOrder(Nagato_c,"stop")
endif
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41303457,1,500.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Chibaku Tensei|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___ChibakuTenseiCast takes real x1,real y1 returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[6]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__483)
endif
set u=null
set t=null
endfunction
function Nagato___ShinraTenseiDamage takes unit d,real radius,real knockback,real dmgMain,real dmgAdd,group grCheck returns nothing
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local group g=CreateGroup()
local unit tg
call KillDestructablesStart(x,y,radius/2.)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Nagato_p)and not IsUnitInGroup(tg,grCheck)then
call GroupAddUnit(grCheck,tg)
call DestroyEffect(AddSpecialEffect("EarthShock.mdx",GetWidgetX(tg),GetWidgetY(tg)))
call KnockBackUnitEf(tg,knockback,knockback/1000.,bj_RADTODEG*Atan2(GetWidgetY(tg)-y,GetWidgetX(tg)-x),.025,0,false)
call UnitDamageTarget(Nagato_c,tg,GetTaijutsuDamage(dmgMain+GetUnitState(tg,UNIT_STATE_MAX_LIFE)*dmgAdd,Nagato_c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__484 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real radiusNew=LoadReal(HH,h,1)
local real radiusPlus=LoadReal(HH,h,2)
local real radiusOver=LoadReal(HH,h,3)
local real dmgMain=LoadReal(HH,h,4)
local real dmgAdd=LoadReal(HH,h,5)
local real size=LoadReal(HH,h,6)
local real sizePlus=LoadReal(HH,h,7)
local group grCheck=LoadGroupHandle(HH,h,8)
if radiusNew<radiusOver then
set radiusNew=radiusNew+radiusPlus
set size=size+sizePlus
call Nagato___ShinraTenseiDamage(d,radiusNew,radiusOver/2.,dmgMain,dmgAdd,grCheck)
call SetUnitScale(d,size,size,size)
call SaveReal(HH,h,1,radiusNew)
call SaveReal(HH,h,6,size)
else
call RemoveUnit(d)
call GroupClear(grCheck)
call DestroyGroup(grCheck)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grCheck=null
set d=null
set t=null
endfunction
function Nagato___ShinraTenseiStartDamage takes real x,real y,real radius,real dmgMain,real dmgAdd returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.05
local real size=1.
local real sizePlus=10.*period
local unit d=CreateUnit(Nagato_p,0x68303152,x,y,0.)
call Sound("Akatsuki Jutsu.mp3")
call SetUnitScale(d,size,size,size)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,300.)
call SaveReal(HH,h,2,(300.*period)*5.)
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,dmgMain)
call SaveReal(HH,h,5,dmgAdd)
call SaveReal(HH,h,6,size)
call SaveReal(HH,h,7,sizePlus)
call SaveAgentHandle(HH,h,8,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__484)
set d=null
set t=null
endfunction
function cj_anonym__485 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 then
call SetUnitPathing(u,true)
call PauseUnit(u,false)
call SetUnitFlyHeight(u,GetUnitDefaultFlyHeight(u),750.)
endif
call Nagato___ShinraTenseiStartDamage(LoadReal(HH,h,1),LoadReal(HH,h,2),LoadReal(HH,h,3),LoadReal(HH,h,4),LoadReal(HH,h,5))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___ShinraTenseiStartAnimation takes unit u,real radius,real dmgMain,real dmgAdd returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=.5
call Sound("Nagato Shinra Tensei 2.mp3")
call SetUnitAnimation(u,"Spell Defend")
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,GetWidgetX(u))
call SaveReal(HH,h,2,GetWidgetY(u))
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,dmgMain)
call SaveReal(HH,h,5,dmgAdd)
call TimerStart(t,castTime,false,function cj_anonym__485)
set t=null
endfunction
function cj_anonym__486 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real dmgMainNew=LoadReal(HH,h,3)
local real dmgMainUp=LoadReal(HH,h,4)
local real dmgAddNew=LoadReal(HH,h,5)
local real dmgAddUp=LoadReal(HH,h,6)
local real mp=LoadReal(HH,h,7)
local real heightUp=LoadReal(HH,h,8)
local real rectNew=LoadReal(HH,h,9)
local real rectUp=LoadReal(HH,h,10)
if GetWidgetLife(u)>.405 and GetUnitCurrentOrder(Nagato_c)==OrderId("volcano")and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 and time>0.then
call SetUnitFlyHeight(u,GetUnitFlyHeight(u)+heightUp,0.)
if not IsUnitPaused(u)then
call PauseUnit(u,true)
call SetUnitAnimation(u,"Stand Channel Two")
endif
call SaveReal(HH,h,2,time-period)
call SaveReal(HH,h,3,dmgMainNew+dmgMainUp)
call SaveReal(HH,h,5,dmgAddNew+dmgAddUp)
call SaveReal(HH,h,9,rectNew+rectUp)
else
if GetUnitCurrentOrder(Nagato_c)==OrderId("volcano")then
call IssueImmediateOrder(Nagato_c,"stop")
endif
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___ShinraTenseiStartAnimation(u,rectNew,dmgMainNew,dmgAddNew)
else
if GetWidgetLife(u)>.405 then
call SetUnitPathing(u,true)
call PauseUnit(u,false)
call SetUnitFlyHeight(u,GetUnitDefaultFlyHeight(u),750.)
endif
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Shinra Tensei|r не сработала!")
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function Nagato___ShinraTenseiStart takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.05
local real time=5.
local real dmgMain=25.*period
local real dmgAdd=.07*period
local real mp=100.*period
local real heightUp=100.*period
local real rectUp=300.*period
call Sound("Nagato Shinra Tensei 1.mp3")
call SetUnitTypeFlying(u)
call PauseUnit(u,true)
call SetUnitAnimation(u,"Stand Channel Two")
call SetUnitPathing(u,false)
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,0.)
call SaveReal(HH,h,4,0.)
call SaveReal(HH,h,5,dmgMain)
call SaveReal(HH,h,6,dmgAdd)
call SaveReal(HH,h,7,mp)
call SaveReal(HH,h,8,heightUp)
call SaveReal(HH,h,9,300.)
call SaveReal(HH,h,10,rectUp)
call TimerStart(t,period,true,function cj_anonym__486)
set t=null
endfunction
function cj_anonym__487 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitCurrentOrder(Nagato_c)==OrderId("volcano")and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___ShinraTenseiStart(u)
else
if GetUnitCurrentOrder(Nagato_c)==OrderId("volcano")then
call IssueImmediateOrder(Nagato_c,"stop")
endif
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41303534,1,100.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Shinra Tensei|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___ShinraTenseiCast takes nothing returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[6]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__487)
endif
set u=null
set t=null
endfunction
function Nagato___BanshoTenninStart takes unit u,unit tu returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real knockback=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real period=.025
if knockback<=900.then
call Sound("Nagato Bansho Tennin.mp3")
call IssueImmediateOrder(u,"stop")
call SetUnitFacing(u,a)
call SetUnitAnimation(u,"Spell Slam 1")
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
call KnockBackUnitEf(tu,knockback,knockback/1000.,a+180.,period,0,false)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41303551,1,125.)
call IssuePointOrder(u,"attack",x1,y1)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"Расстояние превышает допустимое на |cFFFFCC00"+I2S(R2I(knockback-900.))+"|r ед.")
endif
endif
endfunction
function cj_anonym__488 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
if GetWidgetLife(u)>.405 and GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___BanshoTenninStart(u,tu)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41303551,1,125.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Bansho Tennin|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set u=null
set t=null
endfunction
function Nagato___BanshoTenninCast takes unit tu returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[6]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,tu)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__488)
endif
set u=null
set t=null
endfunction
function cj_anonym__489 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
if GetWidgetLife(tu)>.405 then
call SetWidgetLife(tu,9999.)
call ShowUnit(tu,true)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Nagato___KaifukuStart takes unit u,unit tu,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call Sound("Nagato Meifu no O Kaifuku.mp3")
call IssueImmediateOrder(u,"stop")
call SetUnitFacing(u,a)
call SetUnitAnimation(u,"Spell")
call ShowUnit(tu,false)
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,4.,false,function cj_anonym__489)
set t=null
endfunction
function Nagato___KaifukuCheck takes unit u,unit tu returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=250.then
call DestroyEffect(AddSpecialEffect("LawOfBloodScroll_Cast.mdx",x1,y1))
call Nagato___KaifukuStart(u,tu,bj_RADTODEG*Atan2(y1-y,x1-x))
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41305658,1,100.)
call IssuePointOrder(u,"attack",x1,y1)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"Расстояние превышает допустимое на |cFFFFCC00"+I2S(R2I(distance-250.))+"|r ед.")
endif
endif
endfunction
function cj_anonym__490 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
if GetWidgetLife(u)>.405 and GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___KaifukuCheck(u,tu)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41305658,1,100.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Meifu no O: Kaifuku|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set u=null
set t=null
endfunction
function Nagato___KaifukuCast takes unit tu returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[5]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,tu)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__490)
endif
set u=null
set t=null
endfunction
function Nagato___MeifuNoODamage takes unit u,real radius,real dmgAdd returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Nagato_p)then
call UnitDamageTarget(Nagato_c,tg,GetUnitState(tg,UNIT_STATE_MAX_LIFE)*dmgAdd,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__492 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real dmgAdd=LoadReal(HH,h,3)
local real radius=LoadReal(HH,h,4)
if time>0.then
call Nagato___MeifuNoODamage(u,radius,dmgAdd)
call SaveReal(HH,h,2,time-period)
else
call RemoveUnit(u)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function cj_anonym__491 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real period=1.
local real time=10.
local real dmgAdd=.03*period
local real radius=600.
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SetUnitAnimation(u,"stand")
call SaveAgentHandle(HH,h1,0,u)
call SaveReal(HH,h1,1,period)
call SaveReal(HH,h1,2,time)
call SaveReal(HH,h1,3,dmgAdd)
call SaveReal(HH,h1,4,radius)
call TimerStart(t1,period,true,function cj_anonym__492)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function Nagato___MeifuNoOStart takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real animationTime=.97
local unit d=CreateUnit(Nagato_p,0x6E303147,x,y,GetUnitFacing(u))
call Sound("Nagato Meifu no O.mp3")
call SetUnitAnimation(d,"spell")
call SaveAgentHandle(HH,h,0,d)
call TimerStart(t,animationTime,false,function cj_anonym__491)
set d=null
set t=null
endfunction
function cj_anonym__493 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___MeifuNoOStart(u)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41304741,1,250.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Meifu no O|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___MeifuNoOCast takes nothing returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[5]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__493)
endif
set u=null
set t=null
endfunction
function cj_anonym__494 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real rangeMax=LoadReal(HH,h,3)
local real rangeCur=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local real dmg=LoadReal(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or rangeCur==rangeMax
if IsUnitNeedClear(tg,Nagato_p)then
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call UnitDamageTarget(Nagato_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
set rangeCur=rangeMax
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,4,rangeCur+offset)
else
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set d=null
set tg=null
set t=null
endfunction
function Nagato___ShuraNoKoCreate takes real xHero,real yHero,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real period=.025
local real dmg=100.
local real speed=1000.
local real offset=speed*period
local real radius=40.
local real rangeMax=600.
local real rangeCur=0.
call SaveAgentHandle(HH,h,0,CreateUnit(Nagato_p,0x6E303332,x,y,a))
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,rangeMax)
call SaveReal(HH,h,4,rangeCur)
call SaveReal(HH,h,5,radius)
call SaveReal(HH,h,6,dmg)
call TimerStart(t,period,true,function cj_anonym__494)
set t=null
endfunction
function Nagato___ShuraNoKoStart takes unit u returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real radius=1200.
local group g=CreateGroup()
local unit tg
call SetUnitAnimation(u,"Spell Defend")
call PauseUnit(u,false)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Nagato_p)and IsUnitVisible(tg,Nagato_p)and not HasUnitInvisible(tg)then
call Nagato___ShuraNoKoCreate(x,y,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__495 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
call DestroyEffect(LoadEffectHandle(HH,h,1))
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___ShuraNoKoStart(u)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41304543,1,200.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Shura no Ko|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___ShuraNoKoAnimation takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=2.
call Sound("Nagato Shura no Ko.mp3")
call PauseUnit(u,true)
call SetUnitAnimation(u,"Spell")
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("SuperShinyThingy.mdx",u,"overhead"))
call TimerStart(t,castTime,false,function cj_anonym__495)
set t=null
endfunction
function cj_anonym__496 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___ShuraNoKoAnimation(u)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41304543,1,200.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Shura no Ko|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___ShuraNoKoCast takes nothing returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[4]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__496)
endif
set u=null
set t=null
endfunction
function Nagato___KaiwanNoHiyaDamage takes real x,real y returns nothing
local real radius=300.
local real dmg=400.
local group g=CreateGroup()
local unit tg
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Nagato_p)then
call UnitDamageTarget(Nagato_c,tg,GetTaijutsuDamage(dmg,Nagato_c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__497 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real maxdis=LoadReal(HH,h,4)
local integer amount=LoadInteger(HH,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SetUnitFlyHeight(d,1200./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SaveInteger(HH,h,5,amount-1)
else
call Nagato___KaiwanNoHiyaDamage(x,y)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Nagato___KaiwanNoHiyaStart takes unit u,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real speed=1200.
local real offset=speed*period
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer amount=R2I(distance/offset)
call Sound("Nagato Kaiwan no Hiya.mp3")
call IssueImmediateOrder(u,"stop")
call SetUnitAnimation(u,"Spell Slam 1")
call SetUnitFacing(u,a)
call SaveAgentHandle(HH,h,0,CreateUnit(Nagato_p,0x6E303335,x,y,a))
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,distance)
call SaveInteger(HH,h,5,amount)
call TimerStart(t,period,true,function cj_anonym__497)
set t=null
endfunction
function Nagato___KaiwanNoHiyaCheck takes unit u,real x1,real y1 returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=900.then
call Nagato___KaiwanNoHiyaStart(u,x1,y1)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41304157,1,200.)
call IssuePointOrder(u,"attack",x1,y1)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"Расстояние превышает допустимое на |cFFFFCC00"+I2S(R2I(distance-900.))+"|r ед.")
endif
endif
endfunction
function cj_anonym__498 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___KaiwanNoHiyaCheck(u,LoadReal(HH,h,1),LoadReal(HH,h,2))
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41304157,1,200.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Kaiwan no Hiya|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___KaiwanNoHiyaCast takes real x1,real y1 returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[4]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__498)
endif
set u=null
set t=null
endfunction
function Nagato___KyukonNoJutsuVisibilty takes nothing returns nothing
local real timeBuff=6.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Nagato_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not HasUnitInvisible(tg)then
call UnitApplyTimedLife(CreateUnit(Nagato_p,0x6E303336,GetWidgetX(tg),GetWidgetY(tg),0.),0x42544C46,timeBuff)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__499 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if time>0.and distance<250.and GetWidgetLife(u)>.405 and GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
if not IsUnitPaused(u)then
call PauseUnit(u,true)
call SetUnitAnimation(u,"Spell Slam 1")
endif
call SaveReal(HH,h,3,time-period)
else
call UnitRemoveAbility(tu,0x4230334F)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call PauseUnit(u,false)
endif
if time==0.and distance<250.then
if GetWidgetLife(tu)>.405 then
call Sound("Nagato Kyukon.mp3")
if IsUnitHero(tu)and GetWidgetLife(tu)<GetUnitState(tu,UNIT_STATE_MAX_LIFE)*.35 then
call UnitDamageTarget(Nagato_c,tu,99999.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
elseif not IsUnitHero(tu)then
call UnitDamageTarget(Nagato_c,tu,99999.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
endif
call Nagato___KyukonNoJutsuVisibilty()
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set u=null
set t=null
endfunction
function Nagato___KyukonNoJutsuStart takes unit u,unit tu,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=4.
local real period=.1
call Sound("Akatsuki Jutsu.mp3")
call PauseUnit(u,true)
call SetUnitFacing(u,a)
call SetUnitAnimation(u,"Spell Slam 1")
set bj_lastCreatedUnit=CreateUnit(Nagato_p,0x6E303042,GetWidgetX(tu),GetWidgetY(tu),GetUnitFacing(tu)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41303255)
call IssueTargetOrder(bj_lastCreatedUnit,"thunderbolt",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__499)
set t=null
endfunction
function Nagato___KyukonNoJutsuCheck takes unit u,unit tu returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<=125.then
call Nagato___KyukonNoJutsuStart(u,tu,bj_RADTODEG*Atan2(y1-y,x1-x))
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41305730,1,250.)
call IssuePointOrder(u,"attack",x1,y1)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"Расстояние превышает допустимое на |cFFFFCC00"+I2S(R2I(distance-125.))+"|r ед.")
endif
endif
endfunction
function cj_anonym__500 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
if GetWidgetLife(u)>.405 and GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___KyukonNoJutsuCheck(u,tu)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41305730,1,250.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Kyukon no Jutsu|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set u=null
set t=null
endfunction
function Nagato___KyukonNoJutsuCast takes unit tu returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[3]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,tu)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__500)
endif
set u=null
set t=null
endfunction
function cj_anonym__501 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.and GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
if not IsUnitPaused(u)then
call PauseUnit(u,true)
call SetUnitAnimation(u,"Spell")
endif
call SaveReal(HH,h,2,time-period)
else
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call PauseUnit(u,false)
endif
call UnitRemoveAbility(u,Nagato_PAIN_2_KYUIN_SPELL)
call UnitRemoveAbility(u,0x42303454)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function Nagato___FujutsuKyuinStart takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=4.
local real period=.2
call Sound("Nagato Fujutsu Kyuin.mp3")
call UnitAddAbility(u,Nagato_PAIN_2_KYUIN_SPELL)
call PauseUnit(u,true)
call SetUnitAnimation(u,"Spell")
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__501)
set t=null
endfunction
function cj_anonym__502 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___FujutsuKyuinStart(u)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41304842,1,150.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Fujutsu: Kyuin|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___FujutsuKyuinCast takes nothing returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[2]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__502)
endif
set u=null
set t=null
endfunction
function cj_anonym__504 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real x=LoadReal(HH,h,2)
local real y=LoadReal(HH,h,3)
local real f=GetUnitFacing(u)
local real offset=150.
local real angle=0.
local integer i=2
call Sound("Nagato Kuchiyose Pain.mp3")
if u==tu then
loop
if Nagato_PainExist[i]and Nagato___PainUnit[i]!=tu then
set angle=72.*i
call SetUnitPosition(Nagato___PainUnit[i],x+offset*Cos((f+angle)*bj_DEGTORAD),y+offset*Sin((f+angle)*bj_DEGTORAD))
call SetUnitFacing(Nagato___PainUnit[i],f)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(Nagato___PainUnit[i]),GetWidgetY(Nagato___PainUnit[i])))
endif
set i=i+1
exitwhen i>6
endloop
else
call SetUnitPosition(tu,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SetUnitFacing(tu,f)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(tu),GetWidgetY(tu)))
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set u=null
set t=null
endfunction
function cj_anonym__503 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real castTime=.67
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call KuchiyoseEffect(x,y,2.)
call SaveAgentHandle(HH,h1,0,u)
call SaveAgentHandle(HH,h1,1,tu)
call SaveReal(HH,h1,2,x)
call SaveReal(HH,h1,3,y)
call TimerStart(t1,castTime,false,function cj_anonym__504)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set u=null
set t=null
set t1=null
endfunction
function Nagato___KuchiyosePainStart takes unit u,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real animationTime=.65
call SetUnitAnimation(u,"Spell Slam")
call Sound("Akatsuki Jutsu.mp3")
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,tu)
call TimerStart(t,animationTime,false,function cj_anonym__503)
set t=null
endfunction
function cj_anonym__505 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
if GetWidgetLife(u)>.405 and GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___KuchiyosePainStart(u,tu)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41304530,1,100.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Kuchiyose no Jutsu: Pain|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___KuchiyosePainCast takes unit tu returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[1]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call SaveAgentHandle(HH,h,1,tu)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__505)
endif
set u=null
set t=null
endfunction
function cj_anonym__508 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real lifeTime=LoadReal(HH,h,2)
if GetWidgetLife(d)>.405 and lifeTime>0.then
call SaveReal(HH,h,2,lifeTime-period)
else
call KuchiyoseCreateDustEffect("end",d,2.,2.6)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__507 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit d=CreateUnit(Nagato_p,0x6830334C,LoadReal(HH,h,1),LoadReal(HH,h,2),GetUnitFacing(u))
local real lifeTime=30.
local real period=.1
call KuchiyoseCreateDustEffect("cast",d,2.,2.6)
call SaveAgentHandle(HH,h1,0,d)
call SaveReal(HH,h1,1,period)
call SaveReal(HH,h1,2,lifeTime)
call TimerStart(t1,period,true,function cj_anonym__508)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function cj_anonym__506 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real castTime=.67
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call KuchiyoseEffect(x,y,3.)
call SaveAgentHandle(HH,h1,0,u)
call SaveReal(HH,h1,1,x)
call SaveReal(HH,h1,2,y)
call TimerStart(t1,castTime,false,function cj_anonym__507)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function Nagato___ZofukuKuchiyoseStart takes unit u returns nothing
local timer t=CreateTimer()
local real animationTime=.65
call Sound("Akatsuki Jutsu.mp3")
call SetUnitAnimation(u,"Spell Slam")
call SaveAgentHandle(HH,GetHandleId(t),0,u)
call TimerStart(t,animationTime,false,function cj_anonym__506)
set t=null
endfunction
function cj_anonym__509 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___ZofukuKuchiyoseStart(u)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41304833,1,300.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Zofuku Kuchiyose no Jutsu|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___ZofukuKuchiyoseCast takes nothing returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[1]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__509)
endif
set u=null
set t=null
endfunction
function Nagato___KuchiyoseBirdBombExplosion takes unit d returns nothing
local real dmg=150.
local real radiusEx=100.
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local unit tg
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radiusEx,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Nagato_p)then
call UnitDamageTarget(Nagato_c,tg,GetNinjutsuDamage(dmg,Nagato_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
call RemoveUnit(d)
set tg=null
endfunction
function cj_anonym__510 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Nagato___KuchiyoseBirdBombExplosion(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Nagato___KuchiyoseBirdBombStart takes unit d returns nothing
local timer t=CreateTimer()
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real randomDegree=GetRandomReal(0.,360.)
local real randomOffset=GetRandomReal(0.,200./2.)
local real x1=x+randomOffset*Cos(randomDegree*bj_DEGTORAD)
local real y1=y+randomOffset*Sin(randomDegree*bj_DEGTORAD)
local unit bomb=CreateUnit(Nagato_p,0x6E303338,x1,y1,0.)
local real time=.5
local real speedHeight=GetUnitFlyHeight(bomb)/time
call SetUnitTypeFlying(bomb)
call SetUnitFlyHeight(bomb,0.,speedHeight)
call SaveAgentHandle(HH,GetHandleId(t),0,bomb)
call TimerStart(t,time,false,function cj_anonym__510)
set bomb=null
set t=null
endfunction
function cj_anonym__513 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real rangeCur=LoadReal(HH,h,1)
local real rangeMax=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
if rangeCur<rangeMax then
call Nagato___KuchiyoseBirdBombStart(d)
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SaveReal(HH,h,1,rangeCur+offset)
else
call KuchiyoseCreateDustEffect("end",d,2.,2.6)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__512 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real speed=900.
local real period=.05
local real offset=speed*period
local real rangeCur=0.
local real rangeMax=1200.
local unit d=CreateUnit(Nagato_p,0x6E303337,LoadReal(HH,h,0),LoadReal(HH,h,1),LoadReal(HH,h,2))
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call Sound("Nagato Kuchiyose Bird.mp3")
call PauseUnit(d,true)
call KuchiyoseCreateDustEffect("cast",d,2.,2.6)
call SaveAgentHandle(HH,h1,0,d)
call SaveReal(HH,h1,1,rangeCur)
call SaveReal(HH,h1,2,rangeMax)
call SaveReal(HH,h1,3,offset)
call TimerStart(t1,period,true,function cj_anonym__513)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__511 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real a=LoadReal(HH,h,1)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real castTime=.67
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call KuchiyoseEffect(x,y,2.5)
call SaveReal(HH,h1,0,x)
call SaveReal(HH,h1,1,y)
call SaveReal(HH,h1,2,a)
call TimerStart(t1,castTime,false,function cj_anonym__512)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function Nagato___KuchiyoseBirdStart takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real a=GetUnitFacing(u)
local real animationTime=.65
call Sound("Akatsuki Jutsu.mp3")
call SetUnitAnimation(u,"Spell Slam")
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,a)
call TimerStart(t,animationTime,false,function cj_anonym__511)
set t=null
endfunction
function cj_anonym__514 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___KuchiyoseBirdStart(u)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x4130574C,1,200.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Kuchiyose no Jutsu: Bird|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___KuchiyoseBirdCast takes nothing returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[1]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__514)
endif
set u=null
set t=null
endfunction
function Nagato___IsPandaNear takes unit u returns boolean
local real x=GetWidgetX(Nagato___panda)
local real y=GetWidgetY(Nagato___panda)
local real x1=GetWidgetX(u)
local real y1=GetWidgetY(u)
local boolean log=false
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=125.then
set log=true
endif
return log
endfunction
function Nagato___GetDamageConditions takes nothing returns boolean
return Nagato___panda!=null and GetEventDamage()>0.and GetWidgetLife(GetTriggerUnit())>.405 and Nagato___IsPandaNear(GetTriggerUnit())
endfunction
function Nagato___GetDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local real dmg=GetEventDamage()
local real life=GetWidgetLife(Nagato___panda)
if dmg<=life then
call SetWidgetLife(u,GetWidgetLife(u)+dmg)
call SetWidgetLife(Nagato___panda,GetWidgetLife(Nagato___panda)-dmg)
else
call SetWidgetLife(u,GetWidgetLife(u)+life)
call SetWidgetLife(Nagato___panda,GetWidgetLife(Nagato___panda)-life)
endif
set u=null
endfunction
function Nagato___PandaDefense takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if tg!=Nagato___panda and IsUnitAlly(tg,Nagato_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(tg,Nagato___grReg)then
call GroupAddUnit(Nagato___grReg,tg)
call TriggerRegisterUnitEvent(Nagato___trgDamage,tg,EVENT_UNIT_DAMAGED)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__517 takes nothing returns nothing
call DisableTrigger(Nagato___trgDamage)
call KuchiyoseCreateDustEffect("end",Nagato___panda,1.35,2.)
call RemoveUnit(Nagato___panda)
set Nagato___panda=null
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__516 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real lifeTime=6.
set Nagato___panda=CreateUnit(Nagato_p,0x6830334E,LoadReal(HH,h,1),LoadReal(HH,h,2),GetUnitFacing(u))
call Nagato___PandaDefense()
call EnableTrigger(Nagato___trgDamage)
call KuchiyoseCreateDustEffect("cast",Nagato___panda,1.35,2.)
call TimerStart(CreateTimer(),lifeTime,false,function cj_anonym__517)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function cj_anonym__515 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real castTime=.67
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call KuchiyoseEffect(x1,y1,2.5)
call SaveAgentHandle(HH,h1,0,u)
call SaveReal(HH,h1,1,x1)
call SaveReal(HH,h1,2,y1)
call TimerStart(t1,castTime,false,function cj_anonym__516)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function Nagato___KuchiyosePandaStart takes unit u,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real animationTime=.65
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
call Sound("Akatsuki Jutsu.mp3")
call SetUnitAnimation(u,"Spell Slam")
call SetUnitFacing(u,a)
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call TimerStart(t,animationTime,false,function cj_anonym__515)
set t=null
endfunction
function Nagato___KuchiyosePandaCheck takes unit u,real x1,real y1 returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=600.then
call Nagato___KuchiyosePandaStart(u,x1,y1)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x4130395A,1,200.)
call IssuePointOrder(u,"attack",x1,y1)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"Расстояние превышает допустимое на |cFFFFCC00"+I2S(R2I(distance-600.))+"|r ед.")
endif
endif
endfunction
function cj_anonym__518 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___KuchiyosePandaCheck(u,LoadReal(HH,h,1),LoadReal(HH,h,2))
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x4130395A,1,200.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Kuchiyose no Jutsu: Panda|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___KuchiyosePandaCast takes real x1,real y1 returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[1]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__518)
endif
set u=null
set t=null
endfunction
function Nagato___KuchiyoseChameleonInvisibilityRemove takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x42303457)>0 then
call UnitRemoveAbility(tg,0x42303457)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Nagato___KuchiyoseChameleonInvisibility takes unit d returns nothing
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1
local real y1
local real radius=300.
local real needDistance=radius*1.25
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x42303457)>0 then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))>needDistance then
call UnitRemoveAbility(tg,0x42303457)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitAlly(tg,Nagato_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and GetUnitAbilityLevel(tg,0x42303457)==0 then
set bj_lastCreatedUnit=CreateUnit(Nagato_p,0x6E303042,x,y,0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call UnitAddAbility(bj_lastCreatedUnit,0x41313156)
call IssueTargetOrder(bj_lastCreatedUnit,"invisibility",tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__521 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real lifeTime=LoadReal(HH,h,2)
if GetWidgetLife(d)>.405 and lifeTime>0.then
call Nagato___KuchiyoseChameleonInvisibility(d)
call SaveReal(HH,h,2,lifeTime-period)
else
call Nagato___KuchiyoseChameleonInvisibilityRemove()
call KuchiyoseCreateDustEffect("end",d,1.6,2.)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__520 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit d=CreateUnit(Nagato_p,0x6830334D,LoadReal(HH,h,1),LoadReal(HH,h,2),GetUnitFacing(u))
local real lifeTime=30.
local real period=1.
call KuchiyoseCreateDustEffect("cast",d,1.6,2.)
call SaveAgentHandle(HH,h1,0,d)
call SaveReal(HH,h1,1,period)
call SaveReal(HH,h1,2,lifeTime)
call TimerStart(t1,period,true,function cj_anonym__521)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function cj_anonym__519 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real castTime=.67
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call KuchiyoseEffect(x,y,2.5)
call SaveAgentHandle(HH,h1,0,u)
call SaveReal(HH,h1,1,x)
call SaveReal(HH,h1,2,y)
call TimerStart(t1,castTime,false,function cj_anonym__520)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
set t1=null
endfunction
function Nagato___KuchiyoseChameleonStart takes unit u returns nothing
local timer t=CreateTimer()
local real animationTime=.65
call Sound("Akatsuki Jutsu.mp3")
call SetUnitAnimation(u,"Spell Slam")
call SaveAgentHandle(HH,GetHandleId(t),0,u)
call TimerStart(t,animationTime,false,function cj_anonym__519)
set t=null
endfunction
function cj_anonym__522 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
if GetWidgetLife(u)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call Nagato___KuchiyoseChameleonStart(u)
else
if GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 then
call RecastSkills(Nagato_c,0x41303959,1,200.)
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,3.,"|cFFFFCC00Kuchiyose no Jutsu: Chameleon|r не сработала!")
endif
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set t=null
endfunction
function Nagato___KuchiyoseChameleonCast takes nothing returns nothing
local timer t
local integer h
local unit u=Nagato___PainUnit[1]
if u!=null then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,u)
call TimerStart(t,Nagato___GetPainCastTime(Nagato_c,u),false,function cj_anonym__522)
endif
set u=null
set t=null
endfunction
function Nagato___PainClickGetJutsuCheck takes string str,integer whatValue returns integer
local integer l__Nagato_value=0
if str=="влево"then
if whatValue==5 then
if Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
endif
elseif whatValue==4 then
if Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
endif
elseif whatValue==3 then
if Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
endif
elseif whatValue==2 then
if Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
endif
elseif whatValue==1 then
if Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
endif
elseif whatValue==6 then
if Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
endif
endif
elseif str=="вправо"then
if whatValue==2 then
if Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
endif
elseif whatValue==3 then
if Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
endif
elseif whatValue==4 then
if Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
endif
elseif whatValue==5 then
if Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
endif
elseif whatValue==6 then
if Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
endif
endif
endif
return l__Nagato_value
endfunction
function cj_anonym__523 takes nothing returns nothing
set Nagato_painClickSound=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Nagato___PainClickGetJutsu takes integer id,unit u,string str returns nothing
local boolean camLog=false
local integer i=1
loop
if Nagato_JutsuActive[i]!=0 then
call SetPlayerAbilityAvailable(Nagato_p,Nagato_JutsuActive[i],false)
endif
set i=i+1
exitwhen i>5
endloop
if str=="клик"then
set Nagato_PainSelectedNumberNext=0
if id==Nagato_PAIN_ID_1 then
set Nagato_JutsuActive[1]=0x41303959
set Nagato_JutsuActive[2]=0x4130395A
set Nagato_JutsuActive[3]=0x4130574C
set Nagato_JutsuActive[4]=0x41304833
set Nagato_JutsuActive[5]=0x41304530
call Sound3D(u,"Nagato Pain 1 Chikushodo.mp3")
elseif id==Nagato_PAIN_ID_2 then
set Nagato_JutsuActive[1]=0x41304842
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 2 Gakido.mp3")
elseif id==Nagato_PAIN_ID_3 then
set Nagato_JutsuActive[1]=0x41305730
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 3 Ningendo.mp3")
elseif id==Nagato_PAIN_ID_4 then
set Nagato_JutsuActive[1]=0x41304157
set Nagato_JutsuActive[2]=0x41304543
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 4 Shurado.mp3")
elseif id==Nagato_PAIN_ID_5 then
set Nagato_JutsuActive[1]=0x41304741
set Nagato_JutsuActive[2]=0x41305658
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 5 Jigokudo.mp3")
elseif id==Nagato_PAIN_ID_6 then
set Nagato_JutsuActive[1]=0x41303551
set Nagato_JutsuActive[2]=0x41303534
set Nagato_JutsuActive[3]=0x41303457
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 6 Tendo.mp3")
endif
elseif str=="влево"then
set camLog=true
if Nagato_PainSelectedNumberNext==0 then
if Nagato_PainExist[6]then
set Nagato_PainSelectedNumberNext=6
elseif Nagato_PainExist[5]then
set Nagato_PainSelectedNumberNext=5
elseif Nagato_PainExist[4]then
set Nagato_PainSelectedNumberNext=4
elseif Nagato_PainExist[3]then
set Nagato_PainSelectedNumberNext=3
elseif Nagato_PainExist[2]then
set Nagato_PainSelectedNumberNext=2
elseif Nagato_PainExist[1]then
set Nagato_PainSelectedNumberNext=1
endif
endif
if Nagato_PainExist[6]and Nagato_PainSelectedNumberNext==6 then
set u=Nagato___PainUnit[6]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",5)
set Nagato_JutsuActive[1]=0x41303551
set Nagato_JutsuActive[2]=0x41303534
set Nagato_JutsuActive[3]=0x41303457
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 6 Tendo.mp3")
elseif Nagato_PainExist[5]and Nagato_PainSelectedNumberNext==5 then
set u=Nagato___PainUnit[5]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",4)
set Nagato_JutsuActive[1]=0x41304741
set Nagato_JutsuActive[2]=0x41305658
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 5 Jigokudo.mp3")
elseif Nagato_PainExist[4]and Nagato_PainSelectedNumberNext==4 then
set u=Nagato___PainUnit[4]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",3)
set Nagato_JutsuActive[1]=0x41304157
set Nagato_JutsuActive[2]=0x41304543
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 4 Shurado.mp3")
elseif Nagato_PainExist[3]and Nagato_PainSelectedNumberNext==3 then
set u=Nagato___PainUnit[3]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",2)
set Nagato_JutsuActive[1]=0x41305730
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 3 Ningendo.mp3")
elseif Nagato_PainExist[2]and Nagato_PainSelectedNumberNext==2 then
set u=Nagato___PainUnit[2]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",1)
set Nagato_JutsuActive[1]=0x41304842
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 2 Gakido.mp3")
elseif Nagato_PainExist[1]and Nagato_PainSelectedNumberNext==1 then
set u=Nagato___PainUnit[1]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",6)
set Nagato_JutsuActive[1]=0x41303959
set Nagato_JutsuActive[2]=0x4130395A
set Nagato_JutsuActive[3]=0x4130574C
set Nagato_JutsuActive[4]=0x41304833
set Nagato_JutsuActive[5]=0x41304530
call Sound3D(u,"Nagato Pain 1 Chikushodo.mp3")
endif
elseif str=="вправо"then
set camLog=true
if Nagato_PainSelectedNumberNext==0 then
if Nagato_PainExist[1]then
set Nagato_PainSelectedNumberNext=1
elseif Nagato_PainExist[2]then
set Nagato_PainSelectedNumberNext=2
elseif Nagato_PainExist[3]then
set Nagato_PainSelectedNumberNext=3
elseif Nagato_PainExist[4]then
set Nagato_PainSelectedNumberNext=4
elseif Nagato_PainExist[5]then
set Nagato_PainSelectedNumberNext=5
elseif Nagato_PainExist[6]then
set Nagato_PainSelectedNumberNext=6
endif
endif
if Nagato_PainExist[1]and Nagato_PainSelectedNumberNext==1 then
set u=Nagato___PainUnit[1]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",2)
set Nagato_JutsuActive[1]=0x41303959
set Nagato_JutsuActive[2]=0x4130395A
set Nagato_JutsuActive[3]=0x4130574C
set Nagato_JutsuActive[4]=0x41304833
set Nagato_JutsuActive[5]=0x41304530
call Sound3D(u,"Nagato Pain 1 Chikushodo.mp3")
elseif Nagato_PainExist[2]and Nagato_PainSelectedNumberNext==2 then
set u=Nagato___PainUnit[2]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",3)
set Nagato_JutsuActive[1]=0x41304842
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 2 Gakido.mp3")
elseif Nagato_PainExist[3]and Nagato_PainSelectedNumberNext==3 then
set u=Nagato___PainUnit[3]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",4)
set Nagato_JutsuActive[1]=0x41305730
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 3 Ningendo.mp3")
elseif Nagato_PainExist[4]and Nagato_PainSelectedNumberNext==4 then
set u=Nagato___PainUnit[4]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",5)
set Nagato_JutsuActive[1]=0x41304157
set Nagato_JutsuActive[2]=0x41304543
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 4 Shurado.mp3")
elseif Nagato_PainExist[5]and Nagato_PainSelectedNumberNext==5 then
set u=Nagato___PainUnit[5]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",6)
set Nagato_JutsuActive[1]=0x41304741
set Nagato_JutsuActive[2]=0x41305658
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 5 Jigokudo.mp3")
elseif Nagato_PainExist[6]and Nagato_PainSelectedNumberNext==6 then
set u=Nagato___PainUnit[6]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",1)
set Nagato_JutsuActive[1]=0x41303551
set Nagato_JutsuActive[2]=0x41303534
set Nagato_JutsuActive[3]=0x41303457
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 6 Tendo.mp3")
endif
endif
set i=1
loop
if Nagato_PainExist[i]then
if Nagato___PainUnit[i]==u then
call SetTextTagColor(Nagato___PainText[i],165,253,0,0)
else
call SetTextTagColor(Nagato___PainText[i],255,255,255,0)
endif
endif
set i=i+1
exitwhen i>6
endloop
set i=1
loop
if Nagato_JutsuActive[i]!=0 then
if GetUnitAbilityLevel(Nagato_c,Nagato_JutsuActive[i])>0 then
call SetPlayerAbilityAvailable(Nagato_p,Nagato_JutsuActive[i],true)
else
call UnitAddAbility(Nagato_c,Nagato_JutsuActive[i])
endif
endif
set i=i+1
exitwhen i>5
endloop
set Nagato_painClickSound=true
call TimerStart(CreateTimer(),1.,false,function cj_anonym__523)
if GetLocalPlayer()==Nagato_p then
call ClearSelection()
call SelectUnit(Nagato_c,true)
endif
if camLog then
if GetLocalPlayer()==Nagato_p then
call ResetToGameCamera(0.)
call PanCameraToTimed(GetWidgetX(u),GetWidgetY(u),0.)
endif
endif
set Nagato___PainClicked=null
endfunction
function Nagato___PainKeyDownConditions takes nothing returns boolean
return GetUnitAbilityLevel(udg_Hero[GetPlayerId(GetTriggerPlayer())],Nagato_RIKUDO_CANCEL)>0
endfunction
function Nagato___PainKeyDownActions takes nothing returns nothing
local integer i=1
if GetLocalPlayer()==Nagato_p then
call ClearSelection()
call SelectUnit(Nagato_c,true)
endif
loop
if Nagato_PainExist[i]then
if GetLocalPlayer()==Nagato_p then
call SelectUnit(Nagato___PainUnit[i],true)
endif
endif
set i=i+1
exitwhen i>6
endloop
endfunction
function Nagato___PainKeyRightConditions takes nothing returns boolean
return GetUnitAbilityLevel(udg_Hero[GetPlayerId(GetTriggerPlayer())],Nagato_RIKUDO_CANCEL)>0
endfunction
function Nagato___PainKeyRightActions takes nothing returns nothing
call Nagato___PainClickGetJutsu(0,null,"вправо")
endfunction
function Nagato___PainKeyLeftConditions takes nothing returns boolean
return GetUnitAbilityLevel(udg_Hero[GetPlayerId(GetTriggerPlayer())],Nagato_RIKUDO_CANCEL)>0
endfunction
function Nagato___PainKeyLeftActions takes nothing returns nothing
call Nagato___PainClickGetJutsu(0,null,"влево")
endfunction
function Nagato___PainClickConditions takes nothing returns boolean
return GetTriggerPlayer()==Nagato_p and IsUnitPain(GetTriggerUnit())and Nagato___PainClickNumber<2
endfunction
function cj_anonym__524 takes nothing returns nothing
set Nagato___PainClickNumber=Nagato___PainClickNumber-1
call DestroyTimer(GetExpiredTimer())
endfunction
function Nagato___PainClickActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer i=1
set Nagato___PainClickNumber=Nagato___PainClickNumber+1
if not Nagato___PainFirst then
set Nagato___PainFirst=true
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,20.,"|cFFFF5000Чтобы открыть способности Пейнов, используйте стрелки влево-вправо-вниз на клавиатуре, либо в течение 0,25 секунд выберите нужного Пейна дважды!|r")
endif
if Nagato___PainClickNumber==1 then
set Nagato___PainClicked=u
endif
if Nagato___PainClickNumber==2 and u==Nagato___PainClicked then
call Nagato___PainClickGetJutsu(GetUnitTypeId(u),u,"клик")
endif
call TimerStart(CreateTimer(),.25,false,function cj_anonym__524)
set u=null
endfunction
function cj_anonym__525 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit pain=LoadUnitHandle(HH,h,0)
local integer i=LoadInteger(HH,h,1)
if GetWidgetLife(pain)>.405 and not Nagato___PainActive[i]then
if not IsUnitPaused(pain)then
call PauseUnit(pain,true)
endif
else
if GetWidgetLife(pain)>.405 then
call PauseUnit(pain,false)
call SetUnitAnimation(pain,"stand")
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set pain=null
set t=null
endfunction
function Nagato___RikudoNoJutsuPainSleep takes unit pain,integer i returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
set Nagato___PainActive[i]=false
call SetTextTagColor(Nagato___PainText[i],255,255,255,0)
call PauseUnit(pain,true)
call SetUnitAnimation(pain,"death")
call SaveAgentHandle(HH,h,0,pain)
call SaveInteger(HH,h,1,i)
call TimerStart(t,.1,true,function cj_anonym__525)
set t=null
endfunction
function Nagato___RikudoNoJutsuOver takes nothing returns nothing
local integer i=1
set Nagato_PainSelectedNumberNext=0
call DisableTrigger(Nagato___PainSelectTrig)
call UnitRemoveAbility(Nagato_c,0x42303445)
call UnitRemoveAbility(Nagato_c,Nagato_RIKUDO_CANCEL)
loop
if Nagato_PainExist[i]then
call Nagato___RikudoNoJutsuPainSleep(Nagato___PainUnit[i],i)
endif
set i=i+1
exitwhen i>6
endloop
set i=1
loop
if Nagato_JutsuActive[i]!=0 then
call SetPlayerAbilityAvailable(Nagato_p,Nagato_JutsuActive[i],false)
endif
set i=i+1
exitwhen i>5
endloop
if GetLocalPlayer()==Nagato_p then
call ClearSelection()
call SelectUnit(Nagato_c,true)
endif
call SetPlayerAbilityAvailable(Nagato_p,Nagato_GEDO,true)
call SetPlayerAbilityAvailable(Nagato_p,Nagato_FUTON,true)
call SetPlayerAbilityAvailable(Nagato_p,Nagato_KANCHI,true)
call SetPlayerAbilityAvailable(Nagato_p,Nagato_RINNE_TENSEI,true)
call SetPlayerAbilityAvailable(Nagato_p,Nagato_RIKUDO,true)
call SetPlayerAbilityAvailable(Nagato_p,0x41304633,true)
endfunction
function cj_anonym__526 takes nothing returns nothing
if GetWidgetLife(Nagato_c)>.405 and GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO_CANCEL)>0 and not IsUnitPaused(Nagato_c)and GetUnitAbilityLevel(Nagato_c,0x424E7369)==0 and GetUnitAbilityLevel(Nagato_c,0x424F6878)==0 then
if GetUnitAbilityLevel(Nagato_c,0x42303445)==0 then
set bj_lastCreatedUnit=CreateUnit(Nagato_p,0x6E303042,GetWidgetX(Nagato_c),GetWidgetY(Nagato_c),GetUnitFacing(Nagato_c)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x4131355A)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",Nagato_c)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
endif
call SetUnitAnimation(Nagato_c,"spell")
else
call Nagato___RikudoNoJutsuOver()
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Nagato___RikudoNoJutsuCast takes nothing returns nothing
local real period=.05
local integer i=1
local real x=GetWidgetX(Nagato_c)
local real y=GetWidgetY(Nagato_c)
local real x1
local real y1
local real f=GetUnitFacing(Nagato_c)
local real offset=300.
local real angle=60.
local real distance=0.
local boolean log=false
if Nagato_PainNumber>0 then
set Nagato_JutsuActive[1]=0
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
loop
if Nagato_PainExist[i]then
set angle=60.*i
if IsUnitHidden(Nagato___PainUnit[i])then
call SetUnitPosition(Nagato___PainUnit[i],x+offset*Cos((f+angle)*bj_DEGTORAD),y+offset*Sin((f+angle)*bj_DEGTORAD))
call SetUnitFacing(Nagato___PainUnit[i],f)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(Nagato___PainUnit[i]),GetWidgetY(Nagato___PainUnit[i])))
call ShowUnit(Nagato___PainUnit[i],true)
call SetUnitInvulnerable(Nagato___PainUnit[i],false)
call PauseUnit(Nagato___PainUnit[i],false)
if GetLocalPlayer()==Nagato_p then
call SetTextTagVisibility(Nagato___PainText[i],true)
endif
set log=true
else
set x1=GetWidgetX(Nagato___PainUnit[i])
set y1=GetWidgetY(Nagato___PainUnit[i])
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<200000.then
call DestroyEffect(AddSpecialEffect("Smoke.mdx",x1,y1))
call SetUnitPosition(Nagato___PainUnit[i],x+offset*Cos((f+angle)*bj_DEGTORAD),y+offset*Sin((f+angle)*bj_DEGTORAD))
call SetUnitFacing(Nagato___PainUnit[i],f)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(Nagato___PainUnit[i]),GetWidgetY(Nagato___PainUnit[i])))
set Nagato___PainActive[i]=true
if GetLocalPlayer()==Nagato_p then
call SetTextTagVisibility(Nagato___PainText[i],true)
endif
set log=true
else
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,4.,"Расстояние между Нагато и Пейном не должно превышать |cFFFFCC00200000 ед.|r")
endif
endif
endif
set i=i+1
exitwhen i>6
endloop
if log then
call Sound("Bunshin Poff.wav")
endif
call SetPlayerAbilityAvailable(Nagato_p,Nagato_GEDO,false)
call SetPlayerAbilityAvailable(Nagato_p,Nagato_FUTON,false)
call SetPlayerAbilityAvailable(Nagato_p,Nagato_KANCHI,false)
call SetPlayerAbilityAvailable(Nagato_p,Nagato_RINNE_TENSEI,false)
call SetPlayerAbilityAvailable(Nagato_p,Nagato_RIKUDO,false)
call SetPlayerAbilityAvailable(Nagato_p,0x41304633,false)
call UnitAddAbility(Nagato_c,Nagato_RIKUDO_CANCEL)
call EnableTrigger(Nagato___PainSelectTrig)
set bj_lastCreatedUnit=CreateUnit(Nagato_p,0x6E303042,x,y,f+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x4131355A)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",Nagato_c)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call TimerStart(CreateTimer(),period,true,function cj_anonym__526)
else
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,4.,"|cFFFFCC00Вам нужно создать хотя бы одного Пейна!|r")
endif
endfunction
function Nagato___RinneTenseiCast takes nothing returns nothing
local integer current=0
local real x=GetWidgetX(Nagato_c)
local real y=GetWidgetY(Nagato_c)
local real radius=1800.
local real timeBuff=10.
local group g=CreateGroup()
local unit tg
set Nagato_value=.6
call Sound("Nagato Gedo Rinne Tensei no Jutsu Cast.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or current==3
if tg!=Nagato_c and IsUnitAlly(tg,Nagato_p)and GetWidgetLife(tg)>.405 and IsUnitHero(tg)then
call UnitTempSpell(tg,0x41305855,0x42303336,timeBuff,0,false)
set current=current+1
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=null
set tg=null
endfunction
function cj_anonym__527 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real timeBuff=LoadReal(HH,h,1)
if GetWidgetLife(Nagato_c)>.405 and timeBuff>0.then
call SaveReal(HH,h,1,timeBuff-period)
else
call UnitRemoveAbility(Nagato_c,0x4131324B)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Nagato___KanchiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
local real timeBuff=8.
call Sound("Akatsuki Jutsu.mp3")
call UnitAddAbility(Nagato_c,0x4131324B)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,timeBuff)
call TimerStart(t,period,true,function cj_anonym__527)
set t=null
endfunction
function Nagato___FutonReppushoDamage takes real x,real y,real radius,real dmg,real timeSlow returns nothing
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedClear(tg,Nagato_p)and GetUnitAbilityLevel(tg,0x41304F59)==0 then
call UnitDamageTarget(Nagato_c,tg,GetNinjutsuDamage(dmg,Nagato_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call UnitTempSpell(tg,0x41304F59,0x4230334B,timeSlow,0,false)
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
endfunction
function cj_anonym__528 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real rangeCur=LoadReal(HH,h,4)
local real rangeMax=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local real timeSlow=LoadReal(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if rangeCur<rangeMax then
call KillDestructablesStart(x,y,radius/200.)
call Nagato___FutonReppushoDamage(x,y,radius,dmg,timeSlow)
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,4,rangeCur+offset)
else
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Nagato___FutonReppushoCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Nagato_c)
local real yHero=GetWidgetY(Nagato_c)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real offsetStart=100.
local real x=xHero+offsetStart*Cos(a*bj_DEGTORAD)
local real y=yHero+offsetStart*Sin(a*bj_DEGTORAD)
local real period=.025
local real speed=1200.
local real offset=speed*period
local real radius=400.
local real rangeCur=0.
local real rangeMax=1000.
local real dmg=80.
local real timeSlow=4.
call Sound("Akatsuki Jutsu.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Nagato_p,0x6E303234,x,y,a+90.))
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,rangeCur)
call SaveReal(HH,h,5,rangeMax)
call SaveReal(HH,h,6,a)
call SaveReal(HH,h,7,timeSlow)
call TimerStart(t,period,true,function cj_anonym__528)
set t=null
endfunction
function cj_anonym__529 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit pain=LoadUnitHandle(HH,h,0)
local integer i=LoadInteger(HH,h,1)
if GetWidgetLife(pain)>.405 then
call SetTextTagPos(Nagato___PainText[i],GetWidgetX(pain)-playerNameTextOffsetX[i],GetWidgetY(pain),heightGameText*10.)
else
call DestroyTextTag(Nagato___PainText[i])
set Nagato___PainText[i]=null
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set pain=null
set t=null
endfunction
function Nagato___GedoNoJutsuCreatePainTextTag takes unit pain,integer i returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local string s=GetPainName(pain)
set Nagato___PainText[i]=CreateTextTag()
call SetTextTagText(Nagato___PainText[i],s,countDownTextSize/4.44)
call SetTextTagPos(Nagato___PainText[i],GetWidgetX(pain)-playerNameTextOffsetX[i],GetWidgetY(pain),heightGameText*10.)
call SetTextTagColor(Nagato___PainText[i],255,255,255,0)
call SetTextTagVisibility(Nagato___PainText[i],false)
call SaveAgentHandle(HH,h,0,pain)
call SaveInteger(HH,h,1,i)
call TimerStart(t,.01,true,function cj_anonym__529)
set t=null
endfunction
function Nagato___GedoNoJutsuCreatePain takes unit tu returns nothing
local real x=GetWidgetX(Nagato_c)
local real y=GetWidgetY(Nagato_c)
local real f=GetUnitFacing(Nagato_c)
local real offset=300.
local real step=0.
local integer lvl=GetUnitAbilityLevel(Nagato_c,Nagato_RIKUDO)
local integer i=0
local string color="|cFFFFCC00"
local string painName=null
local integer id
if not Nagato_PainExist[1]then
set id=Nagato_PAIN_ID_1
set step=60.
set i=1
elseif not Nagato_PainExist[2]then
set id=Nagato_PAIN_ID_2
set step=120.
set i=2
elseif not Nagato_PainExist[3]then
set id=Nagato_PAIN_ID_3
set step=180.
set i=3
elseif not Nagato_PainExist[4]then
set id=Nagato_PAIN_ID_4
set step=240.
set i=4
elseif not Nagato_PainExist[5]then
set id=Nagato_PAIN_ID_5
set step=300.
set i=5
elseif not Nagato_PainExist[6]then
set id=Nagato_PAIN_ID_6
set step=360.
set i=6
endif
if i>0 then
call Sound("Nagato Gedo no Jutsu Create Pain.mp3")
if Nagato_PainNumber<6 then
set Nagato_PainNumber=Nagato_PainNumber+1
set Nagato_PainControlNumber=Nagato_PainControlNumber+1
call NagatoPainNumberChangeText(true)
endif
set Nagato_PainExist[i]=true
set Nagato___PainUnit[i]=CreateUnit(Nagato_p,id,x+offset*Cos((f+step)*bj_DEGTORAD),y+offset*Sin((f+step)*bj_DEGTORAD),f)
set painName=GetPainName(Nagato___PainUnit[i])
call ShowUnit(Nagato___PainUnit[i],false)
call SetUnitInvulnerable(Nagato___PainUnit[i],true)
call PauseUnit(Nagato___PainUnit[i],true)
if GetHeroLevel(Nagato_c)<5 then
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,5.,"Вы создали нового Пейна! "+color+painName+"|r готов к бою! Получите |cFFFFCC005-ый уровень|r для возможности призыва!")
else
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,5.,"Вы создали нового Пейна! "+color+painName+"|r готов к бою! Используйте |cFFFFCC00Rikudo no Jutsu|r для призыва!")
endif
call Nagato___GedoNoJutsuCreatePainTextTag(Nagato___PainUnit[i],i)
else
if Nagato_PainControlNumber==6 then
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,4.,"|cFFFFCC00Вы набрали максимальное количество Пейнов!|r")
endif
endif
endfunction
function cj_anonym__530 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
if GetUnitAbilityLevel(tu,0x42303348)==0 then
if GetWidgetLife(tu)<.405 then
call Nagato___GedoNoJutsuCreatePain(tu)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Nagato___GedoNoJutsuCast takes nothing returns nothing
local group g=CreateGroup()
local unit tg
local timer t
local integer h=0
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41304C4D)>0 and GetUnitAbilityLevel(tg,0x42303348)==0 then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,tg)
set bj_lastCreatedUnit=CreateUnit(Nagato_p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313045)
call IssueTargetOrder(bj_lastCreatedUnit,"cripple",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call TimerStart(t,.2,true,function cj_anonym__530)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if h!=0 then
call Sound("Nagato Gedo no Jutsu Cast.mp3")
else
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,5.,"Вам нужно атаковать и попасть |cFFFFCC00Kuroibo|r в цель!")
call RecastSkills(Nagato_c,Nagato_GEDO,1,200.)
endif
set g=null
set tg=null
set t=null
endfunction
function Nagato___KuroiboDamage takes real x,real y,real a,real radius,real dmg returns boolean
local real offset=radius
local real x1=x+offset*Cos(a*bj_DEGTORAD)
local real y1=y+offset*Sin(a*bj_DEGTORAD)
local boolean log=false
local unit tg
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or log
if IsUnitNeedClear(tg,Nagato_p)then
call UnitDamageTarget(Nagato_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tg)>.405 then
call Sound3D(tg,"Nagato Kuroibo.mp3")
call UnitTempSpell(tg,0x41304C4D,0x4230334C,5.,0,false)
set log=true
endif
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
set tg=null
return log
endfunction
function cj_anonym__531 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real radius=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real rangeCur=LoadReal(HH,h,4)
local real rangeMax=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local boolean log=LoadBoolean(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if rangeCur<rangeMax and not log then
set log=Nagato___KuroiboDamage(x,y,a,radius,dmg)
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a)
call SaveReal(HH,h,4,rangeCur+offset)
if log then
call SaveBoolean(HH,h,7,log)
endif
else
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Nagato___KuroiboCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Nagato_c)
local real y=GetWidgetY(Nagato_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real radius=50.
local real rangeCur=0.
local real rangeMax=500.
local real dmg=50.+(GetHeroLevel(Nagato_c)*10)
local real offset=25.
call SaveAgentHandle(HH,h,0,CreateUnit(Nagato_p,0x68303048,x,y,a))
call SaveReal(HH,h,1,radius)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,rangeCur)
call SaveReal(HH,h,5,rangeMax)
call SaveReal(HH,h,6,a)
call SaveBoolean(HH,h,7,false)
call TimerStart(t,period,true,function cj_anonym__531)
set t=null
endfunction
function Nagato___AttackConditions takes nothing returns boolean
return GetUnitTypeId(GetAttacker())==heroes_rawcode[Nagato]
endfunction
function cj_anonym__532 takes nothing returns nothing
call UnitRemoveAbility(Nagato_c,0x41313143)
set Nagato___KuroiboCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Nagato___AttackActions takes nothing returns nothing
if Nagato_c==null then
set Nagato_c=GetAttacker()
set Nagato_p=GetOwningPlayer(Nagato_c)
endif
call IssueImmediateOrder(Nagato_c,"stop")
if not Nagato___KuroiboCD then
call SetUnitAnimation(Nagato_c,"Attack")
call UnitAddAbility(Nagato_c,0x41313143)
set Nagato___KuroiboCD=true
call Nagato___KuroiboCast(GetTriggerUnit())
call TimerStart(CreateTimer(),3.,false,function cj_anonym__532)
endif
endfunction
function Nagato___SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Nagato_GEDO or i==Nagato_FUTON or i==Nagato_KANCHI or i==Nagato_RINNE_TENSEI or i==Nagato_RIKUDO or i==Nagato_RIKUDO_CANCEL or i==0x41303959 or i==0x4130395A or i==0x4130574C or i==0x41304833 or i==0x41304530 or i==0x41304842 or i==0x41305730 or i==0x41304157 or i==0x41304543 or i==0x41304741 or i==0x41305658 or i==0x41303551 or i==0x41303534 or i==0x41303457
endfunction
function Nagato___SpellsActions takes nothing returns nothing
local integer i
if Nagato_c==null then
set Nagato_c=GetTriggerUnit()
set Nagato_p=GetOwningPlayer(Nagato_c)
endif
set i=GetSpellAbilityId()
if i==Nagato_GEDO then
call Nagato___GedoNoJutsuCast()
elseif i==Nagato_FUTON then
call Nagato___FutonReppushoCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Nagato_KANCHI then
call Nagato___KanchiCast()
elseif i==Nagato_RINNE_TENSEI then
call Nagato___RinneTenseiCast()
elseif i==Nagato_RIKUDO then
call Nagato___RikudoNoJutsuCast()
elseif i==Nagato_RIKUDO_CANCEL then
call UnitRemoveAbility(Nagato_c,Nagato_RIKUDO_CANCEL)
elseif i==0x41303959 then
call Nagato___KuchiyoseChameleonCast()
elseif i==0x4130395A then
call Nagato___KuchiyosePandaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x4130574C then
call Nagato___KuchiyoseBirdCast()
elseif i==0x41304833 then
call Nagato___ZofukuKuchiyoseCast()
elseif i==0x41304530 then
call Nagato___KuchiyosePainCast(GetSpellTargetUnit())
elseif i==0x41304842 then
call Nagato___FujutsuKyuinCast()
elseif i==0x41305730 then
call Nagato___KyukonNoJutsuCast(GetSpellTargetUnit())
elseif i==0x41304157 then
call Nagato___KaiwanNoHiyaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41304543 then
call Nagato___ShuraNoKoCast()
elseif i==0x41304741 then
call Nagato___MeifuNoOCast()
elseif i==0x41305658 then
call Nagato___KaifukuCast(GetSpellTargetUnit())
elseif i==0x41303551 then
call Nagato___BanshoTenninCast(GetSpellTargetUnit())
elseif i==0x41303534 then
call Nagato___ShinraTenseiCast()
elseif i==0x41303457 then
call Nagato___ChibakuTenseiCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Nagato___LearnAbility takes unit u returns nothing
if Nagato_c==null then
set Nagato_c=u
set Nagato_p=GetOwningPlayer(Nagato_c)
endif
call UnitAddAbility(Nagato_c,0x41304A54)
endfunction
function Nagato_AddAbility takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Nagato]then
call Nagato___LearnAbility(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Nagato_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
local trigger trigkeyleft=CreateTrigger()
local trigger trigkeyright=CreateTrigger()
local trigger trigkeydown=CreateTrigger()
set Nagato___trgDamage=CreateTrigger()
set Nagato___PainSelectTrig=CreateTrigger()
call DisableTrigger(Nagato___PainSelectTrig)
set Nagato___grReg=CreateGroup()
loop
call TriggerRegisterPlayerEvent(trigkeyleft,Player(i),EVENT_PLAYER_ARROW_LEFT_DOWN)
call TriggerRegisterPlayerEvent(trigkeyright,Player(i),EVENT_PLAYER_ARROW_RIGHT_DOWN)
call TriggerRegisterPlayerEvent(trigkeydown,Player(i),EVENT_PLAYER_ARROW_DOWN_DOWN)
call TriggerRegisterPlayerUnitEvent(Nagato___PainSelectTrig,Player(i),EVENT_PLAYER_UNIT_SELECTED,null)
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x4131324B,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Nagato___SpellsConditions))
call TriggerAddAction(spells,function Nagato___SpellsActions)
call TriggerAddCondition(attack,Condition(function Nagato___AttackConditions))
call TriggerAddAction(attack,function Nagato___AttackActions)
call TriggerAddCondition(Nagato___PainSelectTrig,Condition(function Nagato___PainClickConditions))
call TriggerAddAction(Nagato___PainSelectTrig,function Nagato___PainClickActions)
call TriggerAddCondition(Nagato___trgDamage,Condition(function Nagato___GetDamageConditions))
call TriggerAddAction(Nagato___trgDamage,function Nagato___GetDamageActions)
call TriggerAddCondition(trigkeyleft,Condition(function Nagato___PainKeyLeftConditions))
call TriggerAddAction(trigkeyleft,function Nagato___PainKeyLeftActions)
call TriggerAddCondition(trigkeyright,Condition(function Nagato___PainKeyRightConditions))
call TriggerAddAction(trigkeyright,function Nagato___PainKeyRightActions)
call TriggerAddCondition(trigkeydown,Condition(function Nagato___PainKeyDownConditions))
call TriggerAddAction(trigkeydown,function Nagato___PainKeyDownActions)
set trigkeyleft=null
set trigkeyright=null
set trigkeydown=null
set attack=null
set spells=null
endfunction
function Naruto__RikudoBijuModoChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Naruto_p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFFFF5000"+I2S(Naruto_bijuModeChakra)+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function Naruto_RikudoBijudamaChangeText takes nothing returns nothing
call Naruto__RikudoBijuModoChangeText(true)
endfunction
function Naruto__ChakraChangeText takes nothing returns nothing
local integer idp=GetPlayerId(Naruto_p)
local integer idu=GetUnitTypeId(udg_Hero[idp])
local string s=""
if idu==heroes_rawcode[Naruto]then
if Naruto__senninModoOn then
set s=" [|cFFA5FDA9"+I2S(Naruto__senninModoEnerugy)+"|r]"
endif
if GetUnitAbilityLevel(udg_Hero[idp],Naruto_KURAMA_MODO)>0 then
set s=s+" [|cFFFF5000"+I2S(Naruto_kuramaModeChakra)+"|r]"
endif
elseif idu==morph_rawcode[4]or idu==morph_rawcode[6]then
if Naruto__senninModoOn then
set s=" [|cFFA5FDA9"+I2S(Naruto__senninModoEnerugy)+"|r]"
endif
set s=s+" [|cFFFF5000"+I2S(Naruto_kuramaModeChakra)+"|r]"
endif
if s!=""then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+s,countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function Naruto__RikudoChoOdamaRasenShurikenDamage takes real x1,real y1 returns nothing
local real radius=600.
local real dmg=800.+GetUnitState(Naruto_c,UNIT_STATE_MANA)*.3
local unit tg
local group g=CreateGroup()
call KillDestructablesStart(x1,y1,radius/2.)
call CreateEffect(x1,y1,1.5,"-!EfRasen!-.mdx",2.)
call DestroyEffect(AddSpecialEffect("Almagest.mdx",x1,y1))
if SpecialEffectsShow then
call CreateEffect(x1,y1,2.,"NuclearExplosion.mdx",15.)
call CreateEffect(x1,y1,3.,"Wave.mdx",1.)
endif
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Naruto_p)then
call UnitDamageTarget(Naruto_c,tg,GetNinjutsuDamage(dmg,Naruto_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__533 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real offset=LoadReal(HH,h,2)
local real a1=LoadReal(HH,h,3)
local real a2=LoadReal(HH,h,4)
local integer amount=LoadInteger(HH,h,5)
if amount>0 and GetWidgetLife(Naruto_BijudamaRasenShuriken)>.405 and GetWidgetLife(Naruto_FutonChoOdamaRasenShuriken)>.405 then
call SetUnitPosition(Naruto_BijudamaRasenShuriken,GetWidgetX(Naruto_BijudamaRasenShuriken)+offset*Cos(a1*bj_DEGTORAD),GetWidgetY(Naruto_BijudamaRasenShuriken)+offset*Sin(a1*bj_DEGTORAD))
call SetUnitPosition(Naruto_FutonChoOdamaRasenShuriken,GetWidgetX(Naruto_FutonChoOdamaRasenShuriken)+offset*Cos(a2*bj_DEGTORAD),GetWidgetY(Naruto_FutonChoOdamaRasenShuriken)+offset*Sin(a2*bj_DEGTORAD))
call SaveInteger(HH,h,5,amount-1)
else
if GetWidgetLife(Naruto_BijudamaRasenShuriken)>.405 and GetWidgetLife(Naruto_FutonChoOdamaRasenShuriken)>.405 then
call Naruto__RikudoChoOdamaRasenShurikenDamage(LoadReal(HH,h,0),LoadReal(HH,h,1))
endif
call RemoveUnit(Naruto_BijudamaRasenShuriken)
call RemoveUnit(Naruto_FutonChoOdamaRasenShuriken)
set Naruto_BijudamaRasenShuriken=null
set Naruto_FutonChoOdamaRasenShuriken=null
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Naruto__RikudoChoOdamaRasenShurikenMovement takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Naruto__bijuMode)
local real y=GetWidgetY(Naruto__bijuMode)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real a1=bj_RADTODEG*Atan2(y1-GetWidgetY(Naruto_BijudamaRasenShuriken),x1-GetWidgetX(Naruto_BijudamaRasenShuriken))
local real a2=bj_RADTODEG*Atan2(y1-GetWidgetY(Naruto_FutonChoOdamaRasenShuriken),x1-GetWidgetX(Naruto_FutonChoOdamaRasenShuriken))
local real period=.025
local real speed=1200.
local real offset=speed*period
local integer amount=R2I(distance/offset)
set Naruto__logCastRikudoChoOdamaRasenShuriken=false
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,a1)
call SaveReal(HH,h,4,a2)
call SaveInteger(HH,h,5,amount)
call TimerStart(t,period,true,function cj_anonym__533)
set t=null
endfunction
function cj_anonym__534 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Naruto__RikudoChoOdamaRasenShurikenMovement(LoadReal(HH,h,0),LoadReal(HH,h,1))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Naruto__RikudoChoOdamaRasenShurikenStart takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cast_time=.234
call SetUnitAnimation(Naruto__bijuMode,"Spell Five")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,cast_time,false,function cj_anonym__534)
set t=null
endfunction
function cj_anonym__535 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Naruto__RikudoChoOdamaRasenShurikenStart(LoadReal(HH,h,0),LoadReal(HH,h,1))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Naruto__RikudoChoOdamaRasenShurikenCreate takes real x1,real y1,real mp returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Naruto__bijuMode)
local real yHero=GetWidgetY(Naruto__bijuMode)
local real offset_start=200.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x_start=xHero+offset_start*Cos((a+90.)*bj_DEGTORAD)
local real y_start=yHero+offset_start*Sin((a+90.)*bj_DEGTORAD)
local real cast_time=2.
set Naruto_BijudamaRasenShuriken=CreateUnit(Naruto_p,0x6E30345A,x_start,y_start,a)
set x_start=xHero+offset_start*Cos((a-90.)*bj_DEGTORAD)
set y_start=yHero+offset_start*Sin((a-90.)*bj_DEGTORAD)
set Naruto_FutonChoOdamaRasenShuriken=CreateUnit(Naruto_p,0x6E303530,x_start,y_start,a)
call SetUnitState(Naruto_c,UNIT_STATE_MANA,GetUnitState(Naruto_c,UNIT_STATE_MANA)-mp)
set Naruto_bijuModeChakra=R2I(GetUnitState(Naruto_c,UNIT_STATE_MANA))
call Naruto__RikudoBijuModoChangeText(true)
set Naruto__logCastRikudoChoOdamaRasenShuriken=true
call Sound("Naruto Rikudo Cho Odama Rasen Shuriken.mp3")
call SetUnitFacing(Naruto__bijuMode,a)
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,cast_time,false,function cj_anonym__535)
set t=null
endfunction
function Naruto__RikudoChoOdamaRasenShurikenCast takes real x1,real y1 returns nothing
local real mp=800.
if Naruto_bijuModeChakra>mp then
call Naruto__RikudoChoOdamaRasenShurikenCreate(x1,y1,mp)
else
call RecastSkills(Naruto__bijuMode,Naruto_RIKUDO_CHO_ODAMA_RASEN_SHURIKEN,1,0.)
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,1.,"|cFFFFCC00Мало чакры! Техника не сработала!|r")
endif
endfunction
function cj_anonym__536 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real chakra_burn=LoadReal(HH,h,0)
local real x=GetWidgetX(Naruto__bijuMode)
local real y=GetWidgetY(Naruto__bijuMode)
local real f=GetUnitFacing(Naruto__bijuMode)
if GetWidgetLife(Naruto__bijuMode)>.405 and Naruto_bijuModeChakra>0 and GetUnitAbilityLevel(Naruto__bijuMode,0x41304852)>0 then
if not Naruto__logCastRikudoChoOdamaRasenShuriken then
call SetUnitPosition(Naruto_c,x,y)
call SetUnitFacing(Naruto_c,f)
call SetUnitState(Naruto_c,UNIT_STATE_MANA,GetUnitState(Naruto_c,UNIT_STATE_MANA)-chakra_burn)
set Naruto_bijuModeChakra=R2I(GetUnitState(Naruto_c,UNIT_STATE_MANA))
call Naruto__RikudoBijuModoChangeText(true)
endif
else
call RemoveUnit(Naruto__bijuMode)
set Naruto__bijuMode=null
set Naruto_bijuModeChakra=0
set udg_Hero[GetPlayerId(Naruto_p)]=Naruto_c
call Naruto__RikudoBijuModoChangeText(false)
call ShowUnit(Naruto_c,true)
call SetUnitFlyHeight(Naruto_c,GetUnitDefaultFlyHeight(Naruto_c),900.)
call SetUnitInvulnerable(Naruto_c,false)
call SetUnitPathing(Naruto_c,true)
call PauseUnit(Naruto_c,false)
if GetLocalPlayer()==Naruto_p then
call ClearSelection()
call SelectUnit(Naruto_c,true)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Naruto__RikudoBijuModoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.01
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real f=GetUnitFacing(Naruto_c)
local real chakra_burn=100.*period
set Naruto__bijuMode=CreateUnit(Naruto_p,morph_rawcode[6],x,y,f)
set Naruto_bijuModeChakra=R2I(GetUnitState(Naruto_c,UNIT_STATE_MANA))
call Sound("Naruto Biju Modo Cast.mp3")
call PauseUnit(Naruto_c,true)
call SetUnitInvulnerable(Naruto_c,true)
call SetUnitPathing(Naruto_c,false)
call SetUnitTypeFlying(Naruto_c)
call SetUnitFlyHeight(Naruto_c,600.,600.)
call ShowUnit(Naruto_c,false)
call UnitAddAbility(Naruto__bijuMode,Naruto_RIKUDO_SENNIN_MODO_SPELLBOOK)
call UnitAddAbility(Naruto__bijuMode,0x41304942)
call UnitAddAbility(Naruto__bijuMode,Naruto_RIKUDO_CHO_ODAMA_RASEN_SHURIKEN)
if GetLocalPlayer()==Naruto_p then
call ClearSelection()
call SelectUnit(Naruto__bijuMode,true)
endif
set udg_Hero[GetPlayerId(Naruto_p)]=Naruto__bijuMode
call Naruto__RikudoBijuModoChangeText(true)
call SaveReal(HH,h,0,chakra_burn)
call TimerStart(t,period,true,function cj_anonym__536)
set t=null
endfunction
function cj_anonym__537 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real debuff_time=LoadReal(HH,h,3)
if GetWidgetLife(tu)>.405 and debuff_time>0.then
call UnitDamageTarget(Naruto_c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call SaveReal(HH,h,3,debuff_time-period)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Naruto__SenpoChoBijuRasenShurikenDebuffYoton takes unit tu,real debuff_time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
local real dmg=45.*period
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,debuff_time)
call TimerStart(t,period,true,function cj_anonym__537)
set t=null
endfunction
function Naruto__SenpoChoBijuRasenShurikenDebuff takes unit tu,integer number returns nothing
local real debuff_time=5.
if number==1 then
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E303042,GetWidgetX(tu),GetWidgetY(tu),GetUnitFacing(tu)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313737)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
elseif number==2 then
call UnitTempSpell(tu,0x41304755,0,debuff_time,0,false)
elseif number==3 then
call UnitTempSpell(tu,0x41304932,0x42303646,debuff_time,0,false)
elseif number==4 then
call Naruto__SenpoChoBijuRasenShurikenDebuffYoton(tu,debuff_time)
elseif number==5 then
call UnitTempSpell(tu,0x41313747,0,debuff_time,0,false)
elseif number==6 then
call UnitTempSpell(tu,0x41304851,0,debuff_time,0,false)
elseif number==7 then
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E303042,GetWidgetX(tu),GetWidgetY(tu),GetUnitFacing(tu)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313030)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
elseif number==8 then
call UnitTempSpell(tu,0x4130435A,0,debuff_time,0,false)
endif
endfunction
function Naruto__SenpoChoBijuRasenShurikenDamage takes real x,real y,integer number returns nothing
local real radius=600.
local real dmg=600.
local unit tg
local group g=CreateGroup()
if SpecialEffectsShow then
if GetRandomInt(1,2)==1 then
call CreateEffect(x,y,1.75,"Boom.mdx",2.)
else
call CreateEffect(x,y,1.75,"Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl.mdl",2.)
endif
if GetRandomInt(1,2)==1 then
call CreateEffect(x,y,1.75,"AerialExplosionV3.mdx",.01)
else
call CreateEffect(x,y,1.75,"NewMassiveEX.mdx",5.)
endif
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Naruto_p)then
call UnitDamageTarget(Naruto_c,tg,GetNinjutsuDamage(dmg,Naruto_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
if GetRandomInt(1,3)==1 then
if number!=9 then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Naruto_p)then
call Naruto__SenpoChoBijuRasenShurikenDebuff(tg,number)
endif
call GroupRemoveUnit(g,tg)
endloop
else
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E303042,x,y,0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313748)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call IssueTargetOrder(bj_lastCreatedUnit,"silence",bj_lastCreatedUnit)
endif
endif
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__538 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,3)
local real x1=LoadReal(HH,h,4)
local real y1=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance>offset then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
call DestroyEffect(LoadEffectHandle(HH,h,2))
call RemoveUnit(d)
call Naruto__SenpoChoBijuRasenShurikenDamage(x,y,LoadInteger(HH,h,0))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Naruto__SenpoChoBijuRasenShurikenMovement takes unit caster,integer number,string s_eff,real x1_start,real y1_start returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(caster)
local real y=GetWidgetY(caster)
local real offset_random=GetRandomReal(1.,300.)
local real degree_random=GetRandomReal(1.,360.)
local real x1=x1_start+offset_random*Cos(degree_random*bj_DEGTORAD)
local real y1=y1_start+offset_random*Sin(degree_random*bj_DEGTORAD)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1200.
local real period=.025
local real offset=speed*period
local unit d=CreateUnit(Naruto_p,0x6E303046,x,y,a)
local real cur_height=GetUnitFlyHeight(caster)
local real need_height=0.
local real time_height=distance/speed
local real speed_height=cur_height/time_height
call SetUnitFlyHeight(d,cur_height,0.)
call SetUnitFlyHeight(d,need_height,speed_height)
call SaveInteger(HH,h,0,number)
call SaveAgentHandle(HH,h,1,d)
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget(s_eff,d,"chest"))
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,x1)
call SaveReal(HH,h,5,y1)
call SaveReal(HH,h,6,a)
call TimerStart(t,period,true,function cj_anonym__538)
set d=null
set t=null
endfunction
function cj_anonym__541 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit caster=LoadUnitHandle(HH,h,0)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call DestroyEffect(LoadEffectHandle(HH,h,2))
call SetUnitFlyHeight(caster,GetUnitDefaultFlyHeight(caster),500.)
call PauseUnit(caster,false)
call SetUnitPathing(caster,true)
call Naruto__SenpoChoBijuRasenShurikenMovement(caster,LoadInteger(HH,h,3),LoadStr(HH,h,4),LoadReal(HH,h,5),LoadReal(HH,h,6))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set caster=null
set t=null
endfunction
function cj_anonym__540 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit caster=LoadUnitHandle(HH,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real add_time=LoadReal(HH,h,7)
call SetUnitTimeScale(caster,1.)
call SaveAgentHandle(HH,h1,0,caster)
call SaveAgentHandle(HH,h1,1,LoadEffectHandle(HH,h,1))
call SaveAgentHandle(HH,h1,2,LoadEffectHandle(HH,h,2))
call SaveInteger(HH,h1,3,LoadInteger(HH,h,3))
call SaveStr(HH,h1,4,LoadStr(HH,h,4))
call SaveReal(HH,h1,5,LoadReal(HH,h,5))
call SaveReal(HH,h1,6,LoadReal(HH,h,6))
call TimerStart(t1,add_time,false,function cj_anonym__541)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set caster=null
set t=null
set t1=null
endfunction
function cj_anonym__539 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit caster=LoadUnitHandle(HH,h,0)
local real add_time=LoadReal(HH,h,5)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real wait_time=2.
call SetUnitAnimation(caster,"Spell Throw")
call SetUnitTimeScale(caster,.1)
call SaveAgentHandle(HH,h1,0,caster)
call SaveAgentHandle(HH,h1,1,LoadEffectHandle(HH,h,1))
call SaveAgentHandle(HH,h1,2,LoadEffectHandle(HH,h,2))
call SaveInteger(HH,h1,3,LoadInteger(HH,h,3))
call SaveStr(HH,h1,4,LoadStr(HH,h,4))
call SaveReal(HH,h1,5,LoadReal(HH,h,6))
call SaveReal(HH,h1,6,LoadReal(HH,h,7))
call SaveReal(HH,h1,7,add_time)
call TimerStart(t1,wait_time,false,function cj_anonym__540)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set caster=null
set t=null
set t1=null
endfunction
function Naruto__SenpoChoBijuRasenShurikenStart takes unit caster,real need_height,integer number,string s_eff,real add_time,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real speed_height=500.
local real time_height=need_height/speed_height
local effect e1=AddSpecialEffectTarget("fdlxw jhxcom_2000.mdx",caster,"hand left")
local effect e2=AddSpecialEffectTarget(s_eff,caster,"hand left")
call PauseUnit(caster,true)
call SetUnitPathing(caster,false)
call SetUnitTypeFlying(caster)
call SetUnitFlyHeight(caster,need_height,speed_height)
call SaveAgentHandle(HH,h,0,caster)
call SaveAgentHandle(HH,h,1,e1)
call SaveAgentHandle(HH,h,2,e2)
call SaveInteger(HH,h,3,number)
call SaveStr(HH,h,4,s_eff)
call SaveReal(HH,h,5,add_time)
call SaveReal(HH,h,6,x1)
call SaveReal(HH,h,7,y1)
call TimerStart(t,time_height,false,function cj_anonym__539)
set e1=null
set e2=null
set t=null
endfunction
function Naruto__SenpoChoBijuRasenShurikenCast takes real x1,real y1 returns nothing
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real x2
local real y2
local real x3
local real y3
local real need_height
local real add_time=.6
local group g
local unit tg
local integer number=Naruto__bunshinNumber
local string s_eff
call Sound("Naruto Senpo Cho Biju Rasen Shuriken.mp3")
call SetUnitFacing(Naruto_c,a)
if number>0 then
set g=CreateGroup()
call GroupEnumUnitsOfPlayer(g,Naruto_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or number==0
if not IsUnitIllusion(tg)and GetUnitTypeId(tg)==0x4530304A then
if number==1 then
set x2=x+200.*Cos((a+90.)*bj_DEGTORAD)
set y2=y+200.*Sin((a+90.)*bj_DEGTORAD)
set x3=x2+100.*Cos((a+45.)*bj_DEGTORAD)
set y3=y2+100.*Sin((a+45.)*bj_DEGTORAD)
set need_height=500.
set s_eff="Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl"
elseif number==2 then
set x2=x+200.*Cos((a+90.)*bj_DEGTORAD)
set y2=y+200.*Sin((a+90.)*bj_DEGTORAD)
set x3=x2+100.*Cos((a+135.)*bj_DEGTORAD)
set y3=y2+100.*Sin((a+135.)*bj_DEGTORAD)
set need_height=250.
set s_eff="Doodads\\Cinematic\\TownBurningFireEmitterBlue\\TownBurningFireEmitterBlue.mdl"
elseif number==3 then
set x2=x+200.*Cos((a+90.)*bj_DEGTORAD)
set y2=y+200.*Sin((a+90.)*bj_DEGTORAD)
set x3=x2+100.*Cos((a+225.)*bj_DEGTORAD)
set y3=y2+100.*Sin((a+225.)*bj_DEGTORAD)
set need_height=500.
set s_eff="s_WateryAura.mdx"
elseif number==4 then
set x2=x+200.*Cos((a+90.)*bj_DEGTORAD)
set y2=y+200.*Sin((a+90.)*bj_DEGTORAD)
set x3=x2+100.*Cos((a+315.)*bj_DEGTORAD)
set y3=y2+100.*Sin((a+315.)*bj_DEGTORAD)
set need_height=250.
set s_eff="Environment\\LargeBuildingFire\\LargeBuildingFire1.mdl"
elseif number==5 then
set x2=x+200.*Cos((a-90.)*bj_DEGTORAD)
set y2=y+200.*Sin((a-90.)*bj_DEGTORAD)
set x3=x2+100.*Cos((a+45.)*bj_DEGTORAD)
set y3=y2+100.*Sin((a+45.)*bj_DEGTORAD)
set need_height=500.
set s_eff="Par.mdx"
elseif number==6 then
set x2=x+200.*Cos((a-90.)*bj_DEGTORAD)
set y2=y+200.*Sin((a-90.)*bj_DEGTORAD)
set x3=x2+100.*Cos((a+135.)*bj_DEGTORAD)
set y3=y2+100.*Sin((a+135.)*bj_DEGTORAD)
set need_height=250.
set s_eff="Abilities\\Spells\\Other\\AcidBomb\\BottleImpact.mdl"
elseif number==7 then
set x2=x+200.*Cos((a-90.)*bj_DEGTORAD)
set y2=y+200.*Sin((a-90.)*bj_DEGTORAD)
set x3=x2+100.*Cos((a+225.)*bj_DEGTORAD)
set y3=y2+100.*Sin((a+225.)*bj_DEGTORAD)
set need_height=500.
set s_eff="Abilities\\Spells\\NightElf\\FaerieDragonInvis\\FaerieDragon_Invis.mdl"
elseif number==8 then
set x2=x+200.*Cos((a-90.)*bj_DEGTORAD)
set y2=y+200.*Sin((a-90.)*bj_DEGTORAD)
set x3=x2+100.*Cos((a+315.)*bj_DEGTORAD)
set y3=y2+100.*Sin((a+315.)*bj_DEGTORAD)
set need_height=250.
set s_eff="Abilities\\Weapons\\AvengerMissile\\AvengerMissile.mdl"
endif
call DestroyEffect(AddSpecialEffect("dim.MDx",GetWidgetX(tg),GetWidgetY(tg)))
call SetUnitPosition(tg,x3,y3)
call DestroyEffect(AddSpecialEffect("dim.MDx",x3,y3))
call SetUnitFacing(tg,a)
call Naruto__SenpoChoBijuRasenShurikenStart(tg,need_height,number,s_eff,add_time,x1,y1)
set number=number-1
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
endif
set need_height=375.
set s_eff=""
call Naruto__SenpoChoBijuRasenShurikenStart(Naruto_c,need_height,number,s_eff,add_time,x1,y1)
set tg=null
set g=null
endfunction
function Naruto__RikudoSenninModoJump takes real x1,real y1 returns nothing
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real needChakra=50.
if GetUnitState(Naruto_c,UNIT_STATE_MANA)>=needChakra and distance>10.and distance<=600.then
call Sound3D(Naruto_c,"Naruto Rikudo Sennin Modo Jump.mp3")
call SetUnitState(Naruto_c,UNIT_STATE_MANA,GetUnitState(Naruto_c,UNIT_STATE_MANA)-needChakra)
call DestroyEffect(AddSpecialEffect("Yellow_Flash2.mdx",x,y))
call SetUnitPosition(Naruto_c,x1,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
else
if GetUnitState(Naruto_c,UNIT_STATE_MANA)<needChakra then
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,2.,"|cFFFFCC00Недостаточно Чакры!|r")
elseif distance<=10.then
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,2.,"|cFFFFCC00Слишком короткое расстояние!|r")
elseif distance>600.then
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,2.,"|cFFFFCC00Слишком большое расстояние!|r")
endif
endif
endfunction
function Naruto__RikudoSenninModoOrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),Naruto_RIKUDO_SENNIN_MODO)>0
endfunction
function cj_anonym__542 takes nothing returns nothing
set Naruto__RikudoSenninModoOrderNumber=0
call DestroyTimer(GetExpiredTimer())
endfunction
function Naruto__RikudoSenninModoOrderActions takes nothing returns nothing
set Naruto__RikudoSenninModoOrderNumber=Naruto__RikudoSenninModoOrderNumber+1
if Naruto__RikudoSenninModoOrderNumber==1 then
call TimerStart(CreateTimer(),.25,false,function cj_anonym__542)
elseif Naruto__RikudoSenninModoOrderNumber==2 then
call Naruto__RikudoSenninModoJump(GetOrderPointX(),GetOrderPointY())
endif
endfunction
function Naruto__RikudoSenninModoRegeneration takes nothing returns nothing
local real hp=GetUnitState(Naruto_c,UNIT_STATE_MAX_LIFE)*.001
local unit tg
local boolean log=false
call GroupEnumUnitsInRange(bj_lastCreatedGroup,GetWidgetX(Naruto_c),GetWidgetY(Naruto_c),600.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or log
if IsUnitEnemy(tg,Naruto_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitVisible(tg,Naruto_p)then
set log=true
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
if not log then
call SetWidgetLife(Naruto_c,GetWidgetLife(Naruto_c)+hp)
endif
set tg=null
endfunction
function cj_anonym__543 takes nothing returns nothing
if GetWidgetLife(Naruto_c)>.405 and GetWidgetLife(Naruto_c)<GetUnitState(Naruto_c,UNIT_STATE_MAX_LIFE)then
call Naruto__RikudoSenninModoRegeneration()
endif
endfunction
function Naruto_AddAbility_RikudoSenninModoStart takes nothing returns nothing
set Naruto_kuramaModeChakra=0
call Naruto__ChakraChangeText()
call Naruto__RikudoBijuModoChangeText(false)
call TimerStart(CreateTimer(),1.,true,function cj_anonym__543)
endfunction
function Naruto__RikudoSenninModoCast takes unit tu returns nothing
local real xx=.25
call Sound("Naruto Rikudo Sennin Modo Cast.mp3")
call SetWidgetLife(tu,GetWidgetLife(tu)+GetUnitState(tu,UNIT_STATE_MAX_LIFE)*xx)
call DestroyEffect(AddSpecialEffectTarget("Healing Surge.mdx",tu,"chest"))
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E303042,GetWidgetX(tu),GetWidgetY(tu),GetUnitFacing(tu)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313745)
call IssueTargetOrder(bj_lastCreatedUnit,"purge",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endfunction
function Naruto__RikudoKageBunshinDestroy takes unit d returns nothing
if LoadBoolean(HH,GetHandleId(d),2)and Naruto__GudodamaKageBunshinOn then
call DestroyEffect(Naruto_EffGudodama)
set Naruto_EffGudodama=AddSpecialEffectTarget("Naruto Rikudo Gudodama.mdx",Naruto_c,"chest")
set Naruto__GudodamaKageBunshinOn=false
endif
call Sound("Bunshin Poff.wav")
set Naruto__bunshinNumber=Naruto__bunshinNumber-1
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(d),GetWidgetY(d)))
call FlushChildHashtable(HH,GetHandleId(d))
call RemoveUnit(d)
endfunction
function Naruto__RikudoKageBunshinCancel takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Naruto_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if not IsUnitIllusion(tg)and GetUnitTypeId(tg)==0x4530304A then
call Naruto__RikudoKageBunshinDestroy(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Naruto__RikudoKageBunshinSetChakraLevel takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Naruto_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if not IsUnitIllusion(tg)and GetUnitTypeId(tg)==0x4530304A then
call SetUnitState(tg,UNIT_STATE_MANA,GetUnitState(tg,UNIT_STATE_MANA)-(Naruto__bunshinNumber*5.)*.1)
if GetUnitState(tg,UNIT_STATE_MANA)<=0.or GetUnitAbilityLevel(tg,0x41304730)==0 or GetUnitAbilityLevel(Naruto_c,0x41304730)==0 then
call Naruto__RikudoKageBunshinDestroy(tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__544 takes nothing returns nothing
call SetUnitState(Naruto_c,UNIT_STATE_MANA,GetUnitState(Naruto_c,UNIT_STATE_MANA)-(Naruto__bunshinNumber*5.)*.1)
call Naruto__RikudoKageBunshinSetChakraLevel()
if GetWidgetLife(Naruto_c)<.405 or GetUnitState(Naruto_c,UNIT_STATE_MANA)<=0.or Naruto__bunshinNumber==0 then
if Naruto__bunshinNumber>0 then
call Naruto__RikudoKageBunshinCancel()
endif
set Naruto__bunshinNumber=0
call UnitRemoveAbility(Naruto_c,0x41304730)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_RIKUDO_KAGE_BUNSHIN,true)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Naruto__RikudoKageBunshinStartTimer takes nothing returns nothing
call Sound("Naruto_Kage_Bunshin.mp3")
call SetPlayerAbilityAvailable(Naruto_p,Naruto_RIKUDO_KAGE_BUNSHIN,false)
call UnitAddAbility(Naruto_c,0x41304730)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__544)
endfunction
function Naruto__RikudoKageBunshinCast takes nothing returns nothing
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real f=GetUnitFacing(Naruto_c)
local integer xp=GetHeroXP(Naruto_c)
local real life=GetWidgetLife(Naruto_c)
local real maxlife=GetUnitState(Naruto_c,UNIT_STATE_MAX_LIFE)*.1
local real mana=GetUnitState(Naruto_c,UNIT_STATE_MANA)
local integer number=8
set Naruto__bunshinNumber=number
loop
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x4530304A,x,y,f)
call TriggerRegisterUnitEvent(Naruto__tajukagebunshingetdmg,bj_lastCreatedUnit,EVENT_UNIT_DAMAGED)
call SetHeroXP(bj_lastCreatedUnit,xp,false)
call SetWidgetLife(bj_lastCreatedUnit,life)
call SetUnitState(bj_lastCreatedUnit,UNIT_STATE_MANA,mana)
call SuspendHeroXP(bj_lastCreatedUnit,true)
call SaveReal(HH,GetHandleId(bj_lastCreatedUnit),0,maxlife)
call SaveBoolean(HH,GetHandleId(bj_lastCreatedUnit),2,false)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(bj_lastCreatedUnit),GetWidgetY(bj_lastCreatedUnit)))
call UnitAddAbility(bj_lastCreatedUnit,0x41304730)
call UnitAddAbility(bj_lastCreatedUnit,Naruto_RIKUDO_SENNIN_MODO_SPELLBOOK)
set number=number-1
exitwhen number==0
endloop
call Naruto__RikudoKageBunshinStartTimer()
endfunction
function cj_anonym__545 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real range=LoadReal(HH,h,3)
local real radius=LoadReal(HH,h,4)
local real dmg=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local real time_stun=LoadReal(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local unit tg
if range>offset then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or range==offset
if IsUnitNeedClear(tg,Naruto_p)then
call Sound("Naruto Gudodama Pintle Damage.mp3")
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl",tg,"chest"))
call UnitDamageTarget(Naruto_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
if GetWidgetLife(tg)>.405 then
call GetStun(tg,time_stun)
endif
set range=offset
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,3,range-offset)
else
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set d=null
set tg=null
set t=null
endfunction
function Naruto__GudodamaPintleCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Naruto_c)
local real yHero=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real period=.025
local real dmg=200.
local real speed=750.
local real offset=speed*period
local real radius=100.
local real range=600.
local real time_stun=2.5
call Sound("Naruto Gudodama Pintle Cast.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Naruto_p,0x6E303459,x,y,a))
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,range)
call SaveReal(HH,h,4,radius)
call SaveReal(HH,h,5,dmg)
call SaveReal(HH,h,6,a)
call SaveReal(HH,h,7,time_stun)
call TimerStart(t,period,true,function cj_anonym__545)
set t=null
endfunction
function cj_anonym__546 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
call UnitRemoveAbility(tu,0x41304942)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Naruto__GudodamaPlatformCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=10.
local real need_height=300.
local real speed_height=450.
call UnitAddAbility(tu,0x41304942)
call SetUnitFlyHeight(tu,need_height,speed_height)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Naruto Rikudo Gudodama Platform.mdx",tu,"origin"))
call TimerStart(t,time,false,function cj_anonym__546)
set t=null
endfunction
function Naruto__GudodamaGetCast takes unit tu returns nothing
call Sound3D(tu,"Naruto Gudodama Bunshin.mp3")
call DestroyEffect(Naruto_EffGudodama)
set Naruto_EffGudodama=AddSpecialEffectTarget("Naruto Rikudo Gudodama.mdx",tu,"chest")
set Naruto__GudodamaKageBunshinOn=true
call SaveBoolean(HH,GetHandleId(tu),2,true)
endfunction
function Naruto__GudodamaDefenseCast takes nothing returns nothing
local real buff_time=5.
call Sound("Naruto Gudodama Pintle Self.mp3")
call UnitTempSpell(Naruto_c,Naruto_GUDODAMA_PINTLE_SPELL,0x42303642,buff_time,0,false)
endfunction
function Naruto__GudodamaCast takes unit tu returns nothing
if IsUnitAlly(tu,Naruto_p)then
if tu==Naruto_c then
call Naruto__GudodamaDefenseCast()
elseif GetUnitTypeId(tu)==0x4530304A then
call Naruto__GudodamaGetCast(tu)
else
call Naruto__GudodamaPlatformCast(tu)
endif
else
call Naruto__GudodamaPintleCast(tu)
endif
endfunction
function Naruto_BijudamaChangeText takes nothing returns nothing
call Naruto__ChakraChangeText()
endfunction
function Naruto_ChakraFun takes nothing returns nothing
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra+10000
call Naruto__ChakraChangeText()
endfunction
function cj_anonym__549 takes nothing returns nothing
call CameraSetTargetNoise(0.,0.)
call CameraSetSourceNoise(0.,0.)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__548 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local integer alphaStep=LoadInteger(HH,h,1)
local integer alpha=LoadInteger(HH,h,2)
local real sizeStep=LoadReal(HH,h,3)
local real size=LoadReal(HH,h,4)
if alpha>0 then
call SetUnitVertexColor(u,255,255,255,alpha)
call SetUnitScale(u,size,size,size)
call SaveInteger(HH,h,2,alpha-alphaStep)
call SaveReal(HH,h,4,size+sizeStep)
else
call RemoveUnit(u)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function cj_anonym__547 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real period=.025
local integer alphaStep=5
local integer alpha=255-alphaStep
local real sizeStep=.125
local real size=2.4+sizeStep
local real timeShake=1.275
local timer t1
local integer h1
if GetWidgetLife(tu)>.405 then
set t1=CreateTimer()
set h1=GetHandleId(t1)
call CreateEffect(x,y,.9,"-!EfRasen!-2.mdx",2.)
call CreateEffect(x,y,1.5,"Energy Release.mdx",2.)
call DestroyEffect(AddSpecialEffect("Blue Shockwave 2.mdx",x,y))
call SaveAgentHandle(HH,h1,0,CreateUnit(Naruto_p,0x68303152,x,y,0.))
call SaveInteger(HH,h1,1,alphaStep)
call SaveInteger(HH,h1,2,alpha)
call SaveReal(HH,h1,3,sizeStep)
call SaveReal(HH,h1,4,size)
call TimerStart(t1,period,true,function cj_anonym__548)
endif
call CameraSetTargetNoiseEx(20.,5.*Pow(10.,3.),true)
call CameraSetSourceNoiseEx(20.,5.*Pow(10.,3.),true)
call TimerStart(CreateTimer(),timeShake,false,function cj_anonym__549)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
set t1=null
endfunction
function Naruto__RasenganKnockback takes unit tu,real timeKnock returns nothing
local timer t=CreateTimer()
call SaveAgentHandle(HH,GetHandleId(t),0,tu)
call TimerStart(t,timeKnock,false,function cj_anonym__547)
set t=null
endfunction
function cj_anonym__550 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=Naruto_rasenganDamage
local real timeDebuff=4.
local real distance=1000.
local real timeKnock=1.
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
if not Naruto__kuramaModeOn then
call DestroyEffect(Naruto__rasenganEff)
call PauseUnit(Naruto_c,false)
else
set dmg=300.+GetHeroLevel(Naruto_c)*30.
endif
call CreateEffect(x1,y1,1.75,"Wave.mdx",1.)
call CreateEffect(x1,y1,1.5,"IceNova.mdx",1.)
call CreateEffect(x1,y1,.75,"-!EfRasen!-.mdx",2.)
call KnockBackUnitEf(tu,distance,timeKnock,a,MainPeriod,7,false)
call UnitDamageTarget(Naruto_c,tu,GetNinjutsuDamage(dmg,Naruto_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x4130524E,0x42303048,timeDebuff,0,false)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Naruto__RasenganStrike takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=.4
if not Naruto__kuramaModeOn then
call Sound("Naruto_Rassengan.mp3")
call PauseUnit(Naruto_c,true)
call SetUnitAnimation(Naruto_c,"Spell throw two")
endif
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,time,false,function cj_anonym__550)
set t=null
endfunction
function Naruto__RasenganMainJutsuTurnOn takes nothing returns nothing
call SetPlayerAbilityAvailable(Naruto_p,0x41304132,false)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KAGE_BUNSHIN,true)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_RASENGAN,true)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KUCHIYOSE,true)
if not Naruto__senninModoOn then
call SetPlayerAbilityAvailable(Naruto_p,Naruto_SENNIN_MODO,true)
endif
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KURAMA_MODO,true)
set Naruto__rasenganLog=false
endfunction
function Naruto__AvailabilityMainJutsu takes boolean log returns nothing
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KAGE_BUNSHIN,log)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_RASENGAN,log)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KUCHIYOSE,log)
if log then
if not Naruto__senninModoOn then
call SetPlayerAbilityAvailable(Naruto_p,Naruto_SENNIN_MODO,log)
endif
elseif not log then
call SetPlayerAbilityAvailable(Naruto_p,Naruto_SENNIN_MODO,log)
endif
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KURAMA_MODO,log)
endfunction
function Naruto__KageBunshinReturnMainJutsu takes nothing returns nothing
call UnitRemoveAbility(Naruto_c,0x42303439)
call SetPlayerAbilityAvailable(Naruto_p,0x41303436,false)
call SetPlayerAbilityAvailable(Naruto_p,0x41313148,false)
call SetPlayerAbilityAvailable(Naruto_p,0x41304849,false)
call SetPlayerAbilityAvailable(Naruto_p,0x41304D59,false)
call SetPlayerAbilityAvailable(Naruto_p,0x41303948,false)
call Naruto__AvailabilityMainJutsu(true)
endfunction
function Naruto__TajuKageBunshinDestroy takes unit d returns nothing
if Naruto__bunshinNumber==1 and Naruto__haremOn then
set Naruto__haremOn=false
call Sound("Naruto Harem no Jutsu Over.mp3")
else
call Sound("Bunshin Poff.wav")
endif
set Naruto__bunshinNumber=Naruto__bunshinNumber-1
if Naruto__senninModoOn and GetUnitAbilityLevel(d,0x41305939)==0 then
set Naruto__senninModoBunshinCur=Naruto__senninModoBunshinCur-1
endif
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(d),GetWidgetY(d)))
if LoadUnitHandle(HH,GetHandleId(d),1)!=null then
call RemoveUnit(LoadUnitHandle(HH,GetHandleId(d),1))
endif
call FlushChildHashtable(HH,GetHandleId(d))
call RemoveUnit(d)
endfunction
function Naruto__TajuKageBunshinCancel takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Naruto_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if not IsUnitIllusion(tg)and GetUnitTypeId(tg)==0x45303039 then
call Naruto__TajuKageBunshinDestroy(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Naruto__TajuKageBunshinSetChakraLevel takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Naruto_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if not IsUnitIllusion(tg)and GetUnitTypeId(tg)==0x45303039 then
call SetUnitState(tg,UNIT_STATE_MANA,GetUnitState(tg,UNIT_STATE_MANA)-(Naruto__bunshinNumber*5.)*.1)
if GetUnitState(tg,UNIT_STATE_MANA)<=0.or GetUnitAbilityLevel(tg,0x41304730)==0 then
call Naruto__TajuKageBunshinDestroy(tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__551 takes nothing returns nothing
call SetUnitState(Naruto_c,UNIT_STATE_MANA,GetUnitState(Naruto_c,UNIT_STATE_MANA)-(Naruto__bunshinNumber*5.)*.1)
call Naruto__TajuKageBunshinSetChakraLevel()
if GetWidgetLife(Naruto_c)<.405 or GetUnitState(Naruto_c,UNIT_STATE_MANA)<=0.or Naruto__bunshinNumber==0 then
call RemoveUnit(Naruto__haremAvailability)
if Naruto__bunshinNumber>0 then
call Naruto__TajuKageBunshinCancel()
endif
call UnitRemoveAbility(Naruto_c,0x41304730)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Naruto__TajuKageBunshinStartTimer takes nothing returns nothing
set Naruto__haremAvailability=CreateUnit(Naruto_p,0x6E303254,0.,0.,0.)
call UnitAddAbility(Naruto_c,0x41304730)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__551)
endfunction
function cj_anonym__552 takes nothing returns nothing
if GetWidgetLife(Naruto__bijuMode)>.405 then
call SetUnitPosition(Naruto__kuramaMode,GetWidgetX(Naruto__bijuMode),GetWidgetY(Naruto__bijuMode))
call SetUnitFacing(Naruto__kuramaMode,GetUnitFacing(Naruto__bijuMode))
endif
if GetUnitAbilityLevel(Naruto__bijuMode,0x41304852)==0 or Naruto_kuramaModeChakra<=0 or GetWidgetLife(Naruto__bijuMode)<=.405 then
call PauseUnit(Naruto__kuramaMode,false)
call SetUnitInvulnerable(Naruto__kuramaMode,false)
call ShowUnit(Naruto__kuramaMode,true)
call RemoveUnit(Naruto__bijuMode)
set Naruto_c=Naruto__kuramaMode
if Naruto__senninModoOn then
call UnitAddAbility(Naruto_c,0x4130564A)
else
call UnitRemoveAbility(Naruto_c,0x4130564A)
endif
set udg_Hero[GetPlayerId(Naruto_p)]=Naruto_c
if GetLocalPlayer()==Naruto_p then
call ClearSelection()
call SelectUnit(Naruto_c,true)
endif
set Naruto__bijuMode=null
set Naruto__bijuModeOn=false
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Naruto__BijuModoCast takes nothing returns nothing
call Sound("Naruto Biju Modo Cast.mp3")
set Naruto__bijuModeOn=true
call PauseUnit(Naruto__kuramaMode,true)
call SetUnitInvulnerable(Naruto__kuramaMode,true)
call ShowUnit(Naruto__kuramaMode,false)
set Naruto__bijuMode=CreateUnit(Naruto_p,morph_rawcode[6],GetWidgetX(Naruto__kuramaMode),GetWidgetY(Naruto__kuramaMode),GetUnitFacing(Naruto__kuramaMode))
set Naruto_c=Naruto__bijuMode
set udg_Hero[GetPlayerId(Naruto_p)]=Naruto_c
if GetUnitAbilityLevel(Naruto__kuramaMode,Naruto_SENNIN_MODO)>0 then
call UnitAddAbility(Naruto_c,Naruto_SENNIN_MODO)
if GetUnitAbilityLevel(Naruto__kuramaMode,0x4130564A)>0 then
call UnitAddAbility(Naruto_c,0x4130564A)
endif
endif
if GetLocalPlayer()==Naruto_p then
call ClearSelection()
call SelectUnit(Naruto_c,true)
endif
call TimerStart(CreateTimer(),.1,true,function cj_anonym__552)
endfunction
function cj_anonym__553 takes nothing returns nothing
local group g
local unit tg
if GetUnitAbilityLevel(Naruto_c,0x42303459)>0 and Naruto_kuramaModeChakra>0 then
if Naruto_kuramaModeChakra>20 then
set g=CreateGroup()
call GroupEnumUnitsInRange(g,GetWidgetX(Naruto_c),GetWidgetY(Naruto_c),150.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or Naruto_kuramaModeChakra==0
if tg!=Naruto_c and IsUnitAlly(tg,Naruto_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_MECHANICAL)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and GetUnitAbilityLevel(tg,0x41304445)==0 then
call UnitTempSpell(tg,0x41304445,0x42303532,20.,0,false)
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-20
if Naruto_kuramaModeChakra<0 then
set Naruto_kuramaModeChakra=0
endif
call Naruto__ChakraChangeText()
call Sound("Naruto Kyubi no Chakra Act.mp3")
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
endif
else
call UnitRemoveAbility(Naruto_c,0x42303459)
call UnitRemoveAbility(Naruto_c,0x4230345A)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
set tg=null
set g=null
endfunction
function Naruto__KyubiNoChakraCast takes nothing returns nothing
call Sound("Naruto Kyubi no Chakra Cast.mp3")
call TimerStart(CreateTimer(),.25,true,function cj_anonym__553)
endfunction
function Naruto__BijuTeashiChakraHandEnemyDamage takes real x,real y,group grCheck returns nothing
local real dmg=120.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,125.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Naruto_p)and not IsUnitInGroup(tg,grCheck)then
call GroupAddUnit(grCheck,tg)
call UnitDamageTarget(Naruto_c,tg,GetNinjutsuDamage(dmg,Naruto_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=null
set g=null
endfunction
function cj_anonym__554 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group grCheck=LoadGroupHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real distanceCur=LoadReal(HH,h,3)
local real distanceMax=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=GetUnitFacing(d)
if Naruto__kuramaModeOn and distanceCur<distanceMax then
call Naruto__BijuTeashiChakraHandEnemyDamage(x,y,grCheck)
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
set distanceCur=distanceCur+offset
call UnitApplyTimedLife(CreateUnit(Naruto_p,0x6E303341,x,y,a),0x42544C46,(distanceCur/500.))
call SaveReal(HH,h,3,distanceCur)
else
call RemoveUnit(d)
call GroupClear(grCheck)
call DestroyGroup(grCheck)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set grCheck=null
set t=null
endfunction
function Naruto__BijuTeashiChakraHandEnemyCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1000.
local real period=MainPeriod
local real offset=speed*period
local real distanceMax=500.
local unit d=CreateUnit(Naruto_p,0x6E303339,x,y,a)
call SetUnitAnimation(d,"Stand")
call SetUnitAnimation(Naruto_c,"Spell throw")
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,0.)
call SaveReal(HH,h,4,distanceMax)
call TimerStart(t,period,true,function cj_anonym__554)
set d=null
set t=null
endfunction
function cj_anonym__555 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(d)
local real y1=GetWidgetY(d)
local real x2=GetWidgetX(tu)
local real y2=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y2-y,x2-x)
local real distance=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))
if Naruto__kuramaModeOn and GetWidgetLife(tu)>.405 and distance>offset then
call SetUnitPosition(d,x1-offset*Cos(a*bj_DEGTORAD),y1-offset*Sin(a*bj_DEGTORAD))
call SetUnitPosition(tu,x2-offset*Cos(a*bj_DEGTORAD),y2-offset*Sin(a*bj_DEGTORAD))
else
call SetUnitPathing(tu,true)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Naruto__BijuTeashiChakraHandAllyReturn takes unit d,unit tu,real offset returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=MainPeriod
call SetUnitPathing(tu,false)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call TimerStart(t,period,true,function cj_anonym__555)
set d=null
set t=null
endfunction
function cj_anonym__556 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real distanceMax=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if Naruto__kuramaModeOn and GetWidgetLife(tu)>.405 and distance>offset and distance<distanceMax then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call UnitApplyTimedLife(CreateUnit(Naruto_p,0x6E303341,x,y,a),0x42544C46,(distance/500.))
else
if Naruto__kuramaModeOn and GetWidgetLife(tu)>.405 and distance<=offset then
call Naruto__BijuTeashiChakraHandAllyReturn(d,tu,offset)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Naruto__BijuTeashiChakraHandAllyCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1000.
local real period=MainPeriod
local real offset=speed*period
local real distanceMax=750.
local unit d=CreateUnit(Naruto_p,0x6E303339,x,y,a)
call SetUnitAnimation(d,"Stand")
call SetUnitAnimation(Naruto_c,"Spell throw")
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,distanceMax)
call TimerStart(t,period,true,function cj_anonym__556)
set d=null
set t=null
endfunction
function Naruto__IsKuramaShieldNear takes unit u returns boolean
local real x=GetWidgetX(Naruto__kuramaShield)
local real y=GetWidgetY(Naruto__kuramaShield)
local real x1=GetWidgetX(u)
local real y1=GetWidgetY(u)
local boolean log=false
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=125.then
set log=true
endif
return log
endfunction
function Naruto__GetDamageConditions takes nothing returns boolean
return Naruto__kuramaShield!=null and GetEventDamage()>0.and GetWidgetLife(GetTriggerUnit())>.405 and Naruto__IsKuramaShieldNear(GetTriggerUnit())
endfunction
function Naruto__GetDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local real dmg=GetEventDamage()
local real life=GetWidgetLife(Naruto__kuramaShield)
if dmg<=life then
call SetWidgetLife(u,GetWidgetLife(u)+dmg)
call SetWidgetLife(Naruto__kuramaShield,GetWidgetLife(Naruto__kuramaShield)-dmg)
else
call SetWidgetLife(u,GetWidgetLife(u)+life)
call SetWidgetLife(Naruto__kuramaShield,GetWidgetLife(Naruto__kuramaShield)-life)
endif
set u=null
endfunction
function Naruto__KuramaShieldDefense takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if tg!=Naruto__kuramaShield and IsUnitAlly(tg,Naruto_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(tg,Naruto__grReg)then
call GroupAddUnit(Naruto__grReg,tg)
call TriggerRegisterUnitEvent(Naruto__trgDamage,tg,EVENT_UNIT_DAMAGED)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__557 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if Naruto__kuramaModeOn and GetWidgetLife(Naruto__kuramaShield)>.405 and time>0.then
call SetUnitPosition(Naruto__kuramaShield,GetWidgetX(Naruto_c),GetWidgetY(Naruto_c))
call SetUnitFacing(Naruto__kuramaShield,GetUnitFacing(Naruto_c))
call SaveReal(HH,h,1,time-period)
else
call DisableTrigger(Naruto__trgDamage)
call RemoveUnit(Naruto__kuramaShield)
set Naruto__kuramaShield=null
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Naruto__BijuTeashiChakraTateCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=4.
local real period=.025
set Naruto__kuramaShield=CreateUnit(Naruto_p,0x68303352,GetWidgetX(Naruto_c),GetWidgetY(Naruto_c),GetUnitFacing(Naruto_c))
call SetUnitAnimation(Naruto_c,"Spell four")
call SetUnitPathing(Naruto__kuramaShield,false)
call Naruto__KuramaShieldDefense()
call EnableTrigger(Naruto__trgDamage)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call TimerStart(t,period,true,function cj_anonym__557)
set t=null
endfunction
function Naruto__BijuTeashiCast takes unit tu returns nothing
local boolean log=false
local integer value=0
if tu==Naruto_c then
set value=250
if Naruto_kuramaModeChakra>value then
set log=true
call Naruto__BijuTeashiChakraTateCast()
endif
else
if IsUnitAlly(tu,Naruto_p)then
set value=50
if Naruto_kuramaModeChakra>value then
set log=true
call Naruto__BijuTeashiChakraHandAllyCast(tu)
endif
else
set value=150
if Naruto_kuramaModeChakra>value then
set log=true
call Naruto__BijuTeashiChakraHandEnemyCast(tu)
endif
endif
endif
if log then
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-value
call Naruto__ChakraChangeText()
else
call RecastSkills(Naruto_c,0x41304C54,1,0.)
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Недостаточно Чакры Кьюби!|r")
endif
endfunction
function Naruto__MiniRasenShurikenDamage takes unit tu returns nothing
local real dmg=600.
call Sound("Naruto Mini Rasen Shuriken Damage.mp3")
call UnitDamageTarget(Naruto_c,tu,GetNinjutsuDamage(dmg,Naruto_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 then
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E303042,GetWidgetX(tu),GetWidgetY(tu),0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41305345)
call IssueTargetOrder(bj_lastCreatedUnit,"soulburn",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
endif
endfunction
function cj_anonym__558 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real distanceSaved=LoadReal(HH,h,3)
local real distanceMax=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distanceCur=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(tu)>.405 and distanceCur>offset and distanceSaved<distanceMax then
set distanceSaved=distanceSaved+offset
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,3,distanceSaved)
else
if GetWidgetLife(tu)>.405 and distanceCur<=offset then
call Naruto__MiniRasenShurikenDamage(tu)
endif
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Naruto__MiniRasenShurikenCast takes unit tu,integer value returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=750.
local real period=MainPeriod
local real offset=speed*period
local real distanceMax=1000.
local unit d=CreateUnit(Naruto_p,0x6E303342,x,y,a)
call Sound("Naruto Mini Rasen Shuriken Cast.mp3")
call SetUnitAnimation(Naruto_c,"Spell one")
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-value
call Naruto__ChakraChangeText()
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,0.)
call SaveReal(HH,h,4,distanceMax)
call TimerStart(t,period,true,function cj_anonym__558)
set d=null
set t=null
endfunction
function Naruto__WakuseiRasenganDamage takes unit tu,real x1,real y1,real a returns nothing
local real timeDebuff=4.
local real distance=1300.
local real timeKnock=1.
local real dmg=(300.+GetHeroLevel(Naruto_c)*30.)*1.3
call CreateEffect(x1,y1,1.75,"Wave.mdx",1.)
call CreateEffect(x1,y1,1.5,"IceNova.mdx",1.)
call CreateEffect(x1,y1,.75,"-!EfRasen!-.mdx",2.)
call KnockBackUnitEf(tu,distance,timeKnock,a,MainPeriod,9,false)
call UnitDamageTarget(Naruto_c,tu,GetNinjutsuDamage(dmg,Naruto_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x4130524E,0x42303048,timeDebuff,0,false)
endif
call Naruto__RasenganKnockback(tu,timeKnock)
endfunction
function cj_anonym__559 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,2)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distanceCur=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if Naruto__kuramaModeOn and GetWidgetLife(tu)>.405 and distanceCur>offset and IsSpellNeedRange(x,y,x1,y1,750.)then
call SetUnitPosition(Naruto_c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(Naruto_c,a)
else
call SetUnitPathing(Naruto_c,true)
call SetUnitAnimation(Naruto_c,"Stand ready")
call DestroyEffect(LoadEffectHandle(HH,h,1))
if GetWidgetLife(tu)>.405 and distanceCur<=offset then
call Naruto__WakuseiRasenganDamage(tu,x1,y1,a)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Naruto__WakuseiRasenganCast takes unit tu,integer value returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real speed=900.
local real period=MainPeriod
local real offset=speed*period
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-value
call Naruto__ChakraChangeText()
call Sound("Naruto Wakusei Rasengan Cast.mp3")
call SetUnitAnimation(Naruto_c,"Spell two")
call SetUnitPathing(Naruto_c,false)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("NarutoWakuseiRasengan.mdx",Naruto_c,"hand right"))
call SaveReal(HH,h,2,offset)
call TimerStart(t,period,true,function cj_anonym__559)
set t=null
endfunction
function Naruto__RasenRanganDamage takes unit tu,real x1,real y1,real a returns nothing
local real timeDebuff=4.
local real distance=1000.
local real timeKnock=1.
local real dmg=(300.+GetHeroLevel(Naruto_c)*30.)*1.3
call CreateEffect(x1,y1,1.75,"Wave.mdx",1.)
call KnockBackUnitEf(tu,distance,timeKnock,a,MainPeriod,7,false)
call UnitDamageTarget(Naruto_c,tu,GetNinjutsuDamage(dmg,Naruto_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x4130524E,0x42303048,timeDebuff,0,false)
endif
endfunction
function cj_anonym__560 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if Naruto__kuramaModeOn and GetWidgetLife(tu)>.405 and distance>offset and IsSpellNeedRange(GetWidgetX(Naruto_c),GetWidgetY(Naruto_c),x1,y1,375.)then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
if GetWidgetLife(tu)>.405 and distance<=offset then
call Naruto__RasenRanganDamage(tu,x1,y1,a)
endif
call DestroyEffect(LoadEffectHandle(HH,h,3))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Naruto__RasenRanganCreateHand takes real x,real y,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1000.
local real period=MainPeriod
local real offset=speed*period
local unit d=CreateUnit(Naruto_p,0x6E303339,x,y,a)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call SaveAgentHandle(HH,h,3,AddSpecialEffectTarget("newrasengan3.mdx",d,"chest"))
call TimerStart(t,period,true,function cj_anonym__560)
set d=null
set t=null
endfunction
function Naruto__RasenRanganCast takes unit tu,integer value returns nothing
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real radius=500.
local unit tg
local group g=CreateGroup()
local unit d=CreateUnit(Naruto_p,0x6E303344,x,y,0.)
call Sound("Naruto Rasen Rangan.mp3")
call UnitApplyTimedLife(d,0x42544C46,.4)
call SetUnitAnimation(d,"spell four")
call SetUnitAnimation(Naruto_c,"Spell slam")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or Naruto_kuramaModeChakra<value
if IsUnitNeedNinjutsu(tg,Naruto_p)then
call Naruto__RasenRanganCreateHand(x,y,tg)
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-value
call Naruto__ChakraChangeText()
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set d=null
set tg=null
set g=null
endfunction
function Naruto__RasenKyuganDamage takes unit tu,real x1,real y1,real a returns nothing
local real timeDebuff=4.
local real distance=500.
local real timeKnock=.5
local real dmg=300.+GetHeroLevel(Naruto_c)*30.
call CreateEffect(x1,y1,1.5,"IceNova.mdx",1.)
call KnockBackUnitEf(tu,distance,timeKnock,a,.025,7,false)
call UnitDamageTarget(Naruto_c,tu,GetNinjutsuDamage(dmg,Naruto_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x4130524E,0x42303048,timeDebuff,0,false)
endif
endfunction
function cj_anonym__561 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(d)
local real y1=GetWidgetY(d)
local real x2=GetWidgetX(tu)
local real y2=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y2-y,x2-x)
local real distance=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))
if Naruto__kuramaModeOn and Naruto__rasenkyuganOn and GetWidgetLife(tu)>.405 and distance>offset then
call SetUnitPosition(d,x1-offset*Cos(a*bj_DEGTORAD),y1-offset*Sin(a*bj_DEGTORAD))
call SetUnitPosition(tu,x2-offset*Cos(a*bj_DEGTORAD),y2-offset*Sin(a*bj_DEGTORAD))
else
if Naruto__kuramaModeOn and Naruto__rasenkyuganOn and GetWidgetLife(tu)>.405 and distance<=offset then
call Naruto__RasenKyuganDamage(tu,x2,y2,a)
endif
call SetUnitPathing(tu,true)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Naruto__RasenKyuganHandReturn takes unit d,unit tu,real offset returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call SetUnitPathing(tu,false)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call TimerStart(t,.025,true,function cj_anonym__561)
set d=null
set t=null
endfunction
function cj_anonym__562 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real distanceMax=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if Naruto__kuramaModeOn and Naruto__rasenkyuganOn and GetWidgetLife(tu)>.405 and distance>offset and distance<distanceMax then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call UnitApplyTimedLife(CreateUnit(Naruto_p,0x6E303341,x,y,a),0x42544C46,(distance/500.))
else
if Naruto__kuramaModeOn and Naruto__rasenkyuganOn and GetWidgetLife(tu)>.405 and distance<=offset then
call Naruto__RasenKyuganHandReturn(d,tu,offset)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Naruto__RasenKyuganCreateHand takes real x,real y,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1000.
local real period=.025
local real offset=speed*period
local real distanceMax=500.
local unit d=CreateUnit(Naruto_p,0x6E303339,x,y,a)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,distanceMax)
call TimerStart(t,period,true,function cj_anonym__562)
set d=null
set t=null
endfunction
function cj_anonym__563 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d1=LoadUnitHandle(HH,h,0)
local unit d2=LoadUnitHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
if Naruto__kuramaModeOn and time>0.then
call IssueImmediateOrder(Naruto_c,"stop")
call SetUnitAnimation(Naruto_c,"Spell slam")
call SetUnitPosition(d1,x,y)
call SetUnitPosition(d2,x,y)
call SaveReal(HH,h,3,time-period)
else
call SetUnitAnimation(Naruto_c,"stand ready")
call SetUnitPathing(Naruto_c,true)
set Naruto__rasenkyuganOn=false
call RemoveUnit(d1)
call RemoveUnit(d2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d1=null
set d2=null
set t=null
endfunction
function Naruto__RasenKyuganCast takes integer value returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real radius=500.
local real time=2.
local real period=.025
local unit tg
local group g=CreateGroup()
local unit d1=CreateUnit(Naruto_p,0x6E303344,x,y,0.)
local unit d2=CreateUnit(Naruto_p,0x6E303343,x,y,0.)
set Naruto__rasenkyuganOn=true
call Sound("Naruto Rasen Kyugan.mp3")
call SetUnitPathing(Naruto_c,false)
call SetUnitAnimation(d1,"spell channel")
call SetUnitAnimation(Naruto_c,"Spell slam")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or Naruto_kuramaModeChakra<value
if IsUnitNeedNinjutsu(tg,Naruto_p)then
call Naruto__RasenKyuganCreateHand(x,y,tg)
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-value
call Naruto__ChakraChangeText()
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call SaveAgentHandle(HH,h,0,d1)
call SaveAgentHandle(HH,h,1,d2)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__563)
set tg=null
set g=null
set d1=null
set d2=null
set t=null
endfunction
function Naruto__BijuRasenganCheck takes unit tu returns integer
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local integer what=0
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance<250.then
set what=1
elseif distance>=250.and distance<500.then
set what=2
elseif distance>=500.then
set what=3
endif
return what
endfunction
function Naruto__BijuRasenganCast takes unit tu returns nothing
local boolean log=false
local integer value=0
local integer what=0
if tu==Naruto_c then
set value=150
if Naruto_kuramaModeChakra>value then
set log=true
call Naruto__RasenKyuganCast(value)
endif
else
set what=Naruto__BijuRasenganCheck(tu)
if what==1 then
set value=150
elseif what==2 then
set value=200
elseif what==3 then
set value=250
endif
if Naruto_kuramaModeChakra>value then
set log=true
if what==1 then
call Naruto__RasenRanganCast(tu,value)
elseif what==2 then
call Naruto__WakuseiRasenganCast(tu,value)
elseif what==3 then
call Naruto__MiniRasenShurikenCast(tu,value)
endif
endif
endif
if not log then
call RecastSkills(Naruto_c,0x41313642,1,0.)
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Недостаточно Чакры Кьюби!|r")
endif
endfunction
function Naruto__KuramaModoJump takes real x1,real y1 returns nothing
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer needChakra=R2I(distance)/6
if needChakra<=Naruto_kuramaModeChakra and distance>10.and distance<=600.then
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-needChakra
call Naruto__ChakraChangeText()
call DestroyEffect(AddSpecialEffect("Yellow_Flash2.mdx",x,y))
call SetUnitPosition(Naruto__kuramaMode,x1,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
else
if needChakra>Naruto_kuramaModeChakra and needChakra>0 then
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Недостаточно Чакры Кьюби!|r")
elseif distance<=10.then
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Слишком короткое расстояние!|r")
elseif distance>600.then
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Слишком большое расстояние!|r")
endif
endif
endfunction
function Naruto__OrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),Naruto_KURAMA_MODO_CANCEL)>0 and not Naruto__rasenkyuganOn
endfunction
function cj_anonym__564 takes nothing returns nothing
set Naruto__kuramaModeOrderNumber=0
call DestroyTimer(GetExpiredTimer())
endfunction
function Naruto__OrderActions takes nothing returns nothing
set Naruto__kuramaModeOrderNumber=Naruto__kuramaModeOrderNumber+1
if Naruto__kuramaModeOrderNumber==1 then
call TimerStart(CreateTimer(),.25,false,function cj_anonym__564)
elseif Naruto__kuramaModeOrderNumber==2 then
call Naruto__KuramaModoJump(GetOrderPointX(),GetOrderPointY())
endif
endfunction
function cj_anonym__565 takes nothing returns nothing
if GetUnitAbilityLevel(Naruto__kuramaMode,Naruto_KURAMA_MODO_CANCEL)==0 or Naruto_kuramaModeChakra<=0 then
if not Naruto__bijuModeOn then
call DisableTrigger(Naruto__kuramamodeorder)
call GetMorphOver(Naruto_NarutoUsual,Naruto__kuramaMode,Naruto_p)
set Naruto_c=Naruto_NarutoUsual
if Naruto__senninModoOn then
call UnitAddAbility(Naruto_c,0x4130564A)
else
call UnitRemoveAbility(Naruto_c,0x4130564A)
endif
call UnitRemoveAbility(Naruto_c,0x41304730)
set Naruto_NarutoUsual=null
set Naruto__kuramaMode=null
set Naruto__kuramaModeOn=false
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endif
endfunction
function Naruto__KuramaModoCast takes nothing returns nothing
local integer level=GetHeroLevel(Naruto_c)
call Sound("Naruto Joy.mp3")
call Naruto__TajuKageBunshinCancel()
set Naruto__kuramaModeOn=true
set Naruto_NarutoUsual=Naruto_c
set Naruto__kuramaMode=GetMorph(Naruto_NarutoUsual,Naruto_p,morph_rawcode[4],GetWidgetX(Naruto_NarutoUsual),GetWidgetY(Naruto_NarutoUsual),GetUnitFacing(Naruto_NarutoUsual),0.,0.)
set Naruto_c=Naruto__kuramaMode
call IssueImmediateOrder(Naruto_c,"holdposition")
call EnableTrigger(Naruto__kuramamodeorder)
if level>=6 then
if GetUnitAbilityLevel(Naruto_NarutoUsual,Naruto_SENNIN_MODO)>0 then
call UnitAddAbility(Naruto_c,Naruto_SENNIN_MODO)
if GetUnitAbilityLevel(Naruto_NarutoUsual,0x4130564A)>0 then
call UnitAddAbility(Naruto_c,0x4130564A)
endif
endif
if level>=7 then
call UnitAddAbility(Naruto_c,0x41313642)
if level>=8 then
call UnitAddAbility(Naruto_c,0x41304C54)
if level>=9 then
call UnitAddAbility(Naruto_c,0x41313454)
if level==10 then
call UnitAddAbility(Naruto_c,0x41303641)
endif
endif
endif
endif
endif
call TimerStart(CreateTimer(),.1,true,function cj_anonym__565)
endfunction
function Naruto__KuramaModoRegeneration takes nothing returns nothing
local real hp=GetUnitState(Naruto__kuramaMode,UNIT_STATE_MAX_LIFE)*.001
local unit tg
local boolean log=false
call GroupEnumUnitsInRange(bj_lastCreatedGroup,GetWidgetX(Naruto__kuramaMode),GetWidgetY(Naruto__kuramaMode),600.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null or log
if IsUnitEnemy(tg,Naruto_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitVisible(tg,Naruto_p)then
set log=true
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
if not log then
call SetWidgetLife(Naruto__kuramaMode,GetWidgetLife(Naruto__kuramaMode)+hp)
endif
set tg=null
endfunction
function cj_anonym__566 takes nothing returns nothing
if GetUnitAbilityLevel(Naruto_c,Naruto_RIKUDO_BIJU_MODO)==0 then
if GetWidgetLife(Naruto_c)>.405 or Naruto__kuramaMode!=null then
if not Naruto__kuramaModeOn then
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra+1
call Naruto__ChakraChangeText()
else
if GetWidgetLife(Naruto__kuramaMode)<GetUnitState(Naruto__kuramaMode,UNIT_STATE_MAX_LIFE)then
call Naruto__KuramaModoRegeneration()
endif
if not Naruto__bijuModeOn then
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-1
else
set Naruto_kuramaModeChakra=Naruto_kuramaModeChakra-5
endif
if Naruto_kuramaModeChakra<=0 then
set Naruto_kuramaModeChakra=0
endif
call Naruto__ChakraChangeText()
endif
endif
else
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Naruto_AddAbility_KuramaModo takes nothing returns nothing
local integer i=0
if Naruto_c==null then
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Naruto]then
set Naruto_c=udg_Hero[i]
set Naruto_p=GetOwningPlayer(Naruto_c)
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endif
call TimerStart(CreateTimer(),.1,true,function cj_anonym__566)
endfunction
function Naruto__SenninModoSetBuffsLevel takes integer lvl returns nothing
call SetUnitAbilityLevel(Naruto_c,0x41303445,lvl)
call SetUnitAbilityLevel(Naruto_c,0x41305A5A,lvl)
call SetUnitAbilityLevel(Naruto_c,0x41313552,lvl)
endfunction
function Naruto__SenninModoGetBuffsLevel takes nothing returns nothing
local integer lvl=1
if Naruto__senninModoEnerugy<100 then
set lvl=1
elseif Naruto__senninModoEnerugy>=100 and Naruto__senninModoEnerugy<200 then
set lvl=2
elseif Naruto__senninModoEnerugy>=200 and Naruto__senninModoEnerugy<300 then
set lvl=3
elseif Naruto__senninModoEnerugy>=300 and Naruto__senninModoEnerugy<400 then
set lvl=4
elseif Naruto__senninModoEnerugy>=400 and Naruto__senninModoEnerugy<500 then
set lvl=5
elseif Naruto__senninModoEnerugy>=500 and Naruto__senninModoEnerugy<600 then
set lvl=6
elseif Naruto__senninModoEnerugy>=600 and Naruto__senninModoEnerugy<700 then
set lvl=7
elseif Naruto__senninModoEnerugy>=700 and Naruto__senninModoEnerugy<800 then
set lvl=8
elseif Naruto__senninModoEnerugy>=800 and Naruto__senninModoEnerugy<900 then
set lvl=9
elseif Naruto__senninModoEnerugy>=900 and Naruto__senninModoEnerugy<1000 then
set lvl=10
elseif Naruto__senninModoEnerugy>=1000 and Naruto__senninModoEnerugy<1100 then
set lvl=11
elseif Naruto__senninModoEnerugy>=1100 and Naruto__senninModoEnerugy<1200 then
set lvl=12
elseif Naruto__senninModoEnerugy>=1200 and Naruto__senninModoEnerugy<1300 then
set lvl=13
elseif Naruto__senninModoEnerugy>=1300 and Naruto__senninModoEnerugy<1400 then
set lvl=14
elseif Naruto__senninModoEnerugy>=1400 and Naruto__senninModoEnerugy<1500 then
set lvl=15
elseif Naruto__senninModoEnerugy>=1500 and Naruto__senninModoEnerugy<1600 then
set lvl=16
elseif Naruto__senninModoEnerugy>=1600 and Naruto__senninModoEnerugy<1700 then
set lvl=17
elseif Naruto__senninModoEnerugy>=1700 and Naruto__senninModoEnerugy<1800 then
set lvl=18
elseif Naruto__senninModoEnerugy>=1800 and Naruto__senninModoEnerugy<1900 then
set lvl=19
elseif Naruto__senninModoEnerugy>=1900 and Naruto__senninModoEnerugy<2000 then
set lvl=20
elseif Naruto__senninModoEnerugy>=2000 and Naruto__senninModoEnerugy<2100 then
set lvl=21
elseif Naruto__senninModoEnerugy>=2100 and Naruto__senninModoEnerugy<2200 then
set lvl=22
elseif Naruto__senninModoEnerugy>=2200 and Naruto__senninModoEnerugy<2300 then
set lvl=23
elseif Naruto__senninModoEnerugy>=2300 and Naruto__senninModoEnerugy<2400 then
set lvl=24
elseif Naruto__senninModoEnerugy>=2400 and Naruto__senninModoEnerugy<2500 then
set lvl=25
elseif Naruto__senninModoEnerugy>=2500 and Naruto__senninModoEnerugy<2600 then
set lvl=26
elseif Naruto__senninModoEnerugy>=2600 and Naruto__senninModoEnerugy<2700 then
set lvl=27
elseif Naruto__senninModoEnerugy>=2700 and Naruto__senninModoEnerugy<2800 then
set lvl=28
elseif Naruto__senninModoEnerugy>=2800 and Naruto__senninModoEnerugy<2900 then
set lvl=29
elseif Naruto__senninModoEnerugy>=2900 and Naruto__senninModoEnerugy<3000 then
set lvl=30
elseif Naruto__senninModoEnerugy>=3000 and Naruto__senninModoEnerugy<3100 then
set lvl=31
elseif Naruto__senninModoEnerugy>=3100 and Naruto__senninModoEnerugy<3200 then
set lvl=32
elseif Naruto__senninModoEnerugy>=3200 and Naruto__senninModoEnerugy<3300 then
set lvl=33
elseif Naruto__senninModoEnerugy>=3300 and Naruto__senninModoEnerugy<3400 then
set lvl=34
elseif Naruto__senninModoEnerugy>=3400 then
set lvl=35
endif
call Naruto__SenninModoSetBuffsLevel(lvl)
endfunction
function cj_anonym__567 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer enerugyMinus=LoadInteger(HH,h,0)
if GetWidgetLife(Naruto_c)>.405 and Naruto__senninModoEnerugy>0 then
set Naruto__senninModoEnerugy=Naruto__senninModoEnerugy-enerugyMinus
call Naruto__ChakraChangeText()
call Naruto__SenninModoGetBuffsLevel()
else
set Naruto__senninModoBunshinEnerugyCur=0
set Naruto__senninModoOn=false
call Naruto__ChakraChangeText()
call UnitRemoveAbility(Naruto_c,0x4130564A)
call UnitRemoveAbility(Naruto_c,0x42303443)
if GetUnitAbilityLevel(Naruto_c,0x42303439)>0 then
call SetPlayerAbilityAvailable(Naruto_p,0x41303948,true)
else
call SetPlayerAbilityAvailable(Naruto_p,Naruto_SENNIN_MODO,true)
endif
call RemoveUnit(Naruto__senninModoAvailability)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Naruto__SenninModoStart takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local integer enerugyMinus=R2I(10*period)
set Naruto__senninModoAvailability=CreateUnit(Naruto_p,0x6E303253,0.,0.,0.)
call Sound("Naruto Senjutsu.mp3")
call SetPlayerAbilityAvailable(Naruto_p,Naruto_SENNIN_MODO,false)
call UnitAddAbility(Naruto_c,0x4130564A)
call Naruto__SenninModoGetBuffsLevel()
call SaveInteger(HH,h,0,enerugyMinus)
call TimerStart(t,period,true,function cj_anonym__567)
set t=null
endfunction
function cj_anonym__568 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer enerugyPlus=LoadInteger(HH,h,0)
local integer enerugyNeed=LoadInteger(HH,h,1)
if GetUnitCurrentOrder(Naruto_c)==OrderId("cyclone")and Naruto__senninModoEnerugy<enerugyNeed then
set Naruto__senninModoEnerugy=Naruto__senninModoEnerugy+enerugyPlus
call Naruto__ChakraChangeText()
else
call IssueImmediateOrder(Naruto_c,"stop")
call DestroyEffect(LoadEffectHandle(HH,h,2))
if GetWidgetLife(Naruto_c)>.405 and Naruto__senninModoEnerugy>=enerugyNeed then
call Naruto__SenninModoStart()
else
set Naruto__senninModoOn=false
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"Не удалось активировать |cFFFFCC00Sennin Modo|r!")
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Naruto__SenninModoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local integer enerugyPlus=R2I(100*period)
local integer enerugyNeed=R2I(GetUnitState(Naruto_c,UNIT_STATE_MAX_MANA)/3.)
set Naruto__senninModoEnerugy=0
call Naruto__ChakraChangeText()
set Naruto__senninModoOn=true
if Naruto__bijuModeOn then
set enerugyNeed=R2I(GetUnitState(Naruto__kuramaMode,UNIT_STATE_MAX_MANA)/3.)
endif
call Naruto__TajuKageBunshinCancel()
call SaveInteger(HH,h,0,enerugyPlus)
call SaveInteger(HH,h,1,enerugyNeed)
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("SaninAuraDir.mdx",Naruto_c,"chest"))
call TimerStart(t,period,true,function cj_anonym__568)
set t=null
endfunction
function cj_anonym__570 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real lifeTime=LoadReal(HH,h,2)
if GetWidgetLife(d)>.405 and lifeTime>0.then
call SaveReal(HH,h,2,lifeTime-period)
else
call KuchiyoseCreateDustEffect("end",d,2.,2.6)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__569 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit d=CreateUnit(Naruto_p,0x68303254,LoadReal(HH,h,0),LoadReal(HH,h,1),GetUnitFacing(Naruto_c))
local real lifeTime=25.
local real period=.1
call SetPlayerTechResearched(Naruto_p,0x52303032,GetHeroLevel(Naruto_c))
call KuchiyoseCreateDustEffect("cast",d,2.,2.6)
call SaveAgentHandle(HH,h1,0,d)
call SaveReal(HH,h1,1,period)
call SaveReal(HH,h1,2,lifeTime)
call TimerStart(t1,period,true,function cj_anonym__570)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set d=null
set t=null
set t1=null
endfunction
function Naruto__GamakichiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real period=.67
call KuchiyoseEffect(x,y,3.)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call TimerStart(t,period,false,function cj_anonym__569)
set t=null
endfunction
function Naruto__ShurikenDMG takes real x,real y returns nothing
local unit tg
local group g=CreateGroup()
local real radius=600.
local real dmg=200.
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E303042,x,y,0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313234)
call IssuePointOrder(bj_lastCreatedUnit,"silence",x,y)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Naruto_p)then
call UnitDamageTarget(Naruto_c,tg,GetNinjutsuDamage(dmg,Naruto_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__571 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real size=LoadReal(HH,h,5)
local real sizePlus=LoadReal(HH,h,6)
local real effSize=3.5
local real effHeight=0.
if time>0.then
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E30304D,x1,y1,GetRandomReal(0.,360.))
call SetUnitFlyHeight(bj_lastCreatedUnit,effHeight,0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
set effSize=2.75
set effHeight=125.
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E30304D,x1,y1,GetRandomReal(0.,360.))
call SetUnitFlyHeight(bj_lastCreatedUnit,effHeight,0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call SetUnitScale(bj_lastCreatedUnit,effSize,effSize,effSize)
set effSize=2.15
set effHeight=250.
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E30304D,x1,y1,GetRandomReal(0.,360.))
call SetUnitFlyHeight(bj_lastCreatedUnit,effHeight,0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call SetUnitScale(bj_lastCreatedUnit,effSize,effSize,effSize)
if time>2.then
call CreateEffect(x1,y1,size*(sizePlus*1.35),"Rasengan2.mdx",.01)
call SetUnitScale(d,size,size,size)
call SaveReal(HH,h,5,size+sizePlus)
endif
if time==3.or time==2.or time==1.then
if time==2.then
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E30304E,x1,y1,0.)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,2.)
call SetUnitTimeScale(bj_lastCreatedUnit,.75)
endif
call Naruto__ShurikenDMG(x1,y1)
endif
call SaveReal(HH,h,4,time-period)
else
call RemoveUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set t=null
endfunction
function Naruto__ShurikenAct takes unit d,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=3.
local real period=.1
local real sizePlus=.4
local real size=1.+sizePlus
call Sound("Naruto Shuriken Act .mp3")
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call SaveReal(HH,h,5,size)
call SaveReal(HH,h,6,sizePlus)
call TimerStart(t,period,true,function cj_anonym__571)
set t=null
endfunction
function cj_anonym__572 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer amount=LoadInteger(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x1=LoadReal(HH,h,3)
local real y1=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveInteger(HH,h,1,amount-1)
else
call Naruto__ShurikenAct(d,x1,y1)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Naruto__ShurikenStart takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1200.
local real period=.025
local real offset=speed*period
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call Naruto__RasenganMainJutsuTurnOn()
call DestroyEffect(Naruto__rasenganEff)
call Sound("Naruto Yarost.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Naruto_p,0x6E303046,x,y,a))
call SaveInteger(HH,h,1,R2I(distance/offset))
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,x1)
call SaveReal(HH,h,4,y1)
call TimerStart(t,period,true,function cj_anonym__572)
set t=null
endfunction
function Naruto__ShurikenCast takes real x1,real y1 returns nothing
local integer enerugyMinus=400
if Naruto__rasenganLog then
if Naruto__senninModoEnerugy>enerugyMinus then
set Naruto__senninModoEnerugy=Naruto__senninModoEnerugy-enerugyMinus
call Naruto__ChakraChangeText()
call Naruto__SenninModoGetBuffsLevel()
call Naruto__ShurikenStart(x1,y1)
else
call UnitRemoveAbility(Naruto_c,0x41304132)
call UnitAddAbility(Naruto_c,0x41304132)
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Недостаточно природной энергии!|r")
endif
else
call UnitRemoveAbility(Naruto_c,0x41304132)
call UnitAddAbility(Naruto_c,0x41304132)
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Требуется поддерживать обычный Расенган до активации!|r")
endif
endfunction
function Naruto__RasenganAttackConditions takes nothing returns boolean
return GetUnitTypeId(GetAttacker())==heroes_rawcode[Naruto]and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitIllusion(GetAttacker())and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)and Naruto__rasenganLog
endfunction
function Naruto__RasenganAttackActions takes nothing returns nothing
call Naruto__RasenganMainJutsuTurnOn()
call Naruto__RasenganStrike(GetTriggerUnit())
endfunction
function cj_anonym__573 takes nothing returns nothing
if Naruto__rasenganLog then
call Naruto__RasenganMainJutsuTurnOn()
call DestroyEffect(Naruto__rasenganEff)
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function Naruto__RasenganRemoveWithWait takes nothing returns nothing
local real actionTime=7.
set Naruto__rasenganLog=true
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KAGE_BUNSHIN,false)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_RASENGAN,false)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KUCHIYOSE,false)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_SENNIN_MODO,false)
call SetPlayerAbilityAvailable(Naruto_p,Naruto_KURAMA_MODO,false)
if GetUnitAbilityLevel(Naruto_c,0x41304132)>0 then
call SetPlayerAbilityAvailable(Naruto_p,0x41304132,true)
else
call UnitAddAbility(Naruto_c,0x41304132)
endif
call SetUnitAnimation(Naruto_c,"Spell two")
call TimerStart(CreateTimer(),actionTime,false,function cj_anonym__573)
endfunction
function Naruto__ComboSearhAI takes real x,real y returns nothing
local real x1
local real y1
local integer i=0
loop
if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(Player(i))==MAP_CONTROL_COMPUTER and IsPlayerAlly(Naruto_p,Player(i))then
if GetUnitTypeId(udg_Hero[i])==0x4F303030 and GetWidgetLife(udg_Hero[i])>.405 then
set x1=GetWidgetX(udg_Hero[i])
set y1=GetWidgetY(udg_Hero[i])
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<150.then
call IssuePointOrder(udg_Hero[i],"breathoffire",x,y)
set i=10
endif
endif
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function cj_anonym__574 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real dmg=LoadReal(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.and GetUnitCurrentOrder(Naruto_c)==OrderId("whirlwind")then
set Naruto_rasenganDamage=Naruto_rasenganDamage+dmg
call SaveReal(HH,h,2,time-period)
else
call RemoveUnit(LoadUnitHandle(HH,h,3))
if GetWidgetLife(Naruto_c)>.405 and not ComboNarutoSasukeOne then
call Naruto__RasenganRemoveWithWait()
else
if ComboNarutoSasukeOne then
call PauseUnit(Naruto_c,true)
endif
call DestroyEffect(Naruto__rasenganEff)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Naruto__RasenganCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=3.
local real addDmg=GetHeroLevel(Naruto_c)*10.
local real dmg=(100.+addDmg)*period
local real barHeight=240.
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local unit bar=CreateUnit(Naruto_p,0x6830344D,x,y,270.)
local integer cjlocgn_00000000=0
loop
exitwhen not(cjlocgn_00000000<12)
if GetLocalPlayer()!=Naruto_p then
call SetUnitVertexColor(bar,255,255,255,0)
endif
set cjlocgn_00000000=cjlocgn_00000000+1
endloop
call Naruto__ComboSearhAI(x,y)
set Naruto_rasenganDamage=0.
set Naruto__rasenganEff=AddSpecialEffectTarget("newrasengan3.mdx",Naruto_c,"hand right")
call Sound("Naruto Rassengan Cast.mp3")
call SetUnitFlyHeight(bar,barHeight,0.)
call SetUnitTimeScale(bar,1./time)
call SaveReal(HH,h,0,dmg)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveAgentHandle(HH,h,3,bar)
call TimerStart(t,period,true,function cj_anonym__574)
set t=null
set bar=null
endfunction
function cj_anonym__575 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local integer energy=LoadInteger(HH,h,1)
local integer chakraMax=LoadInteger(HH,h,2)
local texttag text=LoadTextTagHandle(HH,h,3)
if GetUnitCurrentOrder(u)==OrderId("whirlwind")and Naruto__senninModoOn then
if energy<chakraMax then
set energy=energy+1
if energy>chakraMax then
set energy=chakraMax
endif
call SaveInteger(HH,h,1,energy)
call SetTextTagText(text,I2S(energy),.0276)
endif
else
if Naruto__senninModoOn then
set Naruto__senninModoEnerugy=Naruto__senninModoEnerugy+energy
call Naruto__ChakraChangeText()
endif
call DestroyEffect(LoadEffectHandle(HH,h,4))
call DestroyTextTag(text)
if u!=null then
call Naruto__TajuKageBunshinDestroy(u)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set text=null
set u=null
set t=null
endfunction
function Naruto__ShizenEnerugiBunshinStart takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local texttag text=CreateTextTag()
local integer energy=0
local integer chakraMax=R2I(GetUnitState(u,UNIT_STATE_MAX_MANA)/3.)
local real period=.1
call SetTextTagText(text,I2S(energy),.0276)
call SetTextTagPos(text,GetWidgetX(u),GetWidgetY(u),heightGameText*5.)
call SetTextTagColor(text,165,253,169,0)
call SetTextTagVisibility(text,false)
if GetLocalPlayer()==Naruto_p then
call SetTextTagVisibility(text,true)
endif
call SaveAgentHandle(HH,h,0,u)
call SaveInteger(HH,h,1,energy)
call SaveInteger(HH,h,2,chakraMax)
call SaveTextTagHandle(HH,h,3,text)
call SaveAgentHandle(HH,h,4,AddSpecialEffectTarget("SaninAuraDir.mdx",u,"chest"))
call TimerStart(t,period,true,function cj_anonym__575)
set text=null
set t=null
endfunction
function Naruto__ShizenEnerugiCast takes nothing returns nothing
local integer xp=GetHeroXP(Naruto_c)
local real life=GetWidgetLife(Naruto_c)
local real maxlife=GetUnitState(Naruto_c,UNIT_STATE_MAX_LIFE)*.1
local real mana=GetUnitState(Naruto_c,UNIT_STATE_MANA)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real f=GetUnitFacing(Naruto_c)
if Naruto__bunshinNumber==0 then
call Sound("Naruto_Kage_Bunshin.mp3")
call Naruto__TajuKageBunshinStartTimer()
else
call Sound("Naruto Kage Bunshin 2.wav")
endif
set Naruto__bunshinNumber=Naruto__bunshinNumber+1
set Naruto__senninModoBunshinEnerugyCur=Naruto__senninModoBunshinEnerugyCur+1
if Naruto__senninModoBunshinEnerugyCur==Naruto__senninModoBunshinEnerugyMax then
call SetPlayerAbilityAvailable(Naruto_p,0x41303948,false)
endif
call UnitRemoveAbility(Naruto_c,0x42303439)
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x45303039,x,y,f)
call TriggerRegisterUnitEvent(Naruto__tajukagebunshingetdmg,bj_lastCreatedUnit,EVENT_UNIT_DAMAGED)
call SetHeroXP(bj_lastCreatedUnit,xp,false)
call SetWidgetLife(bj_lastCreatedUnit,life)
call SetUnitState(bj_lastCreatedUnit,UNIT_STATE_MANA,mana)
call SuspendHeroXP(bj_lastCreatedUnit,true)
call SaveReal(HH,GetHandleId(bj_lastCreatedUnit),0,10.)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(bj_lastCreatedUnit),GetWidgetY(bj_lastCreatedUnit)))
call SetUnitAnimation(bj_lastCreatedUnit,"Spell Three")
call UnitRemoveAbility(bj_lastCreatedUnit,0x41313143)
call UnitAddAbility(bj_lastCreatedUnit,0x41304730)
call UnitAddAbility(bj_lastCreatedUnit,0x41305939)
call IssueImmediateOrder(bj_lastCreatedUnit,"whirlwind")
endfunction
function cj_anonym__576 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real speedDown=LoadReal(HH,h,1)
local group g=LoadGroupHandle(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local unit tg
if g!=null then
call GroupEnumUnitsOfPlayer(g,Naruto_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if not IsUnitIllusion(tg)and GetUnitTypeId(tg)==0x45303039 then
call PauseUnit(tg,false)
call SetUnitPathing(tg,true)
call SetUnitFlyHeight(tg,GetUnitDefaultFlyHeight(tg),speedDown)
endif
call GroupRemoveUnit(g,tg)
endloop
call UnitDamageTarget(Naruto_c,tu,GetTaijutsuDamage(dmg,Naruto_c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call DestroyGroup(g)
endif
call SetUnitFlyHeight(tu,GetUnitDefaultFlyHeight(tu),speedDown)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tg=null
set g=null
set tu=null
set t=null
endfunction
function Naruto__RendanCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer cur=0
local integer max=4
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real x1
local real y1
local real radius=250.
local real degree=0.
local real offset=radius/2.
local real dmg=100.
local real height=500.
local real speedUp=1600.
local real time=height/speedUp
local group g1=CreateGroup()
local group g2=CreateGroup()
local unit tg
call UnitRemoveAbility(Naruto_c,0x42303439)
call Sound("Uzumaki Naruto Rendan.mp3")
call DestroyEffect(AddSpecialEffect("Slam.mdx",x,y))
call UnitDamageTarget(Naruto_c,tu,GetTaijutsuDamage(dmg,Naruto_c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call SetUnitTypeFlying(tu)
call SetUnitFlyHeight(tu,height,speedUp)
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null or cur==max
if not IsUnitIllusion(tg)and GetUnitTypeId(tg)==0x45303039 then
call SetUnitTypeFlying(tg)
call PauseUnit(tg,true)
call SetUnitPathing(tg,false)
call SetUnitPosition(tg,x,y)
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
call SetUnitFacing(tg,bj_RADTODEG*Atan2(y1-y,x1-x))
call SetUnitPosition(tg,x+offset*Cos(degree*bj_DEGTORAD),y+offset*Sin(degree*bj_DEGTORAD))
call SetUnitFlyHeight(tg,height,speedUp)
call SetUnitAnimation(tg,"Attack -2")
call GroupAddUnit(g2,tg)
set degree=degree+90.
set cur=cur+1
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,speedUp)
if cur>0 then
call SaveAgentHandle(HH,h,2,g2)
call SaveReal(HH,h,3,dmg*cur)
else
call DestroyGroup(g2)
endif
call TimerStart(t,time,false,function cj_anonym__576)
set tg=null
set g1=null
set g2=null
set t=null
endfunction
function Naruto__HaremSleepCast takes unit bunshin,unit u returns nothing
local group g=CreateGroup()
local unit tg
local unit target=null
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1
local real y1
local real radius=200.
local real distance=radius/2.
call UnitAddAbility(u,0x41313550)
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Naruto_p)and GetWidgetLife(tg)>.405 and not IsUnitWoman(tg)and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=distance then
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
set target=tg
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if target!=null then
call Sound("Naruto Harem no Jutsu Cast Spell.mp3")
call IssueTargetOrder(u,"sleep",target)
call SaveBoolean(HH,GetHandleId(bunshin),2,true)
call SaveAgentHandle(HH,GetHandleId(bunshin),3,target)
endif
set target=null
set tg=null
set g=null
endfunction
function cj_anonym__577 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
local group gr=LoadGroupHandle(HH,h,2)
local group g
local unit girl
local unit target
local unit bunshin
if time>0.then
set g=CreateGroup()
call GroupEnumUnitsOfPlayer(g,Naruto_p,null)
loop
set bunshin=FirstOfGroup(g)
exitwhen bunshin==null
if IsUnitInGroup(bunshin,gr)then
set girl=LoadUnitHandle(HH,GetHandleId(bunshin),1)
set target=LoadUnitHandle(HH,GetHandleId(bunshin),3)
if LoadBoolean(HH,GetHandleId(bunshin),2)and GetUnitAbilityLevel(target,0x42303353)==0 then
call GroupRemoveUnit(gr,bunshin)
call Naruto__TajuKageBunshinDestroy(bunshin)
endif
endif
call GroupRemoveUnit(g,bunshin)
endloop
call DestroyGroup(g)
call SaveReal(HH,h,1,time-period)
else
loop
set bunshin=FirstOfGroup(gr)
exitwhen bunshin==null
call Naruto__TajuKageBunshinDestroy(bunshin)
call GroupRemoveUnit(gr,bunshin)
endloop
call DestroyGroup(gr)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set gr=null
set g=null
set girl=null
set target=null
set bunshin=null
set t=null
endfunction
function Naruto__HaremCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=4.
local group g=CreateGroup()
local group gr=CreateGroup()
local unit tg
set Naruto__haremOn=true
call Sound("Naruto Harem no Jutsu Cast.mp3")
call UnitRemoveAbility(Naruto_c,0x42303439)
call Sound("Bunshin Poff.wav")
call GroupEnumUnitsOfPlayer(g,Naruto_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if not IsUnitIllusion(tg)and GetUnitTypeId(tg)==0x45303039 and GetUnitAbilityLevel(tg,0x41305939)==0 then
call GroupAddUnit(gr,tg)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(tg),GetWidgetY(tg)))
call ShowUnit(tg,false)
call SetUnitInvulnerable(tg,true)
call PauseUnit(tg,true)
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E303252,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg))
call SetUnitAnimation(bj_lastCreatedUnit,"Spell")
call Naruto__HaremSleepCast(tg,bj_lastCreatedUnit)
call SaveAgentHandle(HH,GetHandleId(tg),1,bj_lastCreatedUnit)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call SaveAgentHandle(HH,h,2,gr)
call TimerStart(t,period,true,function cj_anonym__577)
set g=null
set gr=null
set tg=null
set t=null
endfunction
function cj_anonym__578 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(d),GetWidgetY(d)))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
endfunction
function Naruto__HengenoJutsuAct takes real x,real y,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real offset=50.
local real timeStun=4.
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x6E303045,x1+offset*Cos(a*bj_DEGTORAD),y1+offset*Cos(a*bj_DEGTORAD),a+180.)
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(bj_lastCreatedUnit),GetWidgetY(bj_lastCreatedUnit)))
call SetUnitAnimation(bj_lastCreatedUnit,"Spell Four")
call GetStun(tu,timeStun)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call TimerStart(t,timeStun,false,function cj_anonym__578)
set t=null
endfunction
function cj_anonym__579 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real distance=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x1=LoadReal(HH,h,3)
local real y1=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local group g=LoadGroupHandle(HH,h,6)
local unit tu=LoadUnitHandle(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local unit tg
if distance>0.then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or tu!=null
if IsUnitEnemy(tg,Naruto_p)and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)then
set tu=tg
endif
call GroupRemoveUnit(g,tg)
endloop
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
if tu==null then
call SaveReal(HH,h,1,distance-offset)
else
call SaveAgentHandle(HH,h,7,tu)
call SaveReal(HH,h,1,0.)
endif
else
call RemoveUnit(d)
if tu!=null then
call Naruto__HengenoJutsuAct(x,y,tu)
else
call Sound("Bunshin Poff.wav")
call DestroyEffect(AddSpecialEffect("Smoke.mdx",x,y))
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tu=null
set tg=null
set d=null
set t=null
endfunction
function Naruto__HengenoJutsuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real speed=1200.
local real period=.025
local real offset
local real radius=125.
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer id
call UnitRemoveAbility(Naruto_c,0x42303439)
if GetUnitAbilityLevel(Naruto_c,0x4130564A)>0 then
call Sound("Naruto Yarost.mp3")
set id=0x6E303046
set speed=1200.
else
set id=0x68303342
set speed=600.
endif
set offset=speed*period
call SaveAgentHandle(HH,h,0,CreateUnit(Naruto_p,id,x,y,a))
call SaveReal(HH,h,1,distance)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,x1)
call SaveReal(HH,h,4,y1)
call SaveReal(HH,h,5,radius)
call SaveAgentHandle(HH,h,6,CreateGroup())
call SaveAgentHandle(HH,h,7,null)
call TimerStart(t,period,true,function cj_anonym__579)
set t=null
endfunction
function Naruto__TajuKageBunshinGetDamageConditions takes nothing returns boolean
return not IsUnitIllusion(GetTriggerUnit())and GetEventDamage()>0.
endfunction
function Naruto__TajuKageBunshinGetDamageActions takes nothing returns nothing
local unit d=GetTriggerUnit()
local integer hd=GetHandleId(d)
local real dmg=GetEventDamage()
local real maxlife=LoadReal(HH,hd,0)
if maxlife>0.then
call SaveReal(HH,hd,0,maxlife-dmg)
endif
set maxlife=LoadReal(HH,hd,0)
if maxlife<=0.then
call Naruto__TajuKageBunshinDestroy(d)
endif
set d=null
endfunction
function Naruto__TajuKageBunshinCreate takes integer number,real chakra returns nothing
local real x=GetWidgetX(Naruto_c)
local real y=GetWidgetY(Naruto_c)
local real f=GetUnitFacing(Naruto_c)
local integer xp=GetHeroXP(Naruto_c)
local real life=GetWidgetLife(Naruto_c)
local real maxlife=GetUnitState(Naruto_c,UNIT_STATE_MAX_LIFE)*.1
local real mana=GetUnitState(Naruto_c,UNIT_STATE_MANA)
local integer current=0
call UnitRemoveAbility(Naruto_c,0x42303439)
loop
set bj_lastCreatedUnit=CreateUnit(Naruto_p,0x45303039,x,y,f)
call TriggerRegisterUnitEvent(Naruto__tajukagebunshingetdmg,bj_lastCreatedUnit,EVENT_UNIT_DAMAGED)
call SetHeroXP(bj_lastCreatedUnit,xp,false)
call SetWidgetLife(bj_lastCreatedUnit,life)
call SetUnitState(bj_lastCreatedUnit,UNIT_STATE_MANA,mana)
call SuspendHeroXP(bj_lastCreatedUnit,true)
call SaveReal(HH,GetHandleId(bj_lastCreatedUnit),0,maxlife)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(bj_lastCreatedUnit),GetWidgetY(bj_lastCreatedUnit)))
call UnitAddAbility(bj_lastCreatedUnit,0x41304730)
set current=current+1
exitwhen current==number
endloop
if Naruto__bunshinNumber==0 then
call Sound("Naruto_Kage_Bunshin.mp3")
call Naruto__TajuKageBunshinStartTimer()
else
call Sound("Naruto Kage Bunshin 2.wav")
endif
set Naruto__bunshinNumber=Naruto__bunshinNumber+current
call SetUnitState(Naruto_c,UNIT_STATE_MANA,GetUnitState(Naruto_c,UNIT_STATE_MANA)-chakra)
endfunction
function cj_anonym__580 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer number=LoadInteger(HH,h,0)
local real needChakra=LoadReal(HH,h,1)
local texttag text=LoadTextTagHandle(HH,h,2)
if GetUnitCurrentOrder(Naruto_c)==OrderId("waterelemental")and GetUnitState(Naruto_c,UNIT_STATE_MANA)>needChakra then
set number=number+1
if Naruto__senninModoOn then
set Naruto__senninModoBunshinCur=Naruto__senninModoBunshinCur+1
if Naruto__senninModoBunshinCur>Naruto__senninModoBunshinMax then
set number=number-1
set Naruto__senninModoBunshinCur=Naruto__senninModoBunshinCur-1
call IssueImmediateOrder(Naruto_c,"stop")
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Лимит достигнут!|r")
endif
endif
if number==1 then
if GetLocalPlayer()==Naruto_p then
call SetTextTagVisibility(text,true)
endif
endif
call SaveInteger(HH,h,0,number)
call SaveReal(HH,h,1,needChakra+50.)
call SetTextTagText(text,I2S(number),.0276)
call SetTextTagPos(text,GetWidgetX(Naruto_c),GetWidgetY(Naruto_c),heightGameText*7.)
else
set Naruto__tajuKageBunshinOn=false
if GetWidgetLife(Naruto_c)>.405 then
if GetUnitState(Naruto_c,UNIT_STATE_MANA)>50.then
if number>0 then
call Naruto__TajuKageBunshinCreate(number,needChakra)
endif
else
call IssueImmediateOrder(Naruto_c,"stop")
call DisplayTimedTextToPlayer(Naruto_p,0.,0.,3.,"|cFFFFCC00Недостаточно чакры!|r")
endif
endif
call DestroyTextTag(text)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set text=null
set t=null
endfunction
function Naruto__TajuKageBunshinCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local texttag text=CreateTextTag()
local integer number=0
set Naruto__tajuKageBunshinOn=true
call SetTextTagText(text,I2S(number),.0276)
call SetTextTagPos(text,GetWidgetX(Naruto_c),GetWidgetY(Naruto_c),heightGameText*7.)
call SetTextTagColor(text,255,252,1,0)
call SetTextTagVisibility(text,false)
call SaveInteger(HH,h,0,number)
call SaveReal(HH,h,1,50.)
call SaveTextTagHandle(HH,h,2,text)
call TimerStart(t,.25,true,function cj_anonym__580)
set text=null
set t=null
endfunction
function cj_anonym__581 takes nothing returns nothing
if GetUnitAbilityLevel(Naruto_c,0x42303439)==0 then
if GetUnitCurrentOrder(Naruto_c)==OrderId("waterelemental")then
call IssueImmediateOrder(Naruto_c,"stop")
endif
call Naruto__KageBunshinReturnMainJutsu()
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Naruto__KageBunshinCast takes nothing returns nothing
call Naruto__AvailabilityMainJutsu(false)
if GetUnitAbilityLevel(Naruto_c,0x41303436)>0 then
call SetPlayerAbilityAvailable(Naruto_p,0x41303436,true)
else
call UnitAddAbility(Naruto_c,0x41303436)
endif
if GetUnitAbilityLevel(Naruto_c,0x41313148)>0 then
call SetPlayerAbilityAvailable(Naruto_p,0x41313148,true)
else
call UnitAddAbility(Naruto_c,0x41313148)
endif
if GetUnitAbilityLevel(Naruto_c,0x41304849)>0 then
call SetPlayerAbilityAvailable(Naruto_p,0x41304849,true)
else
call UnitAddAbility(Naruto_c,0x41304849)
endif
if GetUnitAbilityLevel(Naruto_c,0x41304D59)>0 then
call SetPlayerAbilityAvailable(Naruto_p,0x41304D59,true)
else
call UnitAddAbility(Naruto_c,0x41304D59)
endif
if GetUnitAbilityLevel(Naruto_c,0x41303948)>0 then
if Naruto__senninModoOn and Naruto__senninModoBunshinEnerugyCur<Naruto__senninModoBunshinEnerugyMax then
call SetPlayerAbilityAvailable(Naruto_p,0x41303948,true)
elseif not Naruto__senninModoOn then
call SetPlayerAbilityAvailable(Naruto_p,0x41303948,true)
endif
else
call UnitAddAbility(Naruto_c,0x41303948)
endif
call TimerStart(CreateTimer(),.01,true,function cj_anonym__581)
endfunction
function Naruto__SpellsConditions takes nothing returns boolean
local integer id=GetSpellAbilityId()
return id==Naruto_KAGE_BUNSHIN or id==0x41303436 or id==0x41304730 or id==0x41313148 or id==0x41304849 or id==0x41304D59 or id==0x41303948 or id==0x41305939 or id==Naruto_RASENGAN or id==0x41304132 or id==Naruto_KUCHIYOSE or id==Naruto_SENNIN_MODO or id==Naruto_KURAMA_MODO or id==Naruto_KURAMA_MODO_CANCEL or id==0x41313642 or id==0x41304C54 or id==0x41313454 or id==0x41303641 or id==0x41304852 or id==Naruto_GUDODAMA or id==Naruto_RIKUDO_KAGE_BUNSHIN or id==Naruto_RIKUDO_SENNIN_MODO or id==Naruto_SENPO_CHO_BIJU_RASEN_SHURIKEN or id==Naruto_RIKUDO_BIJU_MODO or id==Naruto_RIKUDO_CHO_ODAMA_RASEN_SHURIKEN
endfunction
function Naruto__SpellsActions takes nothing returns nothing
local integer id=GetSpellAbilityId()
if Naruto_c==null then
set Naruto_c=GetTriggerUnit()
set Naruto_p=GetOwningPlayer(Naruto_c)
endif
if id==Naruto_KAGE_BUNSHIN then
call Naruto__KageBunshinCast()
elseif id==0x41303436 then
if not Naruto__tajuKageBunshinOn then
call Naruto__TajuKageBunshinCast()
endif
elseif id==0x41304730 then
if GetUnitTypeId(GetTriggerUnit())==heroes_rawcode[Naruto]then
call Naruto__TajuKageBunshinCancel()
else
call UnitRemoveAbility(GetTriggerUnit(),0x41304730)
endif
elseif id==0x41313148 then
call Naruto__HengenoJutsuCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==0x41304849 then
call Naruto__HaremCast()
elseif id==0x41304D59 then
call Naruto__RendanCast(GetSpellTargetUnit())
elseif id==0x41303948 then
call Naruto__ShizenEnerugiCast()
elseif id==0x41305939 then
call Naruto__ShizenEnerugiBunshinStart(GetTriggerUnit())
elseif id==Naruto_RASENGAN then
call Naruto__RasenganCast()
elseif id==0x41304132 then
call Naruto__ShurikenCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Naruto_KUCHIYOSE then
call Naruto__GamakichiCast()
elseif id==Naruto_SENNIN_MODO then
if not Naruto__senninModoOn then
call Naruto__SenninModoCast()
endif
elseif id==Naruto_KURAMA_MODO then
call Naruto__KuramaModoCast()
elseif id==Naruto_KURAMA_MODO_CANCEL then
call UnitRemoveAbility(GetTriggerUnit(),Naruto_KURAMA_MODO_CANCEL)
elseif id==0x41313642 then
call Naruto__BijuRasenganCast(GetSpellTargetUnit())
elseif id==0x41304C54 then
call Naruto__BijuTeashiCast(GetSpellTargetUnit())
elseif id==0x41313454 then
if GetUnitAbilityLevel(Naruto_c,0x42303459)==0 then
call Naruto__KyubiNoChakraCast()
endif
elseif id==0x41303641 then
call Naruto__BijuModoCast()
elseif id==0x41304852 then
call UnitRemoveAbility(GetTriggerUnit(),0x41304852)
elseif id==Naruto_GUDODAMA then
call Naruto__GudodamaCast(GetSpellTargetUnit())
elseif id==Naruto_RIKUDO_KAGE_BUNSHIN then
call Naruto__RikudoKageBunshinCast()
elseif id==Naruto_RIKUDO_SENNIN_MODO then
call Naruto__RikudoSenninModoCast(GetSpellTargetUnit())
elseif id==Naruto_SENPO_CHO_BIJU_RASEN_SHURIKEN then
call Naruto__SenpoChoBijuRasenShurikenCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Naruto_RIKUDO_BIJU_MODO then
call Naruto__RikudoBijuModoCast()
elseif id==Naruto_RIKUDO_CHO_ODAMA_RASEN_SHURIKEN then
call Naruto__RikudoChoOdamaRasenShurikenCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Naruto_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger rasenganattack=CreateTrigger()
local trigger rikudosenninmodoorder=CreateTrigger()
set Naruto__tajukagebunshingetdmg=CreateTrigger()
set Naruto__kuramamodeorder=CreateTrigger()
set Naruto__trgDamage=CreateTrigger()
set Naruto__grReg=CreateGroup()
call DisableTrigger(Naruto__trgDamage)
call DisableTrigger(Naruto__kuramamodeorder)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(rasenganattack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(Naruto__kuramamodeorder,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
call TriggerRegisterPlayerUnitEvent(rikudosenninmodoorder,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
call SetPlayerAbilityAvailable(Player(i),0x4130564A,false)
call SetPlayerAbilityAvailable(Player(i),0x41304944,false)
call SetPlayerAbilityAvailable(Player(i),0x41304445,false)
call SetPlayerAbilityAvailable(Player(i),Naruto_RIKUDO_SENNIN_MODO_SPELLBOOK,false)
call SetPlayerAbilityAvailable(Player(i),0x4130435A,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Naruto__SpellsConditions))
call TriggerAddAction(spells,function Naruto__SpellsActions)
call TriggerAddCondition(rasenganattack,Condition(function Naruto__RasenganAttackConditions))
call TriggerAddAction(rasenganattack,function Naruto__RasenganAttackActions)
call TriggerAddCondition(Naruto__tajukagebunshingetdmg,Condition(function Naruto__TajuKageBunshinGetDamageConditions))
call TriggerAddAction(Naruto__tajukagebunshingetdmg,function Naruto__TajuKageBunshinGetDamageActions)
call TriggerAddCondition(Naruto__kuramamodeorder,Condition(function Naruto__OrderConditions))
call TriggerAddAction(Naruto__kuramamodeorder,function Naruto__OrderActions)
call TriggerAddCondition(Naruto__trgDamage,Condition(function Naruto__GetDamageConditions))
call TriggerAddAction(Naruto__trgDamage,function Naruto__GetDamageActions)
call TriggerAddCondition(rikudosenninmodoorder,Condition(function Naruto__RikudoSenninModoOrderConditions))
call TriggerAddAction(rikudosenninmodoorder,function Naruto__RikudoSenninModoOrderActions)
set rikudosenninmodoorder=null
set spells=null
set rasenganattack=null
endfunction
function Neji__HakkeRokujuyonShoEffect takes boolean chakra,real value,unit tu returns nothing
if chakra then
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)-value)
else
call UnitDamageTarget(Neji__c,tu,value,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
endfunction
function cj_anonym__583 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local integer count=LoadInteger(HH,h,1)
local real animPeriodMax=LoadReal(HH,h,2)
local real value=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local real newstrikePeriod=LoadReal(HH,h,5)
local real offset=LoadReal(HH,h,6)
local real a=LoadReal(HH,h,7)
local real animPeriod=LoadReal(HH,h,8)
local boolean chakra=LoadBoolean(HH,h,9)
local real x=GetWidgetX(Neji__c)
local real y=GetWidgetY(Neji__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local texttag text
local string s
if count<7 and GetWidgetLife(Neji__c)>.405 and GetWidgetLife(tu)>.405 and not IsUnitHidden(Neji__c)and not IsUnitHidden(tu)then
if not IsUnitPaused(Neji__c)then
call PauseUnit(Neji__c,true)
endif
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
if newstrikePeriod>0.then
call SaveReal(HH,h,5,newstrikePeriod-period)
else
if GetUnitState(tu,UNIT_STATE_MANA)<value then
set chakra=false
call SaveBoolean(HH,h,9,chakra)
endif
if count==1 then
set s="|cFFFFCC002|r удара небес"
call SetUnitTimeScale(Neji__c,1.2)
call Neji__HakkeRokujuyonShoEffect(chakra,value*2.,tu)
elseif count==2 then
set s="|cFFFFCC004|r удара небес"
call SetUnitTimeScale(Neji__c,1.4)
call Neji__HakkeRokujuyonShoEffect(chakra,value*2.,tu)
elseif count==3 then
set s="|cFFFFCC008|r ударов небес"
call SetUnitTimeScale(Neji__c,1.6)
call Neji__HakkeRokujuyonShoEffect(chakra,value*4.,tu)
elseif count==4 then
set s="|cFFFFCC0016|r ударов небес"
call SetUnitTimeScale(Neji__c,1.8)
call Neji__HakkeRokujuyonShoEffect(chakra,value*8.,tu)
elseif count==5 then
set s="|cFFFFCC0032|r удара небес"
call SetUnitTimeScale(Neji__c,2.)
call Neji__HakkeRokujuyonShoEffect(chakra,value*16.,tu)
elseif count==6 then
set s="|cFFFFCC0064|r удара небес"
call SetUnitTimeScale(Neji__c,2.2)
call Neji__HakkeRokujuyonShoEffect(chakra,value*32.,tu)
endif
if count>1 then
set text=LoadTextTagHandle(HH,h,6)
call DestroyTextTag(text)
endif
set text=CreateTextTag()
call SetTextTagText(text,s,.025)
call SetTextTagPos(text,x,y,80.)
call SetTextTagColor(text,255,255,255,0)
call SaveTextTagHandle(HH,h,6,text)
call SaveInteger(HH,h,1,count+1)
call SaveReal(HH,h,5,1.275)
endif
if animPeriod<animPeriodMax then
call SaveReal(HH,h,8,animPeriod+period)
else
call SetUnitPosition(Neji__c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitPosition(tu,x1+offset*Cos(a*bj_DEGTORAD),y1+offset*Sin(a*bj_DEGTORAD))
if GetRandomInt(1,2)==1 then
call SetUnitAnimation(Neji__c,"Attack Alternate")
else
call SetUnitAnimation(Neji__c,"Attack Alternate 2")
endif
call SetUnitAnimation(tu,"death")
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Polymorph\\PolyMorphTarget.mdl",tu,"chest"))
call SaveReal(HH,h,8,0.)
endif
else
call Sound("Neji Juken Strike 5.mp3")
set text=LoadTextTagHandle(HH,h,6)
call DestroyTextTag(text)
call SetUnitAnimation(Neji__c,"Spell two")
call SetUnitTimeScale(Neji__c,1.)
call PauseUnit(Neji__c,false)
call PauseUnit(tu,false)
if IsTerrainPathable(GetWidgetX(tu),GetWidgetY(tu),PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffectTarget("NewDirtEXNofire.mdx",tu,"origin"))
else
call DestroyEffect(AddSpecialEffectTarget("IceSparks.mdx",tu,"origin"))
endif
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetWidgetX(tu),GetWidgetY(tu)))
call KnockBackUnitEf(tu,250.,.25,57.2958279087*Atan2(y1-y,x1-x),.025,3,false)
if GetWidgetLife(tu)>.405 then
set bj_lastCreatedUnit=CreateUnit(Neji__p,0x6E303042,x,y,0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41304C4E)
call IssueTargetOrder(bj_lastCreatedUnit,"soulburn",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set text=null
set s=null
set tu=null
set t=null
endfunction
function cj_anonym__582 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real period=.025
local real newstrikePeriod=1.275
local real animPeriod=.3
local real value=GetHeroAgi(Neji__c,true)*.3
local real speed=150.
local real offset=speed*period
local boolean chakra=true
call RemoveUnit(LoadUnitHandle(HH,h,3))
call DestroyEffect(LoadEffectHandle(HH,h,2))
call RemoveUnit(LoadUnitHandle(HH,h,1))
call SaveAgentHandle(HH,h1,0,LoadUnitHandle(HH,h,0))
call SaveInteger(HH,h1,1,1)
call SaveReal(HH,h1,2,animPeriod)
call SaveReal(HH,h1,3,value)
call SaveReal(HH,h1,4,period)
call SaveReal(HH,h1,5,0.)
call SaveReal(HH,h1,6,offset)
call SaveReal(HH,h1,7,LoadReal(HH,h,4))
call SaveReal(HH,h1,8,animPeriod)
call SaveBoolean(HH,h1,9,chakra)
call TimerStart(t1,period,true,function cj_anonym__583)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t1=null
set t=null
endfunction
function Neji__HakkeRokujuyonShoCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Neji__c)
local real y=GetWidgetY(Neji__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real castTime=1.12
local unit d=CreateUnit(Neji__p,0x6E303042,x,y,a)
local unit black=CreateUnit(Neji__p,0x6E303146,x,y,a)
call Sound("Neji Hakke Rokujuyon Sho.mp3")
call PauseUnit(Neji__c,true)
call PauseUnit(tu,true)
call SetUnitScale(d,5.,5.,5.)
call SetUnitFlyHeight(d,GetUnitFlyHeight(d)+30.,0.)
call SetUnitTimeScale(black,.5)
call SetUnitAnimation(Neji__c,"Stand Ready Alternate")
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,d)
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("HakkeAura.mdx",d,"origin"))
call SaveAgentHandle(HH,h,3,black)
call SaveReal(HH,h,4,a)
call TimerStart(t,castTime,false,function cj_anonym__582)
set black=null
set d=null
set t=null
endfunction
function cj_anonym__584 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
if GetWidgetLife(Neji__c)>.405 and GetUnitAbilityLevel(Neji__c,0x42303249)>0 then
call SetUnitPosition(LoadUnitHandle(HH,h,0),GetWidgetX(Neji__c),GetWidgetY(Neji__c))
else
call RemoveUnit(LoadUnitHandle(HH,h,0))
call DestroyEffect(LoadEffectHandle(HH,h,1))
call UnitRemoveAbility(Neji__c,0x41303346)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set t=null
endfunction
function Neji__ByakuganCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call Sound("Neji Byakugan.mp3")
call UnitAddAbility(Neji__c,0x41303346)
call SaveAgentHandle(HH,h,0,CreateUnit(Neji__p,0x68303059,GetWidgetX(Neji__c),GetWidgetY(Neji__c),0.))
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Byakugan.mdx",Neji__c,"origin"))
call TimerStart(t,.1,true,function cj_anonym__584)
set t=null
endfunction
function cj_anonym__585 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local real dmg=LoadReal(HH,h,3)
local real mana=LoadReal(HH,h,4)
local real facing=LoadReal(HH,h,5)
local real x=GetWidgetX(Neji__c)
local real y=GetWidgetY(Neji__c)
local real x1
local real y1
local real a
local unit tg
if facing==360.then
call SaveReal(HH,h,5,facing-360.)
else
call SaveReal(HH,h,5,facing+10.)
endif
call SetUnitState(Neji__c,UNIT_STATE_MANA,GetUnitState(Neji__c,UNIT_STATE_MANA)-mana)
if GetUnitState(Neji__c,UNIT_STATE_MANA)>0.and GetUnitCurrentOrder(Neji__c)==OrderId("whirlwind")then
call GroupEnumUnitsInRange(g,x,y,400.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Neji__p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
call SetUnitPosition(tg,x1+10.*Cos(a*bj_DEGTORAD),y1+10.*Sin(a*bj_DEGTORAD))
call SetUnitFacing(tg,GetUnitFacing(tg)+facing)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl",x1,y1))
call UnitDamageTarget(Neji__c,tg,GetTaijutsuDamage(dmg,Neji__c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
if GetUnitAbilityLevel(Neji__c,0x42303249)>0 then
call SetUnitAbilityLevel(Neji__c,0x41305946,2)
else
call SetUnitAbilityLevel(Neji__c,0x41305946,1)
endif
else
if GetUnitCurrentOrder(Neji__c)==OrderId("whirlwind")then
call IssueImmediateOrder(Neji__c,"stop")
endif
call UnitRemoveAbility(Neji__c,0x41304934)
call SetUnitAnimation(Neji__c,"stand")
call DestroyEffect(LoadEffectHandle(HH,h,2))
call RemoveUnit(LoadUnitHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set t=null
endfunction
function Neji__KaitenCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=50.*MainPeriod
local real mana=25.*MainPeriod
local unit d=CreateUnit(Neji__p,0x6E303042,GetWidgetX(Neji__c),GetWidgetY(Neji__c),GetRandomReal(0.,360.))
call SetUnitScale(d,1.5,1.5,1.5)
call Sound("Kaiten.mp3")
call UnitAddAbility(Neji__c,0x41304934)
if GetUnitAbilityLevel(Neji__c,0x42303249)>0 then
call SetUnitAbilityLevel(Neji__c,0x41305946,2)
endif
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,d)
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("HeroHyugaNejiCaster.mdx",d,"origin"))
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,mana)
call TimerStart(t,MainPeriod,true,function cj_anonym__585)
set d=null
set t=null
endfunction
function cj_anonym__586 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local player pu=LoadPlayerHandle(HH,h,1)
local integer id=GetPlayerId(pu)
if Neji__timeSlowJuken[id]>0.then
set Neji__timeSlowJuken[id]=Neji__timeSlowJuken[id]-1.
else
call UnitRemoveAbility(tu,0x41305944)
call UnitRemoveAbility(tu,0x42303330)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set pu=null
set tu=null
set t=null
endfunction
function Neji__JukenSlowStartTimer takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player pu=GetOwningPlayer(tu)
local real period=1.
call SaveAgentHandle(HH,h,0,tu)
call SavePlayerHandle(HH,h,1,pu)
call TimerStart(t,period,true,function cj_anonym__586)
set pu=null
set t=null
endfunction
function cj_anonym__587 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local player pu=LoadPlayerHandle(HH,h,1)
local integer id=GetPlayerId(pu)
if Neji__timeJuken[id]>0.then
set Neji__timeJuken[id]=Neji__timeJuken[id]-1.
else
call UnitRemoveAbility(tu,0x41303434)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set pu=null
set tu=null
set t=null
endfunction
function Neji__JukenIntelligenceStartTimer takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local player pu=GetOwningPlayer(tu)
local real period=1.
call SaveAgentHandle(HH,h,0,tu)
call SavePlayerHandle(HH,h,1,pu)
call TimerStart(t,period,true,function cj_anonym__587)
set pu=null
set t=null
endfunction
function cj_anonym__588 takes nothing returns nothing
local integer id=GetPlayerId(Neji__p)
if Neji__timeJuken[id]>0.then
set Neji__timeJuken[id]=Neji__timeJuken[id]-1.
else
call UnitRemoveAbility(Neji__c,0x41305947)
call UnitRemoveAbility(Neji__c,0x42303150)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Neji__JukenBuffStartTimer takes nothing returns nothing
local real period=1.
call TimerStart(CreateTimer(),period,true,function cj_anonym__588)
endfunction
function Neji__GetDamageConditions takes nothing returns boolean
return not IsUnitIllusion(GetEventDamageSource())and GetUnitAbilityLevel(GetEventDamageSource(),Neji_JUKEN)>0 and IsUnitInGroup(GetTriggerUnit(),Neji__grJuken)
endfunction
function Neji__GetDamageActions takes nothing returns nothing
local unit damager=GetEventDamageSource()
local unit tu=GetTriggerUnit()
local integer lvlJuken=GetUnitAbilityLevel(damager,0x41305947)
local integer lvlInt=GetUnitAbilityLevel(tu,0x41303434)
local integer idp=GetPlayerId(GetOwningPlayer(damager))
local integer idu=GetPlayerId(GetOwningPlayer(tu))
local real manaConst=10.
local real manaBurn=50.
local real dmg=0.
call DisableTrigger(Neji__jukendmg)
call GroupRemoveUnit(Neji__grJuken,tu)
if GetUnitAbilityLevel(damager,0x42303249)>0 and GetUnitState(damager,UNIT_STATE_MANA)>=manaConst then
set Neji__timeSlowJuken[idu]=4.
call Sound("Neji Juken Strike 1.mp3")
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Feedback\\SpellBreakerAttack.mdl",GetWidgetX(tu),GetWidgetY(tu)))
call SetUnitState(damager,UNIT_STATE_MANA,GetUnitState(damager,UNIT_STATE_MANA)-manaConst)
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)-manaBurn)
if GetUnitAbilityLevel(tu,0x41305944)==0 then
call UnitAddAbility(tu,0x41305944)
call Neji__JukenSlowStartTimer(tu)
else
if GetUnitAbilityLevel(tu,0x41305944)<10 then
call SetUnitAbilityLevel(tu,0x41305944,GetUnitAbilityLevel(tu,0x41305944)+1)
endif
endif
endif
if IsUnitHero(tu)then
set Neji__timeJuken[idp]=15.
set Neji__timeJuken[idu]=15.
if GetUnitAbilityLevel(damager,0x42303249)==0 then
call Sound("Neji Juken Strike 1.mp3")
endif
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Feedback\\ArcaneTowerAttack.mdl",GetWidgetX(tu),GetWidgetY(tu)))
if lvlJuken==0 then
call UnitAddAbility(damager,0x41305947)
call Neji__JukenBuffStartTimer()
else
call SetUnitAbilityLevel(damager,0x41305947,lvlJuken+1)
endif
if lvlInt==0 then
call UnitAddAbility(tu,0x41303434)
call Neji__JukenIntelligenceStartTimer(tu)
else
call SetUnitAbilityLevel(tu,0x41303434,lvlInt+1)
endif
set lvlInt=GetUnitAbilityLevel(tu,0x41303434)
set dmg=(lvlInt*2.)*manaConst
call UnitDamageTarget(damager,tu,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call EnableTrigger(Neji__jukendmg)
set tu=null
set damager=null
endfunction
function Neji__AttackConditions takes nothing returns boolean
return not IsUnitIllusion(GetAttacker())and GetUnitAbilityLevel(GetAttacker(),Neji_JUKEN)>0 and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)
endfunction
function Neji__AttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
call GroupAddUnit(Neji__grJuken,tu)
if not IsUnitInGroup(tu,Neji__grJukenReg)then
call GroupAddUnit(Neji__grJukenReg,tu)
call TriggerRegisterUnitEvent(Neji__jukendmg,tu,EVENT_UNIT_DAMAGED)
endif
set tu=null
endfunction
function Neji__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Neji_KAITEN or i==Neji_BYAKUGAN or i==Neji_HAKKE_ROKUJUYON_SHO
endfunction
function Neji__SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
if Neji__c==null then
set Neji__c=GetTriggerUnit()
set Neji__p=GetOwningPlayer(Neji__c)
endif
if i==Neji_KAITEN then
call Neji__KaitenCast()
elseif i==Neji_BYAKUGAN then
if GetUnitAbilityLevel(Neji__c,0x42303249)==0 then
call Neji__ByakuganCast()
else
call UnitRemoveAbility(Neji__c,0x42303249)
endif
elseif i==Neji_HAKKE_ROKUJUYON_SHO then
call Neji__HakkeRokujuyonShoCast(GetSpellTargetUnit())
endif
endfunction
function Neji_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger jukenattack=CreateTrigger()
set Neji__jukendmg=CreateTrigger()
set Neji__grJukenReg=CreateGroup()
set Neji__grJuken=CreateGroup()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(jukenattack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41303346,false)
call SetPlayerAbilityAvailable(Player(i),0x41304934,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Neji__SpellsConditions))
call TriggerAddAction(spells,function Neji__SpellsActions)
call TriggerAddCondition(jukenattack,Condition(function Neji__AttackConditions))
call TriggerAddAction(jukenattack,function Neji__AttackActions)
call TriggerAddCondition(Neji__jukendmg,Condition(function Neji__GetDamageConditions))
call TriggerAddAction(Neji__jukendmg,function Neji__GetDamageActions)
set jukenattack=null
set spells=null
endfunction
function cj_anonym__590 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real regen=LoadReal(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if GetWidgetLife(Obito_c)>.405 and time>0.then
call SetWidgetLife(Obito_c,GetWidgetLife(Obito_c)+regen)
call SaveReal(HH,h,2,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,3))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function cj_anonym__589 takes nothing returns nothing
call EnableTrigger(Obito_trgRikudoSenjutsuDamage)
call DestroyTimer(GetExpiredTimer())
endfunction
function Obito__RikudoSenjutsuStartRegen takes real dmg returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cd=12.
local real period=.1
local real time=3.
call Sound("Obito Rikudo Senjutsu.mp3")
call DisableTrigger(Obito_trgRikudoSenjutsuDamage)
call TimerStart(CreateTimer(),cd,false,function cj_anonym__589)
call SaveReal(HH,h,0,dmg*period)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveAgentHandle(HH,h,3,AddSpecialEffectTarget("Abilities\\Spells\\Other\\Drain\\DrainTarget.mdl",Obito_c,"origin"))
call TimerStart(t,period,true,function cj_anonym__590)
set t=null
endfunction
function Obito__RikudoSenjutsuGetDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and not IsTriggerEnabled(Obito_trgGudodamaSphereDamage)
endfunction
function Obito__RikudoSenjutsuGetDamageActions takes nothing returns nothing
local real dmg=GetEventDamage()
local real xx=.05
local real need_life=GetUnitState(Obito_c,UNIT_STATE_MAX_LIFE)*xx
if dmg>=need_life then
call Obito__RikudoSenjutsuStartRegen(dmg)
endif
endfunction
function cj_anonym__592 takes nothing returns nothing
call PauseUnit(Obito_c,false)
call SetUnitInvulnerable(Obito_c,false)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__591 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real end_time=.734
local real dmg=550.
local integer random=GetRandomInt(1,3)
local real time_debuff=12.
local integer id_1=0
local integer id_2=0
local real x=GetWidgetX(Obito_c)
local real y=GetWidgetY(Obito_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real max_range=800.
if random==1 then
set id_1=0x41304A5A
set id_2=0x42303637
elseif random==2 then
set id_1=0x41305444
elseif random==3 then
set id_1=0
endif
if distance<=max_range then
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateDummyEffect(x1,y1,GetRandomReal(1.,1.35),"NewDirtEXNofire.mdx",GetRandomReal(0.,360.))
else
call CreateDummyEffect(x1,y1,GetRandomReal(1.,1.35),"IceSparks.mdx",GetRandomReal(0.,360.))
endif
call UnitDamageTarget(Obito_c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
if GetWidgetLife(tu)>.405 then
if id_1!=0 then
call UnitTempSpell(tu,id_1,id_2,time_debuff,0,false)
else
set bj_lastCreatedUnit=CreateUnit(Obito_p,0x6E303042,x,y,GetUnitFacing(tu)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313338)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
endif
endif
endif
call TimerStart(CreateTimer(),end_time,false,function cj_anonym__592)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Obito__NunobokoCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cast_time=1.266
call Sound("Obito Nunoboko no Ken.mp3")
call PauseUnit(Obito_c,true)
call SetUnitInvulnerable(Obito_c,true)
call SetUnitAnimation(Obito_c,"Spell Three")
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,cast_time,false,function cj_anonym__591)
set t=null
endfunction
function cj_anonym__593 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call BijudamaAct(Obito_c,LoadUnitHandle(HH,h,0),LoadReal(HH,h,1),LoadReal(HH,h,2))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Obito__BijudamaFall takes unit d,real dmg,real radius returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real fall_speed=350.
local real fall_time=GetUnitFlyHeight(d)/fall_speed
call SetUnitFlyHeight(d,0.,fall_speed)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,radius)
call TimerStart(t,fall_time,false,function cj_anonym__593)
set t=null
endfunction
function cj_anonym__594 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real distance=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real a=LoadReal(HH,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if distance>offset then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,3,distance-offset)
else
call BijudamaAct(Obito_c,d,LoadReal(HH,h,1),LoadReal(HH,h,2))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Obito__BijudamaStartMovement takes unit d,real dmg,real radius,unit tu,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real period=.025
local real speed=1250.
local real offset=speed*period
local real distance
local real need_height=100.
local real move_time
local real random_degree=GetRandomReal(1.,360.)
local real random_offset=radius/2.
local real a
if tu!=null and not IsUnitHero(tu)then
set x1=x1+random_offset*Cos(random_degree*bj_DEGTORAD)
set y1=y1+random_offset*Sin(random_degree*bj_DEGTORAD)
endif
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
set move_time=distance/speed
call SetUnitFlyHeight(d,need_height,move_time)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,distance)
call SaveReal(HH,h,4,offset)
call SaveReal(HH,h,5,a)
call TimerStart(t,period,true,function cj_anonym__594)
set t=null
endfunction
function Obito__BijudamaGetRandomY takes rect r returns real
return GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
endfunction
function Obito__BijudamaGetRandomX takes rect r returns real
return GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
endfunction
function Obito__BijudamaGetPointsToAttack takes unit d1,unit d2,unit d3,unit d4,real dmg,real radius returns nothing
local group gr_loop=CreateGroup()
local group gr_saved=CreateGroup()
local unit tu=null
local integer cur_saved
local integer cur=0
local integer max=4
local real x
local real y
local real x1
local real y1
local real min_dist=600.
local unit tg
local rect r=gg_rct_Weather
if DuelHeroOn[GetPlayerId(Obito_p)]then
set r=gg_rct_Duel
endif
call Sound("Obito Bijudama Damage.mp3")
call GroupEnumUnitsInRect(gr_loop,r,null)
loop
set tg=FirstOfGroup(gr_loop)
exitwhen tg==null or cur==max
if IsUnitVisible(tg,Obito_p)then
if IsUnitEnemy(tg,Obito_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitGakureBuilding(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)then
if not IsUnitHero(tg)then
if tu!=null then
set x=GetWidgetX(tg)
set y=GetWidgetY(tg)
set x1=GetWidgetX(tu)
set y1=GetWidgetY(tu)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<min_dist then
set tu=tg
call GroupAddUnit(gr_saved,tg)
set cur=cur+1
endif
else
set tu=tg
call GroupAddUnit(gr_saved,tg)
set cur=cur+1
endif
else
set tu=tg
call GroupAddUnit(gr_saved,tg)
set cur=cur+1
endif
endif
endif
call GroupRemoveUnit(gr_loop,tg)
endloop
call DestroyGroup(gr_loop)
if cur>0 then
set cur_saved=cur
loop
set tg=FirstOfGroup(gr_saved)
exitwhen tg==null
if cur==1 then
call Obito__BijudamaStartMovement(d1,dmg,radius,tg,GetWidgetX(tg),GetWidgetY(tg))
set d1=null
elseif cur==2 then
call Obito__BijudamaStartMovement(d2,dmg,radius,tg,GetWidgetX(tg),GetWidgetY(tg))
set d2=null
elseif cur==3 then
call Obito__BijudamaStartMovement(d3,dmg,radius,tg,GetWidgetX(tg),GetWidgetY(tg))
set d3=null
elseif cur==4 then
call Obito__BijudamaStartMovement(d4,dmg,radius,tg,GetWidgetX(tg),GetWidgetY(tg))
set d4=null
endif
set cur=cur-1
call GroupRemoveUnit(gr_saved,tg)
endloop
if max-cur_saved>0 then
if d1!=null then
call Obito__BijudamaStartMovement(d1,dmg,radius,null,Obito__BijudamaGetRandomX(r),Obito__BijudamaGetRandomY(r))
endif
if d2!=null then
call Obito__BijudamaStartMovement(d2,dmg,radius,null,Obito__BijudamaGetRandomX(r),Obito__BijudamaGetRandomY(r))
endif
if d3!=null then
call Obito__BijudamaStartMovement(d3,dmg,radius,null,Obito__BijudamaGetRandomX(r),Obito__BijudamaGetRandomY(r))
endif
if d4!=null then
call Obito__BijudamaStartMovement(d4,dmg,radius,null,Obito__BijudamaGetRandomX(r),Obito__BijudamaGetRandomY(r))
endif
endif
else
loop
if max==1 then
call Obito__BijudamaStartMovement(d1,dmg,radius,null,Obito__BijudamaGetRandomX(r),Obito__BijudamaGetRandomY(r))
elseif max==2 then
call Obito__BijudamaStartMovement(d2,dmg,radius,null,Obito__BijudamaGetRandomX(r),Obito__BijudamaGetRandomY(r))
elseif max==3 then
call Obito__BijudamaStartMovement(d3,dmg,radius,null,Obito__BijudamaGetRandomX(r),Obito__BijudamaGetRandomY(r))
elseif max==4 then
call Obito__BijudamaStartMovement(d4,dmg,radius,null,Obito__BijudamaGetRandomX(r),Obito__BijudamaGetRandomY(r))
endif
set max=max-1
exitwhen max==cur
endloop
endif
call DestroyGroup(gr_saved)
set tg=null
set gr_loop=null
set gr_saved=null
set r=null
set tu=null
endfunction
function cj_anonym__595 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call KillUnit(LoadUnitHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Obito__BijudamaKillTree takes unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real kill_time=1.
call SaveAgentHandle(HH,h,0,d)
call TimerStart(t,kill_time,false,function cj_anonym__595)
set t=null
endfunction
function cj_anonym__597 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real size=LoadReal(HH,h,5)
local real size_plus=LoadReal(HH,h,6)
local real time_stop=LoadReal(HH,h,7)
local real dmg_plus=LoadReal(HH,h,8)
local real dmg=LoadReal(HH,h,9)
local real radius_plus=LoadReal(HH,h,10)
local real radius=LoadReal(HH,h,11)
local real period=LoadReal(HH,h,12)
local real time=LoadReal(HH,h,13)
local integer number=4
if GetWidgetLife(d)>.405 and time>0.then
if time>time_stop then
set size=size+size_plus
loop
set d=LoadUnitHandle(HH,h,number)
call SetUnitScale(d,size,size,size)
set number=number-1
exitwhen number==0
endloop
call SaveReal(HH,h,5,size)
endif
call SaveReal(HH,h,9,dmg+dmg_plus)
call SaveReal(HH,h,11,radius+radius_plus)
call SaveReal(HH,h,13,time-period)
else
if GetWidgetLife(d)>.405 then
call Obito__BijudamaKillTree(LoadUnitHandle(HH,h,0))
call Obito__BijudamaGetPointsToAttack(LoadUnitHandle(HH,h,1),LoadUnitHandle(HH,h,2),LoadUnitHandle(HH,h,3),LoadUnitHandle(HH,h,4),dmg,radius)
else
loop
call Obito__BijudamaFall(LoadUnitHandle(HH,h,number),dmg,radius)
set number=number-1
exitwhen number==0
endloop
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__596 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer number=4
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real start_offset=300.
local real degree=f
local real degree_step=360./number
local real height
local real period=.05
local real size=1.
local real size_plus=1.*period
local real time_stop=.5
local real time=5.+time_stop
local real dmg=0.
local real dmg_plus=360.*period
local real radius=100.
local real radius_plus=100.*period
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SaveAgentHandle(HH,h1,0,d)
loop
if number==4 then
set height=200.
elseif number==3 then
set height=250.
elseif number==2 then
set height=500.
elseif number==1 then
set height=550.
endif
set d=CreateUnit(Obito_p,0x6E303133,x+start_offset*Cos(degree*bj_DEGTORAD),y+start_offset*Sin(degree*bj_DEGTORAD),degree)
call SetUnitFlyHeight(d,height,0.)
call SaveAgentHandle(HH,h1,number,d)
set degree=degree+degree_step
set number=number-1
exitwhen number==0
endloop
call SaveReal(HH,h1,5,size)
call SaveReal(HH,h1,6,size_plus)
call SaveReal(HH,h1,7,time_stop)
call SaveReal(HH,h1,8,dmg_plus)
call SaveReal(HH,h1,9,dmg)
call SaveReal(HH,h1,10,radius_plus)
call SaveReal(HH,h1,11,radius)
call SaveReal(HH,h1,12,period)
call SaveReal(HH,h1,13,time)
call TimerStart(t1,period,true,function cj_anonym__597)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
set t1=null
endfunction
function Obito__BijudamaCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cast_time=1.5
local unit d=CreateUnit(Obito_p,0x6E30344F,GetWidgetX(Obito_c),GetWidgetY(Obito_c),GetRandomReal(1.,360.))
call Sound("Obito Bijudama Cast.mp3")
call SetUnitAnimation(d,"Birth")
call SaveAgentHandle(HH,h,0,d)
call TimerStart(t,cast_time,false,function cj_anonym__596)
set d=null
set t=null
endfunction
function Obito__MusekiYojinRemove takes unit d,integer max returns nothing
local integer hd=GetHandleId(d)
local integer i=0
loop
call RemoveDestructable(LoadDestructableHandle(HH,hd,i))
set i=i+1
exitwhen i==max
endloop
endfunction
function Obito__MusekiYojinCreateBlock takes unit d returns integer
local integer hd=GetHandleId(d)
local integer i=0
local integer max=60
local real radius=600.
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real startOffset=radius/2.
local real degree=0.
local real degreeStep=360./max
loop
call SaveDestructableHandle(HH,hd,i,CreateDestructable(0x59546663,x+startOffset*Cos(degree*bj_DEGTORAD),y+startOffset*Sin(degree*bj_DEGTORAD),0.,1.,0))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
return max
endfunction
function cj_anonym__598 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.then
if time==6.then
call SetUnitTimeScale(d,0.)
call SaveInteger(HH,h,3,Obito__MusekiYojinCreateBlock(d))
endif
call SaveReal(HH,h,2,time-period)
else
call Obito__MusekiYojinRemove(d,LoadInteger(HH,h,3))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Obito__MusekiYojinCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit d=CreateUnit(Obito_p,0x6E30344E,x1,y1,GetUnitFacing(Obito_c))
local real period=1.
local real time=7.
call Sound("Obito Museki Yojin.mp3")
call SetUnitTimeScale(d,2.)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__598)
set d=null
set t=null
endfunction
function cj_anonym__599 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real dmg=500.
local real radius=300.
local real stun_time=2.25
local group g=CreateGroup()
local unit tg
call DestroyEffect(AddSpecialEffect("Slam.mdx",x1,y1))
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Obito_p)then
call UnitDamageTarget(Obito_c,tg,GetTaijutsuDamage(dmg,Obito_c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
if GetWidgetLife(tg)>.405 then
call GetStun(tg,stun_time)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tg=null
set g=null
set t=null
endfunction
function Obito__GudodamaHandsCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real cast_time=.567
call Sound("Obito Gudodama Hands.mp3")
call UnitRemoveAbility(Obito_c,0x42303634)
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,cast_time,false,function cj_anonym__599)
set t=null
endfunction
function Obito__GudodamaLanceGetDamageConditions takes nothing returns boolean
return GetEventDamage()>.0 and GetUnitAbilityLevel(GetEventDamageSource(),0x41304A33)>0 and IsUnitInGroup(GetTriggerUnit(),Obito__grGudodamaLanceCheck)
endfunction
function Obito__GudodamaLanceGetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real dmg_add=75.
call DisableTrigger(Obito__trgGudodamaLanceDamage)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(Obito_c,tu,dmg_add,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call GroupRemoveUnit(Obito__grGudodamaLanceCheck,tu)
call EnableTrigger(Obito__trgGudodamaLanceDamage)
set tu=null
endfunction
function Obito__GudodamaLanceAttackConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),0x41304A33)>0 and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(GetTriggerUnit(),Obito__grGudodamaLanceCheck)
endfunction
function Obito__GudodamaLanceAttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Obito__grGudodamaLanceReg)then
call GroupAddUnit(Obito__grGudodamaLanceReg,tu)
call TriggerRegisterUnitEvent(Obito__trgGudodamaLanceDamage,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Obito__grGudodamaLanceCheck,tu)
set tu=null
endfunction
function cj_anonym__600 takes nothing returns nothing
call UnitRemoveAbility(Obito_c,0x41304A33)
call UnitRemoveAbility(Obito_c,0x42303636)
call GroupClear(Obito__grGudodamaLanceCheck)
call DisableTrigger(Obito__trgGudodamaLanceDamage)
call DestroyTimer(GetExpiredTimer())
endfunction
function Obito__GudodamaLanceCast takes nothing returns nothing
local real time=10.
call Sound("Obito Gudodama Lance.mp3")
call UnitRemoveAbility(Obito_c,0x42303634)
call UnitAddAbility(Obito_c,0x41304A33)
call EnableTrigger(Obito__trgGudodamaLanceDamage)
call TimerStart(CreateTimer(),time,false,function cj_anonym__600)
endfunction
function cj_anonym__601 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real distance=LoadReal(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real a=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local unit t1=LoadUnitHandle(HH,h,4)
local unit t2=LoadUnitHandle(HH,h,5)
if GetWidgetLife(Obito_c)>.405 and distance>offset then
call SetUnitPosition(Obito_c,GetWidgetX(Obito_c)+offset*Cos(a*bj_DEGTORAD),GetWidgetY(Obito_c)+offset*Sin(a*bj_DEGTORAD))
if t1!=null then
call SetUnitPosition(t1,GetWidgetX(t1)+offset*Cos(a*bj_DEGTORAD),GetWidgetY(t1)+offset*Sin(a*bj_DEGTORAD))
endif
if t2!=null then
call SetUnitPosition(t2,GetWidgetX(t2)+offset*Cos(a*bj_DEGTORAD),GetWidgetY(t2)+offset*Sin(a*bj_DEGTORAD))
endif
call SaveReal(HH,h,0,distance-offset)
else
call Sound("Obito Gudodama Swords Damage.mp3")
if t1!=null then
call PauseUnit(t1,false)
call SetUnitPathing(t1,true)
call UnitDamageTarget(Obito_c,t1,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
if t2!=null then
call PauseUnit(t2,false)
call SetUnitPathing(t2,true)
call UnitDamageTarget(Obito_c,t2,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t1=null
set t2=null
set t=null
endfunction
function Obito__GudodamaSwordsStart takes unit t1,unit t2,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.05
local real distance=600.
local real speed=750.
local real offset=speed*period
local real dmg=350.
call Sound("Obito Gudodama Swords Cast.mp3")
call SetUnitPathing(Obito_c,false)
call SaveReal(HH,h,0,distance)
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,a)
call SaveReal(HH,h,3,dmg)
if t1!=null then
call PauseUnit(t1,true)
call SetUnitPathing(t1,false)
call SaveAgentHandle(HH,h,4,t1)
endif
if t2!=null then
call PauseUnit(t2,true)
call SetUnitPathing(t2,false)
call SaveAgentHandle(HH,h,5,t2)
endif
call TimerStart(t,period,true,function cj_anonym__601)
set t=null
endfunction
function Obito__GudodamaSwordsCast takes real x1,real y1 returns nothing
local integer max=2
local real radius=150.
local real start_offset=radius/2.
local real x=GetWidgetX(Obito_c)
local real y=GetWidgetY(Obito_c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real x2=x+start_offset*Cos(a*bj_DEGTORAD)
local real y2=y+start_offset*Sin(a*bj_DEGTORAD)
local group g=CreateGroup()
local unit tu_1=null
local unit tu_2=null
local unit tg
call UnitRemoveAbility(Obito_c,0x42303634)
call GroupEnumUnitsInRange(g,x2,y2,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or max==0
if IsUnitNeedClear(tg,Obito_p)then
if tu_1==null then
set tu_1=tg
set max=max-1
elseif tu_2==null then
set tu_2=tg
set max=max-1
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if max<2 then
call Obito__GudodamaSwordsStart(tu_1,tu_2,a)
else
call DisplayTimedTextToPlayer(Obito_p,0.,0.,1.,"|cFFFFCC00Техника не сработала!|r")
endif
set g=null
set tu_1=null
set tu_2=null
set tg=null
endfunction
function cj_anonym__602 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Obito_p)then
call UnitDamageTarget(Obito_c,tg,GetNinjutsuDamage(dmg,Obito_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set bj_lastCreatedUnit=CreateUnit(Obito_p,0x6E303042,x,y,0.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313544)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call IssueTargetOrder(bj_lastCreatedUnit,"silence",bj_lastCreatedUnit)
call CreateEffect(x,y,1.5,"Energy Release.mdx",2.)
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set g=null
set tg=null
set d=null
set t=null
endfunction
function Obito__GudodamaBombCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=200.+GetHeroInt(Obito_c,true)*2.
local real radius=500.
local real cast_time=1.5
call Sound("Obito Gudodama Bomb.mp3")
call UnitRemoveAbility(Obito_c,0x42303634)
call SaveAgentHandle(HH,h,0,CreateUnit(Obito_p,0x6E303450,x1,y1,0.))
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,radius)
call TimerStart(t,cast_time,false,function cj_anonym__602)
set t=null
endfunction
function Obito__GudodamaSphereGetDamageConditions takes nothing returns boolean
return Obito__uGudodamaSphere!=null and GetEventDamage()>0.
endfunction
function Obito__GudodamaSphereGetDamageActions takes nothing returns nothing
local real dmg=GetEventDamage()
local real life=GetWidgetLife(Obito__uGudodamaSphere)
if dmg<=life then
call SetWidgetLife(Obito_c,GetWidgetLife(Obito_c)+dmg)
call SetWidgetLife(Obito__uGudodamaSphere,GetWidgetLife(Obito__uGudodamaSphere)-dmg)
else
call SetWidgetLife(Obito_c,GetWidgetLife(Obito_c)+life)
call SetWidgetLife(Obito__uGudodamaSphere,GetWidgetLife(Obito__uGudodamaSphere)-life)
endif
endfunction
function cj_anonym__603 takes nothing returns nothing
if GetUnitCurrentOrder(Obito_c)==OrderId("whirlwind")then
call SetUnitPosition(Obito__uGudodamaSphere,GetWidgetX(Obito_c),GetWidgetY(Obito_c))
else
call RemoveUnit(Obito__uGudodamaSphere)
set Obito__uGudodamaSphere=null
call DisableTrigger(Obito_trgGudodamaSphereDamage)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Obito__GudodamaSphereCast takes nothing returns nothing
local real size=30.
call Sound("Obito Gudodama Sphere.mp3")
call UnitRemoveAbility(Obito_c,0x42303634)
call EnableTrigger(Obito_trgGudodamaSphereDamage)
set Obito__uGudodamaSphere=CreateUnit(Obito_p,0x68303138,GetWidgetX(Obito_c),GetWidgetY(Obito_c),0.)
call SetUnitTimeScale(Obito__uGudodamaSphere,0.)
call SetUnitScale(Obito__uGudodamaSphere,size,size,size)
call TimerStart(CreateTimer(),MainPeriod,true,function cj_anonym__603)
endfunction
function cj_anonym__604 takes nothing returns nothing
if GetUnitAbilityLevel(Obito_c,0x42303634)==0 then
call SetPlayerAbilityAvailable(Obito_p,0x4130524A,false)
call SetPlayerAbilityAvailable(Obito_p,0x41305236,false)
call SetPlayerAbilityAvailable(Obito_p,0x41305232,false)
call SetPlayerAbilityAvailable(Obito_p,0x41303343,false)
call SetPlayerAbilityAvailable(Obito_p,0x41304C50,false)
call SetPlayerAbilityAvailable(Obito_p,Obito_GUDODAMA,true)
call SetPlayerAbilityAvailable(Obito_p,Obito_MUSEKI_YOJIN,true)
call SetPlayerAbilityAvailable(Obito_p,Obito_BIJUDAMA,true)
call SetPlayerAbilityAvailable(Obito_p,Obito_NUNOBOKO,true)
call SetPlayerAbilityAvailable(Obito_p,Obito_SENJUTSU,true)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Obito__GudodamaCast takes nothing returns nothing
local real period=.25
call Sound("Obito Gudodama.mp3")
call SetPlayerAbilityAvailable(Obito_p,Obito_GUDODAMA,false)
call SetPlayerAbilityAvailable(Obito_p,Obito_MUSEKI_YOJIN,false)
call SetPlayerAbilityAvailable(Obito_p,Obito_BIJUDAMA,false)
call SetPlayerAbilityAvailable(Obito_p,Obito_NUNOBOKO,false)
call SetPlayerAbilityAvailable(Obito_p,Obito_SENJUTSU,false)
if GetUnitAbilityLevel(Obito_c,0x4130524A)==0 then
call UnitAddAbility(Obito_c,0x4130524A)
endif
call SetPlayerAbilityAvailable(Obito_p,0x4130524A,true)
if GetUnitAbilityLevel(Obito_c,0x41305236)==0 then
call UnitAddAbility(Obito_c,0x41305236)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41305236,true)
if GetUnitAbilityLevel(Obito_c,0x41305232)==0 then
call UnitAddAbility(Obito_c,0x41305232)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41305232,true)
if GetUnitAbilityLevel(Obito_c,0x41303343)==0 then
call UnitAddAbility(Obito_c,0x41303343)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41303343,true)
if GetUnitAbilityLevel(Obito_c,0x41304C50)==0 then
call UnitAddAbility(Obito_c,0x41304C50)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41304C50,true)
call TimerStart(CreateTimer(),period,true,function cj_anonym__604)
endfunction
function Obito__JikukanIdoOver takes nothing returns nothing
call UnitRemoveAbility(Obito_c,0x42303032)
endfunction
function cj_anonym__605 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
set Obito__cdMokton=false
call DestroyEffect(LoadEffectHandle(HH,h,0))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Obito__MoktonAttackSecondStart takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=GetHeroInt(Obito_c,true)*3.
local real time=1.
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(Obito_c,tu,GetNinjutsuDamage(dmg,Obito_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveAgentHandle(HH,h,0,AddSpecialEffectTarget("Mokuton Branch 2.mdx",tu,"chest"))
call TimerStart(t,time,false,function cj_anonym__605)
set t=null
endfunction
function cj_anonym__607 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
call DestroyEffect(LoadEffectHandle(HH,h,1))
if GetWidgetLife(tu)>.405 and GetRandomInt(1,3)==1 then
call Obito__MoktonAttackSecondStart(tu)
else
set Obito__cdMokton=false
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function cj_anonym__606 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local real time=1.
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(Obito_c,tu,GetNinjutsuDamage(dmg,Obito_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveAgentHandle(HH,h1,0,tu)
call SaveAgentHandle(HH,h1,1,AddSpecialEffectTarget("Mokuton Branch 1.mdx",tu,"chest"))
call TimerStart(t1,time,false,function cj_anonym__607)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
set t1=null
endfunction
function Obito__MoktonAttackStart takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetUnitAbilityLevel(Obito_c,Obito_SAIBO)
local real dmg=lvl*25.+25.
local real time=.19
set Obito__cdMokton=true
call SetUnitAnimation(Obito_c,"Spell Two")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmg)
call TimerStart(t,time,false,function cj_anonym__606)
set t=null
endfunction
function Obito__AttackConditions takes nothing returns boolean
return not Obito__cdMokton and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)and GetUnitAbilityLevel(GetAttacker(),Obito_SAIBO)>0
endfunction
function Obito__AttackActions takes nothing returns nothing
if GetRandomInt(1,4)==1 then
call Obito__MoktonAttackStart(GetTriggerUnit())
endif
endfunction
function cj_anonym__608 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
if GetUnitCurrentOrder(Obito_c)==OrderId("whirlwind")then
call UnitDamageTarget(Obito_c,tu,GetUnitState(tu,UNIT_STATE_MAX_LIFE)*dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
else
call UnitRemoveAbility(tu,0x42303038)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Obito__MazoNoKusariDamage takes unit tu,real dmg returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
set bj_lastCreatedUnit=CreateUnit(Obito_p,0x6E303042,GetWidgetX(tu),GetWidgetY(tu),GetUnitFacing(tu)+180.)
call GroupAddUnit(Obito__grKusariSave,tu)
call UnitAddAbility(bj_lastCreatedUnit,0x41303443)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,.5)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmg*period)
call TimerStart(t,period,true,function cj_anonym__608)
set t=null
endfunction
function cj_anonym__609 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real rangeMax=LoadReal(HH,h,3)
local real rangeCur=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local real dmg=LoadReal(HH,h,6)
local group gr_saved=LoadGroupHandle(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if GetUnitCurrentOrder(Obito_c)==OrderId("whirlwind")then
if rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupAddUnit(gr_saved,CreateUnit(Obito_p,0x6E303359,x,y,f))
call SaveReal(HH,h,4,rangeCur+offset)
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Obito_p)and not IsUnitInGroup(tg,Obito__grKusariSave)then
call Obito__MazoNoKusariDamage(tg,dmg)
endif
call GroupRemoveUnit(g,tg)
endloop
else
loop
set tg=FirstOfGroup(gr_saved)
exitwhen tg==null
call RemoveUnit(tg)
call GroupRemoveUnit(gr_saved,tg)
endloop
call DestroyGroup(gr_saved)
call DestroyGroup(g)
call GroupClear(Obito__grKusariSave)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set gr_saved=null
set g=null
set d=null
set tg=null
set t=null
endfunction
function Obito__MazoNoKusariStart takes real x,real y,real x1,real y1,real randomDegreeCast returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real randomDegree=GetRandomReal(3.,10.)
local real a
local real period=.05
local real dmg=.05
local real speed=1200.
local real offset=speed*period
local real radius=40.
local real rangeMax=1000.
local real rangeCur=0.
local unit d
if randomDegreeCast<=180.then
set a=bj_RADTODEG*Atan2(y1-y,x1-x)-randomDegree
elseif randomDegreeCast>180.then
set a=bj_RADTODEG*Atan2(y1-y,x1-x)+randomDegree
endif
set d=CreateUnit(Obito_p,0x6E303359,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,rangeMax)
call SaveReal(HH,h,4,rangeCur)
call SaveReal(HH,h,5,radius)
call SaveReal(HH,h,6,dmg)
call SaveAgentHandle(HH,h,7,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__609)
set d=null
set t=null
endfunction
function Obito__MazoNoKusariCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer max=4
local real xHero=GetWidgetX(Obito_c)
local real yHero=GetWidgetY(Obito_c)
local real startOffset=100.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real randomDegree
call Sound("Obito Mazo no Kusari.mp3")
loop
set randomDegree=GetRandomReal(1.,360.)
call Obito__MazoNoKusariStart(x,y,x1,y1,randomDegree)
set max=max-1
exitwhen max==0
endloop
set t=null
endfunction
function cj_anonym__611 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d1=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real distance=LoadReal(HH,h,4)
local real offset=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local unit d2=LoadUnitHandle(HH,h,7)
local unit d3=LoadUnitHandle(HH,h,8)
local real size=LoadReal(HH,h,9)
local real sizePlus=LoadReal(HH,h,10)
local unit tg
local real x=GetWidgetX(d1)
local real y=GetWidgetY(d1)
if distance>0.then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Obito_p)then
call UnitDamageTarget(Obito_c,tg,GetNinjutsuDamage(dmg,Obito_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call JiraiyaSetFireOil(Obito_c,tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call FireDestructablesEnum(x,y,radius/2.)
call JiraiyaSetFireSwamp(Obito_c,x,y)
call SetUnitPosition(d1,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitPosition(d2,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitScale(d2,size,size,size)
call SetUnitScale(d3,size*1.25,size*1.25,size*1.25)
call SaveReal(HH,h,4,distance-offset)
call SaveReal(HH,h,9,size+sizePlus)
else
call DestroyGroup(g)
call CreateEffect(x,y,1.2,"Boom.mdx",1.)
call RemoveUnit(d1)
call KillUnit(d2)
call RemoveUnit(d3)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set d1=null
set d2=null
set d3=null
set t=null
endfunction
function cj_anonym__610 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real xHero=GetWidgetX(Obito_c)
local real yHero=GetWidgetY(Obito_c)
local real startOffset=175.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real time=2.
local real radius=250.
local real dmg=(60.+GetHeroInt(Obito_c,true)*1.5)*MainPeriod
local real distance=1000.
local real offset=distance/(time/MainPeriod)
local real sizePlus=.02
local real size=.4+sizePlus
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call SaveAgentHandle(HH,h1,0,CreateUnit(Obito_p,0x68303049,x,y,a))
call SaveAgentHandle(HH,h1,1,CreateGroup())
call SaveReal(HH,h1,2,radius)
call SaveReal(HH,h1,3,dmg)
call SaveReal(HH,h1,4,distance)
call SaveReal(HH,h1,5,offset)
call SaveReal(HH,h1,6,a)
call SaveAgentHandle(HH,h1,7,CreateUnit(Obito_p,0x6E303357,x,y,a))
call SaveAgentHandle(HH,h1,8,CreateUnit(Obito_p,0x6E303358,xHero,yHero,a+90.))
call SaveReal(HH,h1,9,size)
call SaveReal(HH,h1,10,sizePlus)
call TimerStart(t1,MainPeriod,true,function cj_anonym__611)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Obito__KatonGokakyuNoJutsuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=1.
call Sound("Obito Katon Gokakyu no Jutsu.mp3")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,castTime,false,function cj_anonym__610)
set t=null
endfunction
function Obito__UchihaKaenjinGetDamageConditions takes nothing returns boolean
return Obito__kaenjin!=null and GetEventDamage()>0.and GetWidgetLife(GetTriggerUnit())>.405 and IsUnitInGroup(GetTriggerUnit(),Obito__grUchihaKaenjinCheck)
endfunction
function Obito__UchihaKaenjinGetDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local real dmg=GetEventDamage()
local real life=GetWidgetLife(Obito__kaenjin)
if dmg<=life then
call SetWidgetLife(u,GetWidgetLife(u)+dmg)
call SetWidgetLife(Obito__kaenjin,GetWidgetLife(Obito__kaenjin)-dmg)
else
call SetWidgetLife(u,GetWidgetLife(u)+life)
call SetWidgetLife(Obito__kaenjin,GetWidgetLife(Obito__kaenjin)-life)
endif
set u=null
endfunction
function Obito__UchihaKaenjinDefense takes real radius returns nothing
local real x=GetWidgetX(Obito__kaenjin)
local real y=GetWidgetY(Obito__kaenjin)
local real x1
local real y1
local rect r=Rect(x-radius,y-radius,x+radius,y+radius)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if tg!=Obito__kaenjin and IsUnitAlly(tg,Obito_p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if not IsUnitInGroup(tg,Obito__grUchihaKaenjinReg)then
call GroupAddUnit(Obito__grUchihaKaenjinReg,tg)
call TriggerRegisterUnitEvent(Obito__trgUchihaKaenjinDamage,tg,EVENT_UNIT_DAMAGED)
endif
if not IsUnitInGroup(tg,Obito__grUchihaKaenjinCheck)then
call GroupAddUnit(Obito__grUchihaKaenjinCheck,tg)
endif
else
call GroupRemoveUnit(Obito__grUchihaKaenjinCheck,tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call RemoveRect(r)
set r=null
set tg=null
set g=null
endfunction
function Obito__UchihaKaenjinRemove takes integer max returns nothing
local integer hd=GetHandleId(Obito__kaenjin)
local integer i=0
loop
call RemoveDestructable(LoadDestructableHandle(HH,hd,i))
set i=i+1
exitwhen i==max
endloop
endfunction
function Obito__UchihaKaenjinCreateBlock takes real radius returns integer
local integer hd=GetHandleId(Obito__kaenjin)
local integer i=0
local integer max=24
local real x=GetWidgetX(Obito__kaenjin)
local real y=GetWidgetY(Obito__kaenjin)
local real startOffset=radius/2.
local real degree=0.
local real degreeStep=360./max
loop
call SaveDestructableHandle(HH,hd,i,CreateDestructable(0x59546663,x+startOffset*Cos(degree*bj_DEGTORAD),y+startOffset*Sin(degree*bj_DEGTORAD),0.,1.,0))
set degree=degree+degreeStep
set i=i+1
exitwhen i==max
endloop
return max
endfunction
function Obito__UchihaKaenjinDamage takes real radius,real dmg returns nothing
local real x=GetWidgetX(Obito__kaenjin)
local real y=GetWidgetY(Obito__kaenjin)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Obito_p)then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIfb\\AIfbSpecialArt.mdl",tg,"chest"))
call UnitDamageTarget(Obito_c,tg,GetNinjutsuDamage(dmg,Obito_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Obito_c,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call FireDestructablesEnum(x,y,radius/2.)
call JiraiyaSetFireSwamp(Obito_c,x,y)
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__612 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
if time>0.and GetWidgetLife(Obito__kaenjin)>.405 then
call Obito__UchihaKaenjinDefense(radius)
call Obito__UchihaKaenjinDamage(radius,LoadReal(HH,h,4))
call SaveReal(HH,h,2,time-period)
else
call DisableTrigger(Obito__trgUchihaKaenjinDamage)
call Obito__UchihaKaenjinRemove(LoadInteger(HH,h,0))
call GroupClear(Obito__grUchihaKaenjinCheck)
call RemoveUnit(Obito__kaenjin)
set Obito__kaenjin=null
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Obito__UchihaKaenjinCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real f=GetUnitFacing(tu)
local real period=1.
local real time=4.
local real dmg=50.*period
local real radius=350.
set Obito__kaenjin=CreateUnit(Obito_p,0x68303053,x1,y1,f)
call EnableTrigger(Obito__trgUchihaKaenjinDamage)
call Obito__UchihaKaenjinDefense(radius)
call Sound("Obito Uchiha Kaenjin.mp3")
call SaveInteger(HH,h,0,Obito__UchihaKaenjinCreateBlock(radius))
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,dmg)
call TimerStart(t,period,true,function cj_anonym__612)
set t=null
endfunction
function Obito__KatonBakufuRanbuDamage takes unit d,real radius,real dmg returns nothing
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Obito_p)and not IsUnitInGroup(tg,Obito__grKaton)then
call GroupAddUnit(Obito__grKaton,tg)
call UnitDamageTarget(Obito_c,tg,GetNinjutsuDamage(dmg,Obito_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Obito_c,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call JiraiyaSetFireSwamp(Obito_c,x,y)
call FireDestructablesEnum(x,y,radius/2.)
set tg=null
set g=null
endfunction
function cj_anonym__613 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real dmg=LoadReal(HH,h,-2)
local real radius=LoadReal(HH,h,-3)
local integer max=LoadInteger(HH,h,-4)
local integer i=0
if GetUnitCurrentOrder(Obito_c)==OrderId("breathoffire")then
loop
call Obito__KatonBakufuRanbuDamage(LoadUnitHandle(HH,h,i),radius,dmg)
set i=i+1
exitwhen i==max
endloop
else
call KillUnit(LoadUnitHandle(HH,h,-1))
loop
call RemoveUnit(LoadUnitHandle(HH,h,i))
set i=i+1
exitwhen i==max
endloop
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
call GroupClear(Obito__grKaton)
set t=null
endfunction
function Obito__KatonBakufuRanbuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real xHero=GetWidgetX(Obito_c)
local real yHero=GetWidgetY(Obito_c)
local real startOffset=25.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real dmg=(30.+GetHeroInt(Obito_c,true)*1.25)*period
local real radius=200.
local real offsetCur=radius/2.
local real offsetPlus=radius/2.
local real range=1200.
local integer i=0
local integer max=R2I(range/offsetPlus)
call Sound("Obito Katon Bakufu Ranbu.mp3")
loop
call SaveAgentHandle(HH,h,i,CreateUnit(Obito_p,0x6E303145,x+offsetCur*Cos(a*bj_DEGTORAD),y+offsetCur*Sin(a*bj_DEGTORAD),a))
set offsetCur=offsetCur+offsetPlus
set i=i+1
exitwhen i==max
endloop
call SaveAgentHandle(HH,h,-1,CreateUnit(Obito_p,0x68303158,x,y,a+90.))
call SaveReal(HH,h,-2,dmg)
call SaveReal(HH,h,-3,radius)
call SaveInteger(HH,h,-4,max)
call TimerStart(t,period,true,function cj_anonym__613)
set t=null
endfunction
function Obito__KamuiMove takes real x1,real y1 returns nothing
local integer hc=GetHandleId(Obito_c)
local integer count=0
local real x=LoadReal(HH,hc,0)
local real y=LoadReal(HH,hc,1)
local player p2
local group g=CreateGroup()
local unit tg
local rect r=gg_rct_Weather
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitInGroup(tg,Obito__grKamui)and tg!=Obito_c then
set count=count+1
endif
call GroupRemoveUnit(g,tg)
endloop
if count>0 then
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=3500.then
call SaveReal(HH,hc,0,x1)
call SaveReal(HH,hc,1,y1)
call SaveBoolean(HH,hc,2,true)
else
call DisplayTimedTextToPlayer(Obito_p,0.,0.,4.,"|cFFFFCC00Расстояние для перемещения цели слишком большое.|r")
endif
else
call SaveReal(HH,hc,0,x1)
call SaveReal(HH,hc,1,y1)
call SaveBoolean(HH,hc,2,true)
endif
else
call DisplayTimedTextToPlayer(Obito_p,0.,0.,4.,"|cFFFFCC00Вы не можете переместить сюда войска.|r")
endif
call DestroyGroup(g)
set g=null
set r=null
set tg=null
set p2=null
endfunction
function Obito__KamuiSelfCast takes nothing returns nothing
set Obito__KamuiSelfOn=true
endfunction
function Obito__KamuiGetTarget takes real x,real y returns nothing
local group g=CreateGroup()
local unit tg
call Sound("Obito Kamui TP.mp3")
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41313058)>0 then
call UnitRemoveAbility(tg,0x41313058)
call SetUnitPosition(tg,x,y)
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=null
set g=null
endfunction
function cj_anonym__615 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer hc=GetHandleId(Obito_c)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
local real x=LoadReal(HH,hc,0)
local real y=LoadReal(HH,hc,1)
local boolean log=LoadBoolean(HH,hc,2)
local integer i=0
local player p2
if time>0.and GetWidgetLife(Obito_c)>.405 and not log then
loop
exitwhen i>10
set p2=Player(i)
if p2!=Obito_p and i!=5 and Obito_logKamui[GetPlayerId(p2)]then
if GetLocalPlayer()==p2 then
call CameraSetupApplyForceDuration(gg_cam_Kamui,true,0.)
endif
endif
set i=i+1
endloop
call SaveReal(HH,h,1,time-period)
else
loop
exitwhen i>10
set p2=Player(i)
if p2!=Obito_p and i!=5 and Obito_logKamui[GetPlayerId(p2)]then
set Obito_logKamui[GetPlayerId(p2)]=false
if GetLocalPlayer()==p2 then
call ResetToGameCamera(0.)
call SetCameraBounds(GetRectMinX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea),GetRectMinX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMaxY(bj_mapInitialPlayableArea),GetRectMaxX(bj_mapInitialPlayableArea),GetRectMinY(bj_mapInitialPlayableArea))
call SetCameraPosition(x,y)
endif
endif
set i=i+1
endloop
call Obito__KamuiGetTarget(x,y)
set Obito_logKamui[GetPlayerId(Obito_p)]=false
if GetLocalPlayer()==Obito_p then
call SetCameraPosition(x,y)
call ClearSelection()
call SelectUnit(Obito_c,true)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41303451,false)
call GroupClear(Obito__grKamui)
call UnitApplyTimedLife(CreateUnit(Obito_p,0x68303046,x,y,0.),0x42544C46,.1)
call FlushChildHashtable(HH,hc)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set p2=null
set t=null
endfunction
function cj_anonym__614 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real x1
local real y1
local real radius=300.
local real time=8.
local real period=.1
local boolean log=false
local integer i=0
local integer hc=GetHandleId(Obito_c)
local group g=CreateGroup()
local unit tg
local player p2
local timer t1
local integer h1
call SetPlayerAbilityAvailable(Obito_p,0x4130554D,false)
if GetUnitAbilityLevel(Obito_c,0x4130554E)>0 then
call SetPlayerAbilityAvailable(Obito_p,0x41304D36,true)
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if tg!=Obito_c and GetWidgetLife(tg)>.405 and not IsUnitOutpost(tg)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitHidden(tg)then
if not log then
set log=true
endif
call UnitAddAbility(tg,0x41313058)
call GroupAddUnit(Obito__grKamui,tg)
set p2=GetOwningPlayer(tg)
if not Obito_logKamui[GetPlayerId(p2)]then
set Obito_logKamui[GetPlayerId(p2)]=true
endif
call SetUnitPosition(tg,GetRandomReal(GetRectMinX(gg_rct_Kamui),GetRectMaxX(gg_rct_Kamui)),GetRandomReal(GetRectMinY(gg_rct_Kamui),GetRectMaxY(gg_rct_Kamui)))
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if Obito__KamuiSelfOn then
call UnitAddAbility(Obito_c,0x41313058)
call GroupAddUnit(Obito__grKamui,Obito_c)
if not Obito_logKamui[GetPlayerId(Obito_p)]then
set Obito_logKamui[GetPlayerId(Obito_p)]=true
endif
call SetUnitPosition(Obito_c,GetRandomReal(GetRectMinX(gg_rct_Kamui),GetRectMaxX(gg_rct_Kamui)),GetRandomReal(GetRectMinY(gg_rct_Kamui),GetRectMaxY(gg_rct_Kamui)))
if not log then
set log=true
endif
set Obito__KamuiSelfOn=false
endif
if log then
set t1=CreateTimer()
set h1=GetHandleId(t1)
loop
exitwhen i>10
set p2=Player(i)
if p2!=Obito_p and Obito_logKamui[i]and i!=5 then
if GetLocalPlayer()==p2 then
call ResetToGameCamera(0.)
call SetCameraBounds(GetRectMinX(gg_rct_Kamui),GetRectMinY(gg_rct_Kamui),GetRectMinX(gg_rct_Kamui),GetRectMaxY(gg_rct_Kamui),GetRectMaxX(gg_rct_Kamui),GetRectMaxY(gg_rct_Kamui),GetRectMaxX(gg_rct_Kamui),GetRectMinY(gg_rct_Kamui))
call CameraSetupApplyForceDuration(gg_cam_Kamui,true,0.)
endif
endif
set i=i+1
endloop
set x1=GetRectCenterX(gg_rct_Kamui)
set y1=GetRectCenterY(gg_rct_Kamui)
if Obito_logKamui[GetPlayerId(Obito_p)]then
if GetLocalPlayer()==Obito_p then
call SetCameraPosition(x1,y1)
endif
endif
if GetUnitAbilityLevel(Obito_c,0x41303451)==0 then
call UnitAddAbility(Obito_c,0x41303451)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41303451,true)
call SaveReal(HH,h1,0,period)
call SaveReal(HH,h1,1,time)
call SaveReal(HH,hc,0,x)
call SaveReal(HH,hc,1,y)
call SaveBoolean(HH,hc,2,false)
call TimerStart(t1,period,true,function cj_anonym__615)
else
call DisplayTimedTextToPlayer(Obito_p,0.,0.,3.,"|cFFFFCC00Вам никого не удалось поглотить с помощью KAMUI|r")
endif
call KillUnit(d)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set g=null
set tg=null
set d=null
set p2=null
set t=null
set t1=null
endfunction
function Obito__KamuiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=2.
local real x=GetWidgetX(Obito_c)
local real y=GetWidgetY(Obito_c)
local unit d=CreateUnit(Obito_p,0x68303046,x,y,0.)
call Sound("Obito Kamui.mp3")
call SetPlayerAbilityAvailable(Obito_p,0x41304D36,false)
if GetUnitAbilityLevel(Obito_c,0x4130554D)==0 then
call UnitAddAbility(Obito_c,0x4130554D)
endif
call SetPlayerAbilityAvailable(Obito_p,0x4130554D,true)
call SetUnitAnimation(d,"Birth")
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call TimerStart(t,castTime,false,function cj_anonym__614)
set d=null
set t=null
endfunction
function cj_anonym__616 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real randomDegree=LoadReal(HH,h,2)
local real timeDebuff=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real rangeMax=LoadReal(HH,h,5)
local real rangeCur=LoadReal(HH,h,6)
local real radius=LoadReal(HH,h,7)
local real dmg=LoadReal(HH,h,8)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if d!=null and rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Obito_p)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodPeasant.mdl",tg,"chest"))
if not IsUnitBig(tg)then
call UnitDamageTarget(Obito_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
else
call UnitDamageTarget(Obito_c,tg,dmg/4.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,6,rangeCur+offset)
else
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set d=null
set tg=null
set t=null
endfunction
function Obito__ShurikenCast takes unit l__Obito_c,real x,real y,real x1,real y1,real randomDegreeCast returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real randomDegree=GetRandomReal(4.,14.)
local real a
local real period=.05
local real dmg=150.*period
local real speed=900.
local real offset=speed*period
local real radius=200.
local real rangeMax=1200.
local real rangeCur=0.
local real timeDebuff=4.
local unit d
if randomDegreeCast<=180.then
set a=bj_RADTODEG*Atan2(y1-y,x1-x)-randomDegree
elseif randomDegreeCast>180.then
set a=bj_RADTODEG*Atan2(y1-y,x1-x)+randomDegree
endif
set d=CreateUnit(Obito_p,0x6E303356,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,randomDegree)
call SaveReal(HH,h,3,timeDebuff)
call SaveReal(HH,h,4,offset)
call SaveReal(HH,h,5,rangeMax)
call SaveReal(HH,h,6,rangeCur)
call SaveReal(HH,h,7,radius)
call SaveReal(HH,h,8,dmg)
call TimerStart(t,period,true,function cj_anonym__616)
set d=null
set t=null
endfunction
function cj_anonym__617 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real randomDegreeStepMin=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real xHero=GetWidgetX(Obito_c)
local real yHero=GetWidgetY(Obito_c)
local real startOffset=50.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real radius=350.
local real randomOffset
local real randomDegree
if GetWidgetLife(Obito_c)>.405 and time>0.then
set randomDegree=GetRandomReal(1.,360.)
call Obito__ShurikenCast(Obito_c,x,y,x1,y1,randomDegree)
call SaveReal(HH,h,2,randomDegreeStepMin)
call SaveReal(HH,h,4,time-period)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Obito__BukijutsuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real randomDegreeStepMin=50.
local real time=1.
local real period=.25
call Sound("Obito Bukijutsu.mp3")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call SaveReal(HH,h,2,randomDegreeStepMin)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call TimerStart(t,period,true,function cj_anonym__617)
set t=null
endfunction
function Obito__JikukanGetDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and GetUnitAbilityLevel(GetEventDamageSource(),0x42303032)>0 and IsUnitInGroup(GetTriggerUnit(),Obito__grJikukanCheck)
endfunction
function Obito__JikukanGetDamageActions takes nothing returns nothing
call Obito__JikukanIdoOver()
endfunction
function Obito__JikukanAttackConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),0x42303032)>0 and not IsUnitInGroup(GetTriggerUnit(),Obito__grJikukanCheck)
endfunction
function Obito__JikukanAttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Obito__grJikukanReg)then
call GroupAddUnit(Obito__grJikukanReg,tu)
call TriggerRegisterUnitEvent(Obito__trgJikukanDamage,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Obito__grJikukanCheck,tu)
set tu=null
endfunction
function cj_anonym__618 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if GetUnitAbilityLevel(Obito_c,0x42303032)>0 then
call SaveReal(HH,h,1,time-period)
else
call SetUnitPathing(Obito_c,true)
call DisableTrigger(Obito__trgJikukanDamage)
call GroupClear(Obito__grJikukanCheck)
call UnitRemoveAbility(Obito_c,0x41304C4B)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Obito__JikukanIdoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=8.
call Sound("Obito Jikukan Ido.mp3")
call SetUnitPathing(Obito_c,false)
call EnableTrigger(Obito__trgJikukanDamage)
call UnitAddAbility(Obito_c,0x41304C4B)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call TimerStart(t,period,true,function cj_anonym__618)
set t=null
endfunction
function Obito__AvailabilityMainJutsu takes boolean log returns nothing
call SetPlayerAbilityAvailable(Obito_p,Obito_MS,log)
call SetPlayerAbilityAvailable(Obito_p,Obito_UCHIHA_KAENJIN,log)
call SetPlayerAbilityAvailable(Obito_p,Obito_GOKAKYU,log)
call SetPlayerAbilityAvailable(Obito_p,Obito_KUSARI,log)
endfunction
function cj_anonym__619 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real mp=LoadReal(HH,h,1)
call SetUnitState(Obito_c,UNIT_STATE_MANA,GetUnitState(Obito_c,UNIT_STATE_MANA)-mp)
if GetUnitAbilityLevel(Obito_c,0x4130554E)==0 or GetUnitState(Obito_c,UNIT_STATE_MANA)<mp then
call DestroyEffect(LoadEffectHandle(HH,h,0))
call SetPlayerAbilityAvailable(Obito_p,0x41313354,false)
call SetPlayerAbilityAvailable(Obito_p,0x41305631,false)
call SetPlayerAbilityAvailable(Obito_p,0x41304D36,false)
call SetPlayerAbilityAvailable(Obito_p,0x4130554D,false)
call SetPlayerAbilityAvailable(Obito_p,0x41303451,false)
call SetPlayerAbilityAvailable(Obito_p,0x41304E39,false)
call Obito__AvailabilityMainJutsu(true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Obito__MangekyoSharinganCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvl=GetHeroLevel(Obito_c)
local real period=.1
local real mp=10.*period
call Sound("Akatsuki Jutsu.mp3")
call Obito__AvailabilityMainJutsu(false)
if GetUnitAbilityLevel(Obito_c,0x41313354)==0 then
call UnitAddAbility(Obito_c,0x41313354)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41313354,true)
if GetUnitAbilityLevel(Obito_c,0x41305631)==0 then
call UnitAddAbility(Obito_c,0x41305631)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41305631,true)
if lvl>=2 then
if GetUnitAbilityLevel(Obito_c,0x41304D36)==0 then
call UnitAddAbility(Obito_c,0x41304D36)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41304D36,true)
if lvl>=4 then
if GetUnitAbilityLevel(Obito_c,0x41304E39)==0 then
call UnitAddAbility(Obito_c,0x41304E39)
endif
call SetPlayerAbilityAvailable(Obito_p,0x41304E39,true)
endif
endif
call UnitAddAbility(Obito_c,0x4130554E)
call SaveAgentHandle(HH,h,0,AddSpecialEffectTarget("sharingan kakashi.mdx",Obito_c,"origin"))
call SaveReal(HH,h,1,mp)
call TimerStart(t,period,true,function cj_anonym__619)
set t=null
endfunction
function Obito__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Obito_MS or i==0x4130554E or i==0x41313354 or i==0x41305631 or i==0x41304D36 or i==0x4130554D or i==0x41303451 or i==0x41304E39 or i==Obito_UCHIHA_KAENJIN or i==Obito_GOKAKYU or i==Obito_KUSARI or i==Obito_GUDODAMA or i==0x4130524A or i==0x41305236 or i==0x41305232 or i==0x41303343 or i==0x41304C50 or i==Obito_MUSEKI_YOJIN or i==Obito_BIJUDAMA or i==Obito_NUNOBOKO
endfunction
function Obito__SpellsActions takes nothing returns nothing
local integer i
if Obito_c==null then
set Obito_c=GetTriggerUnit()
set Obito_p=GetOwningPlayer(Obito_c)
endif
set i=GetSpellAbilityId()
call Obito__JikukanIdoOver()
if i==Obito_MS then
call Obito__MangekyoSharinganCast()
elseif i==0x4130554E then
call UnitRemoveAbility(Obito_c,0x4130554E)
elseif i==0x41313354 then
call Obito__JikukanIdoCast()
elseif i==0x41305631 then
call Obito__BukijutsuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41304D36 then
call Obito__KamuiCast()
elseif i==0x4130554D then
call Obito__KamuiSelfCast()
elseif i==0x41303451 then
call Obito__KamuiMove(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41304E39 then
call Obito__KatonBakufuRanbuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Obito_UCHIHA_KAENJIN then
call Obito__UchihaKaenjinCast(GetSpellTargetUnit())
elseif i==Obito_GOKAKYU then
call Obito__KatonGokakyuNoJutsuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Obito_KUSARI then
call Obito__MazoNoKusariCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Obito_GUDODAMA then
call Obito__GudodamaCast()
elseif i==0x4130524A then
call Obito__GudodamaSphereCast()
elseif i==0x41305236 then
call Obito__GudodamaBombCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41305232 then
call Obito__GudodamaSwordsCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41303343 then
call Obito__GudodamaLanceCast()
elseif i==0x41304C50 then
call Obito__GudodamaHandsCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Obito_MUSEKI_YOJIN then
call Obito__MusekiYojinCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Obito_BIJUDAMA then
call Obito__BijudamaCast()
elseif i==Obito_NUNOBOKO then
call Obito__NunobokoCast(GetSpellTargetUnit())
endif
endfunction
function Obito_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
local trigger attack_jikukan=CreateTrigger()
local trigger attack_lance=CreateTrigger()
set Obito__grKusariSave=CreateGroup()
set Obito__grKaton=CreateGroup()
set Obito__grKamui=CreateGroup()
set Obito__grJikukanReg=CreateGroup()
set Obito__grJikukanCheck=CreateGroup()
set Obito__trgJikukanDamage=CreateTrigger()
set Obito__grUchihaKaenjinReg=CreateGroup()
set Obito__grUchihaKaenjinCheck=CreateGroup()
set Obito__trgUchihaKaenjinDamage=CreateTrigger()
set Obito_trgRikudoSenjutsuDamage=CreateTrigger()
set Obito_trgGudodamaSphereDamage=CreateTrigger()
set Obito__trgGudodamaLanceDamage=CreateTrigger()
set Obito__grGudodamaLanceReg=CreateGroup()
set Obito__grGudodamaLanceCheck=CreateGroup()
call DisableTrigger(Obito__trgGudodamaLanceDamage)
call DisableTrigger(Obito_trgRikudoSenjutsuDamage)
call DisableTrigger(Obito_trgGudodamaSphereDamage)
call DisableTrigger(Obito__trgUchihaKaenjinDamage)
call DisableTrigger(Obito__trgJikukanDamage)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attack_jikukan,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(attack_lance,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41304C4B,false)
call SetPlayerAbilityAvailable(Player(i),Obito_SENJUTSU_SPELLBOOK,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Obito__SpellsConditions))
call TriggerAddAction(spells,function Obito__SpellsActions)
call TriggerAddCondition(attack,Condition(function Obito__AttackConditions))
call TriggerAddAction(attack,function Obito__AttackActions)
call TriggerAddCondition(attack_jikukan,Condition(function Obito__JikukanAttackConditions))
call TriggerAddAction(attack_jikukan,function Obito__JikukanAttackActions)
call TriggerAddCondition(Obito__trgJikukanDamage,Condition(function Obito__JikukanGetDamageConditions))
call TriggerAddAction(Obito__trgJikukanDamage,function Obito__JikukanGetDamageActions)
call TriggerAddCondition(Obito__trgUchihaKaenjinDamage,Condition(function Obito__UchihaKaenjinGetDamageConditions))
call TriggerAddAction(Obito__trgUchihaKaenjinDamage,function Obito__UchihaKaenjinGetDamageActions)
call TriggerAddCondition(Obito_trgRikudoSenjutsuDamage,Condition(function Obito__RikudoSenjutsuGetDamageConditions))
call TriggerAddAction(Obito_trgRikudoSenjutsuDamage,function Obito__RikudoSenjutsuGetDamageActions)
call TriggerAddCondition(Obito_trgGudodamaSphereDamage,Condition(function Obito__GudodamaSphereGetDamageConditions))
call TriggerAddAction(Obito_trgGudodamaSphereDamage,function Obito__GudodamaSphereGetDamageActions)
call TriggerAddCondition(attack_lance,Condition(function Obito__GudodamaLanceAttackConditions))
call TriggerAddAction(attack_lance,function Obito__GudodamaLanceAttackActions)
call TriggerAddCondition(Obito__trgGudodamaLanceDamage,Condition(function Obito__GudodamaLanceGetDamageConditions))
call TriggerAddAction(Obito__trgGudodamaLanceDamage,function Obito__GudodamaLanceGetDamageActions)
set attack_lance=null
set attack_jikukan=null
set attack=null
set spells=null
endfunction
function Onoki__IwaBunshinGetDamageConditions takes nothing returns boolean
return GetUnitTypeId(GetEventDamageSource())==0x4F303053
endfunction
function Onoki__IwaBunshinGetDamageActions takes nothing returns nothing
call DisableTrigger(Onoki__getdmgIwa)
call SetWidgetLife(GetTriggerUnit(),GetWidgetLife(GetTriggerUnit())+GetEventDamage()*.9)
call EnableTrigger(Onoki__getdmgIwa)
endfunction
function Onoki__IwaBunshinNoJutsuRegistr takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Onoki__p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and not IsUnitInGroup(tg,Onoki__grRegIwa)then
call GroupAddUnit(Onoki__grRegIwa,tg)
call TriggerRegisterUnitEvent(Onoki__getdmgIwa,tg,EVENT_UNIT_DAMAGED)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__620 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer number=LoadInteger(HH,h,0)
local integer i=1
local unit d
loop
set d=LoadUnitHandle(HH,h,i)
if GetWidgetLife(d)>.405 then
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",GetWidgetX(d),GetWidgetY(d)))
call RemoveUnit(d)
endif
set i=i+1
exitwhen i>number
endloop
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set t=null
endfunction
function Onoki__IwaBunshinNoJutsuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=1
local integer number=GetUnitAbilityLevel(Onoki__c,Onoki_IWA_BUNSHIN)
local real x=GetWidgetX(Onoki__c)
local real y=GetWidgetY(Onoki__c)
local real f=GetUnitFacing(Onoki__c)
local real offset=125.
local real degree=0.
local real degreeStep=360./6
call Sound("Onoki Iwa Bunshin no Jutsu.mp3")
call SaveInteger(HH,h,0,number)
loop
set bj_lastCreatedUnit=CreateUnit(Onoki__p,0x4F303053,x+offset*Cos(degree*bj_DEGTORAD),y+offset*Sin(degree*bj_DEGTORAD),f)
call SetHeroXP(bj_lastCreatedUnit,GetHeroXP(Onoki__c),false)
call SuspendHeroXP(bj_lastCreatedUnit,false)
call SetUnitState(bj_lastCreatedUnit,UNIT_STATE_MANA,GetUnitState(Onoki__c,UNIT_STATE_MANA))
call SetWidgetLife(bj_lastCreatedUnit,GetWidgetLife(Onoki__c))
if GetLocalPlayer()==Onoki__p then
call SetUnitVertexColor(bj_lastCreatedUnit,149,150,151,255)
endif
call DestroyEffect(AddSpecialEffect("EarthSmash.mdx",GetWidgetX(bj_lastCreatedUnit),GetWidgetY(bj_lastCreatedUnit)))
call SaveAgentHandle(HH,h,i,bj_lastCreatedUnit)
set degree=degree+degreeStep
set i=i+1
exitwhen i>number
endloop
call Onoki__IwaBunshinNoJutsuRegistr()
call TimerStart(t,25.,false,function cj_anonym__620)
set t=null
endfunction
function Onoki__AtomDamage takes unit u,real radius,real dmg returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Onoki__p)and not IsUnitInGroup(tg,Onoki__grAtom)then
call GroupAddUnit(Onoki__grAtom,tg)
call UnitDamageTarget(Onoki__c,tg,GetNinjutsuDamage(dmg,Onoki__c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call KillDestructablesStart(x,y,radius/2.)
set tg=null
set g=null
endfunction
function Onoki__OrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),0x41305745)>0
endfunction
function Onoki__OrderActions takes nothing returns nothing
set Onoki__atomA=bj_RADTODEG*Atan2(GetOrderPointY()-GetWidgetY(Onoki__c),GetOrderPointX()-GetWidgetX(Onoki__c))
endfunction
function cj_anonym__622 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit cylinder=LoadUnitHandle(HH,h,-1)
local real duration=LoadReal(HH,h,-2)
local real period=LoadReal(HH,h,-3)
local real dmg=LoadReal(HH,h,-4)
local real mana=LoadReal(HH,h,-5)
local real radius=LoadReal(HH,h,-6)
local real offsetCur=LoadReal(HH,h,-7)
local real offsetPlus=LoadReal(HH,h,-8)
local integer max=LoadInteger(HH,h,-9)
local integer i=0
local real x=GetWidgetX(Onoki__c)
local real y=GetWidgetY(Onoki__c)
local real a
call IssueImmediateOrder(Onoki__c,"stop")
call SetUnitAnimation(Onoki__c,"spell")
call SetUnitFacing(Onoki__c,Onoki__atomA)
set a=GetUnitFacing(Onoki__c)
call SetUnitFacing(cylinder,a)
call SetUnitState(Onoki__c,UNIT_STATE_MANA,GetUnitState(Onoki__c,UNIT_STATE_MANA)-mana)
call GroupClear(Onoki__grAtom)
if duration>0.and GetUnitState(Onoki__c,UNIT_STATE_MANA)>0.and GetUnitAbilityLevel(Onoki__c,0x41305745)>0 and not IsUnitPaused(Onoki__c)and GetUnitAbilityLevel(Onoki__c,0x424E7369)==0 and GetUnitAbilityLevel(Onoki__c,0x424F6878)==0 then
loop
call SetUnitPosition(LoadUnitHandle(HH,h,i),x+offsetCur*Cos(a*bj_DEGTORAD),y+offsetCur*Sin(a*bj_DEGTORAD))
call Onoki__AtomDamage(LoadUnitHandle(HH,h,i),radius,dmg)
set offsetCur=offsetCur+offsetPlus
set i=i+1
exitwhen i==max
endloop
call SaveReal(HH,h,-2,duration-period)
else
call UnitRemoveAbility(Onoki__c,0x41305745)
call SetPlayerAbilityAvailable(Onoki__p,Onoki_KAIJUGAN,true)
call SetPlayerAbilityAvailable(Onoki__p,Onoki_KEIJUGAN,true)
call SetPlayerAbilityAvailable(Onoki__p,Onoki_GOREMU,true)
call SetPlayerAbilityAvailable(Onoki__p,Onoki_ULT,true)
loop
call RemoveUnit(LoadUnitHandle(HH,h,i))
set i=i+1
exitwhen i==max
endloop
call RemoveUnit(LoadUnitHandle(HH,h,-10))
call KillUnit(cylinder)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set cylinder=null
set t=null
endfunction
function cj_anonym__621 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit cylinder=LoadUnitHandle(HH,h,0)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit bar=CreateUnit(Onoki__p,0x6830344D,GetWidgetX(Onoki__c),GetWidgetY(Onoki__c),270.)
local real period=.01
local real dmg=(GetUnitState(Onoki__c,UNIT_STATE_MAX_MANA)*.2)*period
local real mana=(GetUnitState(Onoki__c,UNIT_STATE_MAX_MANA)*.05)*period
local real duration=3.
local real height=240.
local real radius=100.
local real offsetCur=100.
local real offsetPlus=100.
local real range=800.
local integer i=0
local integer max=R2I(range/offsetPlus)
local real x=GetWidgetX(Onoki__c)
local real y=GetWidgetY(Onoki__c)
local real a=GetUnitFacing(Onoki__c)
set Onoki__atomA=a
if GetLocalPlayer()!=Onoki__p then
call SetUnitVertexColor(bar,255,255,255,0)
endif
call SetPlayerAbilityAvailable(Onoki__p,Onoki_KAIJUGAN,false)
call SetPlayerAbilityAvailable(Onoki__p,Onoki_KEIJUGAN,false)
call SetPlayerAbilityAvailable(Onoki__p,Onoki_GOREMU,false)
call SetPlayerAbilityAvailable(Onoki__p,Onoki_ULT,false)
call UnitAddAbility(Onoki__c,0x41305745)
call SetUnitAnimation(cylinder,"Stand")
call SetUnitFlyHeight(bar,height,0.)
call SetUnitAnimation(bar,"Birth Alternate")
call SetUnitTimeScale(bar,.044)
loop
call SaveAgentHandle(HH,h1,i,CreateUnit(Onoki__p,0x6E303232,x+offsetCur*Cos(a*bj_DEGTORAD),y+offsetCur*Sin(a*bj_DEGTORAD),GetRandomReal(0.,360.)))
set offsetCur=offsetCur+offsetPlus
set i=i+1
exitwhen i==max
endloop
call SaveAgentHandle(HH,h1,-1,cylinder)
call SaveReal(HH,h1,-2,duration)
call SaveReal(HH,h1,-3,period)
call SaveReal(HH,h1,-4,dmg)
call SaveReal(HH,h1,-5,mana)
call SaveReal(HH,h1,-6,radius)
call SaveReal(HH,h1,-7,100.)
call SaveReal(HH,h1,-8,100.)
call SaveInteger(HH,h1,-9,max)
call SaveAgentHandle(HH,h1,-10,bar)
call TimerStart(t1,period,true,function cj_anonym__622)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set cylinder=null
set bar=null
set t=null
set t1=null
endfunction
function Onoki__AtomCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Onoki__c)
local real yHero=GetWidgetY(Onoki__c)
local real startOffset=50.
local real a=GetUnitFacing(Onoki__c)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local unit cylinder=CreateUnit(Onoki__p,0x6E303231,x,y,a)
local real castTime=.66
call Sound("Oonoki Cube.mp3")
call SetUnitAnimation(cylinder,"Birth")
call SetUnitTimeScale(cylinder,1.34)
call SaveAgentHandle(HH,h,0,cylinder)
call TimerStart(t,castTime,false,function cj_anonym__621)
set cylinder=null
set t=null
endfunction
function Onoki__GetDamageConditions takes nothing returns boolean
return Onoki__goremu!=null and GetEventDamage()>0.and GetWidgetLife(GetTriggerUnit())>.405 and IsUnitInGroup(GetTriggerUnit(),Onoki__grCheck)
endfunction
function Onoki__GetDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local real dmg=GetEventDamage()
local real life=GetWidgetLife(Onoki__goremu)
if dmg<=life then
call SetWidgetLife(u,GetWidgetLife(u)+dmg)
call SetWidgetLife(Onoki__goremu,GetWidgetLife(Onoki__goremu)-dmg)
else
call SetWidgetLife(u,GetWidgetLife(u)+life)
call SetWidgetLife(Onoki__goremu,GetWidgetLife(Onoki__goremu)-life)
endif
set u=null
endfunction
function Onoki__GoremuDefense takes real radius returns nothing
local real x=GetWidgetX(Onoki__goremu)
local real y=GetWidgetY(Onoki__goremu)
local real x1
local real y1
local rect r=Rect(x-radius,y-radius,x+radius,y+radius)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if tg!=Onoki__goremu and IsUnitAlly(tg,Onoki__p)and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitInvulnerable(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
if GetRectMinX(r)<=x1 and x1<=GetRectMaxX(r)and GetRectMinY(r)<=y1 and y1<=GetRectMaxY(r)then
if not IsUnitInGroup(tg,Onoki__grReg)then
call GroupAddUnit(Onoki__grReg,tg)
call TriggerRegisterUnitEvent(Onoki__trgDamage,tg,EVENT_UNIT_DAMAGED)
endif
if not IsUnitInGroup(tg,Onoki__grCheck)then
call GroupAddUnit(Onoki__grCheck,tg)
endif
else
call GroupRemoveUnit(Onoki__grCheck,tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call RemoveRect(r)
set r=null
set tg=null
set g=null
endfunction
function cj_anonym__624 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
if GetWidgetLife(Onoki__goremu)>.405 and time>0.then
call Onoki__GoremuDefense(radius)
call SaveReal(HH,h,1,time-period)
else
call GroupClear(Onoki__grCheck)
call KillUnit(Onoki__goremu)
set Onoki__goremu=null
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function cj_anonym__623 takes nothing returns nothing
local real period=.1
local real time=20.
local real radius=300./2.
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call PauseUnit(Onoki__goremu,false)
call SetUnitInvulnerable(Onoki__goremu,false)
call SetUnitAnimation(Onoki__goremu,"Stand")
call SaveReal(HH,h1,0,period)
call SaveReal(HH,h1,1,time)
call SaveReal(HH,h1,2,radius)
call TimerStart(t1,period,true,function cj_anonym__624)
call DestroyTimer(GetExpiredTimer())
set t1=null
endfunction
function Onoki__GoremuCast takes nothing returns nothing
local real xHero=GetWidgetX(Onoki__c)
local real yHero=GetWidgetY(Onoki__c)
local real startOffset=100.
local real a=GetUnitFacing(Onoki__c)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real animationTime=.616
set Onoki__goremu=CreateUnit(Onoki__p,0x68303336,x,y,a)
call Sound("Onoki Iwa no Goremu.mp3")
call PauseUnit(Onoki__goremu,true)
call SetUnitInvulnerable(Onoki__goremu,true)
call SetUnitAnimation(Onoki__goremu,"Birth")
call TimerStart(CreateTimer(),animationTime,false,function cj_anonym__623)
endfunction
function Onoki__KeijuganDamage takes unit target returns nothing
local real dmg=100.
local real x=GetWidgetX(target)
local real y=GetWidgetY(target)
local real radius=250.
local real stunTime=2.
local group g=CreateGroup()
local unit tg
if SpecialEffectsShow then
call DestroyEffect(AddSpecialEffect("Slam.mdx",x,y))
call TerrainDeformRipple(x,y,radius,50.,2500,1,4.,7.,400.,false)
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Onoki__p)then
if GetUnitAbilityLevel(tg,0x41304153)>0 then
call UnitDamageTarget(Onoki__c,tg,GetTaijutsuDamage(dmg*2.,Onoki__c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
else
call UnitDamageTarget(Onoki__c,tg,GetTaijutsuDamage(dmg,Onoki__c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
if GetWidgetLife(tg)>.405 and IsUnitBig(target)then
call GetStun(tg,stunTime)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__625 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit target=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real maxdis=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(target)
local real y=GetWidgetY(target)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
if curdis>offset then
call SetUnitFlyHeight(target,1800./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SetUnitPosition(target,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
call SetUnitFlyHeight(target,GetUnitDefaultFlyHeight(target),0.)
call SetUnitPathing(target,true)
call Onoki__KeijuganDamage(target)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set target=null
set tu=null
set t=null
endfunction
function Onoki__KeijuganCast takes unit tu returns nothing
local timer t
local integer h
local real radius=200.
local real x=GetWidgetX(Onoki__c)
local real y=GetWidgetY(Onoki__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real speed=1100.
local real offset=speed*MainPeriod
local group g=CreateGroup()
local unit target=null
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or target!=null
if tg!=Onoki__c and GetWidgetLife(tg)>.405 and not IsUnitHidden(tg)and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
set target=tg
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if target!=null then
call Sound("Ping.mp3")
set t=CreateTimer()
set h=GetHandleId(t)
call SetUnitPathing(target,false)
call SetUnitTypeFlying(target)
call SaveAgentHandle(HH,h,0,target)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,distance)
call SaveReal(HH,h,3,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__625)
else
call RecastSkills(Onoki__c,Onoki_KEIJUGAN,1,200.)
call DisplayTimedTextToPlayer(Onoki__p,0.,0.,1.,"|cFFFFCC00Не удалось никого бросить!|r")
endif
set tg=null
set target=null
set g=null
set t=null
endfunction
function cj_anonym__626 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local integer time=LoadInteger(HH,h,1)
local unit tg
if time>0 then
call SaveInteger(HH,h,1,time-1)
else
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
call UnitRemoveAbility(tg,0x41304153)
call UnitRemoveAbility(tg,0x42303146)
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set t=null
endfunction
function Onoki__KaijuganCast takes real x1,real y1 returns nothing
local timer t
local integer h
local unit tg
local group g1=CreateGroup()
local group g2=CreateGroup()
local boolean log=false
local integer time=4
local real radius=400.
call Sound("Oonoki Kajugan no Jutsu.mp3")
call GroupEnumUnitsInRange(g1,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Onoki__p)then
call GroupAddUnit(g2,tg)
call UnitAddAbility(tg,0x41304153)
set log=true
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
if log then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,g2)
call SaveInteger(HH,h,1,time)
call TimerStart(t,1.,true,function cj_anonym__626)
endif
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function Onoki__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Onoki_KAIJUGAN or i==Onoki_KEIJUGAN or i==Onoki_GOREMU or i==Onoki_ULT or i==0x41305745 or i==Onoki_IWA_BUNSHIN
endfunction
function Onoki__SpellsActions takes nothing returns nothing
local integer i
if Onoki__c==null then
set Onoki__c=GetTriggerUnit()
set Onoki__p=GetOwningPlayer(Onoki__c)
endif
set i=GetSpellAbilityId()
if i==Onoki_KAIJUGAN then
call Onoki__KaijuganCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Onoki_KEIJUGAN then
call Onoki__KeijuganCast(GetSpellTargetUnit())
elseif i==Onoki_GOREMU then
call Onoki__GoremuCast()
elseif i==Onoki_ULT then
call Onoki__AtomCast()
elseif i==0x41305745 then
call UnitRemoveAbility(Onoki__c,0x41305745)
elseif i==Onoki_IWA_BUNSHIN then
call Onoki__IwaBunshinNoJutsuCast()
endif
endfunction
function Onoki_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger order=CreateTrigger()
set Onoki__trgDamage=CreateTrigger()
set Onoki__grReg=CreateGroup()
set Onoki__grCheck=CreateGroup()
set Onoki__grAtom=CreateGroup()
set Onoki__grRegIwa=CreateGroup()
set Onoki__getdmgIwa=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(order,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Onoki__SpellsConditions))
call TriggerAddAction(spells,function Onoki__SpellsActions)
call TriggerAddCondition(order,Condition(function Onoki__OrderConditions))
call TriggerAddAction(order,function Onoki__OrderActions)
call TriggerAddCondition(Onoki__trgDamage,Condition(function Onoki__GetDamageConditions))
call TriggerAddAction(Onoki__trgDamage,function Onoki__GetDamageActions)
call TriggerAddCondition(Onoki__getdmgIwa,Condition(function Onoki__IwaBunshinGetDamageConditions))
call TriggerAddAction(Onoki__getdmgIwa,function Onoki__IwaBunshinGetDamageActions)
set order=null
set spells=null
endfunction
function Orochimaru__UltCast takes nothing returns nothing
local real x=GetWidgetX(Orochimaru__c)
local real y=GetWidgetY(Orochimaru__c)
local real hpRes=.33
call Sound("Orochimaru_Bueeeeee xD.mp3")
call CreateEffect(x,y,.65,"Orochimaru_squished.mdx",1.)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\CorrosiveBreath\\ChimaeraAcidTargetArt.mdl",Orochimaru__c,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Demon\\DemonLargeDeathExplode\\DemonLargeDeathExplode.mdl",Orochimaru__c,"origin"))
call SetWidgetLife(Orochimaru__c,GetWidgetLife(Orochimaru__c)+GetUnitState(Orochimaru__c,UNIT_STATE_MAX_LIFE)*hpRes)
endfunction
function Orochimaru__GetDamageConditions takes nothing returns boolean
return LoadUnitHandle(HH,GetHandleId(Orochimaru__getdmg),0)!=null and GetEventDamage()>0.and GetWidgetLife(GetTriggerUnit())>.405
endfunction
function Orochimaru__GetDamageActions takes nothing returns nothing
local unit gate=LoadUnitHandle(HH,GetHandleId(Orochimaru__getdmg),0)
local real dmg=GetEventDamage()
local real life=GetWidgetLife(gate)
if dmg<=life then
call SetWidgetLife(Orochimaru__c,GetWidgetLife(Orochimaru__c)+dmg)
call SetWidgetLife(gate,GetWidgetLife(gate)-dmg)
else
call SetWidgetLife(Orochimaru__c,GetWidgetLife(Orochimaru__c)+life)
call SetWidgetLife(gate,GetWidgetLife(gate)-life)
endif
set gate=null
endfunction
function cj_anonym__627 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer time=LoadInteger(HH,h,1)
local real x
local real y
local real f
if time>0 and GetWidgetLife(d)>.405 then
call SaveInteger(HH,h,1,time-1)
else
call DisableTrigger(Orochimaru__getdmg)
set f=LoadReal(HH,h,2)
set x=GetWidgetX(d)
set y=GetWidgetY(d)
call KuchiyoseCreateDustEffect("end",d,.85,2.6)
call CreateDummyEffect(x-300.*Cos(f),y-300.*Sin(f),.85,"shadowclone2.mdx",0.)
call CreateDummyEffect(x+300.*Cos(f),y+300.*Sin(f),.85,"shadowclone2.mdx",0.)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Orochimaru__RashomonCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer time=11
local real x=GetWidgetX(Orochimaru__c)
local real y=GetWidgetY(Orochimaru__c)
local real f=GetUnitFacing(Orochimaru__c)
local unit d=CreateUnit(Orochimaru__p,0x6830344B,x+600.*Cos(f*bj_DEGTORAD),y+600.*Sin(f*bj_DEGTORAD),f)
call Sound("Orochimaru.mp3")
call EnableTrigger(Orochimaru__getdmg)
call SetUnitFlyHeight(d,-50.,0.)
call KuchiyoseEffect(x+600.*Cos(f*bj_DEGTORAD),y+600.*Sin(f*bj_DEGTORAD),5.)
call KuchiyoseCreateDustEffect("cast",d,.85,2.6)
call CreateDummyEffect(x+300.*Cos(f*bj_DEGTORAD),y+300.*Sin(f*bj_DEGTORAD),.85,"shadowclone2.mdx",0.)
call CreateDummyEffect(x+900.*Cos(f*bj_DEGTORAD),y+900.*Sin(f*bj_DEGTORAD),.85,"shadowclone2.mdx",0.)
call SaveAgentHandle(HH,GetHandleId(Orochimaru__getdmg),0,d)
call SaveAgentHandle(HH,h,0,d)
call SaveInteger(HH,h,1,time)
call SaveReal(HH,h,2,f*.017)
call TimerStart(t,1.,true,function cj_anonym__627)
set d=null
set t=null
endfunction
function cj_anonym__629 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local boolean log=LoadBoolean(HH,h,1)
local real x2=LoadReal(HH,h,2)
local real y2=LoadReal(HH,h,3)
local real dmgAdd=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local real offset=LoadReal(HH,h,6)
local integer amount=LoadInteger(HH,h,7)
local real x=GetWidgetX(Orochimaru__c)
local real y=GetWidgetY(Orochimaru__c)
local real a=bj_RADTODEG*Atan2(y2-y,x2-x)
local real x1=x+offset*Cos(a*bj_DEGTORAD)
local real y1=y+offset*Sin(a*bj_DEGTORAD)
local unit tg
if GetWidgetLife(Orochimaru__c)>.405 and amount>0 and not log then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitNeedClear(tg,Orochimaru__p)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(Orochimaru__c,tg,GetUnitState(tg,UNIT_STATE_MAX_LIFE)*dmgAdd,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
set log=true
endif
call GroupRemoveUnit(g,tg)
endloop
if not log then
call SetUnitPosition(Orochimaru__c,x1,y1)
call SetUnitFacing(Orochimaru__c,a)
call SaveInteger(HH,h,7,amount-1)
else
call SaveBoolean(HH,h,1,log)
endif
else
call DestroyGroup(g)
call KillDestructablesStart(x,y,radius*2.)
call SetUnitTimeScale(Orochimaru__c,1.)
call SetUnitAnimation(Orochimaru__c,"Spell")
call SetUnitPathing(Orochimaru__c,true)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g=null
set tg=null
set t=null
endfunction
function cj_anonym__628 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Orochimaru__c)
local real y=GetWidgetY(Orochimaru__c)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real range=1100.
local real x2=x+range*Cos(a*bj_DEGTORAD)
local real y2=y+range*Sin(a*bj_DEGTORAD)
local real distance=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))
local real period=.025
local real dmgAdd=.25
local real radius=80.
local real speed=1100.
local real offset=speed*period
local integer amount=R2I(distance/offset)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SetUnitTimeScale(Orochimaru__c,0.)
call SaveAgentHandle(HH,h1,0,CreateGroup())
call SaveBoolean(HH,h1,1,false)
call SaveReal(HH,h1,2,x2)
call SaveReal(HH,h1,3,y2)
call SaveReal(HH,h1,4,dmgAdd)
call SaveReal(HH,h1,5,radius)
call SaveReal(HH,h1,6,offset)
call SaveInteger(HH,h1,7,amount)
call TimerStart(t1,period,true,function cj_anonym__629)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set t=null
set t1=null
endfunction
function Orochimaru__KusanagiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Orochimaru__c)
local real y=GetWidgetY(Orochimaru__c)
local real animationTime=.45
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SetUnitPathing(Orochimaru__c,false)
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,animationTime,false,function cj_anonym__628)
set t=null
endfunction
function cj_anonym__630 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmgReg=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
if time>0.and GetWidgetLife(tu)>.405 then
call UnitDamageTarget(Orochimaru__c,tu,dmgReg,true,false,ATTACK_TYPE_CHAOS,null,null)
call SaveReal(HH,h,3,time-period)
else
call UnitRemoveAbility(tu,0x41303237)
call UnitRemoveAbility(tu,0x42303144)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Orochimaru__SenneiTajashuPoisonStart takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
local real time=5.
local real dmgReg=(GetHeroStr(tu,true)*.03)*period
call UnitAddAbility(tu,0x41303237)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmgReg)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__630)
set t=null
endfunction
function cj_anonym__632 takes nothing returns boolean
if GetUnitTypeId(GetFilterUnit())==0x6830305A then
call RemoveUnit(GetFilterUnit())
endif
return false
endfunction
function cj_anonym__631 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local unit tg
if time>0.and GetWidgetLife(Orochimaru__c)>.405 and GetWidgetLife(tu)>.405 and GetUnitCurrentOrder(Orochimaru__c)==OrderId("chainlightning")then
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call UnitDamageTarget(Orochimaru__c,tu,GetTaijutsuDamage(dmg,Orochimaru__c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call SaveReal(HH,h,3,time-period)
else
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup,Orochimaru__p,Condition(function cj_anonym__632))
if GetUnitCurrentOrder(Orochimaru__c)==OrderId("chainlightning")then
call IssueImmediateOrder(Orochimaru__c,"stop")
endif
call PauseUnit(tu,false)
call SetUnitTimeScale(tu,1.)
if GetWidgetLife(tu)>.405 then
call Orochimaru__SenneiTajashuPoisonStart(tu)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Orochimaru__SenneiTajashuStart takes unit tu,unit d1,unit d2 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real dmg=(25.+GetHeroAgi(Orochimaru__c,true)*2.)*period
local real time=4.
call PauseUnit(tu,true)
call SetUnitTimeScale(tu,0.)
call SetUnitFlyHeight(d1,GetUnitFlyHeight(d1)-20.,0.)
call SetUnitFlyHeight(d2,GetUnitFlyHeight(d2)-20.,0.)
call SetUnitAnimation(d1,"Spell")
call SetUnitAnimation(d2,"Spell")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmg)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__631)
set t=null
endfunction
function cj_anonym__634 takes nothing returns boolean
if GetUnitTypeId(GetFilterUnit())==0x6830305A then
call RemoveUnit(GetFilterUnit())
endif
return false
endfunction
function cj_anonym__633 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d1=LoadUnitHandle(HH,h,1)
local unit d2=LoadUnitHandle(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(d1)
local real y=GetWidgetY(d1)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local unit tg
if curdis>offset and GetWidgetLife(Orochimaru__c)>.405 and GetWidgetLife(tu)>.405 and GetUnitCurrentOrder(Orochimaru__c)==OrderId("chainlightning")then
call SetUnitPosition(d1,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d1,a)
call CreateUnit(Orochimaru__p,0x6830305A,x,y,GetUnitFacing(d1))
set x=GetWidgetX(d2)
set y=GetWidgetY(d2)
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
call SetUnitPosition(d2,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d2,a)
call CreateUnit(Orochimaru__p,0x6830305A,x,y,GetUnitFacing(d2))
set x=GetWidgetX(d1)
set y=GetWidgetY(d1)
else
if GetWidgetLife(Orochimaru__c)>.405 and GetWidgetLife(tu)>.405 and GetUnitCurrentOrder(Orochimaru__c)==OrderId("chainlightning")then
call Orochimaru__SenneiTajashuStart(tu,d1,d2)
else
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup,Orochimaru__p,Condition(function cj_anonym__634))
if GetUnitCurrentOrder(Orochimaru__c)==OrderId("chainlightning")then
call IssueImmediateOrder(Orochimaru__c,"stop")
endif
call PauseUnit(Orochimaru__c,false)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d1=null
set d2=null
set tu=null
set t=null
endfunction
function Orochimaru__SenneiTajashu takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real f=GetUnitFacing(Orochimaru__c)
local real xHero=GetWidgetX(Orochimaru__c)
local real yHero=GetWidgetY(Orochimaru__c)
local real startOffset=75.
local real x=xHero+startOffset*Cos(f*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(f*bj_DEGTORAD)
local real snakeOffset=40.
local real period=.025
local real offset=35.
call Sound("Orochimaru Sennei TaJashu.mp3")
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,CreateUnit(Orochimaru__p,0x6830305A,x+snakeOffset*Cos((f+30.)*.017),y+snakeOffset*Sin((f+30.)*.017),f))
call SaveAgentHandle(HH,h,2,CreateUnit(Orochimaru__p,0x6830305A,x+snakeOffset*Cos((f-30.)*.017),y+snakeOffset*Sin((f-30.)*.017),f))
call SaveReal(HH,h,3,offset)
call TimerStart(t,period,true,function cj_anonym__633)
set t=null
endfunction
function Orochimaru__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Orochimaru_SNAKE or i==Orochimaru_KUSANAGI or i==Orochimaru_RASHOMON or i==Orochimaru_ULT
endfunction
function Orochimaru__SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
if Orochimaru__c==null then
set Orochimaru__c=GetTriggerUnit()
set Orochimaru__p=GetOwningPlayer(Orochimaru__c)
call TriggerRegisterUnitEvent(Orochimaru__getdmg,Orochimaru__c,EVENT_UNIT_DAMAGED)
endif
if i==Orochimaru_SNAKE then
call Orochimaru__SenneiTajashu(GetSpellTargetUnit())
elseif i==Orochimaru_KUSANAGI then
call Orochimaru__KusanagiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Orochimaru_RASHOMON then
call Orochimaru__RashomonCast()
elseif i==Orochimaru_ULT then
call Orochimaru__UltCast()
endif
endfunction
function Orochimaru_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Orochimaru__getdmg=CreateTrigger()
call DisableTrigger(Orochimaru__getdmg)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Orochimaru__SpellsConditions))
call TriggerAddAction(spells,function Orochimaru__SpellsActions)
call TriggerAddCondition(Orochimaru__getdmg,Condition(function Orochimaru__GetDamageConditions))
call TriggerAddAction(Orochimaru__getdmg,function Orochimaru__GetDamageActions)
set spells=null
endfunction
function cj_anonym__635 takes nothing returns nothing
if GetWidgetLife(Sai__c)<=.405 or GetUnitAbilityLevel(Sai__c,0x41305936)==0 then
call SetUnitPathing(Sai__c,true)
call SetUnitFlyHeight(Sai__c,GetUnitDefaultFlyHeight(Sai__c),900.)
call UnitRemoveAbility(Sai__c,0x41305936)
call UnitRemoveAbility(Sai__c,0x41305655)
call UnitRemoveAbility(Sai__c,0x42303444)
call SetPlayerAbilityAvailable(Sai__p,Sai_TAKA,true)
call AddUnitAnimationProperties(Sai__c,"Attack -1",true)
call AddUnitAnimationProperties(Sai__c,"Attack -2",true)
call AddUnitAnimationProperties(Sai__c,"Death",true)
call AddUnitAnimationProperties(Sai__c,"Portrait",true)
call AddUnitAnimationProperties(Sai__c,"Spell",true)
call AddUnitAnimationProperties(Sai__c,"Spell Slam",true)
call AddUnitAnimationProperties(Sai__c,"Stand",true)
call AddUnitAnimationProperties(Sai__c,"Stand -2",true)
call AddUnitAnimationProperties(Sai__c,"Stand Ready",true)
call AddUnitAnimationProperties(Sai__c,"Walk",true)
call AddUnitAnimationProperties(Sai__c,"Attack Alternate",false)
call AddUnitAnimationProperties(Sai__c,"Death Alternate",false)
call AddUnitAnimationProperties(Sai__c,"Morph Alternate",false)
call AddUnitAnimationProperties(Sai__c,"Portrait Alternate",false)
call AddUnitAnimationProperties(Sai__c,"Spell Slam Alternate",false)
call AddUnitAnimationProperties(Sai__c,"Stand Alternate",false)
call AddUnitAnimationProperties(Sai__c,"Walk Alternate -1",false)
call AddUnitAnimationProperties(Sai__c,"Walk Alternate -2",false)
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Sai__SaiTakaCast takes nothing returns nothing
local integer lvl=GetUnitAbilityLevel(Sai__c,Sai_TAKA)
call AddUnitAnimationProperties(Sai__c,"Attack Alternate",true)
call AddUnitAnimationProperties(Sai__c,"Death Alternate",true)
call AddUnitAnimationProperties(Sai__c,"Morph Alternate",true)
call AddUnitAnimationProperties(Sai__c,"Portrait Alternate",true)
call AddUnitAnimationProperties(Sai__c,"Spell Slam Alternate",true)
call AddUnitAnimationProperties(Sai__c,"Stand Alternate",true)
call AddUnitAnimationProperties(Sai__c,"Walk Alternate -1",true)
call AddUnitAnimationProperties(Sai__c,"Walk Alternate -2",true)
call AddUnitAnimationProperties(Sai__c,"Attack -1",false)
call AddUnitAnimationProperties(Sai__c,"Attack -2",false)
call AddUnitAnimationProperties(Sai__c,"Death",false)
call AddUnitAnimationProperties(Sai__c,"Portrait",false)
call AddUnitAnimationProperties(Sai__c,"Spell",false)
call AddUnitAnimationProperties(Sai__c,"Spell Slam",false)
call AddUnitAnimationProperties(Sai__c,"Stand",false)
call AddUnitAnimationProperties(Sai__c,"Stand -2",false)
call AddUnitAnimationProperties(Sai__c,"Stand Ready",false)
call AddUnitAnimationProperties(Sai__c,"Walk",false)
call SetPlayerAbilityAvailable(Sai__p,Sai_TAKA,false)
call UnitAddAbility(Sai__c,0x41305655)
call UnitAddAbility(Sai__c,0x41305936)
call SetUnitAbilityLevel(Sai__c,0x41305732,lvl)
call SetUnitAbilityLevel(Sai__c,0x41305953,lvl)
call SetUnitPathing(Sai__c,false)
call SetUnitTypeFlying(Sai__c)
call SetUnitFlyHeight(Sai__c,500.,750.)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__635)
endfunction
function cj_anonym__637 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call RemoveUnit(LoadUnitHandle(HH,h,0))
call RemoveUnit(LoadUnitHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__636 takes nothing returns nothing
local timer t=GetExpiredTimer()
local timer t1=CreateTimer()
local integer h=GetHandleId(t)
local integer count=0
local real x=GetWidgetX(Sai__c)
local real y=GetWidgetY(Sai__c)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real dmg=160.+GetHeroAgi(Sai__c,true)*5.
local group gr1=CreateGroup()
local group gr2=CreateGroup()
local unit tg
call Sound("Sai Choujuu Giga.mp3")
call GroupEnumUnitsInRange(gr1,x1,y1,400.,null)
loop
set tg=FirstOfGroup(gr1)
exitwhen tg==null or count==2
if not HasUnitInvisible(tg)and IsUnitNeedNinjutsu(tg,Sai__p)then
call GroupAddUnit(gr2,tg)
set count=count+1
endif
call GroupRemoveUnit(gr1,tg)
endloop
call DestroyGroup(gr1)
loop
set tg=FirstOfGroup(gr2)
exitwhen tg==null
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call KnockBackUnitEf(tg,750.,.75,57.295*Atan2(y-GetWidgetY(tg),x-GetWidgetX(tg)),MainPeriod,3,false)
call UnitDamageTarget(Sai__c,tg,GetNinjutsuDamage(dmg,Sai__c,tg,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call UnitTempSpell(tg,0x41305133,0,5.,0,false)
endif
call GroupRemoveUnit(gr2,tg)
endloop
call DestroyGroup(gr2)
call TerrainDeformRipple(x1,y1,600.,40.,2000,1,3.,3.,600.,false)
call SaveAgentHandle(HH,GetHandleId(t1),0,LoadUnitHandle(HH,h,2))
call SaveAgentHandle(HH,GetHandleId(t1),1,LoadUnitHandle(HH,h,3))
call TimerStart(t1,.35,false,function cj_anonym__637)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set gr1=null
set gr2=null
set tg=null
set t=null
set t1=null
endfunction
function Sai__SaiGiantsCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sai__c)
local real y=GetWidgetY(Sai__c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real offset=225.
local real degree=70.
local unit d
call Sound("Blink.mp3")
set d=CreateUnit(Sai__p,0x6830314D,x1-offset*Cos((a-degree)*.017),y1-offset*Sin((a-degree)*.017),a+180.)
call SetUnitAnimation(d,"Attack 1")
call SaveAgentHandle(HH,h,2,d)
set d=CreateUnit(Sai__p,0x6830314D,x1-offset*Cos((a+degree)*.017),y1-offset*Sin((a+degree)*.017),a+180.)
call SetUnitAnimation(d,"Attack 2")
call SaveAgentHandle(HH,h,3,d)
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,.15,false,function cj_anonym__636)
set d=null
set t=null
endfunction
function cj_anonym__638 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
call ShowUnit(tu,true)
call PauseUnit(tu,false)
call SetUnitInvulnerable(tu,false)
call UnitDamageTarget(Sai__c,tu,LoadReal(HH,h,1),true,false,ATTACK_TYPE_CHAOS,null,null)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Sai__SaiKoshiTandanDamage takes unit tu,real x,real y returns nothing
local real dmg=150.
local real addDamage=.15
local real endDamage=dmg+GetUnitState(tu,UNIT_STATE_MAX_LIFE)*addDamage
local timer t
local integer h
call DestroyEffect(AddSpecialEffect("Kuchiyose.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",x,y))
call PauseUnit(tu,false)
if IsUnitHero(tu)then
set t=CreateTimer()
set h=GetHandleId(t)
call ShowUnit(tu,false)
call PauseUnit(tu,true)
call SetUnitInvulnerable(tu,true)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,endDamage)
call TimerStart(t,4.,false,function cj_anonym__638)
else
if not IsUnitTurels(tu)then
call UnitDamageTarget(Sai__c,tu,99999.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
endif
set t=null
endfunction
function cj_anonym__639 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local integer amount=LoadInteger(HH,h,2)
local real maxdis=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if amount>0 and GetWidgetLife(Sai__c)>.405 and GetWidgetLife(tu)>.405 and IsSpellNeedRange(x,y,x1,y1,1350.)then
call SetUnitFlyHeight(d,1350./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SetUnitPosition(d,x+20.*Cos(a*bj_DEGTORAD),y+20.*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a)
call SaveInteger(HH,h,2,amount-1)
else
call RemoveUnit(d)
if GetWidgetLife(Sai__c)>.405 and GetWidgetLife(tu)>.405 and IsSpellNeedRange(x,y,x1,y1,1350.)then
call Sai__SaiKoshiTandanDamage(tu,x1,y1)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Sai__SaiKoshiTandanCast takes unit tu returns nothing
local real x=GetWidgetX(Sai__c)
local real y=GetWidgetY(Sai__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call Sound("Sai Koshi Tandan.mp3")
set bj_lastCreatedUnit=CreateUnit(Sai__p,0x6830304F,x,y,a)
call SetUnitScale(bj_lastCreatedUnit,1.5,1.5,1.5)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,bj_lastCreatedUnit)
call SaveInteger(HH,h,2,R2I(distance/20.))
call SaveReal(HH,h,3,distance)
call TimerStart(t,period,true,function cj_anonym__639)
set t=null
endfunction
function cj_anonym__640 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
if GetWidgetLife(d)>.405 and GetWidgetLife(tu)>.405 then
if GetIssuedOrderId()!=OrderId("entanglingroots")then
call IssueTargetOrder(d,"entanglingroots",tu)
endif
else
if GetWidgetLife(d)>.405 then
call RemoveUnit(d)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Sai__SaiHebiCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sai__c)
local real y=GetWidgetY(Sai__c)
local real f=GetUnitFacing(Sai__c)
set bj_lastCreatedUnit=CreateUnit(Sai__p,0x68303150,x,y,f)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,10.)
call IssueImmediateOrder(bj_lastCreatedUnit,"windwalk")
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tu)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,bj_lastCreatedUnit)
call TimerStart(t,.25,true,function cj_anonym__640)
set t=null
endfunction
function Sai__GetDamageConditions takes nothing returns boolean
return GetUnitTypeId(GetEventDamageSource())==0x68303055 and IsUnitInGroup(GetTriggerUnit(),Sai__grShishi)
endfunction
function Sai__GetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local integer lvl=GetUnitAbilityLevel(tu,0x41305752)
local real time=3.
call DisableTrigger(Sai__getdmg)
if lvl>0 then
call SetUnitAbilityLevel(tu,0x41305752,lvl+1)
else
call UnitTempSpell(tu,0x41305752,0x42303252,time,0,false)
endif
call GroupRemoveUnit(Sai__grShishi,tu)
call EnableTrigger(Sai__getdmg)
set tu=null
endfunction
function Sai__AttackConditions takes nothing returns boolean
return GetUnitTypeId(GetAttacker())==0x68303055 and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)and GetUnitAbilityLevel(GetTriggerUnit(),0x41305752)<4 and not IsUnitInGroup(GetTriggerUnit(),Sai__grShishi)
endfunction
function Sai__AttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Sai__grReg)then
call GroupAddUnit(Sai__grReg,tu)
call TriggerRegisterUnitEvent(Sai__getdmg,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Sai__grShishi,tu)
call EnableTrigger(Sai__getdmg)
set tu=null
endfunction
function cj_anonym__641 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real a=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real timeLife=LoadReal(HH,h,5)
local real maxdis=LoadReal(HH,h,6)
local integer amount=LoadInteger(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if amount>0 then
call SetUnitFlyHeight(d,1300./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SaveInteger(HH,h,7,amount-1)
else
call SetUnitFlyHeight(d,GetUnitDefaultFlyHeight(d),0.)
call PauseUnit(d,false)
call SetUnitPathing(d,true)
call UnitApplyTimedLife(d,0x42544C46,timeLife)
call Sound("Sai Four Falling Wolves.mp3")
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Sai__SaiShishiCast takes real x1,real y1 returns nothing
local timer t
local integer h
local integer number=4
local real radius=350.
local real x=GetWidgetX(Sai__c)
local real y=GetWidgetY(Sai__c)
local real x2
local real y2
local real a
local real distance
local real speed=660.
local real offset=speed*MainPeriod
local real timeLife=15.
local rect r=Rect(x1-radius/2.,y1-radius/2.,x1+radius/2.,y1+radius/2.)
call Sound("Sai Choujuu Giga.mp3")
loop
set t=CreateTimer()
set h=GetHandleId(t)
set x2=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
set y2=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
set a=57.2958279087*Atan2(y2-y,x2-x)
set distance=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))
set bj_lastCreatedUnit=CreateUnit(Sai__p,0x68303055,x,y,a)
call SetUnitTypeFlying(bj_lastCreatedUnit)
call PauseUnit(bj_lastCreatedUnit,true)
call SetUnitPathing(bj_lastCreatedUnit,false)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveReal(HH,h,1,x2)
call SaveReal(HH,h,2,y2)
call SaveReal(HH,h,3,a)
call SaveReal(HH,h,4,offset)
call SaveReal(HH,h,5,timeLife)
call SaveReal(HH,h,6,distance)
call SaveInteger(HH,h,7,R2I(distance/offset))
call TimerStart(t,MainPeriod,true,function cj_anonym__641)
set number=number-1
exitwhen number==0
endloop
call RemoveRect(r)
set r=null
set t=null
endfunction
function Sai__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Sai_SHISHI or i==Sai_HEBI or i==Sai_TORA or i==Sai_CHOSHIN_GIGA or i==Sai_TAKA or i==0x41305936
endfunction
function Sai__SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
if Sai__c==null then
set Sai__c=GetTriggerUnit()
set Sai__p=GetOwningPlayer(Sai__c)
endif
if i==Sai_SHISHI then
call Sai__SaiShishiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sai_HEBI then
call Sai__SaiHebiCast(GetSpellTargetUnit())
elseif i==Sai_TORA then
call Sai__SaiKoshiTandanCast(GetSpellTargetUnit())
elseif i==Sai_CHOSHIN_GIGA then
call Sai__SaiGiantsCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sai_TAKA then
call Sai__SaiTakaCast()
elseif i==0x41305936 then
call UnitRemoveAbility(Sai__c,0x41305936)
endif
endfunction
function Sai_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
set Sai__grShishi=CreateGroup()
set Sai__grReg=CreateGroup()
set Sai__getdmg=CreateTrigger()
call DisableTrigger(Sai__getdmg)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41305655,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Sai__SpellsConditions))
call TriggerAddAction(spells,function Sai__SpellsActions)
call TriggerAddCondition(attack,Condition(function Sai__AttackConditions))
call TriggerAddAction(attack,function Sai__AttackActions)
call TriggerAddCondition(Sai__getdmg,Condition(function Sai__GetDamageConditions))
call TriggerAddAction(Sai__getdmg,function Sai__GetDamageActions)
set spells=null
set attack=null
endfunction
function Sakura__HasSakuraBuff takes real value returns real
if GetUnitAbilityLevel(Sakura__c,0x4130364C)>0 then
set value=value*2.
endif
return value
endfunction
function cj_anonym__642 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer time=LoadInteger(HH,h,0)
local leaderboard lb=LoadLeaderboardHandle(HH,h,1)
if GetWidgetLife(Sakura__c)>.405 and time>0 then
call LeaderboardSetItemValue(lb,0,time)
call SaveInteger(HH,h,0,time-1)
else
call DestroyLeaderboard(lb)
call UnitRemoveAbility(Sakura__c,0x41313350)
call UnitRemoveAbility(Sakura__c,0x4130364C)
call UnitRemoveAbility(Sakura__c,0x42303047)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set lb=null
set t=null
endfunction
function Sakura__SakuraByakugonoInCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer time=30
local leaderboard lb=CreateLeaderboard()
call Sound("Ping.mp3")
call UnitAddAbility(Sakura__c,0x4130364C)
call UnitAddAbility(Sakura__c,0x41313350)
call LeaderboardSetLabel(lb,"Byakugo no In")
call PlayerSetLeaderboard(Sakura__p,lb)
call LeaderboardAddItem(lb,"Длительность:",time,Player(0))
call LeaderboardSetSizeByItemCount(lb,1)
call LeaderboardSetItemValueColor(lb,0,0,144,212,255)
call LeaderboardSetItemLabelColor(lb,0,165,253,0,255)
call LeaderboardDisplay(lb,true)
call SaveInteger(HH,h,0,time-1)
call SaveLeaderboardHandle(HH,h,1,lb)
call TimerStart(t,1.,true,function cj_anonym__642)
set lb=null
set t=null
endfunction
function cj_anonym__643 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real hp=LoadReal(HH,h,4)
local real mp=LoadReal(HH,h,5)
local real x=GetWidgetX(Sakura__c)
local real y=GetWidgetY(Sakura__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call SetUnitState(Sakura__c,UNIT_STATE_MANA,GetUnitState(Sakura__c,UNIT_STATE_MANA)-mp)
if GetUnitCurrentOrder(Sakura__c)==OrderId("healingspray")and GetUnitState(Sakura__c,UNIT_STATE_MANA)>0.and GetWidgetLife(Sakura__c)>.405 and GetWidgetLife(tu)>.405 and distance<250.then
if tu!=Sakura__c then
call SetUnitFacing(Sakura__c,a)
endif
call SetWidgetLife(tu,GetWidgetLife(tu)+GetHeal(hp,Sakura__c,tu))
if Sakura__c!=tu then
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)+mp)
endif
else
call IssueImmediateOrder(Sakura__c,"stop")
call DestroyEffect(LoadEffectHandle(HH,h,1))
call DestroyEffect(LoadEffectHandle(HH,h,2))
call DestroyEffect(LoadEffectHandle(HH,h,3))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Sakura__SakuraShosenCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real hp=Sakura__HasSakuraBuff(60.*.1)
local real mp=hp/2.
call Sound("Ping.mp3")
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\Immolation\\ImmolationTarget.mdl",Sakura__c,"hand right"))
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\Immolation\\ImmolationTarget.mdl",Sakura__c,"hand left"))
call SaveAgentHandle(HH,h,3,AddSpecialEffectTarget("Abilities\\Spells\\Undead\\ReplenishMana\\ReplenishManaCaster.mdl",tu,"origin"))
call SaveReal(HH,h,4,hp)
call SaveReal(HH,h,5,mp)
call TimerStart(t,.1,true,function cj_anonym__643)
set t=null
endfunction
function Sakura__GockenDamage takes real x,real y,real distanceForStun,unit tu returns nothing
local real hpMax=GetUnitState(tu,UNIT_STATE_MAX_LIFE)
local real dmgStart=100.
local real dmgAdd=.1
local real dmgEnd=Sakura__HasSakuraBuff(dmgStart+(hpMax*dmgAdd))
local real timestun=1.3+(distanceForStun*.002)
call TerrainDeformRipple(x,y,250.,50.,2500,1,4.,7.,400.,false)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",x,y))
call UnitDamageTarget(Sakura__c,tu,GetTaijutsuDamage(dmgEnd,Sakura__c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
if GetWidgetLife(tu)>.405 then
call GetStun(tu,timestun)
endif
endfunction
function cj_anonym__644 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real offset=LoadReal(HH,h,1)
local real maxdis=LoadReal(HH,h,2)
local real distanceForStrike=LoadReal(HH,h,3)
local real distanceForStun=LoadReal(HH,h,4)
local real x=GetWidgetX(Sakura__c)
local real y=GetWidgetY(Sakura__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if curdis>distanceForStrike and GetWidgetLife(Sakura__c)>.405 and GetWidgetLife(tu)>.405 and IsSpellNeedRange(x,y,x1,y1,975.)then
call SetUnitFlyHeight(Sakura__c,1250./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SetUnitPosition(Sakura__c,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(Sakura__c,a)
call SaveReal(HH,h,4,distanceForStun+offset)
else
if GetWidgetLife(Sakura__c)>.405 and GetWidgetLife(tu)>.405 and IsSpellNeedRange(x,y,x1,y1,975.)then
call Sakura__GockenDamage(x,y,distanceForStun,tu)
endif
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SetUnitTimeScale(Sakura__c,1.)
call SetUnitFlyHeight(Sakura__c,GetUnitDefaultFlyHeight(Sakura__c),1800.)
call PauseUnit(Sakura__c,false)
call SetUnitPathing(Sakura__c,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Sakura__SakuraGockenCast takes unit tu returns nothing
local real x=GetWidgetX(Sakura__c)
local real y=GetWidgetY(Sakura__c)
local real distance=DistanceBetweenCoords(x,y,GetWidgetX(tu),GetWidgetY(tu))
local real speed=1000.
local real period=.025
local real offset=speed*period
local real distanceForStrike=offset*2.
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call Sound("Gocken no Jutsu.mp3")
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call PauseUnit(Sakura__c,true)
call SetUnitPathing(Sakura__c,false)
call SetUnitTypeFlying(Sakura__c)
call SetUnitTimeScale(Sakura__c,distance*.001)
call SetUnitAnimation(Sakura__c,"Attack")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,offset)
call SaveReal(HH,h,2,distance)
call SaveReal(HH,h,3,distanceForStrike)
call SaveReal(HH,h,4,0.)
call TimerStart(t,period,true,function cj_anonym__644)
set t=null
endfunction
function cj_anonym__645 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer i=LoadInteger(HH,h,0)
call RemoveDestructable(LoadDestructableHandle(HH,h,1))
loop
call RemoveDestructable(LoadDestructableHandle(HH,h,i))
set i=i-1
exitwhen i==0
endloop
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Sakura__SakuraOkashoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer i=6
local integer rowcur=1
local integer h=GetHandleId(t)
local real radius=800.
local real offset=radius/2.
local real degree=0.
local real degreeStep=72.
local real a=GetUnitFacing(Sakura__c)
local real x=GetWidgetX(Sakura__c)
local real y=GetWidgetY(Sakura__c)
local real x1=x+offset*Cos(a*bj_DEGTORAD)
local real y1=y+offset*Sin(a*bj_DEGTORAD)
local real x2
local real y2
local real dmg=Sakura__HasSakuraBuff(120.+GetHeroInt(Sakura__c,true)*2.2)
local real removeTime=2.
local unit tg
call Sound("Tsuutenkaky.mp3")
call GroupEnumUnitsInRange(Sakura__g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(Sakura__g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Sakura__p)then
call UnitDamageTarget(Sakura__c,tg,GetTaijutsuDamage(dmg,Sakura__c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(Sakura__g,tg)
endloop
call KillDestructablesStart(x1,y1,radius)
call TerrainDeformRipple(x1,y1,radius/1.25,125.,5500+(400),1,22.,14.+(removeTime*1.65),radius/1.25,false)
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,GetRandomReal(1.1,1.25),"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,GetRandomReal(1.1,1.25),"IceSparks.mdx",8.)
endif
call SaveInteger(HH,h,0,i)
set offset=200.
call SaveDestructableHandle(HH,h,1,CreateDestructable(0x42303658,x1,y1,GetRandomReal(0.,360.),GetRandomReal(.95,1.2),0))
loop
set degree=degree+degreeStep
set x2=x1+offset*Cos((a+degree)*bj_DEGTORAD)
set y2=y1+offset*Sin((a+degree)*bj_DEGTORAD)
call SaveDestructableHandle(HH,h,i,CreateDestructable(0x42303658,x2,y2,degree,GetRandomReal(.95,1.2),0))
set i=i-1
exitwhen i==1
endloop
call TimerStart(t,removeTime,false,function cj_anonym__645)
set tg=null
set t=null
endfunction
function Sakura__SpellsConditions takes nothing returns boolean
local integer id=GetSpellAbilityId()
return id==Sakura_OKASHO or id==Sakura_GOCKEN or id==Sakura_SHOSEN or id==Sakura_BYAKUGO
endfunction
function Sakura__SpellsActions takes nothing returns nothing
local integer id
if Sakura__c==null then
set Sakura__c=GetTriggerUnit()
set Sakura__p=GetOwningPlayer(Sakura__c)
endif
set id=GetSpellAbilityId()
if id==Sakura_OKASHO then
call Sakura__SakuraOkashoCast()
elseif id==Sakura_GOCKEN then
call Sakura__SakuraGockenCast(GetSpellTargetUnit())
elseif id==Sakura_SHOSEN then
call Sakura__SakuraShosenCast(GetSpellTargetUnit())
elseif id==Sakura_BYAKUGO then
call Sakura__SakuraByakugonoInCast()
endif
endfunction
function Sakura_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Sakura__g=CreateGroup()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Sakura__SpellsConditions))
call TriggerAddAction(spells,function Sakura__SpellsActions)
set spells=null
endfunction
function Sasori__IsHirukoDummyNear takes unit u returns boolean
local boolean log=false
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real x1=GetWidgetX(Sasori_hirukoDummy)
local real y1=GetWidgetY(Sasori_hirukoDummy)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<300.then
set log=true
endif
return log
endfunction
function Sasori__GetHirukoConditions takes nothing returns boolean
return Sasori__IsHirukoDummyNear(GetTriggerUnit())and GetUnitTypeId(GetTriggerUnit())==morph_rawcode[2]or GetUnitTypeId(GetTriggerUnit())==morph_rawcode[3]
endfunction
function Sasori__GetHirukoActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local player l__Sasori_p=GetOwningPlayer(u)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real f=GetUnitFacing(u)
local integer idp=GetPlayerId(l__Sasori_p)
local integer idu=GetUnitTypeId(u)
local integer idNew=heroes_rawcode[Sasori]
local integer exp=GetHeroXP(u)
local integer i=0
if Sasori_lb!=null then
call LeaderboardDisplay(Sasori_lb,false)
endif
call mbiVal(gamestat_mb,gamestat_Place[idp],0,"BTNSasori V2.blp",null)
call ShowUnit(u,false)
call PauseUnit(u,true)
call SetUnitInvulnerable(u,true)
set Sasori_c=CreateUnit(l__Sasori_p,idNew,x,y,f)
set l__Sasori_p=GetOwningPlayer(Sasori_c)
set udg_Hero[idp]=Sasori_c
call SetHeroXP(Sasori_c,exp,false)
loop
exitwhen i>5
if GetItemTypeId(UnitItemInSlot(u,i))!=null then
call UnitAddItem(Sasori_c,UnitItemInSlot(u,i))
endif
set i=i+1
endloop
if Sasori_form_1[1]then
call UnitAddAbility(Sasori_c,Sasori_AIANTERU)
endif
if Sasori_form_1[2]then
call UnitAddAbility(Sasori_c,Sasori_SENBONS)
endif
if Sasori_form_1[3]then
call UnitAddAbility(Sasori_c,Sasori_GANJONA_KESU)
endif
if Sasori_form_1[4]then
call UnitAddAbility(Sasori_c,Sasori_SENBOMB)
endif
if GetLocalPlayer()==l__Sasori_p then
call ClearSelection()
call SelectUnit(Sasori_c,true)
endif
call SetUnitFlyHeight(Sasori_c,GetUnitDefaultFlyHeight(Sasori_c),0.)
call RemoveUnit(u)
call RemoveUnit(Sasori_hirukoDummy)
set Sasori_hirukoDummy=null
set l__Sasori_p=null
set u=null
endfunction
function cj_anonym__647 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real a=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real timeStun=LoadReal(HH,h,4)
local real offset=LoadReal(HH,h,5)
local integer amount=LoadInteger(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local boolean log=false
local unit tg
if amount>0 then
call GroupEnumUnitsInRange(g,x,y,40.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Sasori_p)then
if not log then
set log=true
endif
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodKnight.mdl",tg,"chest"))
call UnitDamageTarget(Sasori_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tg)>.405 and not IsUnitPaused(tg)then
call GetStun(tg,timeStun)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call SetUnitPosition(d,x+offset*Cos(a),y+offset*Sin(a))
call SetUnitFlyHeight(d,GetUnitFlyHeight(d)-5.,0.)
if not log then
call SaveInteger(HH,h,6,amount-1)
else
call SaveInteger(HH,h,6,0)
endif
else
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set d=null
set t=null
endfunction
function cj_anonym__646 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer music=LoadInteger(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
local real period=LoadReal(HH,h,5)
local real time=LoadReal(HH,h,6)
local real timeStun=LoadReal(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1
local real y1
local integer i=0
local timer t1
local integer h1
local rect r
local unit u
if time>0.then
if time>period*2.then
if music<4 then
call SaveInteger(HH,h,1,music+1)
else
call Sound("Sasori Hiruko Senbons.mp3")
call SaveInteger(HH,h,1,0)
endif
endif
set r=Rect(x-radius/2.,y-radius/2.,x+radius/2.,y+radius/2.)
loop
set t1=CreateTimer()
set h1=GetHandleId(t1)
set x1=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
set y1=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
set u=CreateUnit(Sasori_p,0x68303438,x,y,bj_RADTODEG*Atan2(y1-y,x1-x))
call SetUnitFlyHeight(u,GetUnitFlyHeight(d),0.)
call SaveAgentHandle(HH,h1,0,CreateGroup())
call SaveAgentHandle(HH,h1,1,u)
call SaveReal(HH,h1,2,bj_RADTODEG*Atan2(y1-y,x1-x)*bj_DEGTORAD)
call SaveReal(HH,h1,3,dmg)
call SaveReal(HH,h1,4,timeStun)
call SaveReal(HH,h1,5,offset)
call SaveInteger(HH,h1,6,R2I(SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))/offset))
call TimerStart(t1,period/2.,true,function cj_anonym__647)
set i=i+1
exitwhen i>3
endloop
call RemoveRect(r)
call SaveReal(HH,h,6,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,1))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set r=null
set d=null
set t=null
set t1=null
endfunction
function Sasori__SenBombStartSpin takes unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real radius=600.
local real offset=60.
local real dmg=40.
local real period=.1
local real time=4.
local real timeStun=.1
call Sound("Sasori Hiruko Senbons.mp3")
call SetUnitAnimation(d,"spell")
call SaveAgentHandle(HH,h,0,d)
call SaveInteger(HH,h,1,0)
call SaveReal(HH,h,2,radius)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,dmg)
call SaveReal(HH,h,5,period)
call SaveReal(HH,h,6,time)
call SaveReal(HH,h,7,timeStun)
call TimerStart(t,period,true,function cj_anonym__646)
set t=null
endfunction
function cj_anonym__648 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real heightUp=LoadReal(HH,h,1)
local real a=LoadReal(HH,h,2)
local integer amount=LoadInteger(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if amount>0 then
call SetUnitFlyHeight(d,GetUnitFlyHeight(d)+heightUp,0.)
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveInteger(HH,h,3,amount-1)
else
call Sasori__SenBombStartSpin(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Sasori__SenBombCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Sasori_c)
local real yHero=GetWidgetY(Sasori_c)
local real startAngle=30.
local real startOffset=65.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos((a+startAngle)*bj_DEGTORAD)
local real y=yHero+startOffset*Sin((a+startAngle)*bj_DEGTORAD)
local real needHeight=350.
local real period=.025
local real speed=600.
local real offset=speed*period
local real heightUp
local real distance
local integer amount
set x=x+startOffset*Cos(a*bj_DEGTORAD)
set y=y+startOffset*Sin(a*bj_DEGTORAD)
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
set amount=R2I(distance/offset)
set heightUp=needHeight/amount
call Sound("Sasori Hiruko Bomb.mp3")
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\TinkerRocket\\TinkerRocketMissile.mdl",Sasori_c,"hand left"))
call SaveAgentHandle(HH,h,0,CreateUnit(Sasori_p,0x6E303059,x,y,a))
call SaveReal(HH,h,1,heightUp)
call SaveReal(HH,h,2,a)
call SaveInteger(HH,h,3,R2I(distance/offset))
call SaveReal(HH,h,4,offset)
call TimerStart(t,period,true,function cj_anonym__648)
set t=null
endfunction
function Sasori__GanjonaKesuCast takes nothing returns nothing
call UnitTempSpell(Sasori_c,0x41304F30,0,2.,0,false)
endfunction
function cj_anonym__649 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real offset=LoadReal(HH,h,7)
local real rangeStart=LoadReal(HH,h,8)
local real rangeEnd=LoadReal(HH,h,9)
local integer i=0
if rangeStart<rangeEnd then
loop
exitwhen i==7
set bj_lastLoadedUnit=LoadUnitHandle(HH,h,i)
call SetUnitPosition(bj_lastLoadedUnit,GetWidgetX(bj_lastLoadedUnit)+offset*Cos(GetUnitFacing(bj_lastLoadedUnit)*.017),GetWidgetY(bj_lastLoadedUnit)+offset*Sin(GetUnitFacing(bj_lastLoadedUnit)*.017))
set i=i+1
endloop
call SaveReal(HH,h,8,rangeStart+offset)
else
loop
exitwhen i==7
call RemoveUnit(LoadUnitHandle(HH,h,i))
set i=i+1
endloop
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Sasori__SenbonsCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local real dmg=10.
local real radius=300.
local real rangeStart=0.
local real rangeEnd=450.
local real timeMove=.15
local real timeDef=11.
local real offsetMove=(rangeEnd*MainPeriod)/timeMove
local real offsetStart=radius/2.
local real degree=30.
local real step=10.
local real f=GetUnitFacing(Sasori_c)
local real xHero=GetWidgetX(Sasori_c)
local real yHero=GetWidgetY(Sasori_c)
local real startOffset=75.
local real x=xHero+startOffset*Cos(f*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(f*bj_DEGTORAD)
local real x1=x+offsetStart*Cos(f*bj_DEGTORAD)
local real y1=y+offsetStart*Sin(f*bj_DEGTORAD)
local group g=CreateGroup()
local unit tg
call Sound3D(Sasori_c,"Sasori Hiruko Senbons.mp3")
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Sasori_p)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodKnight.mdl",tg,"chest"))
call UnitDamageTarget(Sasori_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tg)>.405 then
if GetUnitAbilityLevel(tg,0x41305156)==0 then
call UnitTempSpell(tg,0x41305156,0,timeDef,0,false)
else
call SetUnitAbilityLevel(tg,0x41305156,GetUnitAbilityLevel(tg,0x41305156)+1)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
loop
exitwhen i==7
call SaveAgentHandle(HH,h,i,CreateUnit(Sasori_p,0x6E303048,x,y,f+degree))
set degree=degree-step
set i=i+1
endloop
call SaveReal(HH,h,7,offsetMove)
call SaveReal(HH,h,8,rangeStart)
call SaveReal(HH,h,9,rangeEnd)
call TimerStart(t,MainPeriod,true,function cj_anonym__649)
set g=null
set tg=null
set t=null
endfunction
function cj_anonym__650 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real a=LoadReal(HH,h,1)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local real maxdis=LoadReal(HH,h,4)
local real moveOffset=LoadReal(HH,h,5)
local real startOffset=LoadReal(HH,h,6)
local integer amount=LoadInteger(HH,h,7)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if amount>0 then
call SetUnitFlyHeight(tu,1600./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SetUnitPosition(tu,x+moveOffset*Cos(a*bj_DEGTORAD),y+moveOffset*Sin(a*bj_DEGTORAD))
call SaveInteger(HH,h,7,amount-1)
else
call SetUnitFlyHeight(tu,GetUnitDefaultFlyHeight(tu),1200.)
call SetUnitPathing(tu,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Sasori__AianteruCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=100.
local real startOffset=300.
local real speed=750.
local real moveOffset=speed*MainPeriod
local real timeDebuff=4.
local real x=GetWidgetX(Sasori_c)
local real y=GetWidgetY(Sasori_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real x2=x1+startOffset*Cos(a*bj_DEGTORAD)
local real y2=y1+startOffset*Sin(a*bj_DEGTORAD)
local real distance=SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
local integer amount=R2I(distance/moveOffset)
call SetUnitTypeFlying(tu)
call SetUnitPathing(tu,false)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodKnight.mdl",tu,"chest"))
call UnitDamageTarget(Sasori_c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x41303536,0x42303253,timeDebuff,0,false)
endif
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,a)
call SaveReal(HH,h,2,x2)
call SaveReal(HH,h,3,y2)
call SaveReal(HH,h,4,distance)
call SaveReal(HH,h,5,moveOffset)
call SaveReal(HH,h,6,startOffset)
call SaveInteger(HH,h,7,amount)
call TimerStart(t,MainPeriod,true,function cj_anonym__650)
set t=null
endfunction
function cj_anonym__651 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real OldHP=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real CurHP=GetWidgetLife(tu)
if time>0.and CurHP>.405 then
if CurHP>OldHP then
call SetWidgetLife(tu,OldHP)
else
call SaveReal(HH,h,1,CurHP)
endif
call SaveReal(HH,h,3,time-period)
else
call UnitRemoveAbility(tu,0x41305139)
call UnitRemoveAbility(tu,0x4230324B)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Sasori__KazegakeRemoveBaseRegen takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real OldHP=GetWidgetLife(tu)
local real time=6.
local real period=.01
call UnitAddAbility(tu,0x41305139)
call GroupRemoveUnit(Sasori__grKazekage,tu)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,OldHP)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__651)
set t=null
endfunction
function Sasori__GetDamageConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetEventDamageSource(),Sasori_KAZEKAGE)>0 and IsUnitInGroup(GetTriggerUnit(),Sasori__grKazekage)
endfunction
function Sasori__GetDamageActions takes nothing returns nothing
call Sasori__KazegakeRemoveBaseRegen(GetTriggerUnit())
call DisableTrigger(Sasori__getdmg)
endfunction
function Sasori__AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and GetUnitAbilityLevel(GetAttacker(),Sasori_KAZEKAGE)>0 and GetUnitAbilityLevel(GetTriggerUnit(),0x41305139)==0 and not IsUnitInGroup(GetTriggerUnit(),Sasori__grKazekage)
endfunction
function Sasori__AttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Sasori__grReg)then
call GroupAddUnit(Sasori__grReg,tu)
call TriggerRegisterUnitEvent(Sasori__getdmg,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Sasori__grKazekage,tu)
call EnableTrigger(Sasori__getdmg)
set tu=null
endfunction
function Sasori__SatetsuKaihoDamage takes group g1,group g2,real x,real y,real rangeStart,real dmg,real timeSlow returns nothing
local integer lvlUlt=GetUnitAbilityLevel(Sasori_c,Sasori_KAZEKAGE)
local rect r=Rect(x-rangeStart,y-rangeStart,x+rangeStart,y+rangeStart)
local unit tg
call UnitApplyTimedLife(CreateUnit(Sasori_p,0x68303647,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),GetRandomReal(0.,360.)),0x42544C46,3.)
call UnitApplyTimedLife(CreateUnit(Sasori_p,0x68303647,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),GetRandomReal(0.,360.)),0x42544C46,3.)
call UnitApplyTimedLife(CreateUnit(Sasori_p,0x68303647,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),GetRandomReal(0.,360.)),0x42544C46,3.)
call GroupEnumUnitsInRect(g1,r,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasori_p)and not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
call UnitDamageTarget(Sasori_c,tg,GetNinjutsuDamage(dmg,Sasori_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call UnitTempSpell(tg,0x41305942,0x42303156,timeSlow,0,false)
if lvlUlt>0 then
call Sasori__KazegakeRemoveBaseRegen(tg)
endif
endif
endif
call GroupRemoveUnit(g1,tg)
endloop
call RemoveRect(r)
set tg=null
set r=null
endfunction
function cj_anonym__652 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real rangeStart=LoadReal(HH,h,2)
local real rangeEnd=LoadReal(HH,h,3)
local real timeSlow=LoadReal(HH,h,4)
local real dmg=LoadReal(HH,h,5)
local real x=GetWidgetX(Sasori_c)
local real y=GetWidgetY(Sasori_c)
if rangeStart<rangeEnd then
if Sasori__senjusobuLog then
call Sasori__SatetsuKaihoDamage(g1,g2,Sasori__senjusobuX,Sasori__senjusobuY,rangeStart,dmg,timeSlow)
endif
call Sasori__SatetsuKaihoDamage(g1,g2,x,y,rangeStart,dmg,timeSlow)
call SaveReal(HH,h,2,rangeStart+100.)
else
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set t=null
endfunction
function Sasori__SatetsuKaihoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real rangeStart=100.
local real rangeEnd=400.
local real dmg=160.
local real period=.15
local real timeSlow=4.
call Sound("Sasori Kazekage Satetsu Kaiho.mp3")
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,rangeStart)
call SaveReal(HH,h,3,rangeEnd)
call SaveReal(HH,h,4,timeSlow)
call SaveReal(HH,h,5,dmg)
call TimerStart(t,period,true,function cj_anonym__652)
set t=null
endfunction
function cj_anonym__653 takes nothing returns boolean
if GetUnitTypeId(GetFilterUnit())==0x6E303038 then
call RemoveUnit(GetFilterUnit())
endif
return false
endfunction
function Sasori__RopuRemoveUnits takes nothing returns nothing
local group gr=CreateGroup()
call GroupEnumUnitsOfPlayer(gr,Sasori_p,Condition(function cj_anonym__653))
call DestroyGroup(gr)
set gr=null
endfunction
function cj_anonym__654 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Sasori_c)>.405 and GetWidgetLife(tu)>.405 and distance>offset then
call SetUnitPosition(tu,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
else
if GetWidgetLife(Sasori_c)<.405 then
call Sasori__RopuRemoveUnits()
endif
call SetUnitPathing(tu,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Sasori__RopuCaptureAndMoveTarget takes unit tu,real x,real y,real offset returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
call SetUnitPathing(tu,false)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveReal(HH,h,3,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__654)
set t=null
endfunction
function cj_anonym__655 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real x2=LoadReal(HH,h,2)
local real y2=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Sasori_c)>.405 and GetWidgetLife(tu)>.405 and distance>offset then
call UnitApplyTimedLife(CreateUnit(Sasori_p,0x6E303038,x,y,a),0x42544C46,distance/1200.)
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SetUnitFacing(d,a)
else
call RemoveUnit(d)
if GetWidgetLife(Sasori_c)>.405 and GetWidgetLife(tu)>.405 then
call Sasori__RopuCaptureAndMoveTarget(tu,x2,y2,offset)
else
if GetWidgetLife(Sasori_c)<.405 then
call Sasori__RopuRemoveUnits()
endif
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Sasori__RopuStartMove takes unit tu,real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real speed=1200.
local real offset=speed*MainPeriod
call SaveAgentHandle(HH,h,0,CreateUnit(Sasori_p,0x6E303038,x,y,a))
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,x)
call SaveReal(HH,h,3,y)
call SaveReal(HH,h,4,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__655)
set t=null
endfunction
function Sasori__RopuCast takes nothing returns nothing
local real radius=600.
local real x
local real y
local group g=CreateGroup()
local unit tg
if Sasori__senjusobuLog then
set x=Sasori__senjusobuX
set y=Sasori__senjusobuY
else
set x=GetWidgetX(Sasori_c)
set y=GetWidgetY(Sasori_c)
endif
call Sound("Ping.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Sasori_p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
call Sasori__RopuStartMove(tg,x,y)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function Sasori__SenjusobuRemoveUnits takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Sasori_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303644 or GetUnitTypeId(tg)==0x68303330 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__656 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local rect r=LoadRectHandle(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real timeStun=LoadReal(HH,h,5)
local unit tg
if time>0.then
call GroupEnumUnitsInRect(g,r,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Sasori_p)then
call UnitDamageTarget(Sasori_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,4,time-period)
else
set Sasori__senjusobuLog=false
call Sasori__SenjusobuRemoveUnits()
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set r=null
set g=null
set tg=null
set t=null
endfunction
function Sasori__SenjusobuStart takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real offset=150.
local real dmg=50.
local real period=1.
local real time=4.-period
local real size=2.
local real timeStun=2.2
local group g=CreateGroup()
local rect r=Rect(Sasori__senjusobuX-offset,Sasori__senjusobuY-offset,Sasori__senjusobuX+offset,Sasori__senjusobuY+offset)
local unit tg
call TerrainDeformRipple(Sasori__senjusobuX,Sasori__senjusobuY,300.,50.,2500,1,4.,7.,300.,false)
call GroupEnumUnitsInRect(g,r,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Sasori_p)then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl",GetWidgetX(tg),GetWidgetY(tg)))
call UnitDamageTarget(Sasori_c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tg)>.405 then
call GetStun(tg,timeStun)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
set tg=CreateUnit(Sasori_p,0x68303330,Sasori__senjusobuX,Sasori__senjusobuY,GetRandomReal(0.,360.))
call SetUnitScale(tg,size,size,size)
set tg=CreateUnit(Sasori_p,0x68303330,Sasori__senjusobuX+offset*Cos(1.224),Sasori__senjusobuY+offset*Sin(1.224),GetRandomReal(0.,360.))
call SetUnitScale(tg,size,size,size)
set tg=CreateUnit(Sasori_p,0x68303330,Sasori__senjusobuX+offset*Cos(2.448),Sasori__senjusobuY+offset*Sin(2.448),GetRandomReal(0.,360.))
call SetUnitScale(tg,size,size,size)
set tg=CreateUnit(Sasori_p,0x68303330,Sasori__senjusobuX+offset*Cos(3.672),Sasori__senjusobuY+offset*Sin(3.672),GetRandomReal(0.,360.))
call SetUnitScale(tg,size,size,size)
set tg=CreateUnit(Sasori_p,0x68303330,Sasori__senjusobuX+offset*Cos(4.896),Sasori__senjusobuY+offset*Sin(4.896),GetRandomReal(0.,360.))
call SetUnitScale(tg,size,size,size)
set tg=CreateUnit(Sasori_p,0x68303330,Sasori__senjusobuX+offset*Cos(6.12),Sasori__senjusobuY+offset*Sin(6.12),GetRandomReal(0.,360.))
call SetUnitScale(tg,size,size,size)
set Sasori__senjusobuLog=true
call SaveAgentHandle(HH,h,0,g)
call SaveAgentHandle(HH,h,1,r)
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call SaveReal(HH,h,5,timeStun)
call TimerStart(t,period,true,function cj_anonym__656)
set r=null
set g=null
set tg=null
set t=null
endfunction
function cj_anonym__657 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real maxdis=LoadReal(HH,h,1)
local real size=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real curdis=SquareRoot((x-Sasori__senjusobuX)*(x-Sasori__senjusobuX)+(y-Sasori__senjusobuY)*(y-Sasori__senjusobuY))
local real a=57.2958279087*Atan2(Sasori__senjusobuY-y,Sasori__senjusobuX-x)
local real f=GetUnitFacing(d)
if GetWidgetLife(Sasori_c)>.405 and curdis>offset then
call SetUnitScale(d,size,size,size)
if curdis>=maxdis/4.then
call SetUnitPosition(d,x+offset*Cos((a+30.)*.017),y+offset*Sin((a+30.)*.017))
elseif curdis>=maxdis/2.then
call SetUnitPosition(d,x+offset*Cos((a+15.)*.017),y+offset*Sin((a+15.)*.017))
else
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
endif
call SetUnitFacing(d,a)
set d=CreateUnit(Sasori_p,0x68303644,x,y,a)
call SetUnitScale(d,size-.05,size-.05,size-.05)
call SaveReal(HH,h,2,size+.05)
else
call PauseUnit(Sasori_c,false)
if GetWidgetLife(Sasori_c)>.405 then
call Sasori__SenjusobuStart()
else
call Sasori__SenjusobuRemoveUnits()
endif
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set t=null
endfunction
function Sasori__SenjusobuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasori_c)
local real y=GetWidgetY(Sasori_c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real size=1.2
local real offset=45.
set Sasori__senjusobuX=x1
set Sasori__senjusobuY=y1
call PauseUnit(Sasori_c,true)
call Sound("Sasori Kazekage Arms.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Sasori_p,0x68303644,x+offset*Cos((a+90.)*.017),y+offset*Sin((a+90.)*.017),a))
call SaveReal(HH,h,1,distance)
call SaveReal(HH,h,2,size)
call SaveReal(HH,h,3,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__657)
set t=null
endfunction
function cj_anonym__658 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local integer amount=LoadInteger(HH,h,1)
local integer anim=LoadInteger(HH,h,2)
local real timeDebuff=LoadReal(HH,h,3)
local real a=LoadReal(HH,h,4)
local real dmg=LoadReal(HH,h,5)
local real offset=LoadReal(HH,h,6)
local real x=GetWidgetX(Sasori_c)
local real y=GetWidgetY(Sasori_c)
if GetWidgetLife(Sasori_c)>.405 and amount>0 then
if anim<10 then
call SaveInteger(HH,h,2,anim+1)
else
call SetUnitAnimationByIndex(Sasori_c,8)
call SaveInteger(HH,h,2,0)
endif
call SetUnitPosition(Sasori_c,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SaveInteger(HH,h,1,amount-1)
else
if GetWidgetLife(Sasori_c)>.405 and tu!=null and GetWidgetLife(tu)>.405 then
call UnitDamageTarget(Sasori_c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,null,null)
if GetWidgetLife(tu)>.405 then
call UnitTempSpell(tu,0x41305749,0x42303254,timeDebuff,0,true)
call UnitTempSpell(tu,0x41305856,0,timeDebuff,0,true)
endif
endif
call SetUnitAnimation(Sasori_c,"Stand")
call SetUnitPathing(Sasori_c,true)
call PauseUnit(Sasori_c,false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Sasori__HoippuCapture takes unit d,unit tu,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real timeDebuff=4.
local real x=GetWidgetX(Sasori_c)
local real y=GetWidgetY(Sasori_c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real dmg=80.
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real offset=50.
call SetUnitAnimationByIndex(Sasori_c,8)
call SetUnitPathing(Sasori_c,false)
call UnitApplyTimedLife(d,0x42544C46,.6)
call SaveAgentHandle(HH,h,0,tu)
call SaveInteger(HH,h,1,R2I(distance/offset))
call SaveInteger(HH,h,2,0)
call SaveReal(HH,h,3,timeDebuff)
call SaveReal(HH,h,4,a)
call SaveReal(HH,h,5,dmg)
call SaveReal(HH,h,6,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__658)
set t=null
endfunction
function cj_anonym__659 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local integer amount=LoadInteger(HH,h,2)
local real x1=LoadReal(HH,h,3)
local real y1=LoadReal(HH,h,4)
local real offset=LoadReal(HH,h,5)
local real radius=LoadReal(HH,h,6)
local unit tu=LoadUnitHandle(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local unit tg
if GetWidgetLife(Sasori_c)>.405 and amount>0 then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or tu!=null
if IsUnitNeedClear(tg,Sasori_p)then
call SaveAgentHandle(HH,h,7,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call SetUnitPosition(d,x+offset*Cos(f*.017),y+offset*Sin(f*.017))
call UnitApplyTimedLife(CreateUnit(Sasori_p,0x6E303038,x,y,f),0x42544C46,distance/(offset*25.))
if tu==null then
call SaveInteger(HH,h,2,amount-1)
else
call SaveInteger(HH,h,2,0)
endif
else
if GetWidgetLife(Sasori_c)>.405 then
call Sasori__HoippuCapture(d,tu,x1,y1)
else
call RemoveUnit(d)
call PauseUnit(Sasori_c,false)
endif
call FlushChildHashtable(HH,h)
call DestroyGroup(g)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set d=null
set tg=null
set t=null
endfunction
function Sasori__HoippuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasori_c)
local real y=GetWidgetY(Sasori_c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real offset=50.
local real radius=125.
call PauseUnit(Sasori_c,true)
call Sound("Sasori True Form Tail.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Sasori_p,0x6830364E,x,y,a))
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveInteger(HH,h,2,R2I(distance/offset))
call SaveReal(HH,h,3,x1)
call SaveReal(HH,h,4,y1)
call SaveReal(HH,h,5,offset)
call SaveReal(HH,h,6,radius)
call SaveAgentHandle(HH,h,7,null)
call TimerStart(t,MainPeriod,true,function cj_anonym__659)
set t=null
endfunction
function cj_anonym__660 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local lightning lig=LoadLightningHandle(HH,h,1)
local real range=LoadReal(HH,h,2)
local real x
local real y
local real x1
local real y1
local real dis
local real a
if GetWidgetLife(Sasori_c)>.405 and GetWidgetLife(u)>.405 then
set x=GetWidgetX(Sasori_c)
set y=GetWidgetY(Sasori_c)
set x1=GetWidgetX(u)
set y1=GetWidgetY(u)
set a=57.2958279087*Atan2(y1-y,x1-x)*.017
set dis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call MoveLightning(lig,true,x,y,x1,y1)
if dis>range then
call SetUnitPosition(u,x1-(dis-range)*Cos(a),y1-(dis-range)*Sin(a))
endif
else
call DestroyLightning(lig)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set lig=null
set u=null
set t=null
endfunction
function Sasori__AkahigiCreatePuppet takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer random=GetRandomInt(1,4)
local real x=GetWidgetX(Sasori_c)
local real y=GetWidgetY(Sasori_c)
local real f=GetUnitFacing(Sasori_c)
local real radiusCreating=200.
local real range=900.
local unit tg
local rect r=Rect(x-radiusCreating/2.,y-radiusCreating/2.,x+radiusCreating/2.,y+radiusCreating/2.)
if random==1 then
set tg=CreateUnit(Sasori_p,0x68303648,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),f)
elseif random==2 then
set tg=CreateUnit(Sasori_p,0x68303649,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),f)
elseif random==3 then
set tg=CreateUnit(Sasori_p,0x6830364B,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),f)
elseif random==4 then
set tg=CreateUnit(Sasori_p,0x6830364A,GetRandomReal(GetRectMinX(r),GetRectMaxX(r)),GetRandomReal(GetRectMinY(r),GetRectMaxY(r)),f)
endif
call RemoveRect(r)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(tg),GetWidgetY(tg)))
call SaveAgentHandle(HH,h,0,tg)
call SaveLightningHandle(HH,h,1,AddLightning("DRAM",true,x,y,GetWidgetX(tg),GetWidgetY(tg)))
call SaveReal(HH,h,2,range)
call TimerStart(t,MainPeriod,true,function cj_anonym__660)
set r=null
set tg=null
set t=null
endfunction
function cj_anonym__661 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer puppetOld
local integer puppetLimit=LoadInteger(HH,h,1)
local real mana=LoadReal(HH,h,2)
local group g=LoadGroupHandle(HH,h,3)
local integer puppetCurrent=0
local integer puppetNew=0
local integer i
local boolean log=false
local unit tg
call GroupEnumUnitsOfPlayer(g,Sasori_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
set i=GetUnitTypeId(tg)
if GetWidgetLife(tg)>.405 and i==0x68303648 or i==0x68303649 or i==0x6830364B or i==0x6830364A then
set puppetCurrent=puppetCurrent+1
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveInteger(HH,h,0,puppetCurrent)
set puppetOld=LoadInteger(HH,h,0)
call SetUnitState(Sasori_c,UNIT_STATE_MANA,GetUnitState(Sasori_c,UNIT_STATE_MANA)-mana*puppetCurrent)
if GetWidgetLife(Sasori_c)>.405 and GetUnitAbilityLevel(Sasori_c,0x4230325A)>0 and GetUnitState(Sasori_c,UNIT_STATE_MANA)>0.then
if puppetCurrent<puppetLimit-puppetOld and Sasori_bodies>0 then
loop
exitwhen puppetNew==Sasori_bodies or puppetNew==puppetLimit-puppetOld
call Sasori__AkahigiCreatePuppet()
set puppetNew=puppetNew+1
endloop
set Sasori_bodies=Sasori_bodies-puppetNew
set puppetCurrent=puppetCurrent+puppetNew
call SaveInteger(HH,h,0,puppetCurrent)
call LeaderboardSetItemValue(Sasori_lb,LeaderboardGetPlayerIndex(Sasori_lb,Player(0)),Sasori_bodies)
endif
else
call GroupEnumUnitsOfPlayer(g,Sasori_p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
set i=GetUnitTypeId(tg)
if GetWidgetLife(tg)>.405 and i==0x68303648 or i==0x68303649 or i==0x6830364B or i==0x6830364A then
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(tg),GetWidgetY(tg)))
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call UnitRemoveAbility(Sasori_c,0x4230325A)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set t=null
endfunction
function Sasori__AkahigiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer puppetCurrent=0
local integer puppetLimit=10
local real period=.1
local real mana=8.*period
call Sound("Sasori True Form Puppets.mp3")
loop
exitwhen puppetCurrent==Sasori_bodies or puppetCurrent==puppetLimit
call Sasori__AkahigiCreatePuppet()
set puppetCurrent=puppetCurrent+1
endloop
set Sasori_bodies=Sasori_bodies-puppetCurrent
call LeaderboardSetItemValue(Sasori_lb,LeaderboardGetPlayerIndex(Sasori_lb,Player(0)),Sasori_bodies)
call SaveInteger(HH,h,0,puppetCurrent)
call SaveInteger(HH,h,1,puppetLimit)
call SaveReal(HH,h,2,mana)
call SaveAgentHandle(HH,h,3,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__661)
set t=null
endfunction
function cj_anonym__662 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tg=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,2)
local integer amount=LoadInteger(HH,h,3)
local real dmg=LoadReal(HH,h,5)
local real size=LoadReal(HH,h,6)
local real sizePlus=LoadReal(HH,h,7)
local real offset=LoadReal(HH,h,8)
local real radius=LoadReal(HH,h,9)
local real x1=LoadReal(HH,h,10)
local real y1=LoadReal(HH,h,11)
local real x=GetWidgetX(tg)
local real y=GetWidgetY(tg)
local real f=GetUnitFacing(tg)
local unit fire
if GetWidgetLife(Sasori_c)>.405 and GetUnitCurrentOrder(Sasori_c)==OrderId("breathoffire")then
if amount>0 then
call SetUnitPosition(tg,x+offset*Cos(f*.017),y+offset*Sin(f*.017))
call SetUnitScale(tg,size,size,size)
set fire=CreateUnit(Sasori_p,0x6830364D,x,y,f)
call SetUnitScale(fire,size-sizePlus,size-sizePlus,size-sizePlus)
set tg=LoadUnitHandle(HH,h,1)
set x=GetWidgetX(tg)
set y=GetWidgetY(tg)
set f=GetUnitFacing(tg)
call SetUnitPosition(tg,x+offset*Cos(f*.017),y+offset*Sin(f*.017))
call SetUnitScale(tg,size,size,size)
set fire=CreateUnit(Sasori_p,0x6830364D,x,y,f)
call SetUnitScale(fire,size-sizePlus,size-sizePlus,size-sizePlus)
call SaveReal(HH,h,6,size+sizePlus)
call SaveInteger(HH,h,3,amount-1)
else
set amount=LoadInteger(HH,h,4)
if amount<2 then
if amount==0 then
call SaveInteger(HH,h,4,1)
elseif amount==1 then
set fire=CreateUnit(Sasori_p,0x6830364C,x,y,GetRandomReal(0.,360.))
call SetUnitScale(fire,.9,.9,.9)
set tg=LoadUnitHandle(HH,h,1)
set fire=CreateUnit(Sasori_p,0x6830364C,GetWidgetX(tg),GetWidgetY(tg),GetRandomReal(0.,360.))
call SetUnitScale(fire,.9,.9,.9)
call SaveInteger(HH,h,4,2)
endif
endif
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasori_p)then
if GetUnitAbilityLevel(tg,0x41305937)==0 then
call UnitAddAbility(tg,0x41305937)
endif
call UnitDamageTarget(Sasori_c,tg,GetNinjutsuDamage(dmg,Sasori_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Sasori_c,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call JiraiyaSetFireSwamp(Sasori_c,x,y)
endif
else
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41305937)>0 then
call UnitRemoveAbility(tg,0x41305937)
call UnitRemoveAbility(tg,0x4230304E)
endif
call GroupRemoveUnit(g,tg)
endloop
call GroupEnumUnitsOfPlayer(g,Sasori_p,null)
loop
set fire=FirstOfGroup(g)
exitwhen fire==null
if GetWidgetLife(fire)>.405 and GetUnitTypeId(fire)==0x6830364D or GetUnitTypeId(fire)==0x6830364C then
call UnitApplyTimedLife(fire,0x42544C46,.1)
endif
call GroupRemoveUnit(g,fire)
endloop
call DestroyGroup(g)
if GetUnitCurrentOrder(Sasori_c)==OrderId("breathoffire")then
call IssueImmediateOrder(Sasori_c,"stop")
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set fire=null
set tg=null
set t=null
endfunction
function Sasori__KaenHoshaKiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasori_c)
local real y=GetWidgetY(Sasori_c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real offset=20.
local real dmg=80.*MainPeriod
local real size=2.7
local real sizePlus=.1
local real radius=400.
call Sound("Sasori True Form Fire.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Sasori_p,0x6830364D,x+50.*Cos(a*.017),y+50.*Sin(a*.017),a+10.))
call SaveAgentHandle(HH,h,1,CreateUnit(Sasori_p,0x6830364D,x+50.*Cos(a*.017),y+50.*Sin(a*.017),a-10.))
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveInteger(HH,h,3,R2I(distance/offset))
call SaveInteger(HH,h,4,0)
call SaveReal(HH,h,5,dmg)
call SaveReal(HH,h,6,size)
call SaveReal(HH,h,7,sizePlus)
call SaveReal(HH,h,8,offset)
call SaveReal(HH,h,9,radius)
call SaveReal(HH,h,10,x1)
call SaveReal(HH,h,11,y1)
call TimerStart(t,MainPeriod,true,function cj_anonym__662)
set t=null
endfunction
function Sasori__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Sasori_AIANTERU or i==Sasori_SENBONS or i==Sasori_GANJONA_KESU or i==Sasori_SENBOMB or i==Sasori_SENJUSOBU or i==Sasori_ROPU or i==Sasori_SATETSU_KAIHO or i==Sasori_KAEN_HOSHA_KI or i==Sasori_AKAHIGI or i==Sasori_HOIPPU
endfunction
function Sasori__SpellsActions takes nothing returns nothing
local integer i
if Sasori_c==null then
set Sasori_c=GetTriggerUnit()
set Sasori_p=GetOwningPlayer(Sasori_c)
call EnableTrigger(Sasori__getdmg)
endif
set i=GetSpellAbilityId()
if i==Sasori_AIANTERU then
call Sasori__AianteruCast(GetSpellTargetUnit())
elseif i==Sasori_SENBONS then
call Sasori__SenbonsCast()
elseif i==Sasori_GANJONA_KESU then
call Sasori__GanjonaKesuCast()
elseif i==Sasori_SENBOMB then
call Sasori__SenBombCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sasori_SENJUSOBU then
call Sasori__SenjusobuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sasori_ROPU then
call Sasori__RopuCast()
elseif i==Sasori_SATETSU_KAIHO then
call Sasori__SatetsuKaihoCast()
elseif i==Sasori_KAEN_HOSHA_KI then
call Sasori__KaenHoshaKiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sasori_AKAHIGI then
if GetUnitAbilityLevel(Sasori_c,0x4230325A)==0 then
call Sasori__AkahigiCast()
else
call UnitRemoveAbility(Sasori_c,0x4230325A)
endif
elseif i==Sasori_HOIPPU then
call Sasori__HoippuCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Sasori__LearningConditions takes nothing returns boolean
local integer i=GetUnitTypeId(GetTriggerUnit())
return i==heroes_rawcode[Sasori]or i==morph_rawcode[2]or i==morph_rawcode[3]
endfunction
function Sasori__LearningActions takes unit u returns nothing
if Sasori_c==null then
set Sasori_c=u
set Sasori_p=GetOwningPlayer(Sasori_c)
call EnableTrigger(Sasori__getdmg)
endif
if not Sasori_form_1[1]and GetUnitAbilityLevel(Sasori_c,Sasori_AIANTERU)>0 then
set Sasori_form_1[1]=true
set Sasori_form_2[1]=true
set Sasori_form_3[1]=true
elseif not Sasori_form_1[2]and GetUnitAbilityLevel(Sasori_c,Sasori_SENBONS)>0 then
set Sasori_form_1[2]=true
set Sasori_form_2[2]=true
set Sasori_form_3[2]=true
elseif not Sasori_form_1[3]and GetUnitAbilityLevel(Sasori_c,Sasori_GANJONA_KESU)>0 then
set Sasori_form_1[3]=true
set Sasori_form_2[3]=true
set Sasori_form_3[3]=true
elseif not Sasori_form_1[4]and GetUnitAbilityLevel(Sasori_c,Sasori_SENBOMB)>0 then
set Sasori_form_1[4]=true
set Sasori_form_2[4]=true
set Sasori_form_3[4]=true
endif
endfunction
function Sasori_AddAbility takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Sasori]then
call Sasori__LearningActions(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Sasori__EnterAtFontanConditions takes nothing returns boolean
local integer i=GetUnitTypeId(GetTriggerUnit())
return not IsUnitIllusion(GetTriggerUnit())and i==morph_rawcode[3]and Sasori_lb==null
endfunction
function Sasori__EnterAtFontanActions takes nothing returns nothing
if Sasori_c==null then
set Sasori_c=GetTriggerUnit()
set Sasori_p=GetOwningPlayer(Sasori_c)
endif
set Sasori_lb=CreateLeaderboard()
set Sasori_bodies=0
call LeaderboardSetLabel(Sasori_lb,"NINGYO")
call PlayerSetLeaderboard(Sasori_p,Sasori_lb)
call LeaderboardAddItem(Sasori_lb,"BODIES:",Sasori_bodies,Player(0))
call LeaderboardSetSizeByItemCount(Sasori_lb,LeaderboardGetItemCount(Sasori_lb))
call LeaderboardSetItemValueColor(Sasori_lb,LeaderboardGetPlayerIndex(Sasori_lb,Player(0)),255,80,0,255)
call LeaderboardSetItemLabelColor(Sasori_lb,LeaderboardGetPlayerIndex(Sasori_lb,Player(0)),255,80,0,128)
call LeaderboardDisplay(Sasori_lb,true)
call DisableTrigger(GetTriggeringTrigger())
endfunction
function Sasori_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
local trigger enter=CreateTrigger()
local trigger hirukoAlliance=CreateTrigger()
local trigger hirukoAkatsuki=CreateTrigger()
set Sasori__grReg=CreateGroup()
set Sasori__grKazekage=CreateGroup()
set Sasori__getdmg=CreateTrigger()
call DisableTrigger(Sasori__getdmg)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41304F30,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerRegisterEnterRectSimple(hirukoAlliance,gg_rct_AllianceSasoriHirukoRepair)
call TriggerAddCondition(hirukoAlliance,Condition(function Sasori__GetHirukoConditions))
call TriggerAddAction(hirukoAlliance,function Sasori__GetHirukoActions)
call TriggerRegisterEnterRectSimple(hirukoAkatsuki,gg_rct_AkatsukiSasoriHirukoRepair)
call TriggerAddCondition(hirukoAkatsuki,Condition(function Sasori__GetHirukoConditions))
call TriggerAddAction(hirukoAkatsuki,function Sasori__GetHirukoActions)
call TriggerRegisterEnterRectSimple(enter,bj_mapInitialPlayableArea)
call TriggerAddCondition(enter,Condition(function Sasori__EnterAtFontanConditions))
call TriggerAddAction(enter,function Sasori__EnterAtFontanActions)
call TriggerAddCondition(spells,Condition(function Sasori__SpellsConditions))
call TriggerAddAction(spells,function Sasori__SpellsActions)
call TriggerAddCondition(attack,Condition(function Sasori__AttackConditions))
call TriggerAddAction(attack,function Sasori__AttackActions)
call TriggerAddCondition(Sasori__getdmg,Condition(function Sasori__GetDamageConditions))
call TriggerAddAction(Sasori__getdmg,function Sasori__GetDamageActions)
set hirukoAlliance=null
set hirukoAkatsuki=null
set enter=null
set spells=null
set attack=null
endfunction
function Sasuke__BijuSusanooChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Sasuke_p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFF540081"+I2S(Sasuke__bijuSusanooChakra)+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function Sasuke__SusanooChangeText takes boolean log returns nothing
local integer idp=GetPlayerId(Sasuke_p)
if log then
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFF540081"+I2S(LoadInteger(HH,GetHandleId(udg_Hero[idp]),0))+"|r]",countDownTextSize/4.44)
else
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp)),countDownTextSize/4.44)
endif
endfunction
function Sasuke__SusanooRemoveAllBuffs takes nothing returns nothing
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303055)
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_SKELETON_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303145)
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_FULL_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303132)
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_ARMOR_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303147)
endfunction
function cj_anonym__663 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local boolean move=LoadBoolean(HH,h,5)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local unit tg
if time>0.and GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(tu,0x41304330)>0 then
if move then
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,150.,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if GetUnitAbilityLevel(Sasuke_c,0x41304239)==0 and GetUnitAbilityLevel(tg,0x41304330)==0 and not IsUnitInvulnerable(tg)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
set bj_lastCreatedUnit=CreateUnit(Sasuke_p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313337)
call IssueTargetOrder(bj_lastCreatedUnit,"shadowstrike",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
endif
call UnitDamageTarget(Sasuke_c,tu,GetNinjutsuDamage(dmg,Sasuke_c,tu,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveReal(HH,h,4,time-period)
else
call UnitRemoveAbility(tu,0x41304330)
call UnitRemoveAbility(tu,0x42303343)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set tu=null
set t=null
endfunction
function Sasuke__SasukeAmaterasuStartActions takes unit tu,boolean move returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=1.
local real time=4.
local real dmg=50.
call UnitAddAbility(tu,0x41304330)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("amaterasu2.mdx",tu,"origin"))
call SaveReal(HH,h,2,dmg)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call SaveBoolean(HH,h,5,move)
call TimerStart(t,period,true,function cj_anonym__663)
set t=null
endfunction
function cj_anonym__664 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit arrow=LoadUnitHandle(HH,h,0)
local group g1=LoadGroupHandle(HH,h,1)
local group g2=LoadGroupHandle(HH,h,2)
local integer amount=LoadInteger(HH,h,3)
local real offset=LoadReal(HH,h,5)
local real dmg=LoadReal(HH,h,6)
local real x=GetWidgetX(arrow)
local real y=GetWidgetY(arrow)
local real f=GetUnitFacing(arrow)*bj_DEGTORAD
local real effSize=2.
local unit tg
if amount>0 and GetWidgetLife(arrow)>.405 then
call GroupEnumUnitsInRange(g1,x,y,280.,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasuke_p)and not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
call UnitDamageTarget(Sasuke_c,tg,GetNinjutsuDamage(dmg,Sasuke_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g1,tg)
endloop
call CreateEffect(x,y,effSize,"Lightning.mdx",1.)
call KillDestructablesStart(x,y,140.)
call SetUnitPosition(arrow,x+offset*Cos(f),y+offset*Sin(f))
call Combo_GetNarutoSasukeTwo(arrow)
call SaveInteger(HH,h,3,amount-1)
else
call DestroyEffect(LoadEffectHandle(HH,h,4))
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call KillUnit(arrow)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set g1=null
set g2=null
set arrow=null
set t=null
endfunction
function Sasuke__IndraNoYaStrike takes unit caster,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real start_offset=200.
local real x=GetWidgetX(caster)+start_offset*Cos(a*bj_DEGTORAD)
local real y=GetWidgetY(caster)+start_offset*Sin(a*bj_DEGTORAD)
local real period=.025
local real distance=2600.+start_offset
local real speed=1800.
local real offset=speed*period
local real dmg=900.+Sasuke__chibakuTenseiBurn
local unit d=CreateUnit(Sasuke_p,0x68303148,x,y,a)
set Sasuke__logCastIndraNoYa=false
set Sasuke__chibakuTenseiBurn=0.
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveInteger(HH,h,3,R2I(distance/offset))
call SaveAgentHandle(HH,h,4,AddSpecialEffectTarget("Lightning Wave.mdx",d,"origin"))
call SaveReal(HH,h,5,offset)
call SaveReal(HH,h,6,dmg)
call TimerStart(t,period,true,function cj_anonym__664)
set d=null
set t=null
endfunction
function cj_anonym__665 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
call Sasuke__IndraNoYaStrike(LoadUnitHandle(HH,h,0),LoadReal(HH,h,1))
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Sasuke__IndraNoYaStart takes unit caster,real x1,real y1,real mp returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(caster)
local real y=GetWidgetY(caster)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real cast_time=1.367
set Sasuke__logCastIndraNoYa=true
call Sound("Sasuke Indra no Ya.mp3")
call SetUnitState(Sasuke_c,UNIT_STATE_MANA,GetUnitState(Sasuke_c,UNIT_STATE_MANA)-mp)
set Sasuke__bijuSusanooChakra=R2I(GetUnitState(Sasuke_c,UNIT_STATE_MANA))
call Sasuke__BijuSusanooChangeText(true)
call SaveAgentHandle(HH,h,0,caster)
call SaveReal(HH,h,1,a)
call TimerStart(t,cast_time,false,function cj_anonym__665)
set t=null
endfunction
function Sasuke__IndraNoYaCast takes unit caster,real x1,real y1 returns nothing
local real mp=300.
if Sasuke__bijuSusanooChakra>mp then
call Sasuke__IndraNoYaStart(caster,x1,y1,mp)
else
call RecastSkills(caster,Sasuke_BIJU_SUSANOO_INDRA,1,0.)
call DisplayTimedTextToPlayer(Sasuke_p,0.,0.,1.,"|cFFFFCC00Мало чакры! Техника не сработала!|r")
endif
endfunction
function cj_anonym__666 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real chakra_burn=LoadReal(HH,h,0)
local real x=GetWidgetX(Sasuke__bijuSusanooUnit)
local real y=GetWidgetY(Sasuke__bijuSusanooUnit)
local real f=GetUnitFacing(Sasuke__bijuSusanooUnit)
if GetWidgetLife(Sasuke__bijuSusanooUnit)>.405 and Sasuke__bijuSusanooChakra>0 and GetUnitAbilityLevel(Sasuke__bijuSusanooUnit,0x41305257)>0 then
if not Sasuke__logCastIndraNoYa then
call SetUnitState(Sasuke_c,UNIT_STATE_MANA,GetUnitState(Sasuke_c,UNIT_STATE_MANA)-chakra_burn)
set Sasuke__bijuSusanooChakra=R2I(GetUnitState(Sasuke_c,UNIT_STATE_MANA))
call Sasuke__BijuSusanooChangeText(true)
endif
else
call Sound("Sasuke Susanoo Skeleton Roar.mp3")
call RemoveUnit(Sasuke__bijuSusanooUnit)
set Sasuke__bijuSusanooUnit=null
set Sasuke__bijuSusanooChakra=0
set udg_Hero[GetPlayerId(Sasuke_p)]=Sasuke_c
call Sasuke__BijuSusanooChangeText(false)
call SetUnitPosition(Sasuke_c,x,y)
call SetUnitFacing(Sasuke_c,f)
call ShowUnit(Sasuke_c,true)
call SetUnitFlyHeight(Sasuke_c,GetUnitDefaultFlyHeight(Sasuke_c),900.)
call SetUnitInvulnerable(Sasuke_c,false)
call SetUnitPathing(Sasuke_c,true)
call PauseUnit(Sasuke_c,false)
if GetLocalPlayer()==Sasuke_p then
call ClearSelection()
call SelectUnit(Sasuke_c,true)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Sasuke__BijuSusanooCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.01
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real f=GetUnitFacing(Sasuke_c)
local real chakra_burn=50.*period
set Sasuke__bijuSusanooUnit=CreateUnit(Sasuke_p,0x68303056,x,y,f)
set Sasuke__bijuSusanooChakra=R2I(GetUnitState(Sasuke_c,UNIT_STATE_MANA))
call Sound("Sasuke Biju Susanoo Cast.mp3")
call PauseUnit(Sasuke_c,true)
call SetUnitInvulnerable(Sasuke_c,true)
call SetUnitPathing(Sasuke_c,false)
call SetUnitTypeFlying(Sasuke_c)
call SetUnitFlyHeight(Sasuke_c,600.,600.)
call ShowUnit(Sasuke_c,false)
call UnitAddAbility(Sasuke__bijuSusanooUnit,0x41304942)
if GetLocalPlayer()==Sasuke_p then
call ClearSelection()
call SelectUnit(Sasuke__bijuSusanooUnit,true)
endif
set udg_Hero[GetPlayerId(Sasuke_p)]=Sasuke__bijuSusanooUnit
call Sasuke__BijuSusanooChangeText(true)
call SaveReal(HH,h,0,chakra_burn)
call TimerStart(t,period,true,function cj_anonym__666)
set t=null
endfunction
function Sasuke__ChibakuTenseiGetDownFly takes unit tu returns nothing
local real move_time=1.
local real target_height_need=GetUnitDefaultFlyHeight(tu)
local real target_height_cur=GetUnitFlyHeight(tu)
local real target_height_speed=target_height_cur/move_time
call SetUnitFlyHeight(tu,target_height_need,target_height_speed)
call SetUnitInvulnerable(tu,false)
call PauseUnit(tu,false)
call SetUnitPathing(tu,true)
endfunction
function cj_anonym__667 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real dmg=500.
call KillUnit(d)
call SetUnitInvulnerable(tu,false)
call PauseUnit(tu,false)
call SetUnitPathing(tu,true)
call UnitDamageTarget(Sasuke_c,tu,GetTaijutsuDamage(dmg,Sasuke_c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set d=null
set tu=null
set t=null
endfunction
function Sasuke__ChibakuTenseiGetDown takes unit tu,unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real move_time=1.
local real target_height_need=GetUnitDefaultFlyHeight(tu)
local real target_height_cur=GetUnitFlyHeight(tu)
local real target_height_speed=target_height_cur/move_time
local real meteor_height_need=-400.
local real meteor_height_speed=target_height_speed
call Sasuke__ChibakuTenseiGetDownFly(tu)
call SetUnitFlyHeight(d,meteor_height_need,meteor_height_speed)
call SetUnitFlyHeight(tu,target_height_need,target_height_speed)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call TimerStart(t,move_time,false,function cj_anonym__667)
set t=null
endfunction
function cj_anonym__668 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local lightning lig=LoadLightningHandle(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real chakra_xx=LoadReal(HH,h,5)
local real height_add=LoadReal(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real z=GetUnitFlyHeight(d)
local real x1=GetWidgetX(Sasuke_c)
local real y1=GetWidgetY(Sasuke_c)
local real z1=GetUnitFlyHeight(Sasuke_c)
if Sasuke__bijuSusanooUnit!=null then
set x1=GetWidgetX(Sasuke__bijuSusanooUnit)
set y1=GetWidgetY(Sasuke__bijuSusanooUnit)
set z1=GetUnitFlyHeight(Sasuke__bijuSusanooUnit)+height_add
endif
if time>0.and GetWidgetLife(d)>.405 then
if lig!=null then
if GetUnitState(tu,UNIT_STATE_MANA)>0.then
call SetUnitState(tu,UNIT_STATE_MANA,GetUnitState(tu,UNIT_STATE_MANA)-GetUnitState(tu,UNIT_STATE_MAX_MANA)*chakra_xx)
set Sasuke__chibakuTenseiBurn=Sasuke__chibakuTenseiBurn+GetUnitState(tu,UNIT_STATE_MAX_MANA)*chakra_xx
call MoveLightningEx(lig,true,x,y,z+height_add,x1,y1,z1)
else
call DestroyEffect(LoadEffectHandle(HH,h,7))
call DestroyLightning(lig)
endif
endif
call SaveReal(HH,h,4,time-period)
else
set Sasuke__chibakuTenseiTargets=Sasuke__chibakuTenseiTargets-1
if lig!=null then
call DestroyEffect(LoadEffectHandle(HH,h,7))
call DestroyLightning(lig)
endif
if Sasuke__chibakuTenseiTargets==0 then
set Sasuke__chibakuTenseiBurnOn=false
call DisplayTimedTextToPlayer(Sasuke_p,0.,0.,5.,"Вы накопили |cFFFF0303"+I2S(R2I(Sasuke__chibakuTenseiBurn))+"|r урона для |cFFFFCC00Indra no Ya|r!")
endif
if GetWidgetLife(d)>.405 then
call Sasuke__ChibakuTenseiGetDown(tu,d)
else
call Sasuke__ChibakuTenseiGetDownFly(tu)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set lig=null
set tu=null
set t=null
endfunction
function Sasuke__ChibakuTenseiChakraBurn takes unit tu,unit d returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=4.
local real period=.025
local real chakra_xx=(.1/time)*period
local real height_add=600.
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real z=GetUnitFlyHeight(d)+height_add
local real x1=GetWidgetX(Sasuke_c)
local real y1=GetWidgetY(Sasuke_c)
local real z1=GetUnitFlyHeight(Sasuke_c)
if Sasuke__bijuSusanooUnit!=null then
set x1=GetWidgetX(Sasuke__bijuSusanooUnit)
set y1=GetWidgetY(Sasuke__bijuSusanooUnit)
set z1=GetUnitFlyHeight(Sasuke__bijuSusanooUnit)
endif
if not Sasuke__chibakuTenseiBurnOn then
call Sound("Sasuke Chibaku Tensei Burn.mp3")
set Sasuke__chibakuTenseiBurnOn=true
endif
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveLightningHandle(HH,h,2,AddLightningEx("DRAM",true,x,y,z,x1,y1,z1))
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call SaveReal(HH,h,5,chakra_xx)
call SaveReal(HH,h,6,height_add)
call SaveAgentHandle(HH,h,7,AddSpecialEffectTarget("Abilities\\Spells\\Other\\Drain\\ManaDrainCaster.mdl",tu,"origin"))
call TimerStart(t,period,true,function cj_anonym__668)
set t=null
endfunction
function cj_anonym__669 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real distance=LoadReal(HH,h,3)
local real a=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if distance>offset and GetWidgetLife(d)>.405 then
if not IsUnitPaused(tu)then
call PauseUnit(tu,true)
endif
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitPosition(tu,GetWidgetX(d),GetWidgetY(d))
call SaveReal(HH,h,3,distance-offset)
else
if GetWidgetLife(d)>.405 then
call Sasuke__ChibakuTenseiChakraBurn(tu,d)
else
call SetUnitInvulnerable(tu,false)
call PauseUnit(tu,false)
call SetUnitPathing(tu,true)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Sasuke__ChibakuTenseiHeightUp takes unit tu,real x1,real y1,real f returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real period=.05
local real move_time=3.
local real speed=distance/move_time
local real offset=speed*period
local real target_height_need=600.
local real target_height_speed=target_height_need/move_time
local real meteor_height_need=200.
local real meteor_height_speed=target_height_speed
local unit d=CreateUnit(Sasuke_p,0x6E30344C,x,y,a)
call SetUnitInvulnerable(tu,true)
call PauseUnit(tu,true)
call SetUnitPathing(tu,false)
call SetUnitTypeFlying(tu)
call SetUnitFlyHeight(d,meteor_height_need,meteor_height_speed)
call SetUnitFlyHeight(tu,target_height_need,target_height_speed)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,distance)
call SaveReal(HH,h,4,a)
call TimerStart(t,period,true,function cj_anonym__669)
set d=null
set t=null
endfunction
function Sasuke__ChibakuTenseiStart takes real x1,real y1,real radius,integer cur,group gr_saved returns nothing
local unit tg
local real p_target=radius/2.
local real f_target=0.
local real f_step=360./cur
set Sasuke__chibakuTenseiBurn=0.
set Sasuke__chibakuTenseiBurnOn=false
set Sasuke__chibakuTenseiTargets=cur
call Sound("Sasuke Chibaku Tensei.mp3")
loop
set tg=FirstOfGroup(gr_saved)
exitwhen tg==null
call Sasuke__ChibakuTenseiHeightUp(tg,x1+p_target*Cos(f_target*bj_DEGTORAD),y1+p_target*Sin(f_target*bj_DEGTORAD),f_target)
set f_target=f_target+f_step
call GroupRemoveUnit(gr_saved,tg)
endloop
call DestroyGroup(gr_saved)
set tg=null
endfunction
function Sasuke__ChibakuTenseiCast takes real x1,real y1 returns nothing
local integer cur=0
local integer max=9
local real radius=600.
local group gr_loop=CreateGroup()
local group gr_saved=CreateGroup()
local unit tg=null
call GroupEnumUnitsInRange(gr_loop,x1,y1,radius,null)
loop
set tg=FirstOfGroup(gr_loop)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Sasuke_p)and IsUnitHero(tg)then
call GroupAddUnit(gr_saved,tg)
set cur=cur+1
endif
call GroupRemoveUnit(gr_loop,tg)
endloop
call GroupEnumUnitsInRange(gr_loop,x1,y1,radius,null)
loop
set tg=FirstOfGroup(gr_loop)
exitwhen tg==null or cur==max
if IsUnitNeedTaijutsu(tg,Sasuke_p)and not IsUnitInGroup(tg,gr_saved)then
call GroupAddUnit(gr_saved,tg)
set cur=cur+1
endif
call GroupRemoveUnit(gr_loop,tg)
endloop
call DestroyGroup(gr_loop)
if cur>0 then
call Sasuke__ChibakuTenseiStart(x1,y1,radius,cur,gr_saved)
else
call DestroyGroup(gr_saved)
call RecastSkills(Sasuke_c,Sasuke_CHIBAKU_TENSEI,1,300.)
call DisplayTimedTextToPlayer(Sasuke_p,0.,0.,1.,"|cFFFFCC00Техника не сработала!|r")
endif
set gr_loop=null
set gr_saved=null
set tg=null
endfunction
function Sasuke__AmenotejikaraCast takes real x1,real y1,unit tu,item art returns nothing
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
if tu!=null then
set x1=GetWidgetX(tu)
set y1=GetWidgetY(tu)
elseif art!=null then
set x1=GetItemX(art)
set y1=GetItemY(art)
endif
call Sound("Sasuke Amenotejikara.mp3")
call UnitRemoveAbility(Sasuke_c,Sasuke_RINNEGAN_BUFF)
call DestroyEffect(AddSpecialEffect("dim.MDx",x,y))
call SetUnitPathing(Sasuke_c,false)
call SetUnitX(Sasuke_c,x1)
call SetUnitY(Sasuke_c,y1)
call DestroyEffect(AddSpecialEffect("dim.MDx",x1,y1))
if tu!=null then
call SetUnitPosition(tu,x,y)
elseif art!=null then
call SetItemPosition(art,x,y)
endif
call SetUnitPathing(Sasuke_c,true)
endfunction
function Sasuke__GenjutsuRinneganCast takes real x1,real y1 returns nothing
local real radius=400.
local real time=4.
local group g=CreateGroup()
local unit tg
call Sound("Sasuke Rinnegan Genjutsu.mp3")
call UnitRemoveAbility(Sasuke_c,Sasuke_RINNEGAN_BUFF)
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Sasuke_p)then
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\Sleep\\SleepSpecialArt.mdl",GetWidgetX(tg),GetWidgetY(tg)))
set bj_lastCreatedUnit=CreateUnit(Sasuke_p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313739)
call IssueTargetOrder(bj_lastCreatedUnit,"sleep",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call UnitApplyTimedLife(CreateUnit(Sasuke_p,0x6E30344A,x1,y1,0.),0x42544C46,time)
set tg=null
set g=null
endfunction
function cj_anonym__670 takes nothing returns nothing
if GetUnitAbilityLevel(Sasuke_c,Sasuke_RINNEGAN_BUFF)==0 or GetWidgetLife(Sasuke_c)<=.405 then
call MadaraRikudoRinboGetVisionCheck(Sasuke_p,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_RINNEGAN_GENJUTSU,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_RINNEGAN_AMENOTEJIKARA,false)
call UnitRemoveAbility(Sasuke_c,0x4130355A)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Sasuke__RinneganCast takes nothing returns nothing
local real period=.25
call Sound("Sasuke Rinnegan.mp3")
call DestroyEffect(AddSpecialEffect("Blue Shockwave 2.mdx",GetWidgetX(Sasuke_c),GetWidgetY(Sasuke_c)))
if GetUnitAbilityLevel(Sasuke_c,Sasuke_RINNEGAN_GENJUTSU)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_RINNEGAN_GENJUTSU)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_RINNEGAN_GENJUTSU,true)
if GetUnitAbilityLevel(Sasuke_c,Sasuke_RINNEGAN_AMENOTEJIKARA)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_RINNEGAN_AMENOTEJIKARA)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_RINNEGAN_AMENOTEJIKARA,true)
call UnitAddAbility(Sasuke_c,0x4130355A)
call MadaraRikudoRinboGetVisionCheck(Sasuke_p,true)
call TimerStart(CreateTimer(),period,true,function cj_anonym__670)
endfunction
function cj_anonym__671 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g2=LoadGroupHandle(HH,h,1)
local unit tg
call RemoveUnit(LoadUnitHandle(HH,h,0))
call PauseUnit(Sasuke_c,false)
call SetUnitAnimation(Sasuke_c,"stand ready")
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
call SetUnitTimeScale(tg,1.)
call PauseUnit(tg,false)
call GroupRemoveUnit(g2,tg)
endloop
call DestroyGroup(g2)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tg=null
set g2=null
set t=null
endfunction
function Sasuke__EntonHonoikazuchi takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real radius=350.
local real dmg=400.
local real time=1.35
local group g1=CreateGroup()
local group g2=CreateGroup()
local unit tg
local unit d=CreateUnit(Sasuke_p,0x6E30344D,x,y,GetRandomReal(1.,360.))
call Sound("Sasuke Enton Honoikazuchi.mp3")
call SetUnitAnimation(d,"Stand")
call PauseUnit(Sasuke_c,true)
call SetUnitAnimation(Sasuke_c,"spell two")
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasuke_p)then
call GroupAddUnit(g2,tg)
call SetUnitTimeScale(tg,0.)
call PauseUnit(tg,true)
call UnitDamageTarget(Sasuke_c,tg,GetNinjutsuDamage(dmg,Sasuke_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g1,tg)
endloop
call DestroyGroup(g1)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,g2)
call TimerStart(t,time,false,function cj_anonym__671)
set d=null
set tg=null
set g1=null
set g2=null
set t=null
endfunction
function cj_anonym__672 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit shell=LoadUnitHandle(HH,h,0)
local group g1=LoadGroupHandle(HH,h,1)
local group g2=LoadGroupHandle(HH,h,2)
local real distance=LoadReal(HH,h,3)
local real offset=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local real x=GetWidgetX(shell)
local real y=GetWidgetY(shell)
local real f=GetUnitFacing(shell)
local unit tg
if distance>offset then
call GroupEnumUnitsInRange(g1,x,y,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasuke_p)and not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
call Sasuke__SasukeAmaterasuStartActions(tg,false)
endif
call GroupRemoveUnit(g1,tg)
endloop
call SetUnitPosition(shell,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SaveReal(HH,h,3,distance-offset)
else
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call RemoveUnit(shell)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set g1=null
set g2=null
set shell=null
set t=null
endfunction
function Sasuke__KagutsuchiNoTsurugiAttack takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real radius=200.
local real distance=500.
local real period=.025
local real speed=1000.
local real offset=speed*period
call Sound("Itachi Amaterasu Movement.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Sasuke_p,0x6E30344B,x,y,a))
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveReal(HH,h,3,distance)
call SaveReal(HH,h,4,offset)
call SaveReal(HH,h,5,radius)
call TimerStart(t,period,true,function cj_anonym__672)
set t=null
endfunction
function Sasuke__KagutsuchiNoTsurugi takes nothing returns nothing
local real time_buff=10.
call Sound("Sasuke Enton Kagutsuchi.mp3")
call UnitTempSpell(Sasuke_c,0x41304559,0,time_buff,0,false)
endfunction
function Sasuke__EntonKagutsuchi takes unit tu returns nothing
if tu==Sasuke_c then
call Sasuke__KagutsuchiNoTsurugi()
else
call Sasuke__EntonHonoikazuchi()
endif
endfunction
function cj_anonym__673 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
call PauseUnit(Sasuke_c,false)
call UnitRemoveAbility(Sasuke_c,0x4230354D)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(Sasuke_c,tu,GetNinjutsuDamage(Sasuke__rikudoChidoriDamage,Sasuke_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Sasuke__RikudoChidoriStrike takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=.3
call Sound("Sasuke Chidori Attack.mp3")
call PauseUnit(Sasuke_c,true)
call SetUnitAnimation(Sasuke_c,"spell channel one")
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,time,false,function cj_anonym__673)
set t=null
endfunction
function cj_anonym__674 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real xold=LoadReal(HH,h,0)
local real yold=LoadReal(HH,h,1)
local real addDmg=LoadReal(HH,h,2)
local real oldDistance=LoadReal(HH,h,3)
local real maxDistance=LoadReal(HH,h,4)
local real xnew=GetWidgetX(Sasuke_c)
local real ynew=GetWidgetY(Sasuke_c)
local real curDistance=SquareRoot((xold-xnew)*(xold-xnew)+(yold-ynew)*(yold-ynew))
if GetUnitAbilityLevel(Sasuke_c,0x4230354D)>0 then
if not IsUnitPaused(Sasuke_c)then
if oldDistance<maxDistance then
call SaveReal(HH,h,3,oldDistance+curDistance)
else
set Sasuke__rikudoChidoriDamage=Sasuke__rikudoChidoriDamage+addDmg
call SaveReal(HH,h,3,0.)
endif
call SaveReal(HH,h,0,xnew)
call SaveReal(HH,h,1,ynew)
endif
else
call UnitRemoveAbility(Sasuke_c,0x41304B4A)
call UnitRemoveAbility(Sasuke_c,0x42303632)
set Sasuke__ChidoriOn=false
call AddUnitAnimationProperties(Sasuke_c,"walk",true)
call AddUnitAnimationProperties(Sasuke_c,"walk alternate",false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Sasuke__RikudoChidoriCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real addDmg=GetHeroAgi(Sasuke_c,true)*1.5
local real maxDistance=100.
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
set Sasuke__rikudoChidoriDamage=200.
set Sasuke__ChidoriOn=true
call Sound("Sasuke Rikudo Chidori.mp3")
call UnitAddAbility(Sasuke_c,0x41304B4A)
call DestroyEffect(AddSpecialEffect("Lightning Wind.mdx",x,y))
call AddUnitAnimationProperties(Sasuke_c,"walk alternate",true)
call AddUnitAnimationProperties(Sasuke_c,"walk",false)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,addDmg)
call SaveReal(HH,h,3,0.)
call SaveReal(HH,h,4,maxDistance)
call TimerStart(t,period,true,function cj_anonym__674)
set t=null
endfunction
function cj_anonym__676 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit caster=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x=GetWidgetX(caster)
local real y=GetWidgetY(caster)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance>offset*4.then
call SetUnitX(caster,x+offset*Cos(a*bj_DEGTORAD))
call SetUnitY(caster,y+offset*Sin(a*bj_DEGTORAD))
else
call UnitDamageTarget(caster,tu,GetNinjutsuDamage(LoadReal(HH,h,3),caster,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call DestroyEffect(LoadEffectHandle(HH,h,4))
call DestroyEffect(LoadEffectHandle(HH,h,5))
call SetUnitPathing(caster,true)
call PauseUnit(caster,false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set caster=null
set tu=null
set t=null
endfunction
function cj_anonym__675 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SaveAgentHandle(HH,h1,0,LoadUnitHandle(HH,h,0))
call SaveAgentHandle(HH,h1,1,LoadUnitHandle(HH,h,1))
call SaveReal(HH,h1,2,LoadReal(HH,h,2))
call SaveReal(HH,h1,3,LoadReal(HH,h,3))
call SaveAgentHandle(HH,h1,4,LoadEffectHandle(HH,h,4))
call SaveAgentHandle(HH,h1,5,LoadEffectHandle(HH,h,5))
call TimerStart(t1,LoadReal(HH,h,6),true,function cj_anonym__676)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Sasuke__KanseitaiSusanooChidori takes unit caster,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real speed=2000.
local real cast_time=2.
local real offset=speed*period
local real dmg=750.
call Sound("Sasuke Susanoo Chidori.mp3")
call PauseUnit(caster,true)
call SetUnitPathing(caster,false)
call SetUnitAnimation(caster,"Spell Slam")
call SetUnitTypeFlying(caster)
call SaveAgentHandle(HH,h,0,caster)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,dmg)
call SaveAgentHandle(HH,h,4,AddSpecialEffectTarget("Chidori.mdx",caster,"hand left"))
call SaveAgentHandle(HH,h,5,AddSpecialEffectTarget("SasukeChidori.mdx",caster,"hand left"))
call SaveReal(HH,h,6,period)
call TimerStart(t,cast_time,false,function cj_anonym__675)
set t=null
endfunction
function Sasuke__EntonYasakaNoMagatamaDamage takes real x,real y returns nothing
local boolean log=false
local real radius=100.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitNeedNinjutsu(tg,Sasuke_p)and GetUnitAbilityLevel(tg,0x41304330)==0 then
call Sasuke__SasukeAmaterasuStartActions(tg,true)
set log=true
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__677 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local integer amount=LoadInteger(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SaveInteger(HH,h,4,amount-1)
else
call Sasuke__EntonYasakaNoMagatamaDamage(x,y)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Sasuke__EntonYasakaNoMagatamaCreate takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real speed=1200.
local real offset=speed*period
local real startOffset=300.
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)+90.
local real distance
local real moveTime
local real speedHeight
local integer amount
local unit d
set x=x+startOffset*Cos(a*bj_DEGTORAD)
set y=y+startOffset*Sin(a*bj_DEGTORAD)
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
set d=CreateUnit(Sasuke_p,0x6E303439,x,y,a)
set distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
set moveTime=distance/speed
set speedHeight=GetUnitFlyHeight(d)/moveTime
set amount=R2I(distance/offset)
call SetUnitFlyHeight(d,0.,speedHeight)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,offset)
call SaveInteger(HH,h,4,amount)
call TimerStart(t,period,true,function cj_anonym__677)
set d=null
set t=null
endfunction
function cj_anonym__678 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real x1=LoadReal(HH,h,2)
local real y1=LoadReal(HH,h,3)
local integer hc=GetHandleId(Sasuke_c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
local integer i=0
local integer max=10
local real radius
local real randomAgnle
if susanoo!=null then
call PauseUnit(susanoo,false)
loop
set radius=GetRandomReal(1.,400./2.)
set randomAgnle=GetRandomReal(1.,360.)
call Sasuke__EntonYasakaNoMagatamaCreate(x,y,x1+radius*Cos(randomAgnle*bj_DEGTORAD),y1+radius*Sin(randomAgnle*bj_DEGTORAD))
set i=i+1
exitwhen i==max
endloop
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set susanoo=null
set t=null
endfunction
function Sasuke__EntonYasakaNoMagatamaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real xHero=GetWidgetX(Sasuke_c)
local real yHero=GetWidgetY(Sasuke_c)
local real startAngleOffset=400.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real xAngle=xHero+startAngleOffset*Cos((a-90.)*bj_DEGTORAD)
local real yAngle=yHero+startAngleOffset*Sin((a-90.)*bj_DEGTORAD)
local real startOffset=550.
local real x=xAngle+startOffset*Cos(a*bj_DEGTORAD)
local real y=yAngle+startOffset*Sin(a*bj_DEGTORAD)
local real animationTime=1.
local integer hc=GetHandleId(Sasuke_c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
call Sound("Sasuke Enton Yasaka no Magatama.mp3")
call PauseUnit(susanoo,true)
call SetUnitFacing(susanoo,a)
call SetUnitAnimation(susanoo,"attack")
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,x1)
call SaveReal(HH,h,3,y1)
call TimerStart(t,animationTime,false,function cj_anonym__678)
set susanoo=null
set t=null
endfunction
function cj_anonym__679 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
call Sound("Sasuke Amaterasu Damage.mp3")
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x1,y1,1.5,"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x1,y1,1.5,"IceSparks.mdx",8.)
endif
call UnitDamageTarget(Sasuke_c,tu,GetNinjutsuDamage(LoadReal(HH,h,1),Sasuke_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(tu,0x41304330)==0 then
call Sasuke__SasukeAmaterasuStartActions(tu,true)
endif
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Sasuke__KagutsuchiNoTsurugiCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=.8
local real dmg=400.
local integer hc=GetHandleId(Sasuke_c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
call Sound("Sasuke Susanoo Armor Kagutsuchi no Tsurugi.mp3")
call SetUnitAnimation(susanoo,"spell one")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmg)
call TimerStart(t,time,false,function cj_anonym__679)
set susanoo=null
set t=null
endfunction
function cj_anonym__680 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,3)
local real xx=LoadReal(HH,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(tu)>.405 and distance>offset then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a)
call SetUnitFlyHeight(d,distance/xx,0.)
else
call Sound("Sasuke Amaterasu Damage.mp3")
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x1,y1,1.5,"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x1,y1,1.5,"IceSparks.mdx",8.)
endif
call DestroyEffect(LoadEffectHandle(HH,h,2))
call UnitDamageTarget(Sasuke_c,tu,GetNinjutsuDamage(LoadReal(HH,h,4),Sasuke_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 then
call Sasuke__SasukeAmaterasuStartActions(tu,true)
endif
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Sasuke__EntonSusanooKagutsuchiCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real dmg=200.
local real speed=1500.
local real offset=speed*period
local real xx=3.
local unit d=CreateUnit(Sasuke_p,0x6E303438,x,y,a)
call Sound("Sasuke Enton Susanoo Kagutsuchi.mp3")
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,d)
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("amaterasu2.mdx",d,"head"))
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,dmg)
call SaveReal(HH,h,5,xx)
call TimerStart(t,period,true,function cj_anonym__680)
set d=null
set t=null
endfunction
function cj_anonym__682 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real xx=LoadReal(HH,h,4)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(tu)>.405 and distance>offset then
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitFacing(d,a)
call SetUnitFlyHeight(d,distance/xx,0.)
else
call Sound("Sasuke Susanoo Full Bow Damage.mp3")
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x1,y1,1.5,"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x1,y1,1.5,"IceSparks.mdx",8.)
endif
call UnitDamageTarget(Sasuke_c,tu,GetNinjutsuDamage(LoadReal(HH,h,3),Sasuke_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function cj_anonym__681 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit tu=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real period=.025
local real dmg=200.
local real speed=1500.
local real offset=speed*period
local real xx=3.
call SaveAgentHandle(HH,h1,0,tu)
call SaveAgentHandle(HH,h1,1,CreateUnit(Sasuke_p,0x6E303437,x,y,a))
call SaveReal(HH,h1,2,offset)
call SaveReal(HH,h1,3,dmg)
call SaveReal(HH,h1,4,xx)
call TimerStart(t1,period,true,function cj_anonym__682)
set tu=null
set t=null
set t1=null
endfunction
function Sasuke__SusanooBowCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer hc=GetHandleId(Sasuke_c)
local unit susanoo=LoadUnitHandle(HH,hc,3)
local real amimation_time=.489
call Sound("Sasuke Susanoo Full Bow.mp3")
call SetUnitAnimation(susanoo,"spell")
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,amimation_time,false,function cj_anonym__681)
set susanoo=null
set t=null
endfunction
function cj_anonym__683 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(tu)>.405 and time>0.and GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_SKELETON_SLOW)>0 and GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 then
call SaveReal(HH,h,2,time-period)
else
call SetUnitAnimation(LoadUnitHandle(HH,GetHandleId(Sasuke_c),3),"Stand")
call UnitDamageTarget(Sasuke_c,tu,GetUnitState(tu,UNIT_STATE_MAX_LIFE)*LoadReal(HH,h,3),true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Sasuke__SusanooKaiCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=1.
local real dmg=.2
call Sound("Sasuke Susanoo Skeleton Kai.mp3")
call SetUnitAnimation(LoadUnitHandle(HH,GetHandleId(Sasuke_c),3),"Spell Channel")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,dmg)
call TimerStart(t,period,true,function cj_anonym__683)
set t=null
endfunction
function Sasuke__SusanooAttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitIllusion(GetAttacker())and not LoadBoolean(HH,GetHandleId(GetAttacker()),2)and GetUnitAbilityLevel(GetAttacker(),Sasuke_SUSANOO_SKELETON_SLOW)>0 or GetUnitAbilityLevel(GetAttacker(),Sasuke_SUSANOO_FULL_SLOW)>0 or GetUnitAbilityLevel(GetAttacker(),Sasuke_SUSANOO_ARMOR_SLOW)>0 or GetUnitAbilityLevel(GetAttacker(),0x41313149)>0 or GetUnitAbilityLevel(GetAttacker(),0x41313551)>0
endfunction
function cj_anonym__684 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local integer randomAnimation=LoadInteger(HH,h,3)
local real hpMax
local real addDmg=.3
local real dmg
local real radius=400.
local real randomSize=GetRandomReal(1.75,2.2)
local integer hu=GetHandleId(u)
local unit susanoo=LoadUnitHandle(HH,GetHandleId(Sasuke_c),3)
local group g=CreateGroup()
local unit tg
local boolean log=false
if GetWidgetLife(u)>.405 then
if GetUnitAbilityLevel(u,0x41313149)==0 and GetUnitAbilityLevel(u,0x41313551)==0 then
if susanoo!=null then
set log=true
endif
set addDmg=addDmg/2.
set radius=radius/2.
set randomSize=randomSize/1.75
else
set log=true
if SpecialEffectsShow then
call TerrainDeformRipple(x,y,radius,60.,500,1,250.,4.,.5,false)
endif
if GetUnitAbilityLevel(u,0x41313551)>0 then
set addDmg=.5
endif
endif
if log then
call Sound3D(Sasuke_c,"Sasuke Susanoo Strike.mp3")
if SpecialEffectsShow then
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,randomSize,"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,randomSize,"IceSparks.mdx",8.)
endif
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Sasuke_p)or IsUnitNeedTaijutsu(tg,Sasuke_p)then
set hpMax=GetUnitState(tg,UNIT_STATE_MAX_LIFE)
if not IsUnitBig(tg)then
set dmg=hpMax*addDmg
else
set dmg=(hpMax*addDmg)/4.
endif
call UnitDamageTarget(Sasuke_c,tg,GetTaijutsuDamage(dmg/1.65,Sasuke_c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call UnitDamageTarget(Sasuke_c,tg,dmg/2.5,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
endif
call SaveBoolean(HH,hu,2,false)
else
call FlushChildHashtable(HH,hu)
endif
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set u=null
set susanoo=null
set tg=null
set g=null
endfunction
function Sasuke__SusanooAttackActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit u=GetAttacker()
local unit tu=GetTriggerUnit()
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real strikeTime
local integer randomAnimation
local integer hu=GetHandleId(u)
local string str=LoadStr(HH,hu,1)
local unit susanoo=LoadUnitHandle(HH,hu,3)
if GetUnitAbilityLevel(u,0x41313149)==0 and GetUnitAbilityLevel(u,0x41313551)==0 then
call IssueImmediateOrder(u,"stop")
if str=="susanoo skeleton"then
set randomAnimation=GetRandomInt(1,3)
if randomAnimation==1 then
set strikeTime=.5
call SetUnitAnimation(susanoo,"Attack - 1")
elseif randomAnimation==2 then
set strikeTime=.5
call SetUnitAnimation(susanoo,"Attack - 2")
elseif randomAnimation==3 then
set strikeTime=.5
call SetUnitAnimation(susanoo,"Spell Slam")
endif
elseif str=="susanoo full"then
set randomAnimation=GetRandomInt(1,2)
if randomAnimation==1 then
call SetUnitAnimation(susanoo,"Attack 1")
set strikeTime=.304
elseif randomAnimation==2 then
call SetUnitAnimation(susanoo,"Attack 2")
set strikeTime=.268
endif
elseif str=="susanoo armor"then
set randomAnimation=GetRandomInt(1,2)
if randomAnimation==1 then
call SetUnitAnimation(susanoo,"attack")
set strikeTime=1.
elseif randomAnimation==2 then
call SetUnitAnimation(susanoo,"spell slam")
set strikeTime=.494
endif
endif
else
set randomAnimation=GetRandomInt(1,2)
if GetUnitAbilityLevel(u,0x41313149)>0 then
if randomAnimation==1 then
call SetUnitAnimation(u,"Attack")
set strikeTime=.535
elseif randomAnimation==2 then
call SetUnitAnimation(u,"Attack - 2")
set strikeTime=.654
endif
elseif GetUnitAbilityLevel(u,0x41313551)>0 then
if randomAnimation==1 then
call SetUnitAnimation(u,"Attack - 1")
set strikeTime=.423
elseif randomAnimation==2 then
call SetUnitAnimation(u,"Attack - 2")
set strikeTime=.448
endif
endif
endif
call SaveBoolean(HH,hu,2,true)
call SaveAgentHandle(HH,h,0,u)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveInteger(HH,h,3,randomAnimation)
call TimerStart(t,strikeTime,false,function cj_anonym__684)
set susanoo=null
set u=null
set tu=null
set t=null
endfunction
function cj_anonym__685 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
if GetWidgetLife(d)>.405 and GetWidgetLife(Sasuke_c)>.405 then
if not IsTerrainPathable(x,y,PATHING_TYPE_WALKABILITY)or not IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call SetUnitPosition(Sasuke_c,x,y)
else
set x=GetWidgetX(Sasuke_c)
set y=GetWidgetY(Sasuke_c)
call SetUnitPosition(d,x,y)
endif
call SetUnitFacing(Sasuke_c,GetUnitFacing(d))
call SetUnitAnimation(Sasuke_c,"Stand Ready")
else
set Sasuke__susanooKanseitaiOn=false
call Sound("Itachi_Susanoo 4.mp3")
set udg_Hero[GetPlayerId(Sasuke_p)]=Sasuke_c
call ShowUnit(Sasuke_c,true)
call SetUnitFlyHeight(Sasuke_c,GetUnitDefaultFlyHeight(Sasuke_c),900.)
call SetUnitInvulnerable(Sasuke_c,false)
call SetUnitPathing(Sasuke_c,true)
call PauseUnit(Sasuke_c,false)
if GetLocalPlayer()==Sasuke_p then
call ClearSelection()
call SelectUnit(Sasuke_c,true)
endif
call RemoveUnit(d)
if GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KUCHIYOSE,true)
endif
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set d=null
set t=null
endfunction
function Sasuke__KanseitaiSusanooStart takes unit d,real time returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
call SetUnitInvulnerable(d,false)
call PauseUnit(d,false)
call UnitAddAbility(d,0x41304942)
call UnitApplyTimedLife(d,0x42544C46,time)
if GetLocalPlayer()==Sasuke_p then
call ClearSelection()
call SelectUnit(d,true)
endif
call SaveAgentHandle(HH,h,0,d)
call TimerStart(t,.01,true,function cj_anonym__685)
set t=null
endfunction
function cj_anonym__686 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local integer alpha=LoadInteger(HH,h,1)
if alpha<255 then
call SetUnitVertexColor(d,255,255,255,alpha)
call SaveInteger(HH,h,1,alpha+10)
else
call Sasuke__KanseitaiSusanooStart(d,LoadReal(HH,h,2))
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Sasuke__KanseitaiSusanooCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alpha=10
local real period=.025
local real time=25.
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real f=GetUnitFacing(Sasuke_c)
local unit d=CreateUnit(Sasuke_p,0x68303131,x,y,f)
set Sasuke__susanooArmorOn=false
set Sasuke__susanooKanseitaiOn=true
set Sasuke__susanooID=0x68303131
call Sound("Sasuke Susanoo Kanseitai Cast.mp3")
call Sasuke__SusanooChangeText(false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_TSURUGI,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_YASAKA,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_KANSEITAI,false)
call UnitRemoveAbility(Sasuke_c,0x41313259)
call PauseUnit(d,true)
call SetUnitInvulnerable(d,true)
call SetUnitPathing(d,false)
call SetUnitVertexColor(d,255,255,255,alpha)
call SetUnitAnimation(Sasuke_c,"spell")
call PauseUnit(Sasuke_c,true)
call SetUnitInvulnerable(Sasuke_c,true)
call SetUnitPathing(Sasuke_c,false)
call SetUnitTypeFlying(Sasuke_c)
call SetUnitFlyHeight(Sasuke_c,600.,600.)
call ShowUnit(Sasuke_c,false)
set udg_Hero[GetPlayerId(Sasuke_p)]=d
call SaveAgentHandle(HH,h,0,d)
call SaveInteger(HH,h,1,alpha)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__686)
set d=null
set t=null
endfunction
function cj_anonym__687 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real mp=LoadReal(HH,h,1)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(d)
local real y1=GetWidgetY(d)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local integer hu=GetHandleId(Sasuke_c)
local string str=LoadStr(HH,hu,1)
if not Sasuke__KuchiyoseOn then
call SetUnitState(Sasuke_c,UNIT_STATE_MANA,GetUnitState(Sasuke_c,UNIT_STATE_MANA)-mp)
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(d)>.405 and GetUnitAbilityLevel(Sasuke_c,0x41313259)>0 and GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 then
if not IsUnitDisabled(Sasuke_c)and distance<125.then
call SetUnitX(d,x)
call SetUnitY(d,y)
call SetUnitFacing(d,GetUnitFacing(Sasuke_c))
endif
if distance<125.then
if str=="susanoo skeleton"then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_SKELETON_SLOW)==0 then
call Sound("Madara Susanoo Restore.mp3")
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_SKELETON_SLOW)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON_KAI,true)
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_FULL)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL,true)
endif
endif
elseif str=="susanoo full"then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_FULL_SLOW)==0 then
call Sound("Madara Susanoo Restore.mp3")
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_FULL_SLOW)
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_ARMOR)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR,true)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL_BOW,true)
endif
elseif str=="susanoo armor"then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_ARMOR_SLOW)==0 then
call Sound("Madara Susanoo Restore.mp3")
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_ARMOR_SLOW)
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_KANSEITAI)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_KANSEITAI,true)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_TSURUGI,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_YASAKA,true)
endif
endif
else
if str=="susanoo skeleton"then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON_KAI,false)
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_SKELETON_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303145)
elseif str=="susanoo full"then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL_BOW,false)
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_FULL_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303132)
elseif str=="susanoo armor"then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_TSURUGI,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_YASAKA,false)
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_ARMOR_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303147)
endif
endif
else
call Sasuke__SusanooRemoveAllBuffs()
if GetUnitTypeId(d)==0x6E303433 and str=="susanoo skeleton"then
set Sasuke__susanooSkeletonOn=false
if not Sasuke__susanooFullOn then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON_KAI,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL,false)
call UnitRemoveAbility(Sasuke_c,0x41313259)
call Sound("Sasuke Susanoo Skeleton Roar.mp3")
call SetUnitPathing(Sasuke_c,true)
call SaveInteger(HH,GetHandleId(Sasuke_c),0,0)
call FlushChildHashtable(HH,GetHandleId(Sasuke_c))
call Sasuke__SusanooChangeText(false)
endif
if GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,true)
endif
elseif GetUnitTypeId(d)==0x6E303434 and str=="susanoo full"and Sasuke__susanooFullOn then
set Sasuke__susanooFullOn=false
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL_BOW,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR,false)
if GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 and not Sasuke__susanooArmorOn then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,true)
endif
if not Sasuke__susanooArmorOn then
call UnitRemoveAbility(Sasuke_c,0x41313259)
call Sound("Sasuke Susanoo Skeleton Roar.mp3")
call SetUnitPathing(Sasuke_c,true)
call SaveInteger(HH,GetHandleId(Sasuke_c),0,0)
call FlushChildHashtable(HH,GetHandleId(Sasuke_c))
call Sasuke__SusanooChangeText(false)
endif
elseif GetUnitTypeId(d)==0x6E303435 and str=="susanoo armor"and Sasuke__susanooArmorOn then
set Sasuke__susanooArmorOn=false
call UnitRemoveAbility(Sasuke_c,0x41313259)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_TSURUGI,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_YASAKA,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_KANSEITAI,false)
if GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KUCHIYOSE,true)
endif
if not Sasuke__susanooKanseitaiOn then
call Sound("Sasuke Susanoo Skeleton Roar.mp3")
call SetUnitPathing(Sasuke_c,true)
endif
call SaveInteger(HH,GetHandleId(Sasuke_c),0,0)
call FlushChildHashtable(HH,GetHandleId(Sasuke_c))
call Sasuke__SusanooChangeText(false)
endif
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
endif
set d=null
set t=null
endfunction
function Sasuke__SusanooCast takes integer what returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer hu=GetHandleId(Sasuke_c)
local integer HPcur=LoadInteger(HH,hu,0)
local real period=.01
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real f=GetUnitFacing(Sasuke_c)
local real mp=20.*period
local integer level=GetHeroLevel(Sasuke_c)
local integer id
local unit d
if what==1 then
call Sound("Sasuke Susanoo Skeleton Cast.mp3")
set Sasuke__susanooSkeletonOn=true
set id=0x6E303433
set Sasuke_ribuMax=1500
call SaveStr(HH,hu,1,"susanoo skeleton")
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303055)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON,false)
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_SKELETON_SLOW)
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_SKELETON_KAI)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_SKELETON_KAI)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON_KAI,true)
if level>=8 then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_FULL)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_FULL)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL,true)
endif
call SetUnitPathing(Sasuke_c,false)
elseif what==2 then
call Sound("Sasuke Susanoo Full Cast.mp3")
set mp=25.*period
set Sasuke__susanooSkeletonOn=false
set Sasuke__susanooFullOn=true
set id=0x6E303434
set Sasuke_ribuMax=3000
call SaveStr(HH,hu,1,"susanoo full")
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_SKELETON_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303145)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON_KAI,false)
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_FULL_SLOW)
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_FULL_BOW)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_FULL_BOW)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL_BOW,true)
if level>=9 then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_ARMOR)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_ARMOR)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR,true)
endif
call KillUnit(LoadUnitHandle(HH,hu,3))
elseif what==3 then
call Sound("Sasuke Susanoo Armor Cast.mp3")
set mp=30.*period
set Sasuke__susanooFullOn=false
set Sasuke__susanooArmorOn=true
set id=0x6E303435
set Sasuke_ribuMax=4000
call SaveStr(HH,hu,1,"susanoo armor")
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_ARMOR_SLOW)
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_FULL_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303132)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL_BOW,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KUCHIYOSE,false)
if level==10 then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_KANSEITAI)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_KANSEITAI)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_KANSEITAI,true)
endif
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_ARMOR_TSURUGI)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_ARMOR_TSURUGI)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_TSURUGI,true)
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_ARMOR_YASAKA)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_ARMOR_YASAKA)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR_YASAKA,true)
call KillUnit(LoadUnitHandle(HH,hu,3))
endif
set d=CreateUnit(Sasuke_p,id,x,y,f)
call SetUnitPathing(d,false)
call SetUnitAnimation(d,"Birth")
call SaveAgentHandle(HH,hu,3,d)
set HPcur=Sasuke_ribuMax
call SaveInteger(HH,hu,0,HPcur)
call SaveBoolean(HH,hu,2,false)
call Sasuke__SusanooChangeText(true)
call SetUnitX(d,x)
call SetUnitY(d,y)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,mp)
call TimerStart(t,period,true,function cj_anonym__687)
set d=null
set t=null
endfunction
function Sasuke__RibuDamageConditions takes nothing returns boolean
return GetEventDamage()>0.and GetUnitAbilityLevel(GetTriggerUnit(),0x41313259)>0
endfunction
function Sasuke__RibuDamageActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer hu=GetHandleId(u)
local integer HPcur=LoadInteger(HH,hu,0)
local integer dmg=R2I(GetEventDamage())
local real value=0.
call UnitAddAbility(u,0x41304D48)
if dmg<HPcur then
set value=I2R(dmg)
set HPcur=HPcur-dmg
else
set value=I2R(HPcur)
set HPcur=HPcur-HPcur
endif
call UnitRemoveAbility(u,0x41304D48)
call SetWidgetLife(u,GetWidgetLife(u)+value)
call SaveInteger(HH,hu,0,HPcur)
set HPcur=LoadInteger(HH,hu,0)
call Sasuke__SusanooChangeText(true)
if HPcur<=0 then
call UnitRemoveAbility(u,0x41313259)
call Sasuke__SusanooRemoveAllBuffs()
call Sasuke__SusanooChangeText(false)
endif
set u=null
endfunction
function cj_anonym__688 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real mp=LoadReal(HH,h,0)
local integer hu=GetHandleId(Sasuke_c)
if not Sasuke__KuchiyoseOn then
call SetUnitState(Sasuke_c,UNIT_STATE_MANA,GetUnitState(Sasuke_c,UNIT_STATE_MANA)-mp)
if GetWidgetLife(Sasuke_c)<.405 or GetUnitState(Sasuke_c,UNIT_STATE_MANA)<=0.or GetUnitAbilityLevel(Sasuke_c,0x41313259)==0 or GetUnitAbilityLevel(Sasuke_c,0x42303045)==0 then
call UnitRemoveAbility(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)
call UnitRemoveAbility(Sasuke_c,0x42303055)
if LoadStr(HH,hu,1)=="ribu"then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON,false)
call UnitRemoveAbility(Sasuke_c,0x41313259)
if GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,true)
endif
call SaveInteger(HH,hu,0,0)
set Sasuke_ribuMax=0
call FlushChildHashtable(HH,hu)
call Sasuke__SusanooChangeText(false)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
endif
set t=null
endfunction
function Sasuke__RibuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer hu=GetHandleId(Sasuke_c)
local integer HPcur
local integer level=GetHeroLevel(Sasuke_c)
local real period=.1
local real mp=15.*period
set Sasuke_ribuMax=500
set HPcur=Sasuke_ribuMax
call Sound("Sasuke Susanoo no Ribu Cast.mp3")
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,false)
call UnitAddAbility(Sasuke_c,0x41313259)
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)
if level>=8 then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_SKELETON)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_SKELETON)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON,true)
endif
if not Sasuke__ribuReg then
set Sasuke__ribuReg=true
call TriggerRegisterUnitEvent(Sasuke__ribudmg,Sasuke_c,EVENT_UNIT_DAMAGED)
endif
call SaveReal(HH,h,0,mp)
call SaveInteger(HH,hu,0,HPcur)
call SaveStr(HH,hu,1,"ribu")
call Sasuke__SusanooChangeText(true)
call TimerStart(t,period,true,function cj_anonym__688)
set t=null
endfunction
function cj_anonym__689 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local real time=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local unit tg
if GetWidgetLife(Sasuke_c)>.405 and time>0.and GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)>0 then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if tg!=Sasuke_c and GetUnitAbilityLevel(tg,0x41304330)==0 and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
call Sasuke__SasukeAmaterasuStartActions(tg,true)
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,1,time-period)
else
call DestroyGroup(g)
call UnitRemoveAbility(Sasuke_c,0x41304F41)
call UnitRemoveAbility(Sasuke_c,0x41304239)
call UnitRemoveAbility(Sasuke_c,0x42303333)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set t=null
endfunction
function Sasuke__AmaterasuEntenkaStart takes real radius returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=12.
local real period=.1
call Sound("Sasuke Amaterasu Entenka.mp3")
call UnitAddAbility(Sasuke_c,0x41304239)
call UnitAddAbility(Sasuke_c,0x41304F41)
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,radius)
call TimerStart(t,period,true,function cj_anonym__689)
set t=null
endfunction
function Sasuke__OrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),0x41304734)>0
endfunction
function Sasuke__OrderActions takes nothing returns nothing
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(Sasuke__amaterasu)
local real y1=GetWidgetY(Sasuke__amaterasu)
local real x2=GetOrderPointX()
local real y2=GetOrderPointY()
local real distance=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2))
if distance<=Sasuke__amaterasuMaxRange then
call Sound("Itachi Amaterasu Movement.mp3")
set Sasuke__amaterasuMoving=false
set Sasuke__amaterasuA=bj_RADTODEG*Atan2(y2-y1,x2-x1)
set Sasuke__amaterasuCurDistance=0.
set Sasuke__amaterasuMaxDistance=SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
set Sasuke__amaterasuMoving=true
call SetUnitPosition(Sasuke__amaterasuEMS,x2,y2)
else
call DisplayTimedTextToPlayer(Sasuke_p,0.,0.,1.,"Слишком большое расстояние для |cFFFFCC00Amaterasu|r")
endif
endfunction
function cj_anonym__691 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real mp=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real distanceForMP=LoadReal(HH,h,3)
local real radius=LoadReal(HH,h,4)
local group g=LoadGroupHandle(HH,h,5)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(Sasuke__amaterasu)
local real y1=GetWidgetY(Sasuke__amaterasu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real effSize=2.
local real effTime
local real offset
local unit tg
set Sasuke__amaterasuSpeed=GetUnitMoveSpeed(Sasuke_c)
set offset=Sasuke__amaterasuSpeed*period
set effTime=5.22/offset
call IssueImmediateOrder(Sasuke_c,"stop")
call SetUnitFacing(Sasuke_c,a)
if Sasuke__amaterasuMoving then
if distanceForMP<100.then
call SaveReal(HH,h,3,distanceForMP+offset)
else
call SetUnitState(Sasuke_c,UNIT_STATE_MANA,GetUnitState(Sasuke_c,UNIT_STATE_MANA)-GetUnitState(Sasuke_c,UNIT_STATE_MAX_MANA)*mp)
call SaveReal(HH,h,3,0.)
endif
if Sasuke__amaterasuCurDistance<Sasuke__amaterasuMaxDistance then
call SetUnitPosition(Sasuke__amaterasu,x1+offset*Cos(Sasuke__amaterasuA*.0174532),y1+offset*Sin(Sasuke__amaterasuA*.0174532))
set Sasuke__amaterasuCurDistance=Sasuke__amaterasuCurDistance+offset
else
set Sasuke__amaterasuMoving=false
endif
endif
if GetWidgetLife(Sasuke_c)>.405 and GetUnitState(Sasuke_c,UNIT_STATE_MANA)>0.and time>0.and GetUnitAbilityLevel(Sasuke_c,0x41304734)>0 and GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 and not IsUnitDisabled(Sasuke_c)then
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41304330)==0 and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_MAGIC_IMMUNE)then
if tg!=Sasuke_c then
call Sasuke__SasukeAmaterasuStartActions(tg,true)
else
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)>0 and GetUnitAbilityLevel(Sasuke_c,0x41304239)==0 then
call Sasuke__AmaterasuEntenkaStart(radius)
elseif GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)==0 then
call Sasuke__SasukeAmaterasuStartActions(tg,true)
endif
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,1,time-period)
else
call DestroyGroup(g)
call RemoveUnit(Sasuke__amaterasuEMS)
call KillUnit(Sasuke__amaterasu)
call UnitRemoveAbility(Sasuke_c,0x41304734)
call UnitRemoveAbility(Sasuke_c,0x41304F41)
if GetUnitAbilityLevel(Sasuke_c,0x42303045)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,true)
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)>0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON,true)
else
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,true)
endif
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
set Sasuke__amaterasu=null
endif
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__690 takes nothing returns nothing
set Sasuke__amaterasuCD=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Sasuke__SasukeAmaterasuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.01
local real time=20.
local real mp=.01
local real radius=200.
local unit naruto=null
set Sasuke__amaterasuCD=true
call TimerStart(CreateTimer(),24.3,false,function cj_anonym__690)
set naruto=Combo_GetNarutoSasukeOne(Sasuke_c,Sasuke_p,x1,y1)
if naruto==null then
call Sound("Sasuke Amaterasu.mp3")
set Sasuke__amaterasu=CreateUnit(Sasuke_p,0x6E303035,x1,y1,0.)
set Sasuke__amaterasuEMS=CreateUnit(Sasuke_p,0x6E303134,x1,y1,0.)
set Sasuke__amaterasuSpeed=GetUnitMoveSpeed(Sasuke_c)
set Sasuke__amaterasuMoving=false
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON,false)
call UnitAddAbility(Sasuke_c,0x41304734)
call SaveReal(HH,h,0,mp)
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,0.)
call SaveReal(HH,h,4,radius)
call SaveAgentHandle(HH,h,5,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__691)
else
call Combo_StartNarutoSasukeOne()
endif
set naruto=null
set t=null
endfunction
function cj_anonym__692 takes nothing returns nothing
if not Sasuke__KuchiyoseOn then
if GetUnitAbilityLevel(Sasuke_c,0x42303045)==0 then
call Sound("Sasuke Eien no Mangekyo Sharingan End.mp3")
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_SKELETON_KAI,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_FULL,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_ARMOR,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_KANSEITAI,false)
if not Sasuke__ChidoriOn then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_CHIDORI,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KATON,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SHARINGAN,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KUCHIYOSE,true)
else
call SetPlayerAbilityAvailable(Sasuke_p,0x41303545,true)
call SetPlayerAbilityAvailable(Sasuke_p,0x41303241,true)
call SetPlayerAbilityAvailable(Sasuke_p,0x41305548,true)
call SetPlayerAbilityAvailable(Sasuke_p,0x41304341,true)
endif
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endif
endfunction
function Sasuke__EienNoMangekyoSharinganCast takes nothing returns nothing
local integer lvl=GetHeroLevel(Sasuke_c)
call Sound("Sasuke Mangekyo Sharingan.mp3")
if not Sasuke__ChidoriOn then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_CHIDORI,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KATON,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SHARINGAN,false)
else
call SetPlayerAbilityAvailable(Sasuke_p,0x41303545,false)
call SetPlayerAbilityAvailable(Sasuke_p,0x41303241,false)
call SetPlayerAbilityAvailable(Sasuke_p,0x41305548,false)
call SetPlayerAbilityAvailable(Sasuke_p,0x41304341,false)
endif
if lvl>=5 then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_AMATERASU)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_AMATERASU)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_AMATERASU,true)
endif
if lvl>=6 then
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_RIBU)==0 then
call UnitAddAbility(Sasuke_c,Sasuke_SUSANOO_RIBU)
endif
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SUSANOO_RIBU,true)
endif
call TimerStart(CreateTimer(),.1,true,function cj_anonym__692)
endfunction
function Sasuke__KuchiyoseSusanooMove takes unit aoda returns nothing
local integer hu=GetHandleId(Sasuke_c)
local unit susanoo=LoadUnitHandle(HH,hu,3)
if susanoo!=null then
call SetUnitPathing(Sasuke_c,false)
call SetUnitPosition(susanoo,GetWidgetX(Sasuke_c),GetWidgetY(Sasuke_c))
call SetUnitFacing(susanoo,GetUnitFacing(Sasuke_c))
call ShowUnit(susanoo,true)
endif
call DestroyEffect(LoadEffectHandle(HH,GetHandleId(aoda),0))
call FlushChildHashtable(HH,GetHandleId(aoda))
set susanoo=null
endfunction
function Sasuke__KuchiyoseSusanooCreateEffect takes unit aoda returns nothing
local string s=""
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)>0 then
set s="Sasuke Susasnoo no Ribu.mdx"
elseif GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_SKELETON_SLOW)>0 then
set s="Sasuke Susanoo Skeleton.mdx"
elseif GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_FULL_SLOW)>0 then
set s="Sasuke Susanoo Full.mdx"
call UnitAddAbility(aoda,Sasuke_ENTON_SUSANOO_KAGUTSUCHI)
endif
call SaveAgentHandle(HH,GetHandleId(aoda),0,AddSpecialEffectTarget(s,aoda,"overhead"))
endfunction
function cj_anonym__695 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
call SetUnitPosition(Sasuke_c,x,y)
if GetWidgetLife(d)>.405 and GetUnitAbilityLevel(d,0x41305543)>0 and time>0.then
if time==24.then
call Sound("Sasuke Kuchiyose no Jutsu Aoda.mp3")
endif
call SaveReal(HH,h,3,time-period)
else
set udg_Hero[GetPlayerId(Sasuke_p)]=Sasuke_c
call DestroyEffect(LoadEffectHandle(HH,h,1))
call PauseUnit(Sasuke_c,false)
call SetUnitInvulnerable(Sasuke_c,false)
call ShowUnit(Sasuke_c,true)
if GetLocalPlayer()==Sasuke_p then
call ClearSelection()
call SelectUnit(Sasuke_c,true)
endif
call Sasuke__KuchiyoseSusanooMove(d)
call KuchiyoseCreateDustEffect("end",d,1.75,2.6)
call RemoveUnit(d)
set Sasuke__KuchiyoseOn=false
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function cj_anonym__694 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit d=CreateUnit(Sasuke_p,0x68303051,LoadReal(HH,h,0),LoadReal(HH,h,1),GetUnitFacing(Sasuke_c))
local real lifeTime=25.
local real period=.05
local integer hu=GetHandleId(Sasuke_c)
local unit susanoo=LoadUnitHandle(HH,hu,3)
set Sasuke__KuchiyoseOn=true
set udg_Hero[GetPlayerId(Sasuke_p)]=d
call PauseUnit(Sasuke_c,true)
call SetUnitInvulnerable(Sasuke_c,true)
call ShowUnit(Sasuke_c,false)
if GetLocalPlayer()==Sasuke_p then
call ClearSelection()
call SelectUnit(d,true)
endif
if GetUnitAbilityLevel(Sasuke_c,Sasuke_SUSANOO_RIBU_SLOW)>0 or susanoo!=null then
if susanoo!=null then
call ShowUnit(susanoo,false)
endif
call Sasuke__KuchiyoseSusanooCreateEffect(d)
endif
call KuchiyoseCreateDustEffect("cast",d,1.75,2.6)
call SaveAgentHandle(HH,h1,0,d)
call SaveAgentHandle(HH,h1,1,AddSpecialEffectTarget("Sasuke V2.mdx",d,"overhead"))
call SaveReal(HH,h1,2,period)
call SaveReal(HH,h1,3,lifeTime)
call TimerStart(t1,period,true,function cj_anonym__695)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
set d=null
set t=null
set t1=null
endfunction
function cj_anonym__693 takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real period=.67
call KuchiyoseEffect(x,y,3.)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call TimerStart(t,period,false,function cj_anonym__694)
call DestroyTimer(GetExpiredTimer())
set t=null
endfunction
function Sasuke__KuchiyoseCast takes nothing returns nothing
call Sound("Sasuke Kuchiyose no Jutsu Cast.mp3")
call TimerStart(CreateTimer(),.33,false,function cj_anonym__693)
endfunction
function cj_anonym__696 takes nothing returns nothing
call Sound("Sasuke Genjutsu.mp3")
call DestroyTimer(GetExpiredTimer())
endfunction
function Sasuke__IatsuSharinganCast takes nothing returns nothing
call Sound("Sasuke Iatsu Sharingan.mp3")
call TimerStart(CreateTimer(),1.5,false,function cj_anonym__696)
endfunction
function Sasuke__SasukeKatonNoJutsuAnimation takes nothing returns nothing
if not IsUnitPaused(Sasuke_c)then
call PauseUnit(Sasuke_c,true)
call SetUnitAnimation(Sasuke_c,"Spell two")
endif
endfunction
function cj_anonym__697 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real rangeMax=LoadReal(HH,h,3)
local real rangeCur=LoadReal(HH,h,4)
local real radius=LoadReal(HH,h,5)
local real dmg=LoadReal(HH,h,6)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local unit tg
if rangeCur<rangeMax then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or rangeCur==rangeMax
if IsUnitNeedNinjutsu(tg,Sasuke_p)then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIfb\\AIfbSpecialArt.mdl",tg,"chest"))
call UnitDamageTarget(Sasuke_c,tg,GetNinjutsuDamage(dmg,Sasuke_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
set rangeCur=rangeMax
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,4,rangeCur+offset)
else
call DestroyGroup(g)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set d=null
set tg=null
set t=null
endfunction
function Sasuke__KatonHosenkaNoJutsuStart takes real x1,real y1,real rangeMax,real dmg returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real randomDegree=GetRandomReal(1.,25.)
local real period=.05
local real speed=900.
local real offset=speed*period
local real radius=60.
local real xHero=GetWidgetX(Sasuke_c)
local real yHero=GetWidgetY(Sasuke_c)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real startOffset=100.
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local unit d
if GetRandomInt(1,2)==1 then
set a=bj_RADTODEG*Atan2(y1-y,x1-x)-randomDegree
else
set a=bj_RADTODEG*Atan2(y1-y,x1-x)+randomDegree
endif
set d=CreateUnit(Sasuke_p,0x6E30335A,x,y,a)
call PauseUnit(d,true)
call SetUnitPathing(d,false)
call SetUnitInvulnerable(d,true)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,rangeMax)
call SaveReal(HH,h,4,0.)
call SaveReal(HH,h,5,radius)
call SaveReal(HH,h,6,dmg)
call TimerStart(t,period,true,function cj_anonym__697)
set d=null
set t=null
endfunction
function cj_anonym__699 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real range=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local real time=LoadReal(HH,h,5)
if GetWidgetLife(Sasuke_c)>.405 and time>0.then
call Sasuke__SasukeKatonNoJutsuAnimation()
call Sasuke__KatonHosenkaNoJutsuStart(x1,y1,range,dmg)
call SaveReal(HH,h,5,time-period)
else
call PauseUnit(Sasuke_c,false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function cj_anonym__698 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real range=1200.
local real dmg=20.+GetHeroAgi(Sasuke_c,true)*1.2
local real period=.2
local real time=2.
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call SaveReal(HH,h1,0,x1)
call SaveReal(HH,h1,1,y1)
call SaveReal(HH,h1,2,range)
call SaveReal(HH,h1,3,dmg)
call SaveReal(HH,h1,4,period)
call SaveReal(HH,h1,5,time)
call TimerStart(t1,period,true,function cj_anonym__699)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Sasuke__KatonHosenkaNoJutsu takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real castTime=.3
call Sound("Sasuke Katon Hosenka no Jutsu.mp3")
call Sasuke__SasukeKatonNoJutsuAnimation()
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,castTime,false,function cj_anonym__698)
set t=null
endfunction
function cj_anonym__700 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u1=LoadUnitHandle(HH,h,0)
local unit u2=LoadUnitHandle(HH,h,1)
local unit tu=LoadUnitHandle(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local real time=LoadReal(HH,h,5)
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(tu)>.405 and time>0.and IsUnitDisabled(tu)then
call Sasuke__SasukeKatonNoJutsuAnimation()
call UnitDamageTarget(Sasuke_c,tu,GetNinjutsuDamage(dmg,Sasuke_c,tu,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveReal(HH,h,5,time-period)
else
call PauseUnit(Sasuke_c,false)
call KillUnit(u1)
call RemoveUnit(u2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set u1=null
set u2=null
set t=null
endfunction
function Sasuke__KatonRyukaNoJutsuDamage takes unit u1,unit u2,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=4.
local real period=.1
local real dmg=(40.+GetHeroAgi(Sasuke_c,true)*1.4)*period
call SaveAgentHandle(HH,h,0,u1)
call SaveAgentHandle(HH,h,1,u2)
call SaveAgentHandle(HH,h,2,tu)
call SaveReal(HH,h,3,dmg)
call SaveReal(HH,h,4,period)
call SaveReal(HH,h,5,time)
call TimerStart(t,period,true,function cj_anonym__700)
set t=null
endfunction
function cj_anonym__702 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u1=LoadUnitHandle(HH,h,0)
local unit u2=LoadUnitHandle(HH,h,1)
local unit tu=LoadUnitHandle(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real size=LoadReal(HH,h,4)
local real sizePlus=LoadReal(HH,h,5)
local real x=GetWidgetX(u1)
local real y=GetWidgetY(u1)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(tu)>.405 and distance>offset and IsUnitDisabled(tu)then
call Sasuke__SasukeKatonNoJutsuAnimation()
call SetUnitPosition(u1,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitScale(u1,size,size,size)
call SetUnitScale(u2,size,size,size)
call SaveReal(HH,h,4,size+sizePlus)
else
if GetWidgetLife(Sasuke_c)>.405 and GetWidgetLife(tu)>.405 and IsUnitDisabled(tu)then
call Sasuke__KatonRyukaNoJutsuDamage(u1,u2,tu)
else
call PauseUnit(Sasuke_c,false)
call KillUnit(u1)
call RemoveUnit(u2)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set u1=null
set u2=null
set t=null
endfunction
function cj_anonym__701 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local unit tu=LoadUnitHandle(HH,h,0)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real xHero=GetWidgetX(Sasuke_c)
local real yHero=GetWidgetY(Sasuke_c)
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real start_offset=70.
local real x=xHero+start_offset*Cos(a*bj_DEGTORAD)
local real y=yHero+start_offset*Sin(a*bj_DEGTORAD)
local real period=.04
local real speed=800.
local real offset=speed*period
local real sizePlus=.02
local real size=.4+sizePlus
set bj_lastCreatedUnit=CreateUnit(Sasuke_p,0x6E303431,x,y,a+90.)
call SetUnitTimeScale(bj_lastCreatedUnit,2.)
call SaveAgentHandle(HH,h1,0,CreateUnit(Sasuke_p,0x6E303432,x,y,a))
call SaveAgentHandle(HH,h1,1,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h1,2,tu)
call SaveReal(HH,h1,3,offset)
call SaveReal(HH,h1,4,size)
call SaveReal(HH,h1,5,sizePlus)
call TimerStart(t1,period,true,function cj_anonym__702)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Sasuke__KatonRyukaNoJutsu takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=.3
call Sound("Sasuke Katon Ryuka no Jutsu.mp3")
call Sasuke__SasukeKatonNoJutsuAnimation()
call SaveAgentHandle(HH,h,0,tu)
call TimerStart(t,castTime,false,function cj_anonym__701)
set t=null
endfunction
function Sasuke__KatonGoryukaNoJutsuDamage takes real x,real y,real radius,real dmg returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasuke_p)then
call UnitDamageTarget(Sasuke_c,tg,GetNinjutsuDamage(dmg,Sasuke_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call JiraiyaSetFireOil(Sasuke_c,tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call FireDestructablesEnum(x,y,radius/2.)
call JiraiyaSetFireSwamp(Sasuke_c,x,y)
set tg=null
set g=null
endfunction
function cj_anonym__703 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real maxdis=LoadReal(HH,h,4)
local integer amount=LoadInteger(HH,h,7)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real f=GetUnitFacing(d)
local real curdis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if amount>0 then
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
call SetUnitFlyHeight(d,1400./maxdis*(maxdis-curdis)*(curdis/maxdis),0.)
call SaveInteger(HH,h,7,amount-1)
else
call Sasuke__KatonGoryukaNoJutsuDamage(x,y,LoadReal(HH,h,5),LoadReal(HH,h,6))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Sasuke__KatonGoryukaNoJutsuCreate takes real x,real y,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real speed=1040.
local real offset=speed*period
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real radius=200.
local real dmg=75.+GetHeroAgi(Sasuke_c,true)*2.
local unit d=CreateUnit(Sasuke_p,0x6E303430,x,y,a)
local integer amount=R2I(distance/offset)
call SetUnitTimeScale(d,.8)
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,distance)
call SaveReal(HH,h,5,radius)
call SaveReal(HH,h,6,dmg)
call SaveInteger(HH,h,7,amount)
call TimerStart(t,period,true,function cj_anonym__703)
set d=null
set t=null
endfunction
function cj_anonym__704 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real xHero=GetWidgetX(Sasuke_c)
local real yHero=GetWidgetY(Sasuke_c)
local real startOffset=100.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
call Sasuke__KatonGoryukaNoJutsuCreate(x,y,x1,y1)
call PauseUnit(Sasuke_c,false)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Sasuke__KatonGoryukaNoJutsu takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=.5
call Sound("Sasuke Katon Goriyuka.mp3")
call Sasuke__SasukeKatonNoJutsuAnimation()
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,castTime,false,function cj_anonym__704)
set t=null
endfunction
function cj_anonym__706 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d1=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real radius=LoadReal(HH,h,2)
local real dmg=LoadReal(HH,h,3)
local real distance=LoadReal(HH,h,4)
local real offset=LoadReal(HH,h,5)
local real a=LoadReal(HH,h,6)
local unit d2=LoadUnitHandle(HH,h,7)
local unit d3=LoadUnitHandle(HH,h,8)
local real size=LoadReal(HH,h,9)
local real sizePlus=LoadReal(HH,h,10)
local unit tg
local real x=GetWidgetX(d1)
local real y=GetWidgetY(d1)
if distance>0.then
call Sasuke__SasukeKatonNoJutsuAnimation()
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasuke_p)then
call UnitDamageTarget(Sasuke_c,tg,GetNinjutsuDamage(dmg,Sasuke_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tg)>.405 then
call JiraiyaSetFireOil(Sasuke_c,tg)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call FireDestructablesEnum(x,y,radius/2.)
call JiraiyaSetFireSwamp(Sasuke_c,x,y)
call SetUnitPosition(d1,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitPosition(d2,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SetUnitScale(d2,size,size,size)
call SetUnitScale(d3,size*1.25,size*1.25,size*1.25)
call SaveReal(HH,h,4,distance-offset)
call SaveReal(HH,h,9,size+sizePlus)
else
call PauseUnit(Sasuke_c,false)
call DestroyGroup(g)
call CreateEffect(x,y,1.2,"Boom.mdx",1.)
call RemoveUnit(d1)
call KillUnit(d2)
call RemoveUnit(d3)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set d1=null
set d2=null
set d3=null
set t=null
endfunction
function cj_anonym__705 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real xHero=GetWidgetX(Sasuke_c)
local real yHero=GetWidgetY(Sasuke_c)
local real startOffset=175.
local real a=bj_RADTODEG*Atan2(y1-yHero,x1-xHero)
local real x=xHero+startOffset*Cos(a*bj_DEGTORAD)
local real y=yHero+startOffset*Sin(a*bj_DEGTORAD)
local real x_flow=xHero+(startOffset/3.2)*Cos(a*bj_DEGTORAD)
local real y_flow=yHero+(startOffset/3.2)*Sin(a*bj_DEGTORAD)
local real time=1.25
local real radius=250.
local real dmg=(60.+GetHeroInt(Sasuke_c,true)*1.5)*MainPeriod
local real distance=600.
local real offset=distance/(time/MainPeriod)
local real sizePlus=.02
local real size=.4+sizePlus
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call SaveAgentHandle(HH,h1,0,CreateUnit(Sasuke_p,0x68303049,x,y,a))
call SaveAgentHandle(HH,h1,1,CreateGroup())
call SaveReal(HH,h1,2,radius)
call SaveReal(HH,h1,3,dmg)
call SaveReal(HH,h1,4,distance)
call SaveReal(HH,h1,5,offset)
call SaveReal(HH,h1,6,a)
call SaveAgentHandle(HH,h1,7,CreateUnit(Sasuke_p,0x6E303432,x,y,a))
call SaveAgentHandle(HH,h1,8,CreateUnit(Sasuke_p,0x6E303431,x_flow,y_flow,a+90.))
call SaveReal(HH,h1,9,size)
call SaveReal(HH,h1,10,sizePlus)
call TimerStart(t1,MainPeriod,true,function cj_anonym__706)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Sasuke__KatonGokakyuNoJutsu takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real castTime=.5
call Sound("Sasuke Katon Gokakyu no Jutsu.mp3")
call Sasuke__SasukeKatonNoJutsuAnimation()
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,castTime,false,function cj_anonym__705)
set t=null
endfunction
function Sasuke__KatonCast takes unit tu,real x1,real y1 returns nothing
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real range=600.
if tu==null then
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<range then
call Sasuke__KatonGokakyuNoJutsu(x1,y1)
else
call Sasuke__KatonGoryukaNoJutsu(x1,y1)
endif
else
if IsUnitDisabled(tu)then
call Sasuke__KatonRyukaNoJutsu(tu)
else
call Sasuke__KatonHosenkaNoJutsu(tu)
endif
endif
endfunction
function cj_anonym__710 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer i=0
local player pother
loop
set pother=Player(i)
if i!=5 and GetPlayerSlotState(pother)==PLAYER_SLOT_STATE_PLAYING and not udg_VM_Log[i]and IsPlayerAlly(pother,Sasuke_p)then
call FogModifierStop(LoadFogModifierHandle(HH,h,i))
call DestroyFogModifier(LoadFogModifierHandle(HH,h,i))
endif
set i=i+1
exitwhen i>10
endloop
call CameraSetSourceNoise(0.,0.)
call CameraSetTargetNoise(0.,0.)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set pother=null
set t=null
endfunction
function cj_anonym__709 takes nothing returns nothing
call CameraSetTargetNoiseEx(70.,2250.,true)
call CameraSetSourceNoiseEx(70.,2250.,true)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__708 takes nothing returns nothing
call CameraSetTargetNoiseEx(50.,2250.,true)
call CameraSetSourceNoiseEx(50.,2250.,true)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__707 takes nothing returns nothing
call DisplayCineFilter(false)
call DestroyTimer(GetExpiredTimer())
endfunction
function Sasuke__KirinDamage takes real x,real y returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer number=9
local integer i=0
local player pother
local real cameraShakeDuration=.09
local real radius=800.
local real dmg=Sasuke__ultDamage
local real effectDegreeStep=72.
local real effectDegree=0.
local real effectOffset=radius/2.5
local real effectSize=3.5
local real x1
local real y1
local unit tg
local rect r=Rect(x-radius/2.,y-radius/2.,x+radius/2.,y+radius/2.)
local group g=CreateGroup()
call GroupEnumUnitsInRect(g,r,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasuke_p)then
call UnitDamageTarget(Sasuke_c,tg,GetNinjutsuOnlyDecreaseDamage(dmg,tg),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call CreateEffect(x,y,2.,"vl_shidori_nagashi.mdx",.5)
call CreateEffect(x,y,1.85,"LightningWrath.mdx",2.)
call CreateEffect(x,y,effectSize,"Lightning Wind.mdx",.01)
loop
set x1=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
set y1=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x1,y1,GetRandomReal(1.,1.35),"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x1,y1,GetRandomReal(1.,1.35),"IceSparks.mdx",8.)
endif
set number=number-1
exitwhen number==0
endloop
call RemoveRect(r)
loop
set x1=x+effectOffset*Cos(effectDegree*bj_DEGTORAD)
set y1=y+effectOffset*Sin(effectDegree*bj_DEGTORAD)
call CreateEffect(x1,y1,effectSize,"Lightning Shock.mdx",.01)
set effectDegree=effectDegree+effectDegreeStep
exitwhen effectDegree>=360.
endloop
set effectDegreeStep=72.
set effectDegree=0.
loop
set x1=x+effectOffset*Cos(effectDegree*bj_DEGTORAD)
set y1=y+effectOffset*Sin(effectDegree*bj_DEGTORAD)
call CreateDummyEffect(x1,y1,3.,"Deathmok.mdx",effectDegree)
set effectDegree=effectDegree+effectDegreeStep
exitwhen effectDegree>=360.
endloop
set Sasuke__ultDamage=0
call LeaderboardDisplay(Sasuke__lb,false)
call CinematicFilterGenericBJ(1.,BLEND_MODE_NONE,"ReplaceableTextures\\CameraMasks\\White_mask.blp",100.,100.,100.,100.,100.,100.,100.,100.)
call TimerStart(CreateTimer(),.03,false,function cj_anonym__707)
call CameraSetTargetNoiseEx(70.,2250.,true)
call CameraSetSourceNoiseEx(70.,2250.,true)
call TimerStart(CreateTimer(),cameraShakeDuration,false,function cj_anonym__708)
call TimerStart(CreateTimer(),cameraShakeDuration*2.,false,function cj_anonym__709)
loop
set pother=Player(i)
if i!=5 and GetPlayerSlotState(pother)==PLAYER_SLOT_STATE_PLAYING and not udg_VM_Log[i]and IsPlayerAlly(pother,Sasuke_p)then
set bj_lastCreatedFogModifier=CreateFogModifierRadius(pother,FOG_OF_WAR_VISIBLE,x,y,radius,true,false)
call FogModifierStart(bj_lastCreatedFogModifier)
call SaveFogModifierHandle(HH,h,i,bj_lastCreatedFogModifier)
endif
set i=i+1
exitwhen i>10
endloop
set cameraShakeDuration=cameraShakeDuration*3.
call TimerStart(t,cameraShakeDuration,false,function cj_anonym__710)
set pother=null
set tg=null
set g=null
set r=null
set t=null
endfunction
function cj_anonym__711 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
call PauseUnit(Sasuke_c,false)
call Sasuke__KirinDamage(x,y)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function Sasuke__KirinStartSpell takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=1.333
call Sound("Sasuke Kirin 2.mp3")
call UnitRemoveAbility(Sasuke_c,0x41304542)
call PauseUnit(Sasuke_c,true)
call SetUnitAnimation(Sasuke_c,"Spell Three")
call KillUnit(Sasuke__kirin)
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call TimerStart(t,time,false,function cj_anonym__711)
set t=null
endfunction
function cj_anonym__712 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
local real fulltime=LoadReal(HH,h,2)
local real x=LoadReal(HH,h,3)
local real y=LoadReal(HH,h,4)
local real f=LoadReal(HH,h,5)
local real dmg=LoadReal(HH,h,6)
local real effectTime=.55
local real radius
local rect r
local real x1
local real y1
if GetWidgetLife(Sasuke_c)>.405 and time>0.then
set radius=600.
set r=Rect(x-radius/2.,y-radius/2.,x+radius/2.,y+radius/2.)
set x1=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
set y1=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
call CreateTimedEffect("Lightnings Long.mdx",null,null,x1,y1,effectTime)
if GetRandomInt(1,2)==1 then
set x1=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
set y1=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
call CreateTimedEffect("Lightnings Long.mdx",null,null,x1,y1,effectTime)
endif
call RemoveRect(r)
if time==fulltime then
set Sasuke__ultStuck=true
set Sasuke__ultDamage=0
call Sound("Sasuke Kirin 1.mp3")
call UnitAddAbility(Sasuke_c,0x41304542)
set Sasuke__kirin=CreateUnit(Sasuke_p,0x6E303051,x,y,f)
call SaveAgentHandle(HH,h,6,CreateUnit(Sasuke_p,0x6E303053,x,y,f))
call SaveAgentHandle(HH,h,7,AddSpecialEffectTarget("Lightning Shock.mdx",Sasuke_c,"hand right"))
elseif time==3.then
set Sasuke__ultStuck=false
endif
if time>3.then
set Sasuke__ultDamage=Sasuke__ultDamage+R2I(dmg)
call LeaderboardSetItemValue(Sasuke__lb,LeaderboardGetPlayerIndex(Sasuke__lb,Player(0)),Sasuke__ultDamage)
endif
if GetUnitAbilityLevel(Sasuke_c,0x41304542)>0 then
call SaveReal(HH,h,1,time-period)
call LeaderboardSetItemValue(Sasuke__lb,LeaderboardGetPlayerIndex(Sasuke__lb,Player(1)),R2I(time))
else
call SaveReal(HH,h,1,0.)
call LeaderboardSetItemValue(Sasuke__lb,LeaderboardGetPlayerIndex(Sasuke__lb,Player(1)),0)
endif
else
set Sasuke__KirinOn=false
set Sasuke__ultStuck=false
if GetWidgetLife(Sasuke_c)>.405 and time==0.and GetUnitAbilityLevel(Sasuke_c,0x41304542)>0 then
call Sasuke__KirinStartSpell(GetWidgetX(Sasuke_c),GetWidgetY(Sasuke_c))
else
set Sasuke__ultDamage=0
call LeaderboardDisplay(Sasuke__lb,false)
endif
call KillUnit(LoadUnitHandle(HH,h,6))
call KillUnit(Sasuke__kirin)
call DestroyEffect(LoadEffectHandle(HH,h,7))
call UnitRemoveAbility(Sasuke_c,0x41304542)
if GetUnitAbilityLevel(Sasuke_c,0x42303045)==0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_CHIDORI,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KATON,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SHARINGAN,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KUCHIYOSE,true)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set r=null
set t=null
endfunction
function Sasuke__KirinCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real f=GetUnitFacing(Sasuke_c)
local real speedUp=500.
local real period=1.
local real timetocast=3.
local real time=7.+timetocast
local real dmg=100.*period
set bj_lastCreatedUnit=CreateUnit(Sasuke_p,0x6E303052,x,y,f)
set Sasuke__KirinOn=true
if Sasuke__lb==null then
set Sasuke__lb=CreateLeaderboard()
set Sasuke__ultDamage=0
call LeaderboardSetLabel(Sasuke__lb,"Кирин")
call PlayerSetLeaderboard(Sasuke_p,Sasuke__lb)
call LeaderboardAddItem(Sasuke__lb,"Урон:",Sasuke__ultDamage,Player(0))
call LeaderboardSetItemValueColor(Sasuke__lb,LeaderboardGetPlayerIndex(Sasuke__lb,Player(0)),0,144,212,255)
call LeaderboardSetItemLabelColor(Sasuke__lb,LeaderboardGetPlayerIndex(Sasuke__lb,Player(0)),0,144,212,128)
call LeaderboardAddItem(Sasuke__lb,"Длительность:",R2I(0),Player(1))
call LeaderboardSetItemValueColor(Sasuke__lb,LeaderboardGetPlayerIndex(Sasuke__lb,Player(1)),165,253,0,255)
call LeaderboardSetItemLabelColor(Sasuke__lb,LeaderboardGetPlayerIndex(Sasuke__lb,Player(1)),165,253,0,128)
call LeaderboardSetSizeByItemCount(Sasuke__lb,LeaderboardGetItemCount(Sasuke__lb))
endif
call LeaderboardDisplay(Sasuke__lb,true)
call Sound("Sasuke Katon Goriyuka.mp3")
call UnitRemoveAbility(Sasuke_c,0x42303359)
call SetPlayerAbilityAvailable(Sasuke_p,0x41304341,false)
call SetUnitFlyHeight(bj_lastCreatedUnit,99999.,speedUp)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,x)
call SaveReal(HH,h,4,y)
call SaveReal(HH,h,5,f)
call SaveReal(HH,h,6,dmg)
call TimerStart(t,period,true,function cj_anonym__712)
set t=null
endfunction
function Sasuke__KatanaDamageConditions takes nothing returns boolean
return not IsUnitIllusion(GetEventDamageSource())and IsUnitInGroup(GetTriggerUnit(),Sasuke__grKatana)and GetUnitAbilityLevel(GetEventDamageSource(),0x41304438)>0 or GetUnitAbilityLevel(GetEventDamageSource(),0x41304559)>0
endfunction
function Sasuke__KatanaDamageActions takes nothing returns nothing
local unit damager=GetEventDamageSource()
local unit tu=GetTriggerUnit()
local real dmg=GetHeroAgi(damager,true)*1.2
call DisableTrigger(Sasuke__katanadmg)
if GetUnitAbilityLevel(damager,0x41304438)>0 then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",tu,"chest"))
call UnitDamageTarget(damager,tu,GetNinjutsuDamage(dmg,damager,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
elseif GetUnitAbilityLevel(damager,0x41304559)>0 then
if GetRandomInt(1,5)==1 then
call Sasuke__KagutsuchiNoTsurugiAttack(tu)
endif
endif
call GroupRemoveUnit(Sasuke__grKatana,tu)
set tu=null
set damager=null
endfunction
function Sasuke__ChidorigatanaCast takes nothing returns nothing
local real timeDebuff=10.
call Sound("Sasuke Kusanagi no Tsurugi Chidorigatana.mp3")
call UnitRemoveAbility(Sasuke_c,0x42303359)
call UnitTempSpell(Sasuke_c,0x41304438,0x42303054,timeDebuff,0,false)
endfunction
function Sasuke__NagashiFinal takes real x,real y,group grKnock returns nothing
local real rangeKnock=250.
local real timeDebuff=3.
local unit tg
loop
set tg=FirstOfGroup(grKnock)
exitwhen tg==null
call KnockBackUnitEf(tg,rangeKnock,rangeKnock/1000.,bj_RADTODEG*Atan2(GetWidgetY(tg)-y,GetWidgetX(tg)-x),.025,0,false)
call UnitTempSpell(tg,0x41305355,0x42303430,timeDebuff,0,false)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\LightningBolt\\LightningBoltMissile.mdl",tg,"chest"))
call GroupRemoveUnit(grKnock,tg)
endloop
call DestroyGroup(grKnock)
set tg=null
endfunction
function cj_anonym__715 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real offsetKnock=LoadReal(HH,h,0)
local real radius=LoadReal(HH,h,1)
local real dmg=LoadReal(HH,h,2)
local group grKnock=LoadGroupHandle(HH,h,3)
local real a
local unit tg
if GetUnitCurrentOrder(Sasuke_c)==OrderId("taunt")then
call GroupEnumUnitsInRange(bj_lastCreatedGroup,x,y,radius,null)
loop
set tg=FirstOfGroup(bj_lastCreatedGroup)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Sasuke_p)then
set a=bj_RADTODEG*Atan2(GetWidgetY(tg)-y,GetWidgetX(tg)-x)
call SetUnitX(tg,GetWidgetX(tg)+offsetKnock*Cos(a*bj_DEGTORAD))
call SetUnitY(tg,GetWidgetY(tg)+offsetKnock*Sin(a*bj_DEGTORAD))
if not IsUnitInGroup(tg,grKnock)then
call GroupAddUnit(grKnock,tg)
endif
call UnitDamageTarget(Sasuke_c,tg,GetNinjutsuDamage(dmg,Sasuke_c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call GroupRemoveUnit(bj_lastCreatedGroup,tg)
endloop
else
call Sasuke__NagashiFinal(x,y,grKnock)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set grKnock=null
set tg=null
set t=null
endfunction
function cj_anonym__714 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real x1
local real y1
local real f=0.
loop
set x1=x+offset*Cos(f*bj_DEGTORAD)
set y1=y+offset*Sin(f*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x1,y1))
set f=f+40.
exitwhen f==360.
endloop
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
endfunction
function cj_anonym__713 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x=LoadReal(HH,h,0)
local real y=LoadReal(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real timeEff=LoadReal(HH,h,3)
local real x1
local real y1
local real f=0.
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
loop
set x1=x+offset*Cos(f*bj_DEGTORAD)
set y1=y+offset*Sin(f*bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x1,y1))
set f=f+60.
exitwhen f==360.
endloop
call SaveReal(HH,h1,0,x)
call SaveReal(HH,h1,1,y)
call SaveReal(HH,h1,2,250.)
call TimerStart(t1,timeEff,false,function cj_anonym__714)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set t=null
set t1=null
endfunction
function Sasuke__NagashiCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real timeEff=.085
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1
local real y1
local real period=.05
local real radius=300.
local real offsetKnock=100.*period
local real dmg=150.*period
local real f=0.
local real offset=50.
call Sound("Sasuke Chidori Nagashi.mp3")
call UnitRemoveAbility(Sasuke_c,0x42303359)
call CreateEffect(x,y,1.,"vl_shidori_nagashi.mdx",.1)
call CreateEffect(x,y,radius/100.,"Lightning.mdx",1.)
loop
set x1=x+offset*Cos(f*.017)
set y1=y+offset*Sin(f*.017)
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",x1,y1))
set f=f+90.
exitwhen f==360.
endloop
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,150.)
call SaveReal(HH,h,3,timeEff)
call TimerStart(t,timeEff,false,function cj_anonym__713)
set t=CreateTimer()
set h=GetHandleId(t)
call SaveReal(HH,h,0,offsetKnock)
call SaveReal(HH,h,1,radius)
call SaveReal(HH,h,2,dmg)
call SaveAgentHandle(HH,h,3,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__715)
set t=null
endfunction
function cj_anonym__716 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
call RemoveUnit(LoadUnitHandle(HH,h,1))
call DestroyEffect(LoadEffectHandle(HH,h,2))
call PauseUnit(Sasuke_c,false)
call PauseUnit(tu,false)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Sasuke__EisoCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=100.+Sasuke__chidoriDamage
local real time=1.5
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real start_offset=200.
call Sound("Sasuke Chidori Eiso.mp3")
call PauseUnit(Sasuke_c,true)
call PauseUnit(tu,true)
call SetUnitAnimation(Sasuke_c,"Spell One")
call UnitRemoveAbility(Sasuke_c,0x42303359)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(Sasuke_c,tu,GetNinjutsuDamage(dmg,Sasuke_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,CreateUnit(Sasuke_p,0x6E303436,x+start_offset*Cos(a*bj_DEGTORAD),y+start_offset*Sin(a*bj_DEGTORAD),a))
call SaveAgentHandle(HH,h,2,AddSpecialEffectTarget("ChidoriEiso2.mdx",tu,"chest"))
call TimerStart(t,time,false,function cj_anonym__716)
set t=null
endfunction
function cj_anonym__717 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
call PauseUnit(Sasuke_c,false)
call UnitRemoveAbility(Sasuke_c,0x42303359)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tu,"chest"))
call UnitDamageTarget(Sasuke_c,tu,GetNinjutsuDamage(dmg,Sasuke_c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tu=null
set t=null
endfunction
function Sasuke__ChidoriStrike takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real dmg=100.+Sasuke__chidoriDamage
local real time=.4
call Sound("Sasuke Chidori Attack.mp3")
call PauseUnit(Sasuke_c,true)
call SetUnitAnimation(Sasuke_c,"Spell One")
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,dmg)
call TimerStart(t,time,false,function cj_anonym__717)
set t=null
endfunction
function cj_anonym__718 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real xold=LoadReal(HH,h,0)
local real yold=LoadReal(HH,h,1)
local real addDmg=LoadReal(HH,h,2)
local real dmgLimit=LoadReal(HH,h,3)
local real oldDistance=LoadReal(HH,h,4)
local real maxDistance=LoadReal(HH,h,5)
local real xnew=GetWidgetX(Sasuke_c)
local real ynew=GetWidgetY(Sasuke_c)
local real curDistance=SquareRoot((xold-xnew)*(xold-xnew)+(yold-ynew)*(yold-ynew))
if GetUnitAbilityLevel(Sasuke_c,0x42303359)>0 then
if not IsUnitPaused(Sasuke_c)and Sasuke__chidoriDamage<dmgLimit then
if oldDistance<maxDistance then
call SaveReal(HH,h,4,oldDistance+curDistance)
else
set Sasuke__chidoriDamage=Sasuke__chidoriDamage+addDmg
if Sasuke__chidoriDamage>dmgLimit then
set Sasuke__chidoriDamage=dmgLimit
endif
call SaveReal(HH,h,4,0.)
endif
call SaveReal(HH,h,0,xnew)
call SaveReal(HH,h,1,ynew)
endif
else
set Sasuke__ChidoriOn=false
call SetPlayerAbilityAvailable(Sasuke_p,0x41303545,false)
call SetPlayerAbilityAvailable(Sasuke_p,0x41303241,false)
call SetPlayerAbilityAvailable(Sasuke_p,0x41305548,false)
call SetPlayerAbilityAvailable(Sasuke_p,0x41304341,false)
if not Sasuke__KirinOn and GetUnitAbilityLevel(Sasuke_c,0x42303045)==0 then
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_CHIDORI,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KATON,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SHARINGAN,true)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KUCHIYOSE,true)
endif
call AddUnitAnimationProperties(Sasuke_c,"Walk",true)
call AddUnitAnimationProperties(Sasuke_c,"Walk Alternate",false)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Sasuke__ChidoriCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer level=GetHeroLevel(Sasuke_c)
local real period=.1
local real addDmg=10.+level
local real maxDistance=100.
local real dmgLimit=400.
local real x=GetWidgetX(Sasuke_c)
local real y=GetWidgetY(Sasuke_c)
set Sasuke__chidoriDamage=0.
set Sasuke__ChidoriOn=true
call Sound("Sasuke Chidori.mp3")
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_CHIDORI,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KATON,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_SHARINGAN,false)
call SetPlayerAbilityAvailable(Sasuke_p,Sasuke_KUCHIYOSE,false)
if GetUnitAbilityLevel(Sasuke_c,0x41303545)==0 then
call UnitAddAbility(Sasuke_c,0x41303545)
endif
call SetPlayerAbilityAvailable(Sasuke_p,0x41303545,true)
if GetUnitAbilityLevel(Sasuke_c,0x41303241)==0 then
call UnitAddAbility(Sasuke_c,0x41303241)
endif
call SetPlayerAbilityAvailable(Sasuke_p,0x41303241,true)
if level>=2 then
if GetUnitAbilityLevel(Sasuke_c,0x41305548)==0 then
call UnitAddAbility(Sasuke_c,0x41305548)
endif
call SetPlayerAbilityAvailable(Sasuke_p,0x41305548,true)
if level>=4 then
if GetUnitAbilityLevel(Sasuke_c,0x41304341)==0 then
call UnitAddAbility(Sasuke_c,0x41304341)
endif
call SetPlayerAbilityAvailable(Sasuke_p,0x41304341,true)
endif
endif
call DestroyEffect(AddSpecialEffect("Lightning Wind.mdx",x,y))
call AddUnitAnimationProperties(Sasuke_c,"Walk Alternate",true)
call AddUnitAnimationProperties(Sasuke_c,"Walk",false)
call SaveReal(HH,h,0,x)
call SaveReal(HH,h,1,y)
call SaveReal(HH,h,2,addDmg)
call SaveReal(HH,h,3,dmgLimit)
call SaveReal(HH,h,4,0.)
call SaveReal(HH,h,5,maxDistance)
call TimerStart(t,period,true,function cj_anonym__718)
set t=null
endfunction
function Sasuke__AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitIllusion(GetAttacker())and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_MAGIC_IMMUNE)and GetUnitAbilityLevel(GetAttacker(),0x42303359)>0 or GetUnitAbilityLevel(GetAttacker(),0x41304438)>0 or GetUnitAbilityLevel(GetAttacker(),0x4230354D)>0 or GetUnitAbilityLevel(GetAttacker(),0x41304559)>0
endfunction
function Sasuke__AttackActions takes nothing returns nothing
local unit attacker=GetAttacker()
local unit tu=GetTriggerUnit()
if GetUnitAbilityLevel(attacker,0x42303359)==0 and GetUnitAbilityLevel(attacker,0x4230354D)==0 then
if not IsUnitInGroup(tu,Sasuke__grKatana)and GetUnitAbilityLevel(attacker,0x41304438)>0 or GetUnitAbilityLevel(attacker,0x41304559)>0 then
if not IsUnitInGroup(tu,Sasuke__grReg)then
call GroupAddUnit(Sasuke__grReg,tu)
call TriggerRegisterUnitEvent(Sasuke__katanadmg,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Sasuke__grKatana,tu)
call EnableTrigger(Sasuke__katanadmg)
endif
else
if GetUnitAbilityLevel(attacker,0x42303359)>0 then
call Sasuke__ChidoriStrike(tu)
elseif GetUnitAbilityLevel(attacker,0x4230354D)>0 then
call Sasuke__RikudoChidoriStrike(tu)
endif
endif
set tu=null
set attacker=null
endfunction
function Sasuke__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Sasuke_CHIDORI or i==0x41303545 or i==0x41303241 or i==0x41305548 or i==0x41304341 or i==0x41304542 or i==Sasuke_KATON or i==Sasuke_SHARINGAN or i==Sasuke_KUCHIYOSE or i==0x41305543 or i==Sasuke_EMS or i==Sasuke_AMATERASU or i==0x41313337 or i==0x41304734 or i==Sasuke_SUSANOO_RIBU or i==0x41313259 or i==Sasuke_SUSANOO_SKELETON or i==Sasuke_SUSANOO_SKELETON_KAI or i==Sasuke_SUSANOO_FULL or i==Sasuke_SUSANOO_FULL_BOW or i==Sasuke_ENTON_SUSANOO_KAGUTSUCHI or i==Sasuke_SUSANOO_ARMOR or i==Sasuke_SUSANOO_ARMOR_TSURUGI or i==Sasuke_SUSANOO_ARMOR_YASAKA or i==Sasuke_SUSANOO_KANSEITAI or i==Sasuke_SUSANOO_CHIDORI or i==Sasuke_RIKUDO_CHIDORI or i==Sasuke_ENTON_KAGUTSUCHI or i==Sasuke_RINNEGAN or i==Sasuke_RINNEGAN_GENJUTSU or i==Sasuke_RINNEGAN_AMENOTEJIKARA or i==Sasuke_CHIBAKU_TENSEI or i==Sasuke_BIJU_SUSANOO or i==0x41305257 or i==Sasuke_BIJU_SUSANOO_INDRA
endfunction
function Sasuke__SpellsActions takes nothing returns nothing
local integer i
if Sasuke_c==null then
set Sasuke_c=GetTriggerUnit()
set Sasuke_p=GetOwningPlayer(Sasuke_c)
endif
set i=GetSpellAbilityId()
if i==Sasuke_CHIDORI then
call Sasuke__ChidoriCast()
elseif i==0x41303545 then
call Sasuke__EisoCast(GetSpellTargetUnit())
elseif i==0x41303241 then
call Sasuke__NagashiCast()
elseif i==0x41305548 then
call Sasuke__ChidorigatanaCast()
elseif i==0x41304341 then
call Sasuke__KirinCast()
elseif i==0x41304542 then
call Sasuke__KirinStartSpell(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sasuke_KATON then
call Sasuke__KatonCast(GetSpellTargetUnit(),GetSpellTargetX(),GetSpellTargetY())
elseif i==Sasuke_SHARINGAN then
call Sasuke__IatsuSharinganCast()
elseif i==Sasuke_KUCHIYOSE then
call Sasuke__KuchiyoseCast()
elseif i==0x41305543 then
call UnitRemoveAbility(GetTriggerUnit(),0x41305543)
elseif i==Sasuke_EMS then
if GetUnitAbilityLevel(Sasuke_c,0x42303045)==0 then
call Sasuke__EienNoMangekyoSharinganCast()
endif
elseif i==Sasuke_AMATERASU then
call Sasuke__SasukeAmaterasuCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41313337 then
call Sasuke__SasukeAmaterasuStartActions(GetSpellTargetUnit(),true)
elseif i==0x41304734 then
call UnitRemoveAbility(Sasuke_c,0x41304734)
elseif i==Sasuke_SUSANOO_RIBU then
call Sasuke__RibuCast()
elseif i==0x41313259 then
call UnitRemoveAbility(Sasuke_c,0x41313259)
elseif i==Sasuke_SUSANOO_SKELETON then
call Sasuke__SusanooCast(1)
elseif i==Sasuke_SUSANOO_SKELETON_KAI then
call Sasuke__SusanooKaiCast(GetSpellTargetUnit())
elseif i==Sasuke_SUSANOO_FULL then
call Sasuke__SusanooCast(2)
elseif i==Sasuke_SUSANOO_FULL_BOW then
call Sasuke__SusanooBowCast(GetSpellTargetUnit())
elseif i==Sasuke_ENTON_SUSANOO_KAGUTSUCHI then
call Sasuke__EntonSusanooKagutsuchiCast(GetSpellTargetUnit())
elseif i==Sasuke_SUSANOO_ARMOR then
call Sasuke__SusanooCast(3)
elseif i==Sasuke_SUSANOO_ARMOR_TSURUGI then
call Sasuke__KagutsuchiNoTsurugiCast(GetSpellTargetUnit())
elseif i==Sasuke_SUSANOO_ARMOR_YASAKA then
call Sasuke__EntonYasakaNoMagatamaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sasuke_SUSANOO_KANSEITAI then
call Sasuke__KanseitaiSusanooCast()
elseif i==Sasuke_SUSANOO_CHIDORI then
call Sasuke__KanseitaiSusanooChidori(GetTriggerUnit(),GetSpellTargetUnit())
elseif i==Sasuke_RIKUDO_CHIDORI then
call Sasuke__RikudoChidoriCast()
elseif i==Sasuke_ENTON_KAGUTSUCHI then
call Sasuke__EntonKagutsuchi(GetSpellTargetUnit())
elseif i==Sasuke_RINNEGAN then
call Sasuke__RinneganCast()
elseif i==Sasuke_RINNEGAN_GENJUTSU then
call Sasuke__GenjutsuRinneganCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sasuke_RINNEGAN_AMENOTEJIKARA then
call Sasuke__AmenotejikaraCast(GetSpellTargetX(),GetSpellTargetY(),GetSpellTargetUnit(),GetSpellTargetItem())
elseif i==Sasuke_CHIBAKU_TENSEI then
call Sasuke__ChibakuTenseiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Sasuke_BIJU_SUSANOO then
call Sasuke__BijuSusanooCast()
elseif i==0x41305257 then
call UnitRemoveAbility(GetTriggerUnit(),0x41305257)
elseif i==Sasuke_BIJU_SUSANOO_INDRA then
call Sasuke__IndraNoYaCast(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Sasuke_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger order=CreateTrigger()
local trigger attack=CreateTrigger()
local trigger susanooattack=CreateTrigger()
set Sasuke__katanadmg=CreateTrigger()
set Sasuke__ribudmg=CreateTrigger()
set Sasuke__grReg=CreateGroup()
set Sasuke__grKatana=CreateGroup()
call DisableTrigger(Sasuke__katanadmg)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(order,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(susanooattack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x4130355A,false)
call SetPlayerAbilityAvailable(Player(i),0x41304559,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Sasuke__SpellsConditions))
call TriggerAddAction(spells,function Sasuke__SpellsActions)
call TriggerAddCondition(order,Condition(function Sasuke__OrderConditions))
call TriggerAddAction(order,function Sasuke__OrderActions)
call TriggerAddCondition(attack,Condition(function Sasuke__AttackConditions))
call TriggerAddAction(attack,function Sasuke__AttackActions)
call TriggerAddCondition(Sasuke__katanadmg,Condition(function Sasuke__KatanaDamageConditions))
call TriggerAddAction(Sasuke__katanadmg,function Sasuke__KatanaDamageActions)
call TriggerAddCondition(Sasuke__ribudmg,Condition(function Sasuke__RibuDamageConditions))
call TriggerAddAction(Sasuke__ribudmg,function Sasuke__RibuDamageActions)
call TriggerAddCondition(susanooattack,Condition(function Sasuke__SusanooAttackConditions))
call TriggerAddAction(susanooattack,function Sasuke__SusanooAttackActions)
set order=null
set spells=null
set attack=null
set susanooattack=null
endfunction
function cj_anonym__721 takes nothing returns nothing
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Shikamaru__p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303237 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call DestroyTimer(GetExpiredTimer())
set g=null
set tg=null
endfunction
function cj_anonym__720 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local integer lvl_kibakufuda=GetUnitAbilityLevel(Shikamaru__c,Shikamaru_KIBAKUFUDA)
local group gr=LoadGroupHandle(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real timeRemove=LoadReal(HH,h,4)
local real dmg=200.*Shikamaru_KibakufudaNumberCur
local real facing=0.
local group g=CreateGroup()
local unit tg
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
call PauseUnit(tg,false)
call GroupRemoveUnit(gr,tg)
endloop
call DestroyGroup(gr)
if Shikamaru_KibakufudaNumberCur>0 then
set g=CreateGroup()
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Shikamaru__p)then
call UnitDamageTarget(Shikamaru__c,tg,GetTaijutsuDamage(dmg,Shikamaru__c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(g,tg)
endloop
call GroupEnumUnitsOfPlayer(g,Shikamaru__p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitInGroup(tg,Shikamaru_KibakufudaGroup)then
call KillUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("NewDirtEXNofire.mdx",x,y))
else
call DestroyEffect(AddSpecialEffect("IceSparks.mdx",x,y))
endif
loop
exitwhen facing==360.
call DestroyEffect(AddSpecialEffect("Boom.mdx",x+150.*Cos((facing+36.)*.017),y+150.*Sin((facing+36.)*.017)))
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x+150.*Cos(facing*.017),y+150.*Sin(facing*.017)))
set facing=facing+72.
endloop
endif
call TimerStart(CreateTimer(),timeRemove,false,function cj_anonym__721)
call UnitRemoveAbility(Shikamaru__c,0x41303254)
call SetPlayerAbilityAvailable(Shikamaru__p,Shikamaru_ULT,true)
call RemoveUnit(Shikamaru__trap)
call RemoveRect(Shikamaru__UltRect)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set tg=null
set g=null
set gr=null
set t=null
endfunction
function cj_anonym__719 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local timer t1=CreateTimer()
local integer h1=GetHandleId(t1)
local group gr=LoadGroupHandle(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real radius=LoadReal(HH,h,3)
local real timeStun=LoadReal(HH,h,4)
local real timeRemove=LoadReal(HH,h,5)
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Shikamaru__p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303237 then
call SetUnitTimeScale(tg,0.)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call SaveAgentHandle(HH,h1,0,gr)
call SaveReal(HH,h1,1,x)
call SaveReal(HH,h1,2,y)
call SaveReal(HH,h1,3,radius)
call SaveReal(HH,h1,4,timeRemove)
call TimerStart(t1,timeStun,false,function cj_anonym__720)
call FlushChildHashtable(HH,h)
call DestroyTimer(t)
set g=null
set tg=null
set t=null
set t1=null
endfunction
function Shikamaru__UltActivate takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=0
local group g=CreateGroup()
local group gr=CreateGroup()
local real x=GetWidgetX(Shikamaru__trap)
local real y=GetWidgetY(Shikamaru__trap)
local real x1
local real y1
local real x2
local real y2
local real a
local real f=0.
local real radius=400.
local real timeStun=2.
local real timeAnim=.33
local real timeRemove=timeStun-timeAnim
local unit tg
call Sound("Shikamaru Kageyose.mp3")
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Shikamaru__p)then
call GroupAddUnit(gr,tg)
call PauseUnit(tg,true)
call SetUnitPathing(tg,false)
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
loop
exitwhen i==4
set x2=x1+80.*Cos(f*.017)
set y2=y1+80.*Sin(f*.017)
set a=57.2958279087*Atan2(y1-(y1+80.*Sin(f*.017)),x1-(x1+80.*Cos(f*.017)))
call CreateUnit(Shikamaru__p,0x68303237,x2,y2,a)
set f=f+90.
set i=i+1
endloop
set i=0
call SetUnitPathing(tg,true)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call SaveAgentHandle(HH,h,0,gr)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveReal(HH,h,3,radius)
call SaveReal(HH,h,4,timeStun)
call SaveReal(HH,h,5,timeRemove)
call TimerStart(t,timeAnim,false,function cj_anonym__719)
set tg=null
set gr=null
set g=null
set t=null
endfunction
function Shikamaru__UltCast takes real x1,real y1 returns nothing
local real radius=400.
local real offset=radius/2.
set Shikamaru_KibakufudaNumberMax=10
set Shikamaru__trap=CreateUnit(Shikamaru__p,0x68303047,x1,y1,GetRandomReal(0.,360.))
set Shikamaru__UltRect=Rect(x1-offset,y1-offset,x1+offset,y1+offset)
call Sound("Ping.mp3")
call IssueImmediateOrder(Shikamaru__trap,"windwalk")
call SetPlayerAbilityAvailable(Shikamaru__p,Shikamaru_ULT,false)
call UnitAddAbility(Shikamaru__c,0x41303254)
endfunction
function Shikamaru__IsUltStaying takes real x,real y returns boolean
local boolean log=false
if GetWidgetLife(Shikamaru__trap)>.405 and GetRectMinX(Shikamaru__UltRect)<=x and x<=GetRectMaxX(Shikamaru__UltRect)and GetRectMinY(Shikamaru__UltRect)<=y and y<=GetRectMaxY(Shikamaru__UltRect)then
set log=true
endif
return log
endfunction
function Shikamaru__KibakufudaExplosion takes unit d,real x,real y returns nothing
local real dmg=200.
local real radius=300.
local group g=CreateGroup()
local unit tg
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("NewDirtEXNofire.mdx",x,y))
else
call DestroyEffect(AddSpecialEffect("IceSparks.mdx",x,y))
endif
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",x,y))
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Shikamaru__p)then
call UnitDamageTarget(Shikamaru__c,tg,GetTaijutsuDamage(dmg,Shikamaru__c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call KnockBackUnitEf(tg,150.,.15,57.2958279087*Atan2(GetWidgetY(tg)-y,GetWidgetX(tg)-x),.025,2,false)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call RemoveUnit(d)
set tg=null
set g=null
endfunction
function cj_anonym__722 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local unit tg
local boolean log=false
call GroupEnumUnitsInRange(g,x,y,150.,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitNeedTaijutsu(tg,Shikamaru__p)then
set log=true
endif
call GroupRemoveUnit(g,tg)
endloop
if log or GetWidgetLife(d)<.405 then
call Shikamaru__KibakufudaExplosion(d,x,y)
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set d=null
set t=null
endfunction
function Shikamaru__KibakufudaCast takes real x1,real y1 returns nothing
local timer t
local integer h
local real period=.1
local boolean log_used=false
local boolean log_exploison=false
local unit d
if not Shikamaru__IsUltStaying(x1,y1)then
set log_used=true
set log_exploison=true
else
if Shikamaru_KibakufudaNumberMax-Shikamaru_KibakufudaNumberCur>0 then
set log_used=true
set log_exploison=false
else
call DisplayTimedTextToPlayer(Shikamaru__p,0.,0.,4.,"|cFFFFCC00У вас нет взрывных печатей.|r")
endif
endif
if log_used then
call Sound("Ping.mp3")
set d=CreateUnit(Shikamaru__p,0x68303238,x1,y1,GetRandomReal(0.,360.))
call IssueImmediateOrder(d,"windwalk")
call SetUnitTimeScale(d,0.)
if log_exploison then
set t=CreateTimer()
set h=GetHandleId(t)
call SaveAgentHandle(HH,h,0,d)
call SaveAgentHandle(HH,h,1,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__722)
else
set Shikamaru_KibakufudaNumberCur=Shikamaru_KibakufudaNumberCur+1
call GroupAddUnit(Shikamaru_KibakufudaGroup,d)
call UnitRemoveAbility(Shikamaru__c,Shikamaru_KIBAKUFUDA)
call UnitAddAbility(Shikamaru__c,Shikamaru_KIBAKUFUDA)
call DisplayTimedTextToPlayer(Shikamaru__p,0.,0.,4.,"Осталось взрывных печатей: |cFFFFCC00"+I2S(Shikamaru_KibakufudaNumberMax-Shikamaru_KibakufudaNumberCur)+"|r")
endif
endif
set d=null
set t=null
endfunction
function Shikamaru__HikaridamaBlind takes real x1,real y1 returns nothing
local group g=CreateGroup()
local real radius=300.
local real time=6.
local unit tg
call UnitTempSpell(Shikamaru__c,0x4131304A,0x42303247,time,0,false)
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Shikamaru__p)then
set bj_lastCreatedUnit=CreateUnit(Shikamaru__p,0x6E303042,GetWidgetX(tg),GetWidgetY(tg),GetUnitFacing(tg)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313050)
call IssueTargetOrder(bj_lastCreatedUnit,"curse",tg)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set tg=null
set g=null
endfunction
function cj_anonym__723 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if distance>offset then
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SetUnitFlyHeight(d,(distance/offset),0.)
else
call Shikamaru__HikaridamaBlind(x1,y1)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Shikamaru__HikaridamaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Shikamaru__c)
local real y=GetWidgetY(Shikamaru__c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real offset=30.
call SaveAgentHandle(HH,h,0,CreateUnit(Shikamaru__p,0x68303551,x,y,a))
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,offset)
call TimerStart(t,MainPeriod,true,function cj_anonym__723)
set t=null
endfunction
function Shikamaru__OrderConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),0x41303036)>0
endfunction
function Shikamaru__OrderActions takes nothing returns nothing
local real x=GetWidgetX(Shikamaru__c)
local real y=GetWidgetY(Shikamaru__c)
local real x1=GetOrderPointX()
local real y1=GetOrderPointY()
local real x2
local real y2
local real dis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real a=57.2958279087*Atan2(y1-y,x1-x)
local real f
local unit tg
local group g=CreateGroup()
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41304A59)>0 then
if x>GetWidgetX(tg)then
set f=(a+90.)*.017
elseif x<GetWidgetX(tg)then
set f=(a-90.)*.017
endif
set x2=x1+dis*Cos(f)
set y2=y1+dis*Sin(f)
call IssuePointOrder(tg,"move",x2,y2)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=null
set tg=null
endfunction
function cj_anonym__724 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,3)
local force f
local real x=GetWidgetX(Shikamaru__c)
local real y=GetWidgetY(Shikamaru__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=57.2958279087*Atan2(y1-y,x1-x)
if GetUnitAbilityLevel(Shikamaru__c,0x41303036)>0 and GetUnitAbilityLevel(tu,0x41304A59)>0 and GetWidgetLife(tu)>.405 then
if not IsUnitIllusion(tu)and IsUnitHeroOnly(tu)or IsUnitHeroRikudoForm(tu)then
if GetLocalPlayer()==GetOwningPlayer(tu)then
call ClearSelection()
endif
endif
else
set f=LoadForceHandle(HH,h,2)
if IsPlayerInForce(GetLocalPlayer(),f)then
call EnableUserControl(true)
endif
call ForceClear(f)
call DestroyForce(f)
if GetLocalPlayer()==GetOwningPlayer(tu)then
call ClearSelection()
call SelectUnit(tu,true)
endif
call UnitRemoveAbility(tu,0x41304A59)
call UnitRemoveAbility(tu,0x42303258)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call PauseUnit(tu,false)
call IssueImmediateOrder(tu,"stop")
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set f=null
set tu=null
set t=null
endfunction
function Shikamaru__KageManeStart takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local force f=CreateForce()
local real period=.1
local real dmg=50.*period
call Sound("Shikamaru Kage Mane Act.mp3")
call PauseUnit(tu,true)
call UnitAddAbility(tu,0x41304A59)
call ForceAddPlayer(f,GetOwningPlayer(tu))
if IsPlayerInForce(GetLocalPlayer(),f)then
call EnableUserControl(false)
endif
call SaveAgentHandle(HH,h,0,tu)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Abilities\\Spells\\Other\\GeneralAuraTarget\\GeneralAuraTarget.mdl",tu,"overhead"))
call SaveAgentHandle(HH,h,2,f)
call SaveReal(HH,h,3,dmg)
call TimerStart(t,period,true,function cj_anonym__724)
set f=null
set t=null
endfunction
function cj_anonym__725 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real offset=LoadReal(HH,h,2)
local real range=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local real time=LoadReal(HH,h,5)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
local real a=57.2958279087*Atan2(y1-y,x1-x)
if GetUnitAbilityLevel(Shikamaru__c,0x41303036)>0 and GetWidgetLife(tu)>.405 and time>0.and range>0.and distance>offset and not IsUnitInvulnerable(tu)and not HasUnitInvisible(tu)and not IsUnitType(tu,UNIT_TYPE_MAGIC_IMMUNE)then
call CreateUnit(Shikamaru__p,0x68303143,x,y,GetUnitFacing(d))
call SetUnitPosition(d,x+offset*Cos(a*.017),y+offset*Sin(a*.017))
call SetUnitFacing(d,a)
call SaveReal(HH,h,3,range-offset)
call SaveReal(HH,h,5,time-period)
else
if GetUnitAbilityLevel(Shikamaru__c,0x41303036)>0 and GetWidgetLife(tu)>.405 and range>0.and distance<=offset and not IsUnitInvulnerable(tu)and not HasUnitInvisible(tu)and not IsUnitType(tu,UNIT_TYPE_MAGIC_IMMUNE)then
call Shikamaru__KageManeStart(tu)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set tu=null
set t=null
endfunction
function Shikamaru__KageManeSave takes unit tu,real time,real speed,real range returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Shikamaru__c)
local real y=GetWidgetY(Shikamaru__c)
local real period=.025
local real offset=speed*period
call SaveAgentHandle(HH,h,0,CreateUnit(Shikamaru__p,0x68303143,x,y,0.))
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,offset)
call SaveReal(HH,h,3,range)
call SaveReal(HH,h,4,period)
call SaveReal(HH,h,5,time-period)
call TimerStart(t,period,true,function cj_anonym__725)
set t=null
endfunction
function cj_anonym__727 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local real time=LoadReal(HH,h,1)
local real manacostOne=LoadReal(HH,h,2)
local real manacostTwo=LoadReal(HH,h,3)
local real period=LoadReal(HH,h,4)
local integer count=0
local unit tg
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41304A59)>0 then
set count=count+1
endif
call GroupRemoveUnit(g,tg)
endloop
if count>0 then
call SetUnitState(Shikamaru__c,UNIT_STATE_MANA,GetUnitState(Shikamaru__c,UNIT_STATE_MANA)-(GetUnitState(Shikamaru__c,UNIT_STATE_MAX_MANA)*manacostOne)*count)
endif
if GetUnitCurrentOrder(Shikamaru__c)==OrderId("whirlwind")then
call SetUnitState(Shikamaru__c,UNIT_STATE_MANA,GetUnitState(Shikamaru__c,UNIT_STATE_MANA)-manacostTwo)
endif
if GetWidgetLife(Shikamaru__c)>.405 and GetUnitState(Shikamaru__c,UNIT_STATE_MANA)>0.and count>0 and time>0.then
call SaveReal(HH,h,1,time-period)
else
if GetUnitCurrentOrder(Shikamaru__c)==OrderId("whirlwind")then
call IssueImmediateOrder(Shikamaru__c,"stop")
endif
call UnitRemoveAbility(Shikamaru__c,0x41303036)
call UnitRemoveAbility(Shikamaru__c,0x42303737)
call DisableTrigger(Shikamaru__order)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set g=null
set t=null
endfunction
function cj_anonym__726 takes nothing returns nothing
local timer t
local integer h
local integer count=0
local real period=.1
local real time=5.-period
local real manacostOne=1.5*period*.01
local real manacostTwo=30.*period
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(g,Shikamaru__p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303143 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=CreateGroup()
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41304A59)>0 then
set count=count+1
call PauseUnit(tg,false)
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if count>0 then
set t=CreateTimer()
set h=GetHandleId(t)
call EnableTrigger(Shikamaru__order)
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveReal(HH,h,1,time)
call SaveReal(HH,h,2,manacostOne)
call SaveReal(HH,h,3,manacostTwo)
call SaveReal(HH,h,4,period)
call TimerStart(t,period,true,function cj_anonym__727)
else
call UnitRemoveAbility(Shikamaru__c,0x41303036)
call UnitRemoveAbility(Shikamaru__c,0x42303737)
endif
call PauseUnit(Shikamaru__c,false)
call DestroyTimer(GetExpiredTimer())
set tg=null
set g=null
set t=null
endfunction
function Shikamaru__KageManeCast takes real x1,real y1 returns nothing
local real radius=400.
local real speed=400.
local real range=1500.
local real time=3.
local boolean log=false
local group g=CreateGroup()
local unit tg
if GetUnitAbilityLevel(Shikamaru__c,0x42303247)>0 then
set radius=radius*2.
set speed=speed*2.
set range=range*2.
endif
call UnitAddAbility(Shikamaru__c,0x41303036)
call Sound("Shikamaru Kage Mane no Jutsu.mp3")
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Shikamaru__p)and not HasUnitInvisible(tg)and IsUnitHero(tg)then
call Shikamaru__KageManeSave(tg,time,speed,range)
if not log then
set log=true
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
if log then
call PauseUnit(Shikamaru__c,true)
call SetUnitAnimationWithRarity(Shikamaru__c,"Spell Channel",RARITY_FREQUENT)
call TimerStart(CreateTimer(),time,false,function cj_anonym__726)
else
call UnitRemoveAbility(Shikamaru__c,0x41303036)
call UnitRemoveAbility(Shikamaru__c,0x42303737)
endif
set g=null
set tg=null
endfunction
function Shikamaru__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Shikamaru_KAGE_MANE or i==Shikamaru_HIKARIDAMA or i==Shikamaru_KIBAKUFUDA or i==Shikamaru_ULT or i==0x41303254
endfunction
function Shikamaru__SpellsActions takes nothing returns nothing
local integer id
if Shikamaru__c==null then
set Shikamaru__c=GetTriggerUnit()
set Shikamaru__p=GetOwningPlayer(Shikamaru__c)
endif
set id=GetSpellAbilityId()
if id==Shikamaru_KAGE_MANE then
call Shikamaru__KageManeCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Shikamaru_HIKARIDAMA then
call Shikamaru__HikaridamaCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Shikamaru_KIBAKUFUDA then
call Shikamaru__KibakufudaCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==Shikamaru_ULT then
call Shikamaru__UltCast(GetSpellTargetX(),GetSpellTargetY())
elseif id==0x41303254 then
call Shikamaru__UltActivate()
endif
endfunction
function Shikamaru_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Shikamaru_KibakufudaGroup=CreateGroup()
set Shikamaru__order=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(Shikamaru__order,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Shikamaru__SpellsConditions))
call TriggerAddAction(spells,function Shikamaru__SpellsActions)
call TriggerAddCondition(Shikamaru__order,Condition(function Shikamaru__OrderConditions))
call TriggerAddAction(Shikamaru__order,function Shikamaru__OrderActions)
set spells=null
endfunction
function cj_anonym__728 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if GetWidgetLife(d)>.405 and time>0.then
call SaveReal(HH,h,2,time-period)
else
call GetMorphOver(Suigetsu__c,d,Suigetsu__p)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Suigetsu__UltCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Suigetsu__c)
local real y=GetWidgetY(Suigetsu__c)
local real a=0.
local real time=20.
local real period=.1
local unit d
call Sound("Akatsuki Jutsu.mp3")
loop
exitwhen a>360.
set d=CreateUnit(Suigetsu__p,0x6E303042,x+350.*Cos(a*.017),y+350.*Sin(a*.017),0.)
call SetUnitScale(d,1.6,1.6,1.6)
call UnitApplyTimedLife(d,0x42544C46,1.)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",d,"origin"))
call KnockBackUnitEf(d,300.,.3,57.2958279087*Atan2(y-GetWidgetY(d),x-GetWidgetX(d)),.025,0,false)
set a=a+30.
endloop
call SaveAgentHandle(HH,h,0,GetMorph(Suigetsu__c,Suigetsu__p,morph_rawcode[1],x,y,GetUnitFacing(Suigetsu__c),750.,0.))
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__728)
set d=null
set t=null
endfunction
function Suigetsu__GetDamageConditions takes nothing returns boolean
return not IsUnitIllusion(GetTriggerUnit())and IsUnitInGroup(GetEventDamageSource(),Suigetsu__grSuikaCheck)
endfunction
function cj_anonym__729 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real x=GetWidgetX(Suigetsu__c)
local real y=GetWidgetY(Suigetsu__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetUnitAbilityLevel(Suigetsu__c,0x42303434)>0 and GetWidgetLife(Suigetsu__c)>.405 and GetWidgetLife(tu)>.405 and distance<=150.then
call SetUnitMoveSpeed(Suigetsu__c,0.)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",Suigetsu__c,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",tu,"chest"))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",GetWidgetX(Suigetsu__c),GetWidgetY(Suigetsu__c)))
call SetUnitMoveSpeed(Suigetsu__c,GetUnitDefaultMoveSpeed(Suigetsu__c))
call UnitRemoveAbility(tu,0x42303158)
call GroupRemoveUnit(Suigetsu__grSuikaCheck,tu)
if GetUnitAbilityLevel(Suigetsu__c,0x42303434)>0 then
call EnableTrigger(Suigetsu__attack)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Suigetsu__GetDamageActions takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local unit tu=GetEventDamageSource()
local real period=.1
local real x=GetWidgetX(Suigetsu__c)
local real y=GetWidgetY(Suigetsu__c)
call DisableTrigger(Suigetsu__getdmg)
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y))
set bj_lastCreatedUnit=CreateUnit(Suigetsu__p,0x6E303042,GetWidgetX(tu),GetWidgetY(tu),GetUnitFacing(tu)+180.)
call UnitAddAbility(bj_lastCreatedUnit,0x41313634)
call IssueTargetOrder(bj_lastCreatedUnit,"entanglingroots",tu)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.)
call SetUnitMoveSpeed(Suigetsu__c,0.)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,period)
call TimerStart(t,period,true,function cj_anonym__729)
set tu=null
set t=null
endfunction
function Suigetsu__AttackConditions takes nothing returns boolean
local unit attacked=GetTriggerUnit()
local unit attacker=GetAttacker()
local real x=GetWidgetX(attacked)
local real y=GetWidgetY(attacked)
local real x1=GetWidgetX(attacker)
local real y1=GetWidgetY(attacker)
local boolean log=false
if not IsUnitInGroup(attacked,Suigetsu__grSuikaCheck)and SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))<=128.and GetRandomInt(1,4)==1 and GetUnitAbilityLevel(attacked,0x42303434)>0 and IsUnitEnemy(attacker,GetOwningPlayer(attacked))and not IsUnitType(attacker,UNIT_TYPE_MAGIC_IMMUNE)then
set log=true
endif
set attacked=null
set attacker=null
return log
endfunction
function Suigetsu__AttackActions takes nothing returns nothing
call GroupAddUnit(Suigetsu__grSuikaCheck,GetAttacker())
call DisableTrigger(Suigetsu__attack)
call EnableTrigger(Suigetsu__getdmg)
endfunction
function cj_anonym__730 takes nothing returns nothing
if GetUnitAbilityLevel(Suigetsu__c,0x42303434)==0 then
call UnitRemoveAbility(Suigetsu__c,0x4131324C)
call DisableTrigger(Suigetsu__attack)
call DisableTrigger(Suigetsu__getdmg)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Suigetsu__SuikaCast takes nothing returns nothing
local real period=.1
call Sound("Akatsuki Jutsu.mp3")
call UnitAddAbility(Suigetsu__c,0x4131324C)
call EnableTrigger(Suigetsu__attack)
call TimerStart(CreateTimer(),period,true,function cj_anonym__730)
endfunction
function cj_anonym__731 takes nothing returns nothing
if GetUnitAbilityLevel(Suigetsu__c,0x4230324A)==0 then
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 1",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 2",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 3",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 4",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 5",false)
call AddUnitAnimationProperties(Suigetsu__c,"Death alternate",false)
call AddUnitAnimationProperties(Suigetsu__c,"Spell five alternate",false)
call AddUnitAnimationProperties(Suigetsu__c,"Spell one alternate",false)
call AddUnitAnimationProperties(Suigetsu__c,"Spell three alternate",false)
call AddUnitAnimationProperties(Suigetsu__c,"Spell two alternate",false)
call AddUnitAnimationProperties(Suigetsu__c,"Stand alternate",false)
call AddUnitAnimationProperties(Suigetsu__c,"Stand alternate 2",false)
call AddUnitAnimationProperties(Suigetsu__c,"Stand Ready alternate",false)
call AddUnitAnimationProperties(Suigetsu__c,"Walk alternate",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 1",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 2",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 3",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 4",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 5",true)
call AddUnitAnimationProperties(Suigetsu__c,"Death",true)
call AddUnitAnimationProperties(Suigetsu__c,"Spell five",true)
call AddUnitAnimationProperties(Suigetsu__c,"Spell one",true)
call AddUnitAnimationProperties(Suigetsu__c,"Spell three",true)
call AddUnitAnimationProperties(Suigetsu__c,"Spell two",true)
call AddUnitAnimationProperties(Suigetsu__c,"Stand",true)
call AddUnitAnimationProperties(Suigetsu__c,"Stand Ready",true)
call AddUnitAnimationProperties(Suigetsu__c,"Walk",true)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Suigetsu__GosuiwanCast takes nothing returns nothing
local real period=.1
call Sound("Akatsuki Jutsu.mp3")
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 1",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 2",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 3",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 4",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack alternate 5",true)
call AddUnitAnimationProperties(Suigetsu__c,"Death alternate",true)
call AddUnitAnimationProperties(Suigetsu__c,"Spell five alternate",true)
call AddUnitAnimationProperties(Suigetsu__c,"Spell one alternate",true)
call AddUnitAnimationProperties(Suigetsu__c,"Spell three alternate",true)
call AddUnitAnimationProperties(Suigetsu__c,"Spell two alternate",true)
call AddUnitAnimationProperties(Suigetsu__c,"Stand alternate",true)
call AddUnitAnimationProperties(Suigetsu__c,"Stand alternate 2",true)
call AddUnitAnimationProperties(Suigetsu__c,"Stand Ready alternate",true)
call AddUnitAnimationProperties(Suigetsu__c,"Walk alternate",true)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 1",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 2",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 3",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 4",false)
call AddUnitAnimationProperties(Suigetsu__c,"Attack - 5",false)
call AddUnitAnimationProperties(Suigetsu__c,"Death",false)
call AddUnitAnimationProperties(Suigetsu__c,"Spell five",false)
call AddUnitAnimationProperties(Suigetsu__c,"Spell one",false)
call AddUnitAnimationProperties(Suigetsu__c,"Spell three",false)
call AddUnitAnimationProperties(Suigetsu__c,"Spell two",false)
call AddUnitAnimationProperties(Suigetsu__c,"Stand",false)
call AddUnitAnimationProperties(Suigetsu__c,"Stand Ready",false)
call AddUnitAnimationProperties(Suigetsu__c,"Walk",false)
call TimerStart(CreateTimer(),period,true,function cj_anonym__731)
endfunction
function cj_anonym__732 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d1=LoadUnitHandle(HH,h,0)
local unit d2=LoadUnitHandle(HH,h,1)
local unit tu=LoadUnitHandle(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
local real timeStun=LoadReal(HH,h,5)
local real x=GetWidgetX(d1)
local real y=GetWidgetY(d1)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
if SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))>offset and GetWidgetLife(tu)>.405 then
call SetUnitPosition(d1,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
set x=GetWidgetX(d2)
set y=GetWidgetY(d2)
set a=bj_RADTODEG*Atan2(y1-y,x1-x)
call SetUnitPosition(d2,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
else
if GetWidgetLife(tu)>.405 then
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x1,y1))
call UnitDamageTarget(Suigetsu__c,tu,GetNinjutsuDamage(dmg,Suigetsu__c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if GetWidgetLife(tu)>.405 then
call GetStun(tu,timeStun)
endif
endif
call RemoveUnit(d1)
call RemoveUnit(d2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set d1=null
set d2=null
set t=null
endfunction
function Suigetsu__MizudeppoCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Suigetsu__c)
local real y=GetWidgetY(Suigetsu__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real adddmg=2.*GetHeroAgi(Suigetsu__c,false)
local real dmg=100.+adddmg
local real speed=1200.
local real offset=speed*MainPeriod
local real timeStun=2.
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
call Sound("Akatsuki Jutsu.mp3")
call SaveAgentHandle(HH,h,0,CreateUnit(Suigetsu__p,0x6830344E,x+offset*Cos((a+90.)*bj_DEGTORAD),y+offset*Sin((a+90.)*bj_DEGTORAD),a))
call SaveAgentHandle(HH,h,1,CreateUnit(Suigetsu__p,0x6830344E,x+offset*Cos((a-90.)*bj_DEGTORAD),y+offset*Sin((a-90.)*bj_DEGTORAD),a))
call SaveAgentHandle(HH,h,2,tu)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,dmg)
call SaveReal(HH,h,5,timeStun)
call TimerStart(t,MainPeriod,true,function cj_anonym__732)
set t=null
endfunction
function Suigetsu__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Suigetsu_MIZUDEPPO or i==Suigetsu_SUIKA or i==Suigetsu_GOSUIWAN or i==Suigetsu_ULT
endfunction
function Suigetsu__SpellsActions takes nothing returns nothing
local integer i=GetSpellAbilityId()
if Suigetsu__c==null then
set Suigetsu__c=GetTriggerUnit()
set Suigetsu__p=GetOwningPlayer(Suigetsu__c)
call TriggerRegisterUnitEvent(Suigetsu__getdmg,Suigetsu__c,EVENT_UNIT_DAMAGED)
endif
if i==Suigetsu_MIZUDEPPO then
call Suigetsu__MizudeppoCast(GetSpellTargetUnit())
elseif i==Suigetsu_GOSUIWAN then
if GetUnitAbilityLevel(Suigetsu__c,0x4230324A)==0 then
call Suigetsu__GosuiwanCast()
else
call UnitRemoveAbility(Suigetsu__c,0x4230324A)
endif
elseif i==Suigetsu_SUIKA then
call Suigetsu__SuikaCast()
elseif i==Suigetsu_ULT then
call Suigetsu__UltCast()
endif
endfunction
function Suigetsu_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Suigetsu__attack=CreateTrigger()
set Suigetsu__getdmg=CreateTrigger()
set Suigetsu__grSuikaCheck=CreateGroup()
call DisableTrigger(Suigetsu__attack)
call DisableTrigger(Suigetsu__getdmg)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(Suigetsu__attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x4131324C,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Suigetsu__SpellsConditions))
call TriggerAddAction(spells,function Suigetsu__SpellsActions)
call TriggerAddCondition(Suigetsu__attack,Condition(function Suigetsu__AttackConditions))
call TriggerAddAction(Suigetsu__attack,function Suigetsu__AttackActions)
call TriggerAddCondition(Suigetsu__getdmg,Condition(function Suigetsu__GetDamageConditions))
call TriggerAddAction(Suigetsu__getdmg,function Suigetsu__GetDamageActions)
set spells=null
endfunction
function Tobirama__SuitonClear takes nothing returns nothing
local group gr=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(gr,Tobirama__p,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303134 then
call KillUnit(tg)
endif
call GroupRemoveUnit(gr,tg)
endloop
call DestroyGroup(gr)
set tg=null
set gr=null
endfunction
function cj_anonym__733 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(HH,h,4)
local real mana=LoadReal(HH,h,5)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real f=GetUnitFacing(u)
local real height=GetUnitFlyHeight(u)
set bj_lastLoadedUnit=LoadUnitHandle(HH,h,0)
call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)-mana)
if GetUnitAbilityLevel(Tobirama__c,0x42303152)>0 and GetWidgetLife(u)>.405 and GetWidgetLife(bj_lastLoadedUnit)>.405 and GetUnitState(u,UNIT_STATE_MANA)>0.then
set bj_lastLoadedUnit=LoadUnitHandle(HH,h,0)
call SetUnitPosition(bj_lastLoadedUnit,x,y)
call SetUnitFlyHeight(bj_lastLoadedUnit,height,0.)
set bj_lastLoadedUnit=LoadUnitHandle(HH,h,1)
call SetUnitPosition(bj_lastLoadedUnit,x+75.*Cos(f*bj_DEGTORAD),y+75.*Sin(f*bj_DEGTORAD))
call SetUnitFacing(bj_lastLoadedUnit,f)
call SetUnitFlyHeight(bj_lastLoadedUnit,height,0.)
set bj_lastLoadedUnit=LoadUnitHandle(HH,h,2)
call SetUnitPosition(bj_lastLoadedUnit,x+75.*Cos((f+120.)*bj_DEGTORAD),y+75.*Sin((f+120.)*bj_DEGTORAD))
call SetUnitFacing(bj_lastLoadedUnit,f+120.)
call SetUnitFlyHeight(bj_lastLoadedUnit,height,0.)
set bj_lastLoadedUnit=LoadUnitHandle(HH,h,3)
call SetUnitPosition(bj_lastLoadedUnit,x+75.*Cos((f+240.)*bj_DEGTORAD),y+75.*Sin((f+240.)*bj_DEGTORAD))
call SetUnitFacing(bj_lastLoadedUnit,f+240.)
call SetUnitFlyHeight(bj_lastLoadedUnit,height,0.)
else
call RemoveUnit(bj_lastLoadedUnit)
call RemoveUnit(LoadUnitHandle(HH,h,1))
call RemoveUnit(LoadUnitHandle(HH,h,2))
call RemoveUnit(LoadUnitHandle(HH,h,3))
if u==Tobirama__c then
call Tobirama__SuitonClear()
endif
call UnitRemoveAbility(u,0x41305239)
call UnitRemoveAbility(u,0x4230334E)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set u=null
set t=null
endfunction
function Tobirama__SuitonCreateWater takes unit u returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real f=GetUnitFacing(u)
local unit d=CreateUnit(Tobirama__p,0x68303134,x,y,0.)
call SetUnitVertexColor(d,255,255,255,64)
call SaveAgentHandle(HH,h,0,d)
set d=CreateUnit(Tobirama__p,0x68303458,x+75.*Cos(f*bj_DEGTORAD),y+75.*Sin(f*bj_DEGTORAD),f)
call SetUnitVertexColor(d,255,255,255,64)
call SaveAgentHandle(HH,h,1,d)
set d=CreateUnit(Tobirama__p,0x68303458,x+75.*Cos((f+120.)*bj_DEGTORAD),y+75.*Sin((f+120.)*bj_DEGTORAD),f+120.)
call SetUnitVertexColor(d,255,255,255,64)
call SaveAgentHandle(HH,h,2,d)
set d=CreateUnit(Tobirama__p,0x68303458,x+75.*Cos((f+240.)*bj_DEGTORAD),y+75.*Sin((f+240.)*bj_DEGTORAD),f+240.)
call SetUnitVertexColor(d,255,255,255,64)
call SaveAgentHandle(HH,h,3,d)
call SaveAgentHandle(HH,h,4,u)
call SaveReal(HH,h,5,6.*.025)
call UnitAddAbility(u,0x41305239)
if u!=Tobirama__c then
call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)-60.)
endif
call TimerStart(t,MainPeriod,true,function cj_anonym__733)
set d=null
set t=null
endfunction
function Tobirama__SuitonCastForBunshin takes nothing returns nothing
local group gr=CreateGroup()
local unit tg
call GroupEnumUnitsOfPlayer(gr,Tobirama__p,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
if GetUnitTypeId(tg)==0x4F303137 and GetUnitAbilityLevel(tg,0x41305239)==0 and GetUnitState(tg,UNIT_STATE_MANA)>60.then
call Tobirama__SuitonCreateWater(tg)
endif
call GroupRemoveUnit(gr,tg)
endloop
call DestroyGroup(gr)
set tg=null
set gr=null
endfunction
function Tobirama__KageBunshinExplosion takes unit u returns nothing
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real dmg=150.
local real addDmg=.1
local real radius=250.
local real knockback=300.
local group gr=CreateGroup()
local unit tg
call DestroyEffect(AddSpecialEffect("Boom.mdx",x,y))
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x,y))
call CreateEffect(x,y,3.,"WaterBlast.mdx",2.)
call GroupEnumUnitsInRange(gr,x,y,radius,null)
loop
set tg=FirstOfGroup(gr)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Tobirama__p)then
call KnockBackUnitEf(tg,knockback,knockback/1000.,bj_RADTODEG*Atan2(GetWidgetY(tg)-y,GetWidgetX(tg)-x),.025,3,false)
call UnitDamageTarget(Tobirama__c,tg,GetTaijutsuDamage(dmg+GetUnitState(tg,UNIT_STATE_MAX_LIFE)*addDmg,Tobirama__c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
endif
call GroupRemoveUnit(gr,tg)
endloop
call DestroyGroup(gr)
call RemoveUnit(u)
set gr=null
set tg=null
endfunction
function cj_anonym__734 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
call SetUnitState(d,UNIT_STATE_MANA,GetUnitState(d,UNIT_STATE_MANA)-GetUnitState(d,UNIT_STATE_MAX_MANA)*.005)
if Tobirama__number==0 or GetWidgetLife(Tobirama__c)<.405 or GetUnitAbilityLevel(Tobirama__c,0x41305256)==0 or GetWidgetLife(d)<.405 or GetUnitState(d,UNIT_STATE_MANA)==0.or GetUnitAbilityLevel(d,0x41305256)==0 then
call StartSound(gg_snd_WaterElementalMissile1)
call KillSoundWhenDone(gg_snd_WaterElementalMissile1)
call Tobirama__KageBunshinExplosion(d)
set Tobirama__number=Tobirama__number-1
if Tobirama__number==0 or GetWidgetLife(Tobirama__c)<.405 or GetUnitAbilityLevel(Tobirama__c,0x41305256)==0 then
call UnitRemoveAbility(Tobirama__c,0x41305256)
call SetPlayerAbilityAvailable(Tobirama__p,Tobirama_KAGEBUNSHIN,true)
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Tobirama__KageBunshinCast takes nothing returns nothing
local timer t
local real x=GetWidgetX(Tobirama__c)
local real y=GetWidgetY(Tobirama__c)
local real f=GetUnitFacing(Tobirama__c)
local real period=.1
local integer i=3
set Tobirama__number=i
call Sound("Bunshin Poff.wav")
call SetPlayerAbilityAvailable(Tobirama__p,Tobirama_KAGEBUNSHIN,false)
call UnitAddAbility(Tobirama__c,0x41305256)
call StartSound(gg_snd_WaterElementalMissile1)
call KillSoundWhenDone(gg_snd_WaterElementalMissile1)
loop
exitwhen i==0
set t=CreateTimer()
set bj_lastCreatedUnit=CreateUnit(Tobirama__p,0x4F303137,x,y,f)
call DestroyEffect(AddSpecialEffect("Smoke.mdx",GetWidgetX(bj_lastCreatedUnit),GetWidgetY(bj_lastCreatedUnit)))
call SetHeroXP(bj_lastCreatedUnit,GetHeroXP(Tobirama__c),false)
call SuspendHeroXP(bj_lastCreatedUnit,false)
call SetUnitState(bj_lastCreatedUnit,UNIT_STATE_MANA,GetUnitState(Tobirama__c,UNIT_STATE_MANA))
call SetWidgetLife(bj_lastCreatedUnit,GetWidgetLife(Tobirama__c))
call UnitAddAbility(bj_lastCreatedUnit,0x41305256)
if GetLocalPlayer()==Tobirama__p then
call SetUnitVertexColor(bj_lastCreatedUnit,0,66,255,255)
endif
if GetUnitAbilityLevel(Tobirama__c,0x42303152)>0 then
call Tobirama__SuitonCreateWater(bj_lastCreatedUnit)
endif
call SaveAgentHandle(HH,GetHandleId(t),0,bj_lastCreatedUnit)
call TimerStart(t,period,true,function cj_anonym__734)
set i=i-1
endloop
set t=null
endfunction
function Tobirama__SuishohaDamage takes group gr,real x,real y,real radius,real dmg,real a,real offset returns nothing
local group g=CreateGroup()
local unit tg
local real x1
local real y1
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Tobirama__p)then
set x1=GetWidgetX(tg)
set y1=GetWidgetY(tg)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",x1,y1))
call SetUnitPosition(tg,x1+(offset/2.)*Cos(a*bj_DEGTORAD),y1+(offset/2.)*Sin(a*bj_DEGTORAD))
if not IsUnitInGroup(tg,gr)then
call GroupAddUnit(gr,tg)
call UnitDamageTarget(Tobirama__c,tg,GetNinjutsuDamage(dmg,Tobirama__c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call KillDestructablesStart(x,y,radius/2.)
set tg=null
set g=null
endfunction
function cj_anonym__735 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group gr=LoadGroupHandle(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real distance=LoadReal(HH,h,4)
local real a=LoadReal(HH,h,5)
local real dmg=LoadReal(HH,h,6)
local real radius=LoadReal(HH,h,7)
local real effAngle=LoadReal(HH,h,8)
local real effOffset=LoadReal(HH,h,9)
local integer effNumber=LoadInteger(HH,h,10)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local integer i=0
local integer max=6
if distance>0.then
call Tobirama__SuishohaDamage(gr,x,y,radius,dmg,a,offset)
if effNumber<5 then
call SaveInteger(HH,h,10,effNumber+1)
else
loop
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x+effOffset*Cos((a+effAngle)*bj_DEGTORAD),y+effOffset*Sin((a+effAngle)*bj_DEGTORAD)))
set effOffset=effOffset-50.
set i=i+1
exitwhen i==max
endloop
call SaveInteger(HH,h,10,0)
endif
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call SaveReal(HH,h,4,distance-offset)
else
call DestroyEffect(LoadEffectHandle(HH,h,1))
call RemoveUnit(d)
call GroupClear(gr)
call DestroyGroup(gr)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set gr=null
set d=null
set t=null
endfunction
function Tobirama__TobiramaSuishohaCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Tobirama__c)
local real y=GetWidgetY(Tobirama__c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local real dmg=100.+GetHeroInt(Tobirama__c,true)*1.
local real distance=800.
local real radius=300.
local real effAngle=90.
local real effOffset=radius/2.-25.
local real speed=900.
local real period=.025
local real offset=speed*period
call Sound("Ping.mp3")
set bj_lastCreatedUnit=CreateUnit(Tobirama__p,0x6E303042,x,y,a)
call SetUnitScale(bj_lastCreatedUnit,1.25,1.25,1.25)
call SetUnitFlyHeight(bj_lastCreatedUnit,0.,0.)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("WaterBreath.mdx",bj_lastCreatedUnit,"origin"))
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,distance)
call SaveReal(HH,h,5,a)
call SaveReal(HH,h,6,dmg)
call SaveReal(HH,h,7,radius)
call SaveReal(HH,h,8,effAngle)
call SaveReal(HH,h,9,effOffset)
call SaveInteger(HH,h,10,0)
call TimerStart(t,period,true,function cj_anonym__735)
set t=null
endfunction
function Tobirama__TobiramaSuitonCast takes nothing returns nothing
call Sound("Ping.mp3")
call Tobirama__SuitonCreateWater(Tobirama__c)
call Tobirama__SuitonCastForBunshin()
endfunction
function cj_anonym__736 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real dmg=LoadReal(HH,h,1)
local real mana=LoadReal(HH,h,2)
local leaderboard lb=LoadLeaderboardHandle(HH,h,3)
local unit tu=LoadUnitHandle(HH,h,4)
local real time=LoadReal(HH,h,5)
local integer count=LoadInteger(HH,h,6)
local real x=GetWidgetX(Tobirama__c)
local real y=GetWidgetY(Tobirama__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a
local real dis=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
call SetUnitState(Tobirama__c,UNIT_STATE_MANA,GetUnitState(Tobirama__c,UNIT_STATE_MANA)-mana)
if GetWidgetLife(tu)>.405 and GetUnitState(Tobirama__c,UNIT_STATE_MANA)>0.and GetUnitCurrentOrder(Tobirama__c)==OrderId("chainlightning")and dis<1200.then
set a=57.2958279087*Atan2(y1-y,x1-x)
call SetUnitPosition(tu,x1+25.*Cos(a*.017),y1+25.*Sin(a*.017))
call SetUnitFacing(d,a)
call SetUnitFacing(Tobirama__c,a)
call SetUnitScale(d,dis/2000.,dis/2000.,dis/2000.)
call LeaderboardSetItemValue(lb,LeaderboardGetPlayerIndex(lb,Player(0)),R2I(dis))
if count<4 then
call SaveInteger(HH,h,6,count+1)
else
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x1,y1))
call SaveInteger(HH,h,6,0)
endif
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",tu,"chest"))
if IsTerrainPathable(x1,y1,PATHING_TYPE_FLOATABILITY)then
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl",x1,y1))
else
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x1,y1))
endif
call UnitDamageTarget(Tobirama__c,tu,GetNinjutsuDamage(dmg,Tobirama__c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
if time==1.or time==2.or time==3.or time==4.or time==5.then
call SetUnitAbilityLevel(tu,0x41305242,GetUnitAbilityLevel(tu,0x41305242)+1)
endif
call SaveReal(HH,h,5,time+MainPeriod)
else
call DestroyLeaderboard(lb)
if GetUnitCurrentOrder(Tobirama__c)==OrderId("chainlightning")then
call IssueImmediateOrder(Tobirama__c,"stop")
endif
call RemoveUnit(d)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set lb=null
set tu=null
set d=null
set t=null
endfunction
function Tobirama__TobiramaSuidanhaCast takes unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Tobirama__c)
local real y=GetWidgetY(Tobirama__c)
local real x1=GetWidgetX(tu)
local real y1=GetWidgetY(tu)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
local leaderboard lb=CreateLeaderboard()
call Sound("Ping.mp3")
call LeaderboardSetLabel(lb,"SUITON: SUIDANHA")
call PlayerSetLeaderboard(Tobirama__p,lb)
call LeaderboardAddItem(lb,"DISTANCE:",0,Player(0))
call LeaderboardSetSizeByItemCount(lb,1)
call LeaderboardSetItemValueColor(lb,0,16,98,70,255)
call LeaderboardSetItemLabelColor(lb,0,255,80,0,255)
call LeaderboardDisplay(lb,true)
call UnitTempSpell(tu,0x41305242,0,7.,0,false)
call SaveAgentHandle(HH,h,0,CreateUnit(Tobirama__p,0x68303459,x,y,a))
call SaveReal(HH,h,1,70.*MainPeriod)
call SaveReal(HH,h,2,35.*MainPeriod)
call SaveLeaderboardHandle(HH,h,3,lb)
call SaveAgentHandle(HH,h,4,tu)
call TimerStart(t,MainPeriod,true,function cj_anonym__736)
set lb=null
set t=null
endfunction
function Tobirama__SpellOneCheck takes unit target returns nothing
if IsUnitNeedNinjutsu(target,Tobirama__p)then
call Tobirama__TobiramaSuidanhaCast(target)
else
call IssueImmediateOrder(Tobirama__c,"stop")
call DisplayTextToPlayer(Tobirama__p,0.,0.,"|cFFFFCC00Этот герой неуязвим для Ниндзюцу.|r")
endif
endfunction
function Tobirama__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Tobirama_SUIDANHA or i==Tobirama_SUITON or i==Tobirama_SUISHOHA or i==Tobirama_KAGEBUNSHIN or i==0x41305256
endfunction
function Tobirama__SpellsActions takes nothing returns nothing
local integer i
if Tobirama__c==null then
set Tobirama__c=GetTriggerUnit()
set Tobirama__p=GetOwningPlayer(Tobirama__c)
endif
set i=GetSpellAbilityId()
if i==Tobirama_SUIDANHA then
call Tobirama__SpellOneCheck(GetSpellTargetUnit())
elseif i==Tobirama_SUITON then
if GetUnitAbilityLevel(Tobirama__c,0x42303152)==0 then
call Tobirama__TobiramaSuitonCast()
else
call UnitRemoveAbility(Tobirama__c,0x42303152)
endif
elseif i==Tobirama_SUISHOHA then
call Tobirama__TobiramaSuishohaCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Tobirama_KAGEBUNSHIN then
call Tobirama__KageBunshinCast()
elseif i==0x41305256 then
call UnitRemoveAbility(GetTriggerUnit(),0x41305256)
endif
endfunction
function Tobirama_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call SetPlayerAbilityAvailable(Player(i),0x41305239,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Tobirama__SpellsConditions))
call TriggerAddAction(spells,function Tobirama__SpellsActions)
set spells=null
endfunction
function cj_anonym__737 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real hpReg=LoadReal(HH,h,1)
local real mpReg=LoadReal(HH,h,2)
local real lifeMax=GetUnitState(Tsunade__c,UNIT_STATE_MAX_LIFE)
local real chakraMax=GetUnitState(Tsunade__c,UNIT_STATE_MAX_MANA)
if GetWidgetLife(Tsunade__c)>.405 and GetUnitAbilityLevel(Tsunade__c,0x42303155)>0 then
call SetWidgetLife(Tsunade__c,GetWidgetLife(Tsunade__c)+GetHeal(lifeMax*hpReg,Tsunade__c,Tsunade__c))
call SetUnitState(Tsunade__c,UNIT_STATE_MANA,GetUnitState(Tsunade__c,UNIT_STATE_MANA)+chakraMax*mpReg)
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Tsunade__ByakugoNoJutsuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real hpReg=.1*period
local real mpReg=.06*period
call Sound("Tsunade Fuin.mp3")
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,hpReg)
call SaveReal(HH,h,2,mpReg)
call TimerStart(t,period,true,function cj_anonym__737)
set t=null
endfunction
function Tsunade__GetDamageConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetEventDamageSource(),0x4230314B)>0 and IsUnitInGroup(GetTriggerUnit(),Tsunade__grStrikes)
endfunction
function Tsunade__GetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
local real hp=GetUnitState(tu,UNIT_STATE_MAX_LIFE)
local real adddmg=.05
local real dmg=GetEventDamage()+adddmg
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetWidgetX(tu),GetWidgetY(tu)))
call UnitDamageTarget(Tsunade__c,tu,GetTaijutsuDamage(dmg,Tsunade__c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call GroupRemoveUnit(Tsunade__grStrikes,tu)
set tu=null
endfunction
function Tsunade__AttackConditions takes nothing returns boolean
return IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)and GetUnitAbilityLevel(GetAttacker(),0x4230314B)>0 and IsUnitInGroup(GetTriggerUnit(),Tsunade__grStrikes)
endfunction
function Tsunade__AttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Tsunade__grReg)then
call GroupAddUnit(Tsunade__grReg,tu)
call TriggerRegisterUnitEvent(Tsunade__getdmg,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Tsunade__grStrikes,tu)
set tu=null
endfunction
function cj_anonym__738 takes nothing returns nothing
if GetUnitAbilityLevel(Tsunade__c,0x4230314B)==0 then
call DisableTrigger(Tsunade__attack)
call DisableTrigger(Tsunade__getdmg)
call GroupClear(Tsunade__grStrikes)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Tsunade__TairyokuCast takes nothing returns nothing
call EnableTrigger(Tsunade__attack)
call EnableTrigger(Tsunade__getdmg)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__738)
endfunction
function cj_anonym__739 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real hpReg=LoadReal(HH,h,0)
local real mp=LoadReal(HH,h,1)
local real radius=LoadReal(HH,h,2)
local group g=LoadGroupHandle(HH,h,3)
local real x=GetWidgetX(Tsunade__c)
local real y=GetWidgetY(Tsunade__c)
local unit tg
local integer number=0
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitAlly(tg,Tsunade__p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)and GetWidgetLife(tg)<GetUnitState(tg,UNIT_STATE_MAX_LIFE)then
if GetUnitAbilityLevel(tg,0x41303153)==0 then
call UnitAddAbility(tg,0x41303153)
endif
call SetWidgetLife(tg,GetWidgetLife(tg)+GetHeal(hpReg,Tsunade__c,tg))
set number=number+1
endif
call GroupRemoveUnit(g,tg)
endloop
call SetUnitState(Tsunade__c,UNIT_STATE_MANA,GetUnitState(Tsunade__c,UNIT_STATE_MANA)-number*mp)
if GetUnitState(Tsunade__c,UNIT_STATE_MANA)<number*mp or GetUnitAbilityLevel(Tsunade__c,0x42303130)==0 then
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitAbilityLevel(tg,0x41303153)>0 then
call UnitRemoveAbility(tg,0x41303153)
call UnitRemoveAbility(tg,0x42303230)
endif
call GroupRemoveUnit(g,tg)
endloop
call UnitRemoveAbility(Tsunade__c,0x42303130)
call DestroyGroup(g)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HH,h)
endif
set g=null
set tg=null
set t=null
endfunction
function Tsunade__EnkakuChiyuCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real hpReg=50.*period
local real mp=10.*period
local real radius=1200.
call Sound("Tsunade Kuchiyose.mp3")
call SaveReal(HH,h,0,hpReg)
call SaveReal(HH,h,1,mp)
call SaveReal(HH,h,2,radius)
call SaveAgentHandle(HH,h,3,CreateGroup())
call TimerStart(t,period,true,function cj_anonym__739)
set t=null
endfunction
function cj_anonym__740 takes nothing returns nothing
local integer spelllvl=GetUnitAbilityLevel(Tsunade__c,Tsunade_TAIRYOKU)
local integer buf=GetUnitAbilityLevel(Tsunade__c,0x4230314B)
local real x=GetWidgetX(Tsunade__c)
local real y=GetWidgetY(Tsunade__c)
local real radius=600.
local real dmg=160.
local real addDmg=0.
local real newDmg=0.
local group g=CreateGroup()
local unit tg
if buf>0 then
set addDmg=.1
endif
call TerrainDeformRipple(x,y,radius,40.,2000,1,3.,3.,radius,false)
if IsTerrainPathable(x,y,PATHING_TYPE_FLOATABILITY)then
call CreateEffect(x,y,GetRandomReal(2.,2.5),"NewDirtEXNofire.mdx",8.)
else
call CreateEffect(x,y,GetRandomReal(2.,2.5),"IceSparks.mdx",8.)
endif
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedTaijutsu(tg,Tsunade__p)then
if buf>0 then
set newDmg=GetUnitState(tg,UNIT_STATE_MAX_LIFE)*addDmg
endif
call UnitDamageTarget(Tsunade__c,tg,GetTaijutsuDamage(dmg+newDmg,Tsunade__c,tg),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
set newDmg=0.
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
call KillDestructablesStart(x,y,radius/2.)
call DestroyTimer(GetExpiredTimer())
set g=null
set tg=null
endfunction
function Tsunade__TsutenKyakuCast takes nothing returns nothing
local real castTime=.3
if GetRandomInt(1,2)==1 then
call Sound("Tsunade Kill.mp3")
else
call Sound("Tsunade Kill 1.mp3")
endif
call TimerStart(CreateTimer(),castTime,false,function cj_anonym__740)
endfunction
function Tsunade__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Tsunade_TSUTEN_KYAKU or i==Tsunade_ENKAKU_CHIYU or i==Tsunade_TAIRYOKU or i==Tsunade_ULT
endfunction
function Tsunade__SpellsActions takes nothing returns nothing
local integer id
if Tsunade__c==null then
set Tsunade__c=GetTriggerUnit()
set Tsunade__p=GetOwningPlayer(Tsunade__c)
endif
set id=GetSpellAbilityId()
if id==Tsunade_TSUTEN_KYAKU then
call Tsunade__TsutenKyakuCast()
elseif id==Tsunade_ENKAKU_CHIYU then
if GetUnitAbilityLevel(Tsunade__c,0x42303130)==0 then
call Tsunade__EnkakuChiyuCast()
else
call UnitRemoveAbility(Tsunade__c,0x42303130)
endif
elseif id==Tsunade_TAIRYOKU then
call Tsunade__TairyokuCast()
elseif id==Tsunade_ULT then
call Tsunade__ByakugoNoJutsuCast()
endif
endfunction
function Tsunade_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
set Tsunade__attack=CreateTrigger()
set Tsunade__getdmg=CreateTrigger()
set Tsunade__grReg=CreateGroup()
set Tsunade__grStrikes=CreateGroup()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(Tsunade__attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Tsunade__SpellsConditions))
call TriggerAddAction(spells,function Tsunade__SpellsActions)
call TriggerAddCondition(Tsunade__attack,Condition(function Tsunade__AttackConditions))
call TriggerAddAction(Tsunade__attack,function Tsunade__AttackActions)
call TriggerAddCondition(Tsunade__getdmg,Condition(function Tsunade__GetDamageConditions))
call TriggerAddAction(Tsunade__getdmg,function Tsunade__GetDamageActions)
set spells=null
endfunction
function cj_anonym__741 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if GetWidgetLife(d)>.405 and time>0.then
call SaveReal(HH,h,2,time-period)
else
call DestroyEffect(AddSpecialEffect("Mokuton Protective Zahvat [WolSai].mdx",GetWidgetX(d),GetWidgetY(d)))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Yamato__UltCast takes unit c returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer lvlDaijurin=GetUnitAbilityLevel(c,Yamato_DAIJURIN)
local integer lvlShibari=GetUnitAbilityLevel(c,Yamato_SHIBARI)
local integer lvlShichuro=GetUnitAbilityLevel(c,Yamato_SHICHURO)
local real time=40.
local real period=1.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real f=GetUnitFacing(c)
local unit d=CreateUnit(Yamato__p,0x48303132,x,y,f)
call DestroyEffect(AddSpecialEffect("Mokuton Protective Zahvat [WolSai].mdx",GetWidgetX(d),GetWidgetY(d)))
call SetHeroXP(d,GetHeroXP(c),false)
call SetUnitState(d,UNIT_STATE_MANA,GetUnitState(c,UNIT_STATE_MANA))
call SetWidgetLife(d,GetWidgetLife(c))
call SuspendHeroXP(d,true)
if Yamato__p==GetLocalPlayer()then
call SetUnitVertexColor(d,78,42,4,255)
endif
if lvlDaijurin>0 then
call UnitAddAbility(d,Yamato_DAIJURIN)
call SetUnitAbilityLevel(d,Yamato_DAIJURIN,lvlDaijurin)
endif
if lvlShibari>0 then
call UnitAddAbility(d,Yamato_SHIBARI)
call SetUnitAbilityLevel(d,Yamato_SHIBARI,lvlShibari)
endif
if lvlShichuro>0 then
call UnitAddAbility(d,Yamato_SHICHURO)
call SetUnitAbilityLevel(d,Yamato_SHICHURO,lvlShichuro)
endif
call SaveAgentHandle(HH,h,0,d)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call TimerStart(t,period,true,function cj_anonym__741)
set d=null
set t=null
endfunction
function cj_anonym__742 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(HH,h,0)
local unit d=LoadUnitHandle(HH,h,1)
local integer hd=GetHandleId(d)
local integer i=1
local destructable des
loop
set des=LoadDestructableHandle(HH,hd,i)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl",GetWidgetX(des),GetWidgetY(des)))
call RemoveDestructable(des)
set i=i+1
exitwhen i>20
endloop
call RemoveRect(LoadRectHandle(HH,hd,i))
call SetUnitPathing(c,true)
call FlushChildHashtable(HH,hd)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
set des=null
set c=null
set d=null
set t=null
endfunction
function Yamato__ShicuroCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer i=1
local real time=7.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=57.2958279087*Atan2(y1-y,x1-x)
local unit d=CreateUnit(Yamato__p,0x6E303055,x1,y1,a)
local integer hd=GetHandleId(d)
local real x2
local real y2
local real x3
local real y3
local real offset=250.
set x1=GetWidgetX(d)
set y1=GetWidgetY(d)
call SetUnitPathing(c,false)
call SaveAgentHandle(HH,h,0,c)
call SaveAgentHandle(HH,h,1,d)
call SaveAgentHandle(HH,hd,21,Rect(x1-offset,y1-offset,x1+offset,y1+offset))
loop
if i==1 or i==6 or i==11 or i==16 then
set offset=-250.
else
set offset=offset+100.
endif
if i<6 then
set x2=x1+250.*Cos(a*.017)
set y2=y1+250.*Sin(a*.017)
set x3=x2+offset*Cos((a+90.)*.017)
set y3=y2+offset*Sin((a+90.)*.017)
elseif i>=6 and i<11 then
set x2=x1-250.*Cos(a*.017)
set y2=y1-250.*Sin(a*.017)
set x3=x2+offset*Cos((a+90.)*.017)
set y3=y2+offset*Sin((a+90.)*.017)
elseif i>=11 and i<16 then
set x2=x1+250.*Cos((a+90.)*.017)
set y2=y1+250.*Sin((a+90.)*.017)
set x3=x2+offset*Cos(a*.017)
set y3=y2+offset*Sin(a*.017)
elseif i>=16 then
set x2=x1+250.*Cos((a-90.)*.017)
set y2=y1+250.*Sin((a-90.)*.017)
set x3=x2+offset*Cos(a*.017)
set y3=y2+offset*Sin(a*.017)
endif
call SaveAgentHandle(HH,hd,i,CreateDestructable(0x59546663,x3,y3,0.,1.,0))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl",x3,y3))
set i=i+1
exitwhen i>20
endloop
call TimerStart(t,time,false,function cj_anonym__742)
set d=null
set t=null
endfunction
function Yamato__DoesShichuroExist takes unit tu returns boolean
local group g=CreateGroup()
local unit tg
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local boolean log=false
local rect r
call GroupEnumUnitsOfPlayer(g,Yamato__p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if GetUnitTypeId(tg)==0x6E303055 then
set r=LoadRectHandle(HH,GetHandleId(tg),21)
if RectContainsCoords(r,x,y)then
set log=true
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set r=null
set tg=null
set g=null
return log
endfunction
function cj_anonym__743 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit c=LoadUnitHandle(HH,h,0)
local unit tu=LoadUnitHandle(HH,h,1)
local real addDmg=LoadReal(HH,h,2)
local real dmg
if GetWidgetLife(tu)>.405 and GetUnitAbilityLevel(tu,0x42303431)>0 then
if Yamato__DoesShichuroExist(tu)then
set dmg=GetUnitState(tu,UNIT_STATE_MAX_LIFE)*addDmg
call UnitDamageTarget(c,tu,GetNinjutsuDamage(dmg,c,tu,NinT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set c=null
set tu=null
set t=null
endfunction
function Yamato__ShibariCast takes unit c,unit tu returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real addDmg=.03*period
call Sound("Yamato Mokuton Mokusatsu Shibari no Jutsu")
call SaveAgentHandle(HH,h,0,c)
call SaveAgentHandle(HH,h,1,tu)
call SaveReal(HH,h,2,addDmg)
call TimerStart(t,period,true,function cj_anonym__743)
set t=null
endfunction
function Yamato__DaijurinCheking takes nothing returns nothing
local destructable des=GetEnumDestructable()
local integer i=GetDestructableTypeId(des)
if GetWidgetLife(des)>.405 and i==0x4C546C74 or i==0x4E547477 or i==0x41547472 or i==0x41547463 then
set Yamato__logTree=true
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",GetWidgetX(des),GetWidgetY(des)))
call KillDestructable(des)
endif
set des=null
endfunction
function Yamato__GetDaijurinTree takes unit tu,real radius returns nothing
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local rect r=Rect(x-radius,y-radius,x+radius,y+radius)
call EnumDestructablesInRect(r,null,function Yamato__DaijurinCheking)
call RemoveRect(r)
set r=null
endfunction
function cj_anonym__744 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real stuntime=LoadReal(HH,h,1)
local real a=LoadReal(HH,h,2)
local real offset=LoadReal(HH,h,3)
local real curDistance=LoadReal(HH,h,4)
local real maxDistance=LoadReal(HH,h,5)
local real radius=LoadReal(HH,h,6)/2.
local real addDmg=LoadReal(HH,h,7)
local boolean log=LoadBoolean(HH,h,8)
local unit c=LoadUnitHandle(HH,h,9)
local real x=GetWidgetX(tu)
local real y=GetWidgetY(tu)
local real x1=x+offset*Cos(a*.017)
local real y1=y+offset*Sin(a*.017)
if curDistance<maxDistance then
call Yamato__GetDaijurinTree(tu,radius)
if Yamato__logTree then
if not log then
call SaveBoolean(HH,h,8,true)
endif
call UnitDamageTarget(c,tu,GetTaijutsuDamage(addDmg,c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
set Yamato__logTree=false
endif
if not IsTerrainPathable(x1,y1,PATHING_TYPE_WALKABILITY)then
call SetUnitX(tu,x1)
call SetUnitY(tu,y1)
else
call SetUnitX(tu,x)
call SetUnitY(tu,y)
endif
call SaveReal(HH,h,4,curDistance+offset)
else
call Yamato__GetDaijurinTree(tu,radius*2.)
call SetUnitPathing(tu,true)
if log then
call GetStun(tu,stuntime)
endif
set Yamato__logTree=false
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set c=null
set t=null
endfunction
function Yamato__DaijurinKnockback takes unit c,unit tu,real dmg,real stuntime,real distance,real a,real radius,real addDmg returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real speed=1500.
local real offset=speed*MainPeriod
set Yamato__logTree=false
call SetUnitPathing(tu,false)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",GetWidgetX(tu),GetWidgetY(tu)))
call UnitDamageTarget(c,tu,GetTaijutsuDamage(dmg,c,tu),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,stuntime)
call SaveReal(HH,h,2,a)
call SaveReal(HH,h,3,offset)
call SaveReal(HH,h,4,0.)
call SaveReal(HH,h,5,distance)
call SaveReal(HH,h,6,radius)
call SaveReal(HH,h,7,addDmg)
call SaveBoolean(HH,h,8,false)
call SaveAgentHandle(HH,h,9,c)
call TimerStart(t,MainPeriod,true,function cj_anonym__744)
set t=null
endfunction
function cj_anonym__745 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real a=LoadReal(HH,h,0)
local group g=LoadGroupHandle(HH,h,1)
local real stuntime=LoadReal(HH,h,2)
local real curDistance=LoadReal(HH,h,3)
local real maxDistance=LoadReal(HH,h,4)
local real x=LoadReal(HH,h,5)
local real y=LoadReal(HH,h,6)
local real radius=LoadReal(HH,h,7)
local real offset=LoadReal(HH,h,8)
local real desDmg=LoadReal(HH,h,10)
local real dmg=LoadReal(HH,h,11)
local boolean log=false
local unit tg
if curDistance<maxDistance then
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null or log
if IsUnitNeedNinjutsu(tg,Yamato__p)then
call Yamato__DaijurinKnockback(LoadUnitHandle(HH,h,9),tg,dmg,stuntime,maxDistance,a,radius,desDmg)
set log=true
endif
call GroupRemoveUnit(g,tg)
endloop
if not log then
call SaveReal(HH,h,3,curDistance+offset)
call SaveReal(HH,h,5,x+offset*Cos(a*bj_DEGTORAD))
call SaveReal(HH,h,6,y+offset*Sin(a*bj_DEGTORAD))
else
call SaveReal(HH,h,3,maxDistance)
endif
else
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tg=null
set g=null
set t=null
endfunction
function Yamato__DaijurinCast takes unit c,real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real range=800.
local real radius=200.
local real dmg=120.
local real desDmg=100.
local real stuntime=1.
local real offset=50.
local real x=GetWidgetX(c)
local real y=GetWidgetY(c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
set bj_lastCreatedUnit=CreateUnit(Yamato__p,0x6E303054,x,y,a)
call UnitApplyTimedLife(bj_lastCreatedUnit,0x42544C46,1.334)
call Sound("Yamato Mokuton Daijurin no Jutsu")
call SaveReal(HH,h,0,a)
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,stuntime)
call SaveReal(HH,h,3,0.)
call SaveReal(HH,h,4,range)
call SaveReal(HH,h,5,x)
call SaveReal(HH,h,6,y)
call SaveReal(HH,h,7,radius)
call SaveReal(HH,h,8,offset)
call SaveAgentHandle(HH,h,9,c)
call SaveReal(HH,h,10,desDmg)
call SaveReal(HH,h,11,dmg)
call TimerStart(t,MainPeriod,true,function cj_anonym__745)
set t=null
endfunction
function Yamato__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Yamato_DAIJURIN or i==Yamato_SHIBARI or i==Yamato_SHICHURO or i==Yamato_ULT
endfunction
function Yamato__SpellsActions takes nothing returns nothing
local unit c=GetTriggerUnit()
local integer i=GetSpellAbilityId()
if Yamato__p==null then
set Yamato__p=GetOwningPlayer(c)
endif
if i==Yamato_DAIJURIN then
call Yamato__DaijurinCast(c,GetSpellTargetX(),GetSpellTargetY())
elseif i==Yamato_SHIBARI then
call Yamato__ShibariCast(c,GetSpellTargetUnit())
elseif i==Yamato_SHICHURO then
call Yamato__ShicuroCast(c,GetSpellTargetX(),GetSpellTargetY())
elseif i==Yamato_ULT then
call Yamato__UltCast(c)
endif
set c=null
endfunction
function Yamato_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call SetPlayerAbilityAvailable(Player(i),0x41304D4C,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Yamato__SpellsConditions))
call TriggerAddAction(spells,function Yamato__SpellsActions)
set spells=null
endfunction
function Zabuza__KubikiribochoChangeText takes nothing returns nothing
local integer idp=GetPlayerId(Zabuza__p)
call SetTextTagText(playerNameText[idp],GetPlayerNameColored(Player(idp))+" [|cFFB56B72"+I2S(Zabuza__intBloodML)+"|r]",countDownTextSize/4.44)
endfunction
function cj_anonym__746 takes nothing returns nothing
set Zabuza__intBloodML=Zabuza__intBloodML-1
call Zabuza__KubikiribochoChangeText()
if Zabuza__intBloodML>0 then
call SetUnitAbilityLevel(Zabuza__c,0x41304C48,Zabuza__intBloodML)
else
set Zabuza__intBloodML=0
call UnitRemoveAbility(Zabuza__c,0x41304C48)
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Zabuza__KubikiribochoStartTimer takes nothing returns nothing
call UnitAddAbility(Zabuza__c,0x41304C48)
call TimerStart(CreateTimer(),5.,true,function cj_anonym__746)
endfunction
function Zabuza__KubikiribochoBloodPlus takes nothing returns nothing
set Zabuza__intBloodML=Zabuza__intBloodML+1
call Zabuza__KubikiribochoChangeText()
if Zabuza__intBloodML==1 then
call Zabuza__KubikiribochoStartTimer()
else
call SetUnitAbilityLevel(Zabuza__c,0x41304C48,Zabuza__intBloodML)
endif
endfunction
function Zabuza__SarientoSatsujinAttack takes unit tu returns nothing
local real value=Zabuza__intBloodML*.01+.05
local real dmg=GetUnitState(tu,UNIT_STATE_MAX_LIFE)*value
if IsUnitFacingBack(Zabuza__c,tu,45.)then
set dmg=dmg*2.
endif
set Zabuza__logSariento=false
if Zabuza__intBloodML>0 then
set Zabuza__intBloodML=0
call Zabuza__KubikiribochoChangeText()
call UnitRemoveAbility(Zabuza__c,0x41304C48)
endif
call DestroyEffect(AddSpecialEffectTarget("BloodExplosion.mdx",tu,"chest"))
call UnitDamageTarget(Zabuza__c,tu,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
endfunction
function Zabuza__GetDamageConditions takes nothing returns boolean
return GetUnitTypeId(GetEventDamageSource())==heroes_rawcode[Zabuza]and not IsUnitIllusion(GetEventDamageSource())and IsUnitInGroup(GetTriggerUnit(),Zabuza__grBladeCheck)
endfunction
function Zabuza__GetDamageActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if Zabuza__logSariento then
call Zabuza__SarientoSatsujinAttack(tu)
endif
if GetUnitAbilityLevel(Zabuza__c,Zabuza_KUBIKIRIBOCHO)>0 then
call Zabuza__KubikiribochoBloodPlus()
endif
call GroupRemoveUnit(Zabuza__grBladeCheck,tu)
set tu=null
endfunction
function Zabuza__AttackConditions takes nothing returns boolean
return GetUnitTypeId(GetAttacker())==heroes_rawcode[Zabuza]and not IsUnitIllusion(GetAttacker())and IsUnitEnemy(GetTriggerUnit(),GetOwningPlayer(GetAttacker()))and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)
endfunction
function Zabuza__AttackActions takes nothing returns nothing
local unit tu=GetTriggerUnit()
if not IsUnitInGroup(tu,Zabuza__grBladeCheck)then
if not IsUnitInGroup(tu,Zabuza__grBladeReg)then
call GroupAddUnit(Zabuza__grBladeReg,tu)
call TriggerRegisterUnitEvent(Zabuza__trgBlade,tu,EVENT_UNIT_DAMAGED)
endif
call GroupAddUnit(Zabuza__grBladeCheck,tu)
if GetUnitAbilityLevel(Zabuza__c,0x42303535)>0 then
call Sound("Zabuza Kubikiribocho.mp3")
set Zabuza__logSariento=true
endif
endif
set tu=null
endfunction
function Zabuza__KijinDamageBlock takes real dmg returns nothing
call SetWidgetLife(Zabuza__c,GetWidgetLife(Zabuza__c)+dmg)
set Zabuza__dmgKijin=Zabuza__dmgKijin+dmg
endfunction
function cj_anonym__748 takes nothing returns nothing
set Zabuza__cdKijin=false
call SetPlayerAbilityAvailable(Zabuza__p,Zabuza_DEMON,true)
call DestroyTimer(GetExpiredTimer())
endfunction
function cj_anonym__747 takes nothing returns nothing
call UnitRemoveAbility(Zabuza__c,0x41303442)
call UnitRemoveAbility(Zabuza__c,0x42303056)
if Zabuza__dmgKijin>GetUnitState(Zabuza__c,UNIT_STATE_MAX_LIFE)then
call KillUnit(Zabuza__c)
endif
set Zabuza__dmgKijin=0.
call DestroyTimer(GetExpiredTimer())
endfunction
function Zabuza__KijinStartTimer takes nothing returns nothing
local real buffTime=I2R(GetUnitAbilityLevel(Zabuza__c,Zabuza_DEMON)+6)
set Zabuza__cdKijin=true
call Sound("Zabuza Kijin.mp3")
call SetUnitAnimation(Zabuza__c,"Spell Slam One")
call SetPlayerAbilityAvailable(Zabuza__p,Zabuza_DEMON,false)
call UnitAddAbility(Zabuza__c,0x41303442)
call SetUnitAbilityLevel(Zabuza__c,0x41305443,GetUnitAbilityLevel(Zabuza__c,Zabuza_DEMON))
call TimerStart(CreateTimer(),buffTime,false,function cj_anonym__747)
call TimerStart(CreateTimer(),100.,false,function cj_anonym__748)
endfunction
function Zabuza__KijinConditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(),Zabuza_DEMON)>0
endfunction
function Zabuza__KijinActions takes nothing returns nothing
local real dmg=GetEventDamage()
local real needHP=GetUnitState(Zabuza__c,UNIT_STATE_MAX_LIFE)*.1
if GetWidgetLife(Zabuza__c)<needHP and GetUnitAbilityLevel(Zabuza__c,0x41303442)==0 and not Zabuza__cdKijin then
call Zabuza__KijinStartTimer()
endif
if GetUnitAbilityLevel(Zabuza__c,0x41303442)>0 then
call Zabuza__KijinDamageBlock(dmg)
endif
endfunction
function cj_anonym__749 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local group g1=LoadGroupHandle(HH,h,2)
local group g2=LoadGroupHandle(HH,h,3)
local real radius=LoadReal(HH,h,4)
local real dmgStart=LoadReal(HH,h,5)
local real dmgPeriod=LoadReal(HH,h,6)
local real offset=LoadReal(HH,h,7)
local real a=LoadReal(HH,h,8)
local integer amount=LoadInteger(HH,h,9)
local real effAngle=LoadReal(HH,h,10)
local real effOffset=LoadReal(HH,h,11)
local integer effNumber=LoadInteger(HH,h,12)
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x1=x-(radius/2.5)*Cos(a*bj_DEGTORAD)
local real y1=y-(radius/2.5)*Sin(a*bj_DEGTORAD)
local unit tg
local integer i=0
local integer max=6
if amount>0 then
if effNumber<4 then
call SaveInteger(HH,h,12,effNumber+1)
else
call DestroyEffect(AddSpecialEffect("TidalErruption.mdx",x,y))
loop
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x+effOffset*Cos((a+effAngle)*bj_DEGTORAD),y+effOffset*Sin((a+effAngle)*bj_DEGTORAD)))
set effOffset=effOffset-50.
set i=i+1
exitwhen i==max
endloop
call SaveInteger(HH,h,12,0)
endif
call SetUnitPosition(d,x+offset*Cos(a*bj_DEGTORAD),y+offset*Sin(a*bj_DEGTORAD))
call GroupEnumUnitsInRange(g1,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Zabuza__p)then
if not IsUnitInGroup(tg,g2)then
call CreateDummyEffect(GetWidgetX(tg),GetWidgetY(tg),GetRandomReal(1.,1.25),"IceSparks.mdx",GetRandomReal(0.,360.))
call GroupAddUnit(g2,tg)
call UnitDamageTarget(Zabuza__c,tg,GetNinjutsuDamage(dmgStart,Zabuza__c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
else
call UnitDamageTarget(Zabuza__c,tg,GetNinjutsuDamage(dmgPeriod,Zabuza__c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
call SetUnitPosition(tg,GetWidgetX(tg)+offset*Cos(a*bj_DEGTORAD),GetWidgetY(tg)+offset*Sin(a*bj_DEGTORAD))
endif
call GroupRemoveUnit(g1,tg)
endloop
call KillDestructablesStart(x,y,radius/2.)
call SaveInteger(HH,h,9,amount-1)
else
call GroupClear(g2)
call DestroyGroup(g1)
call DestroyGroup(g2)
call DestroyEffect(LoadEffectHandle(HH,h,1))
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set tg=null
set d=null
set t=null
endfunction
function Zabuza__DaibakufuCreateWater takes real x,real y,real x1,real y1,real a returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.025
local real radius=300.
local real effAngle=90.
local real effOffset=radius/2.-25.
local real dmgStart=100.
local real dmgPeriod=75.*period
local real timeMove=3.
local real range=2000.
local real speed=range/timeMove
local real offset=speed*period
local integer amount=R2I(range/offset)
call SetUnitAnimation(Zabuza__c,"Spell Throw Two")
set bj_lastCreatedUnit=CreateUnit(Zabuza__p,0x6E303241,x,y,a)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
call SaveAgentHandle(HH,h,1,AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveMissile.mdl",bj_lastCreatedUnit,"origin"))
call SaveAgentHandle(HH,h,2,CreateGroup())
call SaveAgentHandle(HH,h,3,CreateGroup())
call SaveReal(HH,h,4,radius)
call SaveReal(HH,h,5,dmgStart)
call SaveReal(HH,h,6,dmgPeriod)
call SaveReal(HH,h,7,offset)
call SaveReal(HH,h,8,a)
call SaveInteger(HH,h,9,amount)
call SaveReal(HH,h,10,effAngle)
call SaveReal(HH,h,11,effOffset)
call SaveInteger(HH,h,12,0)
call TimerStart(t,period,true,function cj_anonym__749)
set t=null
endfunction
function cj_anonym__750 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,6)
local real time=LoadReal(HH,h,7)
if time>0.then
if time==2.then
call SetUnitAnimation(Zabuza__c,"spell channel one")
elseif time==1.then
call SetUnitAnimation(Zabuza__c,"Spell Throw One")
endif
call SaveReal(HH,h,7,time-period)
else
call PauseUnit(Zabuza__c,false)
call RemoveUnit(LoadUnitHandle(HH,h,0))
if GetWidgetLife(Zabuza__c)>.405 then
call Zabuza__DaibakufuCreateWater(LoadReal(HH,h,1),LoadReal(HH,h,2),LoadReal(HH,h,3),LoadReal(HH,h,4),LoadReal(HH,h,5))
endif
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Zabuza__DaibakufuCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=2.
local real x=GetWidgetX(Zabuza__c)
local real y=GetWidgetY(Zabuza__c)
local real a=bj_RADTODEG*Atan2(y1-y,x1-x)
call Sound("Zabuza Suiton Daibakufu no Jutsu.mp3")
call PauseUnit(Zabuza__c,true)
call SetUnitFacing(Zabuza__c,a)
call SaveAgentHandle(HH,h,0,CreateUnit(Zabuza__p,0x68303259,x,y,a))
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveReal(HH,h,3,x1)
call SaveReal(HH,h,4,y1)
call SaveReal(HH,h,5,a)
call SaveReal(HH,h,6,period)
call SaveReal(HH,h,7,time)
call TimerStart(t,period,true,function cj_anonym__750)
set t=null
endfunction
function Zabuza__HisenkenDamage takes real x,real y returns nothing
local real radius=200.
local real dmg=100.
local group g=CreateGroup()
local unit tg
call GroupEnumUnitsInRange(g,x,y,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitNeedClear(tg,Zabuza__p)then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",tg,"chest"))
call UnitDamageTarget(Zabuza__c,tg,dmg,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
if GetUnitAbilityLevel(Zabuza__c,Zabuza_KUBIKIRIBOCHO)>0 then
call Zabuza__KubikiribochoBloodPlus()
endif
endif
call GroupRemoveUnit(g,tg)
endloop
call DestroyGroup(g)
set g=null
set tg=null
endfunction
function cj_anonym__751 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit d=LoadUnitHandle(HH,h,0)
local real x1=LoadReal(HH,h,1)
local real y1=LoadReal(HH,h,2)
local real f=LoadReal(HH,h,3)
local real range=LoadReal(HH,h,4)
local real period=LoadReal(HH,h,5)
local real time=LoadReal(HH,h,6)
local boolean log=LoadBoolean(HH,h,7)
local real speed
local real offset
local real x=GetWidgetX(d)
local real y=GetWidgetY(d)
local real x2=GetWidgetX(Zabuza__c)
local real y2=GetWidgetY(Zabuza__c)
local real distance=SquareRoot((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
local real a=bj_RADTODEG*Atan2(y1-y2,x1-x2)
if time>0.and GetWidgetLife(Zabuza__c)>.405 then
call KillDestructablesStart(x,y,100.)
if not log then
set speed=range/.77
set offset=speed*period
call SetUnitPosition(d,x+offset*Cos(f*bj_DEGTORAD),y+offset*Sin(f*bj_DEGTORAD))
else
set speed=distance/.77
set offset=speed*period
call SetUnitPosition(d,x-offset*Cos(a*bj_DEGTORAD),y-offset*Sin(a*bj_DEGTORAD))
endif
if time==1.6 or time==1.2 or time==.8 or time==.4 then
call Zabuza__HisenkenDamage(x,y)
endif
if time<.8 and not log then
call SaveBoolean(HH,h,7,true)
endif
call SaveReal(HH,h,6,time-period)
else
call UnitRemoveAbility(Zabuza__c,0x41313143)
call RemoveUnit(d)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set d=null
set t=null
endfunction
function Zabuza__HisenkenCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=MainPeriod
local real time=1.6
local real range=500.
local real f=GetUnitFacing(Zabuza__c)
local real x=GetWidgetX(Zabuza__c)
local real y=GetWidgetY(Zabuza__c)
local real x1=x+range*Cos(f*bj_DEGTORAD)
local real y1=y+range*Sin(f*bj_DEGTORAD)
call Sound("Zabuza Hisenken.mp3")
call UnitAddAbility(Zabuza__c,0x41313143)
call SaveAgentHandle(HH,h,0,CreateUnit(Zabuza__p,0x6E303039,x,y,f))
call SaveReal(HH,h,1,x1)
call SaveReal(HH,h,2,y1)
call SaveReal(HH,h,3,f)
call SaveReal(HH,h,4,range)
call SaveReal(HH,h,5,period)
call SaveReal(HH,h,6,time)
call SaveBoolean(HH,h,7,false)
call TimerStart(t,MainPeriod,true,function cj_anonym__751)
set t=null
endfunction
function cj_anonym__752 takes nothing returns nothing
if GetLocalPlayer()==Zabuza__p then
call ClearSelection()
call SelectUnit(Zabuza__c,true)
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function Zabuza__MizuBunshinCast takes nothing returns nothing
call Sound("Zabuza Mizu Bunshin no Jutsu.mp3")
call TimerStart(CreateTimer(),.1,false,function cj_anonym__752)
endfunction
function cj_anonym__753 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real period=LoadReal(HH,h,0)
local real time=LoadReal(HH,h,1)
if time>0.and GetUnitAbilityLevel(Zabuza__c,0x42303535)>0 then
call SaveReal(HH,h,1,time-period)
else
call SetUnitPathing(Zabuza__c,true)
call UnitRemoveAbility(Zabuza__c,0x42303535)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Zabuza__SarientoCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real time=3.
local real period=.1
call SetUnitPathing(Zabuza__c,false)
call SaveReal(HH,h,0,period)
call SaveReal(HH,h,1,time)
call TimerStart(t,period,true,function cj_anonym__753)
set t=null
endfunction
function cj_anonym__754 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local integer alpha=LoadInteger(HH,h,1)
local integer alphaStep=LoadInteger(HH,h,2)
local boolean log=LoadBoolean(HH,h,3)
local unit tg
if alpha>0 and alpha<255 then
if log then
call SaveInteger(HH,h,1,alpha-alphaStep)
else
call SaveInteger(HH,h,1,alpha+alphaStep)
endif
call GroupEnumUnitsOfPlayer(g,Zabuza__p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303630 then
call SetUnitVertexColor(tg,255,255,255,alpha)
endif
call GroupRemoveUnit(g,tg)
endloop
else
if log then
call GroupEnumUnitsOfPlayer(g,Zabuza__p,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if GetUnitTypeId(tg)==0x68303630 then
call RemoveUnit(tg)
endif
call GroupRemoveUnit(g,tg)
endloop
endif
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set t=null
endfunction
function Zabuza__KirigakureFogChange takes integer alpha,boolean log returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local integer alphaStep=3
local real period=.025
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveInteger(HH,h,1,alpha)
call SaveInteger(HH,h,2,alphaStep)
call SaveBoolean(HH,h,3,log)
call TimerStart(t,period,true,function cj_anonym__754)
set t=null
endfunction
function cj_anonym__755 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real radius=LoadReal(HH,h,0)
local real x=LoadReal(HH,h,1)
local real y=LoadReal(HH,h,2)
local real period=LoadReal(HH,h,3)
local real time=LoadReal(HH,h,4)
local real x1=GetWidgetX(Zabuza__c)
local real y1=GetWidgetY(Zabuza__c)
local real distance=SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
if GetWidgetLife(Zabuza__c)>.405 and time>0.then
if distance<=radius then
if GetUnitAbilityLevel(Zabuza__c,0x41313054)==0 then
call UnitAddAbility(Zabuza__c,0x41313054)
endif
else
call UnitRemoveAbility(Zabuza__c,0x41313054)
endif
call SaveReal(HH,h,4,time-period)
else
call UnitRemoveAbility(Zabuza__c,0x41305632)
call UnitRemoveAbility(Zabuza__c,0x41313054)
call SetPlayerAbilityAvailable(Zabuza__p,Zabuza_KIRIGAKURE,true)
call Zabuza__KirigakureFogChange(245,true)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Zabuza__KirigakureCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Zabuza__c)
local real y=GetWidgetY(Zabuza__c)
local real f=GetUnitFacing(Zabuza__c)
local real scale=.6
local real area=1200.
local real offsetFog=area/5.
local real time=10.
local real period=.1
call Sound("Zabuza Kirigakure no Jutsu.mp3")
set bj_lastCreatedUnit=CreateUnit(Zabuza__p,0x68303630,x+offsetFog*Cos(f*bj_DEGTORAD),y+offsetFog*Sin(f*bj_DEGTORAD),0.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
set bj_lastCreatedUnit=CreateUnit(Zabuza__p,0x68303630,x+offsetFog*Cos((f+72.)*bj_DEGTORAD),y+offsetFog*Sin((f+72.)*bj_DEGTORAD),72.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
set bj_lastCreatedUnit=CreateUnit(Zabuza__p,0x68303630,x+offsetFog*Cos((f+144.)*bj_DEGTORAD),y+offsetFog*Sin((f+144.)*bj_DEGTORAD),144.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
set bj_lastCreatedUnit=CreateUnit(Zabuza__p,0x68303630,x+offsetFog*Cos((f+216.)*bj_DEGTORAD),y+offsetFog*Sin((f+216.)*bj_DEGTORAD),216.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
set bj_lastCreatedUnit=CreateUnit(Zabuza__p,0x68303630,x+offsetFog*Cos((f+288.)*bj_DEGTORAD),y+offsetFog*Sin((f+288.)*bj_DEGTORAD),288.)
call SetUnitScale(bj_lastCreatedUnit,scale,scale,scale)
call SetUnitVertexColor(bj_lastCreatedUnit,255,255,255,0)
call Zabuza__KirigakureFogChange(10,false)
call SetPlayerAbilityAvailable(Zabuza__p,Zabuza_KIRIGAKURE,false)
call UnitAddAbility(Zabuza__c,0x41305632)
call SaveReal(HH,h,0,area/2.)
call SaveReal(HH,h,1,x)
call SaveReal(HH,h,2,y)
call SaveReal(HH,h,3,period)
call SaveReal(HH,h,4,time)
call TimerStart(t,period,true,function cj_anonym__755)
set t=null
endfunction
function Zabuza__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Zabuza_KIRIGAKURE or i==0x41305632 or i==Zabuza_MIZU_BUNSHIN or i==0x41304D56 or i==Zabuza_ULT
endfunction
function Zabuza__SpellsActions takes nothing returns nothing
local integer i
if Zabuza__c==null then
set Zabuza__c=GetTriggerUnit()
set Zabuza__p=GetOwningPlayer(Zabuza__c)
call EnableTrigger(Zabuza__trgBlade)
endif
set i=GetSpellAbilityId()
if i==Zabuza_KIRIGAKURE then
call Zabuza__KirigakureCast()
elseif i==0x41305632 then
call Zabuza__SarientoCast()
elseif i==Zabuza_MIZU_BUNSHIN then
call Zabuza__MizuBunshinCast()
elseif i==0x41304D56 then
call Zabuza__HisenkenCast()
elseif i==Zabuza_ULT then
call Zabuza__DaibakufuCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Zabuza__LearningKubikiribocho takes unit u returns nothing
if Zabuza__c==null then
set Zabuza__c=u
set Zabuza__p=GetOwningPlayer(Zabuza__c)
endif
if not IsTriggerEnabled(Zabuza__trgBlade)then
call EnableTrigger(Zabuza__trgBlade)
endif
call UnitAddAbility(Zabuza__c,0x41304D56)
endfunction
function Zabuza_AddAbility_Kubikiribocho takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Zabuza]then
call Zabuza__LearningKubikiribocho(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Zabuza__LearningDemon takes unit u returns nothing
if Zabuza__c==null then
set Zabuza__c=u
set Zabuza__p=GetOwningPlayer(Zabuza__c)
endif
call TriggerRegisterUnitEvent(Zabuza__trgKijin,Zabuza__c,EVENT_UNIT_DAMAGED)
call EnableTrigger(Zabuza__trgKijin)
endfunction
function Zabuza_AddAbility_Demon takes nothing returns nothing
local integer i=0
loop
if GetUnitTypeId(udg_Hero[i])==heroes_rawcode[Zabuza]then
call Zabuza__LearningDemon(udg_Hero[i])
set i=10
endif
set i=i+1
exitwhen i>10
endloop
endfunction
function Zabuza_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
local trigger attack=CreateTrigger()
set Zabuza__grBladeReg=CreateGroup()
set Zabuza__grBladeCheck=CreateGroup()
set Zabuza__trgBlade=CreateTrigger()
set Zabuza__trgKijin=CreateTrigger()
call DisableTrigger(Zabuza__trgBlade)
call DisableTrigger(Zabuza__trgKijin)
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(attack,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
call SetPlayerAbilityAvailable(Player(i),0x41313054,false)
call SetPlayerAbilityAvailable(Player(i),0x41303442,false)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Zabuza__SpellsConditions))
call TriggerAddAction(spells,function Zabuza__SpellsActions)
call TriggerAddCondition(attack,Condition(function Zabuza__AttackConditions))
call TriggerAddAction(attack,function Zabuza__AttackActions)
call TriggerAddCondition(Zabuza__trgBlade,Condition(function Zabuza__GetDamageConditions))
call TriggerAddAction(Zabuza__trgBlade,function Zabuza__GetDamageActions)
call TriggerAddCondition(Zabuza__trgKijin,Condition(function Zabuza__KijinConditions))
call TriggerAddAction(Zabuza__trgKijin,function Zabuza__KijinActions)
set attack=null
set spells=null
endfunction
function cj_anonym__756 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g1=LoadGroupHandle(HH,h,0)
local group g2=LoadGroupHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
local real dmg=LoadReal(HH,h,4)
local real x1=LoadReal(HH,h,5)
local real y1=LoadReal(HH,h,6)
local real radius=LoadReal(HH,h,7)
local unit tg
if time>0.then
call GroupEnumUnitsInRange(g1,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g1)
exitwhen tg==null
if IsUnitNeedNinjutsu(tg,Zetsu__p)then
if not IsUnitInGroup(tg,g2)then
call GroupAddUnit(g2,tg)
endif
call PauseUnit(tg,true)
call UnitDamageTarget(Zetsu__c,tg,GetNinjutsuDamage(dmg,Zetsu__c,tg,NinNT),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl",tg,"origin"))
endif
call GroupRemoveUnit(g1,tg)
endloop
call SaveReal(HH,h,3,time-period)
else
loop
set tg=FirstOfGroup(g2)
exitwhen tg==null
call PauseUnit(tg,false)
call GroupRemoveUnit(g2,tg)
endloop
call DestroyGroup(g1)
call DestroyGroup(g2)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g1=null
set g2=null
set tg=null
set t=null
endfunction
function Zetsu__MoktonCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=2.
local real radius=400.
local real dmg=80.*period
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveAgentHandle(HH,h,1,CreateGroup())
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call SaveReal(HH,h,4,dmg)
call SaveReal(HH,h,5,x1)
call SaveReal(HH,h,6,y1)
call SaveReal(HH,h,7,radius)
call TimerStart(t,period,true,function cj_anonym__756)
set t=null
endfunction
function cj_anonym__757 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local group g=LoadGroupHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
local real manaburn=LoadReal(HH,h,3)
local real x1=LoadReal(HH,h,4)
local real y1=LoadReal(HH,h,5)
local real radius=LoadReal(HH,h,6)
local unit tg
if time>0.then
call GroupEnumUnitsInRange(g,x1,y1,radius,null)
loop
set tg=FirstOfGroup(g)
exitwhen tg==null
if IsUnitEnemy(tg,Zetsu__p)and GetWidgetLife(tg)>.405 and not IsUnitType(tg,UNIT_TYPE_UNDEAD)and not IsUnitType(tg,UNIT_TYPE_STRUCTURE)then
call SetUnitState(tg,UNIT_STATE_MANA,GetUnitState(tg,UNIT_STATE_MANA)-manaburn)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl",GetWidgetX(tg),GetWidgetY(tg)))
endif
call GroupRemoveUnit(g,tg)
endloop
call SaveReal(HH,h,2,time-period)
else
call DestroyGroup(g)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set g=null
set tg=null
set t=null
endfunction
function Zetsu__HoshiCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=2.
local real radius=400.
local real manaburn=200.*period
call SaveAgentHandle(HH,h,0,CreateGroup())
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveReal(HH,h,3,manaburn)
call SaveReal(HH,h,4,x1)
call SaveReal(HH,h,5,y1)
call SaveReal(HH,h,6,radius)
call TimerStart(t,period,true,function cj_anonym__757)
set t=null
endfunction
function cj_anonym__758 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit shiro=LoadUnitHandle(HH,h,0)
local unit kuro=LoadUnitHandle(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
if time>0.then
if GetWidgetLife(shiro)<.405 and GetWidgetLife(kuro)<.405 then
call SaveReal(HH,h,3,0.)
else
call SaveReal(HH,h,3,time-period)
endif
elseif time==0.then
if GetWidgetLife(kuro)>.405 then
call SetUnitPosition(Zetsu__c,GetWidgetX(kuro),GetWidgetY(kuro))
elseif GetWidgetLife(shiro)>.405 then
call SetUnitPosition(Zetsu__c,GetWidgetX(shiro),GetWidgetY(shiro))
endif
call PauseUnit(Zetsu__c,false)
call SetUnitInvulnerable(Zetsu__c,false)
call SetUnitPathing(Zetsu__c,true)
call ShowUnit(Zetsu__c,true)
call SuspendHeroXP(Zetsu__c,false)
if GetLocalPlayer()==Zetsu__p then
call ClearSelection()
call SelectUnit(Zetsu__c,true)
endif
if GetWidgetLife(kuro)<.405 and GetWidgetLife(shiro)<.405 then
if Zetsu_UltKiller!=null then
call UnitDamageTarget(Zetsu_UltKiller,Zetsu__c,99999.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_UNIVERSAL,null)
set Zetsu_UltKiller=null
else
call KillUnit(Zetsu__c)
endif
endif
call RemoveUnit(shiro)
call RemoveUnit(kuro)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set shiro=null
set kuro=null
set t=null
endfunction
function Zetsu__UltCast takes nothing returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real x=GetWidgetX(Zetsu__c)
local real y=GetWidgetY(Zetsu__c)
local real f=GetUnitFacing(Zetsu__c)
local real period=.1
local real time=23.-period
call PauseUnit(Zetsu__c,true)
call SetUnitInvulnerable(Zetsu__c,true)
call SetUnitPathing(Zetsu__c,false)
call ShowUnit(Zetsu__c,false)
call SuspendHeroXP(Zetsu__c,true)
set bj_lastCreatedUnit=CreateUnit(Zetsu__p,0x6830314E,x,y,f)
call SaveAgentHandle(HH,h,0,bj_lastCreatedUnit)
set bj_lastCreatedUnit=CreateUnit(Zetsu__p,0x6830314F,x,y,f)
if GetLocalPlayer()==Zetsu__p then
call ClearSelection()
call SelectUnit(bj_lastCreatedUnit,true)
endif
call SaveAgentHandle(HH,h,1,bj_lastCreatedUnit)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__758)
set t=null
endfunction
function cj_anonym__759 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit tu=LoadUnitHandle(HH,h,0)
local real period=LoadReal(HH,h,1)
local real time=LoadReal(HH,h,2)
if time>0.and GetWidgetLife(tu)>.405 then
call SaveReal(HH,h,2,time-period)
else
call DestroyEffect(LoadEffectHandle(HH,h,3))
call UnitRemoveAbility(tu,0x41313244)
call UnitRemoveAbility(tu,0x4130574F)
call UnitRemoveAbility(tu,0x41313431)
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set tu=null
set t=null
endfunction
function Zetsu__TobiCast takes unit tu returns nothing
local timer t
local integer h
local real period=1.
local real time=20.-period
local real manacost=100.
if GetUnitAbilityLevel(tu,0x4130574F)==0 then
set t=CreateTimer()
set h=GetHandleId(t)
call Sound("Akatsuki Jutsu.mp3")
call UnitAddAbility(tu,0x41313244)
call UnitAddAbility(tu,0x4130574F)
call UnitAddAbility(tu,0x41313431)
call SaveAgentHandle(HH,h,0,tu)
call SaveReal(HH,h,1,period)
call SaveReal(HH,h,2,time)
call SaveAgentHandle(HH,h,3,AddSpecialEffectTarget("Abilities\\Spells\\Human\\InnerFire\\InnerFireTarget.mdl",tu,"overhead"))
call TimerStart(t,period,true,function cj_anonym__759)
else
call RecastSkills(Zetsu__c,Zetsu_TOBI,1,manacost)
call DisplayTimedTextToPlayer(Zetsu__p,0.,0.,5.,"|cFFFFCC00Этого шиноби уже защищает Tobi.|r")
endif
set t=null
endfunction
function cj_anonym__760 takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local real x1=LoadReal(HH,h,0)
local real y1=LoadReal(HH,h,1)
local real period=LoadReal(HH,h,2)
local real time=LoadReal(HH,h,3)
if time>0.and GetUnitCurrentOrder(Zetsu__c)==OrderId("blizzard")then
call SaveReal(HH,h,3,time-period)
else
if time==0.and GetUnitCurrentOrder(Zetsu__c)==OrderId("blizzard")then
call SetUnitPosition(Zetsu__c,x1,y1)
endif
call IssueImmediateOrder(Zetsu__c,"stop")
call FlushChildHashtable(HH,h)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t=null
endfunction
function Zetsu__KageroTPCast takes real x1,real y1 returns nothing
local timer t=CreateTimer()
local integer h=GetHandleId(t)
local real period=.1
local real time=3.-period
call Sound("Akatsuki Jutsu.mp3")
call SaveReal(HH,h,0,x1)
call SaveReal(HH,h,1,y1)
call SaveReal(HH,h,2,period)
call SaveReal(HH,h,3,time)
call TimerStart(t,period,true,function cj_anonym__760)
set t=null
endfunction
function cj_anonym__761 takes nothing returns nothing
if GetUnitAbilityLevel(Zetsu__c,0x42303344)==0 then
call SetUnitPathing(Zetsu__c,true)
call UnitRemoveAbility(Zetsu__c,0x41304942)
call UnitRemoveAbility(Zetsu__c,0x41313143)
call UnitRemoveAbility(Zetsu__c,0x41305845)
call SetPlayerAbilityAvailable(Zetsu__p,0x41313048,false)
call SetPlayerAbilityAvailable(Zetsu__p,Zetsu_KAGERO,true)
call SetPlayerAbilityAvailable(Zetsu__p,Zetsu_TOBI,true)
call SetPlayerAbilityAvailable(Zetsu__p,Zetsu_BUNSHIN,true)
call SetPlayerAbilityAvailable(Zetsu__p,Zetsu_ULT,true)
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endif
endfunction
function Zetsu__KageroCast takes nothing returns nothing
call Sound("Akatsuki Jutsu.mp3")
call SetUnitPathing(Zetsu__c,false)
call SetPlayerAbilityAvailable(Zetsu__p,Zetsu_KAGERO,false)
call SetPlayerAbilityAvailable(Zetsu__p,Zetsu_TOBI,false)
call SetPlayerAbilityAvailable(Zetsu__p,Zetsu_BUNSHIN,false)
call SetPlayerAbilityAvailable(Zetsu__p,Zetsu_ULT,false)
if GetUnitAbilityLevel(Zetsu__c,0x41313048)>0 then
call SetPlayerAbilityAvailable(Zetsu__p,0x41313048,true)
else
call UnitAddAbility(Zetsu__c,0x41313048)
endif
call UnitAddAbility(Zetsu__c,0x41305845)
call UnitAddAbility(Zetsu__c,0x41313143)
call UnitAddAbility(Zetsu__c,0x41304942)
call TimerStart(CreateTimer(),.1,true,function cj_anonym__761)
endfunction
function Zetsu__SpellsConditions takes nothing returns boolean
local integer i=GetSpellAbilityId()
return i==Zetsu_KAGERO or i==0x41305845 or i==0x41313048 or i==Zetsu_TOBI or i==Zetsu_ULT or i==0x41303550 or i==0x41304A58
endfunction
function Zetsu__SpellsActions takes nothing returns nothing
local integer i
if Zetsu__c==null then
set Zetsu__c=GetTriggerUnit()
set Zetsu__p=GetOwningPlayer(Zetsu__c)
endif
set i=GetSpellAbilityId()
if i==Zetsu_KAGERO then
call Zetsu__KageroCast()
elseif i==0x41305845 then
call UnitRemoveAbility(Zetsu__c,0x42303344)
elseif i==0x41313048 then
call Zetsu__KageroTPCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==Zetsu_TOBI then
call Zetsu__TobiCast(GetSpellTargetUnit())
elseif i==Zetsu_ULT then
call Zetsu__UltCast()
elseif i==0x41303550 then
call Zetsu__HoshiCast(GetSpellTargetX(),GetSpellTargetY())
elseif i==0x41304A58 then
call Zetsu__MoktonCast(GetSpellTargetX(),GetSpellTargetY())
endif
endfunction
function Zetsu_Init takes nothing returns nothing
local integer i=0
local trigger spells=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(spells,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i=i+1
exitwhen i==bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(spells,Condition(function Zetsu__SpellsConditions))
call TriggerAddAction(spells,function Zetsu__SpellsActions)
set spells=null
endfunction
function InitCustomTriggers takes nothing returns nothing
call InitTrig_Creeps_Up_Imp_1()
call InitTrig_Creeps_Up_Imp_2()
call InitTrig_Creeps_Up_Imp_3()
call InitTrig_Creeps_Up_Imp_4()
call InitTrig_Creeps_Up_Imp_5()
call InitTrig_Creeps_Up_Imp_6()
call InitTrig_Creeps_Up_Imp_7()
call InitTrig_Creeps_Up_Imp_8()
call InitTrig_Creeps_Up_Imp_9()
call InitTrig_Creeps_Up_Imp_10()
call InitTrig_Creeps_Down_Imp_1()
call InitTrig_Creeps_Down_Imp_2()
call InitTrig_Creeps_Down_Imp_3()
call InitTrig_Creeps_Down_Imp_4()
call InitTrig_Creeps_Down_Imp_5()
call InitTrig_Creeps_Down_Imp_6()
call InitTrig_Creeps_Down_Imp_7()
call InitTrig_Creeps_Down_Imp_8()
call InitTrig_Creeps_Down_Imp_9()
call InitTrig_Creeps_Down_Imp_10()
call InitTrig_GetUpLevel()
call InitTrig_CreepsSpecialImpCastSpell()
call InitTrig_CreepsSpecialImp()
call InitTrig_Creeps()
call InitTrig_Neiturals()
call InitTrig_Neitural_Creeps_Left_the_Rects()
call InitTrig_Healers()
call InitTrig_Outpost()
call InitTrig_GuardsBoundary()
call InitTrig_Biju()
call InitTrig_Average()
call InitTrig_Refresh()
call InitTrig_Kill_Command()
call InitTrig_Ms_Command()
call InitTrig_ChatClear_Command()
call InitTrig_CamClear_Command()
call InitTrig_Repick_Command()
call InitTrig_Revive_Command()
call InitTrig_Tables_Show()
call InitTrig_Tutorial_Command()
call InitTrig_Viewer_Mod()
call InitTrig_NarutoKuramaChakra_Command()
call InitTrig_D_Command()
call InitTrig_SES_Command()
call InitTrig_W_Command()
call InitTrig_TS_Command()
call InitTrig_MO_Command()
call InitTrig_WTF_Mod()
call InitTrig_AI_Remove_Command()
call InitTrig_ItemsPickUp()
call InitTrig_ItemsSellNetWorth()
call InitTrig_Assists_Reg()
call InitTrig_AddToAssisters()
call InitTrig_Damage_System_Text_Registr()
call InitTrig_Damage_System_Text_Show()
call InitTrig_Denay()
call InitTrig_SunagakureCapture()
call InitTrig_IwagakureCapture()
call InitTrig_KirigakureCapture()
call InitTrig_KumogakureCapture()
call InitTrig_RankSystemGetDamage()
call InitTrig_RankSystemGetClick()
call InitTrig_MB_Frag_Hero()
call InitTrig_MB_Frag_Barracks()
call InitTrig_MB_Frag_Outpost()
call InitTrig_MB_Frag_Turels()
call InitTrig_MB_Frag_Others()
call InitTrig_EmotionsSystem()
call InitTrig_Shop_Open_Alliance()
call InitTrig_Shop_Open_Akatsuki()
call InitTrig_Shop_Esc()
call InitTrig_Shop_Track()
call InitTrig_Shop_Hit()
call InitTrig_Track()
call InitTrig_Click()
call InitTrig_CaptainAnswer()
call InitTrig_Quest()
call InitTrig_Leavers()
call InitTrig_Hero_Enter_an_Rect_Alliance()
call InitTrig_Hero_Enter_an_Rect_Akatsuki()
call InitTrig_Heroes_Speech()
call InitTrig_Heroes_Speech_Select()
call InitTrig_Init()
call InitTrig_StartGame()
call InitTrig_Settings_Track()
call InitTrig_Settings_Click()
call InitTrig_Multiboard()
call InitTrig_Victory()
endfunction
function RunInitializationTriggers takes nothing returns nothing
call ConditionalTriggerExecute(gg_trg_Init)
endfunction
function InitCustomPlayerSlots takes nothing returns nothing
call SetPlayerStartLocation(Player(0),0)
call ForcePlayerStartLocation(Player(0),0)
call SetPlayerColor(Player(0),ConvertPlayerColor(0))
call SetPlayerRacePreference(Player(0),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(0),false)
call SetPlayerController(Player(0),MAP_CONTROL_USER)
call SetPlayerStartLocation(Player(1),1)
call ForcePlayerStartLocation(Player(1),1)
call SetPlayerColor(Player(1),ConvertPlayerColor(1))
call SetPlayerRacePreference(Player(1),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(1),false)
call SetPlayerController(Player(1),MAP_CONTROL_USER)
call SetPlayerStartLocation(Player(2),2)
call ForcePlayerStartLocation(Player(2),2)
call SetPlayerColor(Player(2),ConvertPlayerColor(2))
call SetPlayerRacePreference(Player(2),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(2),false)
call SetPlayerController(Player(2),MAP_CONTROL_USER)
call SetPlayerStartLocation(Player(3),3)
call ForcePlayerStartLocation(Player(3),3)
call SetPlayerColor(Player(3),ConvertPlayerColor(3))
call SetPlayerRacePreference(Player(3),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(3),false)
call SetPlayerController(Player(3),MAP_CONTROL_USER)
call SetPlayerStartLocation(Player(4),4)
call ForcePlayerStartLocation(Player(4),4)
call SetPlayerColor(Player(4),ConvertPlayerColor(4))
call SetPlayerRacePreference(Player(4),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(4),false)
call SetPlayerController(Player(4),MAP_CONTROL_RESCUABLE)
call SetPlayerAlliance(Player(4),Player(0),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(4),Player(1),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(4),Player(2),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(4),Player(3),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(4),Player(6),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(4),Player(7),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(4),Player(8),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(4),Player(9),ALLIANCE_RESCUABLE,true)
call SetPlayerStartLocation(Player(5),5)
call ForcePlayerStartLocation(Player(5),5)
call SetPlayerColor(Player(5),ConvertPlayerColor(5))
call SetPlayerRacePreference(Player(5),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(5),false)
call SetPlayerController(Player(5),MAP_CONTROL_COMPUTER)
call SetPlayerStartLocation(Player(6),6)
call ForcePlayerStartLocation(Player(6),6)
call SetPlayerColor(Player(6),ConvertPlayerColor(6))
call SetPlayerRacePreference(Player(6),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(6),false)
call SetPlayerController(Player(6),MAP_CONTROL_USER)
call SetPlayerStartLocation(Player(7),7)
call ForcePlayerStartLocation(Player(7),7)
call SetPlayerColor(Player(7),ConvertPlayerColor(7))
call SetPlayerRacePreference(Player(7),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(7),false)
call SetPlayerController(Player(7),MAP_CONTROL_USER)
call SetPlayerStartLocation(Player(8),8)
call ForcePlayerStartLocation(Player(8),8)
call SetPlayerColor(Player(8),ConvertPlayerColor(8))
call SetPlayerRacePreference(Player(8),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(8),false)
call SetPlayerController(Player(8),MAP_CONTROL_USER)
call SetPlayerStartLocation(Player(9),9)
call ForcePlayerStartLocation(Player(9),9)
call SetPlayerColor(Player(9),ConvertPlayerColor(9))
call SetPlayerRacePreference(Player(9),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(9),false)
call SetPlayerController(Player(9),MAP_CONTROL_USER)
call SetPlayerStartLocation(Player(10),10)
call ForcePlayerStartLocation(Player(10),10)
call SetPlayerColor(Player(10),ConvertPlayerColor(10))
call SetPlayerRacePreference(Player(10),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(10),false)
call SetPlayerController(Player(10),MAP_CONTROL_RESCUABLE)
call SetPlayerAlliance(Player(10),Player(0),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(10),Player(1),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(10),Player(2),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(10),Player(3),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(10),Player(6),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(10),Player(7),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(10),Player(8),ALLIANCE_RESCUABLE,true)
call SetPlayerAlliance(Player(10),Player(9),ALLIANCE_RESCUABLE,true)
call SetPlayerStartLocation(Player(11),11)
call ForcePlayerStartLocation(Player(11),11)
call SetPlayerColor(Player(11),ConvertPlayerColor(11))
call SetPlayerRacePreference(Player(11),RACE_PREF_HUMAN)
call SetPlayerRaceSelectable(Player(11),false)
call SetPlayerController(Player(11),MAP_CONTROL_COMPUTER)
endfunction
function InitCustomTeams takes nothing returns nothing
call SetPlayerTeam(Player(0),0)
call SetPlayerState(Player(0),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(1),0)
call SetPlayerState(Player(1),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(2),0)
call SetPlayerState(Player(2),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(3),0)
call SetPlayerState(Player(3),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(4),0)
call SetPlayerState(Player(4),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(5),0)
call SetPlayerState(Player(5),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerAllianceStateAllyBJ(Player(0),Player(1),true)
call SetPlayerAllianceStateAllyBJ(Player(0),Player(2),true)
call SetPlayerAllianceStateAllyBJ(Player(0),Player(3),true)
call SetPlayerAllianceStateAllyBJ(Player(0),Player(4),true)
call SetPlayerAllianceStateAllyBJ(Player(0),Player(5),true)
call SetPlayerAllianceStateAllyBJ(Player(1),Player(0),true)
call SetPlayerAllianceStateAllyBJ(Player(1),Player(2),true)
call SetPlayerAllianceStateAllyBJ(Player(1),Player(3),true)
call SetPlayerAllianceStateAllyBJ(Player(1),Player(4),true)
call SetPlayerAllianceStateAllyBJ(Player(1),Player(5),true)
call SetPlayerAllianceStateAllyBJ(Player(2),Player(0),true)
call SetPlayerAllianceStateAllyBJ(Player(2),Player(1),true)
call SetPlayerAllianceStateAllyBJ(Player(2),Player(3),true)
call SetPlayerAllianceStateAllyBJ(Player(2),Player(4),true)
call SetPlayerAllianceStateAllyBJ(Player(2),Player(5),true)
call SetPlayerAllianceStateAllyBJ(Player(3),Player(0),true)
call SetPlayerAllianceStateAllyBJ(Player(3),Player(1),true)
call SetPlayerAllianceStateAllyBJ(Player(3),Player(2),true)
call SetPlayerAllianceStateAllyBJ(Player(3),Player(4),true)
call SetPlayerAllianceStateAllyBJ(Player(3),Player(5),true)
call SetPlayerAllianceStateAllyBJ(Player(4),Player(0),true)
call SetPlayerAllianceStateAllyBJ(Player(4),Player(1),true)
call SetPlayerAllianceStateAllyBJ(Player(4),Player(2),true)
call SetPlayerAllianceStateAllyBJ(Player(4),Player(3),true)
call SetPlayerAllianceStateAllyBJ(Player(4),Player(5),true)
call SetPlayerAllianceStateAllyBJ(Player(5),Player(0),true)
call SetPlayerAllianceStateAllyBJ(Player(5),Player(1),true)
call SetPlayerAllianceStateAllyBJ(Player(5),Player(2),true)
call SetPlayerAllianceStateAllyBJ(Player(5),Player(3),true)
call SetPlayerAllianceStateAllyBJ(Player(5),Player(4),true)
call SetPlayerAllianceStateVisionBJ(Player(0),Player(1),true)
call SetPlayerAllianceStateVisionBJ(Player(0),Player(2),true)
call SetPlayerAllianceStateVisionBJ(Player(0),Player(3),true)
call SetPlayerAllianceStateVisionBJ(Player(0),Player(4),true)
call SetPlayerAllianceStateVisionBJ(Player(0),Player(5),true)
call SetPlayerAllianceStateVisionBJ(Player(1),Player(0),true)
call SetPlayerAllianceStateVisionBJ(Player(1),Player(2),true)
call SetPlayerAllianceStateVisionBJ(Player(1),Player(3),true)
call SetPlayerAllianceStateVisionBJ(Player(1),Player(4),true)
call SetPlayerAllianceStateVisionBJ(Player(1),Player(5),true)
call SetPlayerAllianceStateVisionBJ(Player(2),Player(0),true)
call SetPlayerAllianceStateVisionBJ(Player(2),Player(1),true)
call SetPlayerAllianceStateVisionBJ(Player(2),Player(3),true)
call SetPlayerAllianceStateVisionBJ(Player(2),Player(4),true)
call SetPlayerAllianceStateVisionBJ(Player(2),Player(5),true)
call SetPlayerAllianceStateVisionBJ(Player(3),Player(0),true)
call SetPlayerAllianceStateVisionBJ(Player(3),Player(1),true)
call SetPlayerAllianceStateVisionBJ(Player(3),Player(2),true)
call SetPlayerAllianceStateVisionBJ(Player(3),Player(4),true)
call SetPlayerAllianceStateVisionBJ(Player(3),Player(5),true)
call SetPlayerAllianceStateVisionBJ(Player(4),Player(0),true)
call SetPlayerAllianceStateVisionBJ(Player(4),Player(1),true)
call SetPlayerAllianceStateVisionBJ(Player(4),Player(2),true)
call SetPlayerAllianceStateVisionBJ(Player(4),Player(3),true)
call SetPlayerAllianceStateVisionBJ(Player(4),Player(5),true)
call SetPlayerAllianceStateVisionBJ(Player(5),Player(0),true)
call SetPlayerAllianceStateVisionBJ(Player(5),Player(1),true)
call SetPlayerAllianceStateVisionBJ(Player(5),Player(2),true)
call SetPlayerAllianceStateVisionBJ(Player(5),Player(3),true)
call SetPlayerAllianceStateVisionBJ(Player(5),Player(4),true)
call SetPlayerTeam(Player(6),1)
call SetPlayerState(Player(6),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(7),1)
call SetPlayerState(Player(7),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(8),1)
call SetPlayerState(Player(8),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(9),1)
call SetPlayerState(Player(9),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(10),1)
call SetPlayerState(Player(10),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerTeam(Player(11),1)
call SetPlayerState(Player(11),PLAYER_STATE_ALLIED_VICTORY,1)
call SetPlayerAllianceStateAllyBJ(Player(6),Player(7),true)
call SetPlayerAllianceStateAllyBJ(Player(6),Player(8),true)
call SetPlayerAllianceStateAllyBJ(Player(6),Player(9),true)
call SetPlayerAllianceStateAllyBJ(Player(6),Player(10),true)
call SetPlayerAllianceStateAllyBJ(Player(6),Player(11),true)
call SetPlayerAllianceStateAllyBJ(Player(7),Player(6),true)
call SetPlayerAllianceStateAllyBJ(Player(7),Player(8),true)
call SetPlayerAllianceStateAllyBJ(Player(7),Player(9),true)
call SetPlayerAllianceStateAllyBJ(Player(7),Player(10),true)
call SetPlayerAllianceStateAllyBJ(Player(7),Player(11),true)
call SetPlayerAllianceStateAllyBJ(Player(8),Player(6),true)
call SetPlayerAllianceStateAllyBJ(Player(8),Player(7),true)
call SetPlayerAllianceStateAllyBJ(Player(8),Player(9),true)
call SetPlayerAllianceStateAllyBJ(Player(8),Player(10),true)
call SetPlayerAllianceStateAllyBJ(Player(8),Player(11),true)
call SetPlayerAllianceStateAllyBJ(Player(9),Player(6),true)
call SetPlayerAllianceStateAllyBJ(Player(9),Player(7),true)
call SetPlayerAllianceStateAllyBJ(Player(9),Player(8),true)
call SetPlayerAllianceStateAllyBJ(Player(9),Player(10),true)
call SetPlayerAllianceStateAllyBJ(Player(9),Player(11),true)
call SetPlayerAllianceStateAllyBJ(Player(10),Player(6),true)
call SetPlayerAllianceStateAllyBJ(Player(10),Player(7),true)
call SetPlayerAllianceStateAllyBJ(Player(10),Player(8),true)
call SetPlayerAllianceStateAllyBJ(Player(10),Player(9),true)
call SetPlayerAllianceStateAllyBJ(Player(10),Player(11),true)
call SetPlayerAllianceStateAllyBJ(Player(11),Player(6),true)
call SetPlayerAllianceStateAllyBJ(Player(11),Player(7),true)
call SetPlayerAllianceStateAllyBJ(Player(11),Player(8),true)
call SetPlayerAllianceStateAllyBJ(Player(11),Player(9),true)
call SetPlayerAllianceStateAllyBJ(Player(11),Player(10),true)
call SetPlayerAllianceStateVisionBJ(Player(6),Player(7),true)
call SetPlayerAllianceStateVisionBJ(Player(6),Player(8),true)
call SetPlayerAllianceStateVisionBJ(Player(6),Player(9),true)
call SetPlayerAllianceStateVisionBJ(Player(6),Player(10),true)
call SetPlayerAllianceStateVisionBJ(Player(6),Player(11),true)
call SetPlayerAllianceStateVisionBJ(Player(7),Player(6),true)
call SetPlayerAllianceStateVisionBJ(Player(7),Player(8),true)
call SetPlayerAllianceStateVisionBJ(Player(7),Player(9),true)
call SetPlayerAllianceStateVisionBJ(Player(7),Player(10),true)
call SetPlayerAllianceStateVisionBJ(Player(7),Player(11),true)
call SetPlayerAllianceStateVisionBJ(Player(8),Player(6),true)
call SetPlayerAllianceStateVisionBJ(Player(8),Player(7),true)
call SetPlayerAllianceStateVisionBJ(Player(8),Player(9),true)
call SetPlayerAllianceStateVisionBJ(Player(8),Player(10),true)
call SetPlayerAllianceStateVisionBJ(Player(8),Player(11),true)
call SetPlayerAllianceStateVisionBJ(Player(9),Player(6),true)
call SetPlayerAllianceStateVisionBJ(Player(9),Player(7),true)
call SetPlayerAllianceStateVisionBJ(Player(9),Player(8),true)
call SetPlayerAllianceStateVisionBJ(Player(9),Player(10),true)
call SetPlayerAllianceStateVisionBJ(Player(9),Player(11),true)
call SetPlayerAllianceStateVisionBJ(Player(10),Player(6),true)
call SetPlayerAllianceStateVisionBJ(Player(10),Player(7),true)
call SetPlayerAllianceStateVisionBJ(Player(10),Player(8),true)
call SetPlayerAllianceStateVisionBJ(Player(10),Player(9),true)
call SetPlayerAllianceStateVisionBJ(Player(10),Player(11),true)
call SetPlayerAllianceStateVisionBJ(Player(11),Player(6),true)
call SetPlayerAllianceStateVisionBJ(Player(11),Player(7),true)
call SetPlayerAllianceStateVisionBJ(Player(11),Player(8),true)
call SetPlayerAllianceStateVisionBJ(Player(11),Player(9),true)
call SetPlayerAllianceStateVisionBJ(Player(11),Player(10),true)
endfunction
function InitAllyPriorities takes nothing returns nothing
call SetStartLocPrioCount(0,4)
call SetStartLocPrio(0,0,1,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(0,1,2,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(0,2,3,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(0,3,4,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(1,4)
call SetStartLocPrio(1,0,0,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(1,1,2,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(1,2,3,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(1,3,4,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(2,4)
call SetStartLocPrio(2,0,0,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(2,1,1,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(2,2,3,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(2,3,4,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(3,4)
call SetStartLocPrio(3,0,0,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(3,1,1,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(3,2,2,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(3,3,4,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(4,4)
call SetStartLocPrio(4,0,0,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(4,1,1,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(4,2,2,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(4,3,3,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(5,4)
call SetStartLocPrio(5,0,7,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(5,1,8,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(5,2,9,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(5,3,10,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(6,4)
call SetStartLocPrio(6,0,7,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(6,1,8,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(6,2,9,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(6,3,10,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(7,4)
call SetStartLocPrio(7,0,6,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(7,1,8,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(7,2,9,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(7,3,10,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(8,4)
call SetStartLocPrio(8,0,6,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(8,1,7,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(8,2,9,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(8,3,10,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(9,4)
call SetStartLocPrio(9,0,6,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(9,1,7,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(9,2,8,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(9,3,10,MAP_LOC_PRIO_HIGH)
call SetStartLocPrioCount(10,4)
call SetStartLocPrio(10,0,6,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(10,1,7,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(10,2,8,MAP_LOC_PRIO_HIGH)
call SetStartLocPrio(10,3,9,MAP_LOC_PRIO_HIGH)
endfunction
function main takes nothing returns nothing
call SetCameraBounds(-8704.0+GetCameraMargin(CAMERA_MARGIN_LEFT),-7680.0+GetCameraMargin(CAMERA_MARGIN_BOTTOM),7680.0-GetCameraMargin(CAMERA_MARGIN_RIGHT),4608.0-GetCameraMargin(CAMERA_MARGIN_TOP),-8704.0+GetCameraMargin(CAMERA_MARGIN_LEFT),4608.0-GetCameraMargin(CAMERA_MARGIN_TOP),7680.0-GetCameraMargin(CAMERA_MARGIN_RIGHT),-7680.0+GetCameraMargin(CAMERA_MARGIN_BOTTOM))
call SetDayNightModels("Environment\\DNC\\DNCLordaeron\\DNCLordaeronTerrain\\DNCLordaeronTerrain.mdl","Environment\\DNC\\DNCLordaeron\\DNCLordaeronUnit\\DNCLordaeronUnit.mdl")
call SetWaterBaseColor(0,255,255,255)
call NewSoundEnvironment("Default")
call SetAmbientDaySound("VillageDay")
call SetAmbientNightSound("VillageNight")
call SetMapMusic("Music",true,0)
call InitSounds()
call CreateRegions()
call CreateCameras()
call CreateAllDestructables()
call CreateAllUnits()
call InitBlizzard()
call ExecuteFunc("DebugLog__DebugLogInit")
call CreepsJutsu__Init()
call ItemsActivePoint__Init()
call ItemsActiveInstantly__Init()
call ItemsActiveTarget__Init()
call ItemsPassive__Init()
call BijuSpells__Init()
call Glyph__Init()
call InitGlobals()
call InitCustomTriggers()
call RunInitializationTriggers()
endfunction
function config takes nothing returns nothing
call SetMapName("Naruto: RTN |cFFFF5000[beta 5.0]|r")
call SetMapDescription("МОБА Наруто для 8-ми игроков с потрясающей атмосферой в сеттинге Четвёртой Мировой Войны Шиноби!\nВыбери одного из 40 персонажей, участвуй в захватывающих боях и защити свой Путь Ниндзя!\n\nVK / Twitter / Google+ / Facebook / YouTube: |cFFC6D2FFNWHC: RTN|r")
call SetPlayers(12)
call SetTeams(12)
call SetGamePlacement(MAP_PLACEMENT_TEAMS_TOGETHER)
call DefineStartLocation(0,-7936.0,-6656.0)
call DefineStartLocation(1,-7808.0,-6656.0)
call DefineStartLocation(2,-7680.0,-6656.0)
call DefineStartLocation(3,-7552.0,-6656.0)
call DefineStartLocation(4,-6592.0,-6208.0)
call DefineStartLocation(5,-6592.0,-6208.0)
call DefineStartLocation(6,6784.0,640.0)
call DefineStartLocation(7,6656.0,640.0)
call DefineStartLocation(8,6528.0,640.0)
call DefineStartLocation(9,6400.0,640.0)
call DefineStartLocation(10,5440.0,64.0)
call DefineStartLocation(11,5440.0,64.0)
call InitCustomPlayerSlots()
call InitCustomTeams()
call InitAllyPriorities()
endfunction
