From c4aef8f3a3fb77b2de419b249ebdb0746a0643a6 Mon Sep 17 00:00:00 2001 From: Lenheart <947330670@qq.com> Date: Mon, 18 Mar 2024 21:37:40 +0800 Subject: [PATCH] 111 --- .vscode/settings.json | 8 + DofileList.nut | 121 + .../DrawMainCustomUi_ATFighter.nut | 19 + .../DrawMainCustomUi_ATGunner.nut | 18 + DrawMainCustomUi/DrawMainCustomUi_ATMage.nut | 17 + DrawMainCustomUi/DrawMainCustomUi_All.nut | 757 +++ .../DrawMainCustomUi_CreatorMage.nut | 19 + .../DrawMainCustomUi_DemonicSwordman.nut | 17 + DrawMainCustomUi/DrawMainCustomUi_Fighter.nut | 17 + DrawMainCustomUi/DrawMainCustomUi_Gunner.nut | 17 + DrawMainCustomUi/DrawMainCustomUi_Mage.nut | 18 + DrawMainCustomUi/DrawMainCustomUi_Priest.nut | 18 + .../DrawMainCustomUi_Swordman.nut | 19 + DrawMainCustomUi/DrawMainCustomUi_Thief.nut | 18 + LenheartCallBack/Sq_CreatChr.nut | 4 + LenheartCallBack/Sq_DrawItem.nut | 31 + .../Sq_DrawMainMaxLayerCustomUI.nut | 253 + .../Sq_DrawMainTopLayerCustomUI.nut | 11 + LenheartCallBack/Sq_GetExeStr_Event.nut | 12 + LenheartCallBack/Sq_MouseEventCallBack.nut | 50 + LenheartCallBack/Sq_Pack_Control.nut | 13 + LenheartCallBack/Sq_RecoveryCallBack.nut | 190 + LenheartCallBack/Sq_SelectCharacter.nut | 3 + LenheartCallBack/Sq_SendPackType_Event.nut | 111 + LenheartCallBack/Sq_SettingWindow.nut | 219 + MoveTownEvent/MoveTownEvent.nut | 34 + NativeClassInit/IRDAICharacter.nut | 47 + NativeClassInit/IRDActiveObject.nut | 11 + NativeClassInit/IRDSQRCharacter.nut | 52 + Plugins/100UI/100UI.nut | 1108 +++++ Plugins/Anton/anton.nut | 93 + Plugins/Anton/antonbuttonclass.nut | 360 ++ Plugins/Anton/antondungeoninfo.nut | 1480 ++++++ Plugins/Anton/antontownmainbutton.nut | 108 + Plugins/Anton/antontownmainparty_info.nut | 120 + Plugins/Anton/antontownmainparty_list.nut | 377 ++ Plugins/Anton/antontownmainparty_req.nut | 233 + Plugins/Anton/antontownmainparty_user.nut | 303 ++ Plugins/AradPass/AradPass.nut | 969 ++++ Plugins/AvatarShape/Avata | 79 + Plugins/AvatarShape/AvatarShape.nut | 416 ++ Plugins/BuffSwitching/BuffSwitching.nut | 767 +++ Plugins/CollectBooks/CollectBooks.nut | 1003 ++++ Plugins/CollectBox/CollectBox.nut | 613 +++ Plugins/DamageFont/DamageFont.nut | 798 ++++ Plugins/DragonBox/DragonBox.nut | 739 +++ Plugins/DungeonRank/DungeonRank.nut | 226 + Plugins/Fate_Select/Fate_Select.nut | 1135 +++++ Plugins/Fate_Select/Fate_Selectold.nut | 1076 +++++ Plugins/Fiendwar/Fiendwar.nut | 101 + Plugins/Fiendwar/FiendwarHall.nut | 380 ++ Plugins/Fiendwar/FiendwarHallCreateParty.nut | 101 + Plugins/HorseGuessing/HorseGuessing.nut | 1415 ++++++ .../LaunchAnnouncement/LaunchAnnouncement.nut | 171 + Plugins/Luke/luke.nut | 387 ++ Plugins/Luke/lukedungeoninfo.nut | 2138 +++++++++ Plugins/Luke/lukeparty.nut | 1087 +++++ Plugins/MarrySystem/MarrySystem.nut | 512 ++ Plugins/Medal/Medal.nut | 1253 +++++ Plugins/MidsummerParty/MidsummerParty.nut | 380 ++ Plugins/NewUpgrade/NewUpgrade.nut | 446 ++ Plugins/OnlineEvent/OnlineEvent.nut | 491 ++ Plugins/Ptst/Ptst.nut | 1432 ++++++ Plugins/Ptst/Ptst_Func.nut | 186 + Plugins/RaidAuction/RaidAuction.nut | 438 ++ Plugins/Roters/New_Roters.nut | 328 ++ Plugins/Roters/Roters.nut | 624 +++ Plugins/ServerAuction/ServerAuction.nut | 495 ++ .../SeverNotiAnimotion/SeverNotiAnimotion.nut | 29 + Plugins/SignIn/SignIn.nut | 447 ++ Plugins/Tomb/Tomb.nut | 282 ++ Plugins/TownMove/TownMove.nut | 445 ++ Plugins/Training/Training.nut | 4251 +++++++++++++++++ Plugins/Tuguan/Tuguan.nut | 705 +++ Plugins/WorldTower/WorldTower.nut | 314 ++ .../ProcPassiveSkill_ATGunner.nut | 15 + ProcPassiveSkill/ProcPassiveSkill_All.nut | 12 + SetState/SetState_ATFighter.nut | 12 + SetState/SetState_ATGunner.nut | 23 + SetState/SetState_ATMage.nut | 12 + SetState/SetState_All.nut | 29 + SetState/SetState_CreatorMage.nut | 12 + SetState/SetState_DemonicSwordman.nut | 12 + SetState/SetState_Fighter.nut | 12 + SetState/SetState_Gunner.nut | 12 + SetState/SetState_Mage.nut | 12 + SetState/SetState_Priest.nut | 12 + SetState/SetState_Swordman.nut | 14 + SetState/SetState_Thief.nut | 12 + Tool/ClassTool.nut | 1074 +++++ Tool/DebugInfo.nut | 71 + Tool/Tool.nut | 1615 +++++++ UI/HOOK_UI/CreatChr.nut | 343 ++ UI/Init_CodeDraw/Init_CodeDraw.nut | 9 + UI/Init_ItemColor/Init_ItemColor.nut | 314 ++ UI/MonsterBloodUi/MonsterBloodUi.nut | 237 + UI/TeamDps/TeamDps.nut | 235 + appendage/character/ap_atmage_bodyeffect.nut | Bin 0 -> 4095 bytes appendage/character/ap_atmage_buff.nut | Bin 0 -> 1407 bytes appendage/character/ap_atmage_effect.nut | 144 + .../character/ap_atmage_elemental_change.nut | Bin 0 -> 1426 bytes appendage/character/ap_avenger_awakening.nut | Bin 0 -> 3361 bytes .../character/ap_avenger_devilstrike.nut | Bin 0 -> 1343 bytes appendage/character/ap_avenger_effect.nut | Bin 0 -> 2983 bytes appendage/character/ap_avenger_nightmare.nut | Bin 0 -> 1219 bytes appendage/character/ap_common_suck.nut | Bin 0 -> 1167 bytes appendage/character/ap_powerofdarkness.nut | 45 + appendage/character/executionappendage.nut | Bin 0 -> 7500 bytes appendage/character/hearthings.nut | Bin 0 -> 136 bytes appendage/character/scythe_mastery.nut | Bin 0 -> 1025 bytes character/ATGunner/ATGunner13State.nut | 46 + character/ATGunner/ATGunner_po.nut | 132 + character/ATGunner/Ranger/Sawblade.nut | 581 +++ character/GetCurrentModuleDamageRate.nut | 137 + character/Swordman/Swordman13State.nut | 46 + character/Swordman/Swordman_po.nut | 133 + .../Swordman/WeaponMaster/Meteorsword.nut | 387 ++ .../Swordman/WeaponMaster/ap_Meteorsword.nut | 78 + character/atgunner_load_state.nut | 15 + character/atmage/atmage_buff.nut | Bin 0 -> 468 bytes character/atmage/atmage_common.nut | 1256 +++++ character/atmage/atmage_header.nut | 341 ++ character/atmage/atmage_throw.nut | 121 + .../atmagedashattack/atmagedashattack.nut | 82 + character/atmage/attack/attack.nut | 323 ++ character/atmage/attack/po_magic_ball.nut | 440 ++ .../atmage/bluedragonwill/bluedragonwill.nut | 471 ++ .../bluedragonwill/po_atbluedragonwillexp.nut | Bin 0 -> 1104 bytes .../bluedragonwill/po_atbluedragonwillsub.nut | Bin 0 -> 1356 bytes character/atmage/brokenarrow/brokenarrow.nut | 667 +++ .../atmage/brokenarrow/po_atbrokenarrow.nut | 358 ++ .../atmage/chainlightning/chainlightning.nut | 385 ++ .../chainlightning/po_atchainlightning.nut | 745 +++ .../po_atchainlightningtarget.nut | Bin 0 -> 5928 bytes character/atmage/concentrate/concentrate.nut | Bin 0 -> 2833 bytes .../concentrate/po_atconcentrateexp.nut | Bin 0 -> 5471 bytes .../atmage/crystalattack/crystalattack.nut | Bin 0 -> 4917 bytes .../atmage/crystalattack/po_crystalcore.nut | 59 + character/atmage/darkchange/dark_change.nut | Bin 0 -> 5731 bytes .../ap_atdarknessmantle_effect.nut | Bin 0 -> 2187 bytes .../ap_atdarknessmantle_suck.nut | Bin 0 -> 1612 bytes .../atmage/darknessmantle/darknessmantle.nut | 347 ++ .../darknessmantle/po_atdarknessmantle.nut | 891 ++++ .../darknessmantle/po_atdarknessmantleexp.nut | 91 + .../atmage/diehard/ap_atmage_diehard.nut | 472 ++ .../diehard/ap_atmage_diehardslowheal.nut | 250 + character/atmage/diehard/diehard.nut | 203 + .../elementalbuster/elementalbuster.nut | 483 ++ .../po_atelementalbusterexpbody.nut | Bin 0 -> 6608 bytes .../ap_atmage_elemental_change.nut | Bin 0 -> 1243 bytes .../elementalchange/elemental_change.nut | Bin 0 -> 2982 bytes .../atmage/elementalrain/elementalrain.nut | 386 ++ .../elementalrain/po_elementalrainbigball.nut | Bin 0 -> 1928 bytes .../po_elementalrainbigballexp.nut | Bin 0 -> 1478 bytes .../elementalrain/po_elementalraincreator.nut | Bin 0 -> 2976 bytes .../elementalstrikeex/elementalstrikeex.nut | Bin 0 -> 7672 bytes .../po_atelementalstrikeex.nut | 485 ++ .../expressions/ap_atmage_expression.nut | Bin 0 -> 1116 bytes .../atmage/fallenblossoms/fallenblossoms.nut | 468 ++ character/atmage/firepillar/firepillar.nut | 388 ++ .../atmage/firepillar/po_atfirepillar.nut | 241 + character/atmage/fireroad/fire_road.nut | Bin 0 -> 5137 bytes character/atmage/fireroad/po_fire_road.nut | Bin 0 -> 4572 bytes character/atmage/flamecircle/flamecircle.nut | 431 ++ .../atmage/flamecircle/po_atflamecircle.nut | 189 + character/atmage/frozenland/frozenland.nut | 419 ++ .../atmage/frozenland/po_atfrozenlandexp.nut | Bin 0 -> 7441 bytes .../po_atfrozenlandexpwaterpole.nut | 44 + .../frozenland/po_atfrozenlandmagiccircle.nut | 516 ++ .../atmage/frozenland/po_atfrozenlandpole.nut | 420 ++ character/atmage/holonglight/holong_light.nut | Bin 0 -> 4669 bytes .../atmage/holonglight/po_atholonglight.nut | Bin 0 -> 7362 bytes character/atmage/icearea/icearea.nut | Bin 0 -> 3288 bytes character/atmage/icearea/po_icearea.nut | Bin 0 -> 3649 bytes .../atmage/icearea/po_iceareaicerain.nut | Bin 0 -> 2688 bytes character/atmage/icechakram/icechakram.nut | 496 ++ .../icechakram/po_aticechakramlarge.nut | Bin 0 -> 7452 bytes .../po_aticechakramsmallicering.nut | 663 +++ .../icechakram/po_aticechakramsmallmgr.nut | 429 ++ character/atmage/icecrash/ap_icecrash.nut | Bin 0 -> 2936 bytes character/atmage/icecrash/icecrash.nut | 238 + character/atmage/icefieldex/icefieldex.nut | 77 + .../atmage/icefieldex/po_aticefieldex.nut | Bin 0 -> 1356 bytes .../atmage/iceman/ap_aticemanmagiccircle.nut | Bin 0 -> 5823 bytes character/atmage/iceman/iceman.nut | 471 ++ .../atmage/iceman/po_aticemanmagiccircle.nut | 563 +++ character/atmage/iceorbex/iceorbex.nut | 103 + character/atmage/iceorbex/po_aticeorbex.nut | 300 ++ .../atmage/iceorbex/po_aticeorbexprickle.nut | Bin 0 -> 2297 bytes .../atmage/iceroad/ap_atmage_iceroad.nut | Bin 0 -> 3073 bytes .../atmage/iceroad/ap_atmage_iceroadcs.nut | Bin 0 -> 2496 bytes character/atmage/iceroad/iceroad.nut | 351 ++ character/atmage/iceroad/po_aticeroad.nut | Bin 0 -> 4720 bytes character/atmage/icesword/ice_sword.nut | Bin 0 -> 5395 bytes character/atmage/jumpattack/jump_attack.nut | Bin 0 -> 4108 bytes character/atmage/jumpattack/po_magic_ball.nut | 339 ++ .../atmage/lightningwall/ap_lightningwall.nut | Bin 0 -> 2600 bytes .../atmage/lightningwall/lightningwall.nut | Bin 0 -> 4716 bytes .../atmage/lightningwall/po_lightningwall.nut | 343 ++ character/atmage/magiccannon/magiccannon.nut | Bin 0 -> 6124 bytes .../atmage/magiccannon/po_magiccannon.nut | 270 ++ .../atmage/magicshield/ap_magicshield.nut | 347 ++ character/atmage/magicshield/magicshield.nut | Bin 0 -> 2001 bytes .../atmage/manaburst/ap_atmage_manaburst.nut | Bin 0 -> 2331 bytes character/atmage/manaburst/manaburst.nut | Bin 0 -> 2756 bytes character/atmage/multishot/multishot.nut | 275 ++ character/atmage/multishot/po_magic_ball.nut | 239 + character/atmage/passive_skill_atmage.nut | 104 + character/atmage/pieceofice/piece_of_ice.nut | 142 + .../atmage/pieceofice/po_atpieceofice.nut | Bin 0 -> 2621 bytes .../atmage/pieceofice/po_atpieceoficecore.nut | Bin 0 -> 2276 bytes character/atmage/pushout/ap_pushout.nut | 74 + .../atmage/pushout/ap_pushoutexplosion.nut | Bin 0 -> 2942 bytes character/atmage/pushout/pushout.nut | 274 ++ .../ap_atmage_element_attack_water.nut | 35 + .../atmage/resonance/ap_atmage_resonance.nut | Bin 0 -> 1103 bytes character/atmage/resonance/resonance.nut | Bin 0 -> 6308 bytes character/atmage/teleport/teleport.nut | 393 ++ .../tundrasoul/ap_atmage_tundrasoul.nut | 266 ++ .../tundrasoul/ap_atmage_tundrasoulcs.nut | Bin 0 -> 6400 bytes .../tundrasoul/po_attundrasoulfrozen.nut | Bin 0 -> 1350 bytes .../atmage/turnwindmill/po_atturnwidmill.nut | Bin 0 -> 5670 bytes .../atmage/turnwindmill/turnwindmill.nut | 382 ++ .../atmage/watercannon/po_atwatercannon.nut | Bin 0 -> 5843 bytes .../watercannon/po_atwatercannonexp.nut | Bin 0 -> 1857 bytes character/atmage/watercannon/watercannon.nut | Bin 0 -> 3132 bytes .../atmage/windstrike/po_wind_strike.nut | 29 + character/atmage/windstrike/wind_strike.nut | 187 + character/atmage_load_state.nut | 245 + character/avenger_load_state.nut | Bin 0 -> 4052 bytes .../common/burster/ap_common_burster.nut | Bin 0 -> 6065 bytes character/common/burster/burster.nut | 305 ++ character/common/common_header.nut | Bin 0 -> 1457 bytes character/common_load_state.nut | 18 + .../creatormage/ap_creatormage_disturb.nut | Bin 0 -> 2547 bytes .../creatormage/ap_creatormage_flame.nut | 112 + .../creatormage/ap_creatormage_guardian.nut | Bin 0 -> 2567 bytes character/creatormage/ap_creatormage_ice.nut | Bin 0 -> 2467 bytes .../creatormage/ap_creatormage_state.nut | Bin 0 -> 1144 bytes character/creatormage/ap_creatormage_wind.nut | 109 + .../creatordisturb/creatordisturb.nut | Bin 0 -> 4173 bytes .../creatormage/creatorflame/creatorflame.nut | Bin 0 -> 4089 bytes .../creatorguardian/creatorguardian.nut | Bin 0 -> 4201 bytes .../creatormage/creatorice/creatorice.nut | Bin 0 -> 4045 bytes character/creatormage/creatormage_common.nut | 2015 ++++++++ character/creatormage/creatormage_header.nut | Bin 0 -> 4476 bytes .../creatormage/creatorwind/creatorwind.nut | Bin 0 -> 4071 bytes .../firehurricane/firehurricane.nut | 317 ++ character/creatormage/firemeteo/firemeteo.nut | 82 + character/creatormage/firewall/firewall.nut | 68 + character/creatormage/iceplate/iceplate.nut | Bin 0 -> 2336 bytes character/creatormage/icerock/icerock.nut | 41 + character/creatormage/iceshield/iceshield.nut | 166 + character/creatormage/mgrab/mgrab.nut | 574 +++ .../microattack/po_microattack.nut | 60 + character/creatormage/mousecontrol_lib.nut | 635 +++ .../creatormage/passive_skill_creatormage.nut | 349 ++ .../creatormage/windpress/po_windpress.nut | 495 ++ character/creatormage/windpress/windpress.nut | 352 ++ .../creatormage/windstorm/po_windstorm.nut | 335 ++ character/creatormage/windstorm/windstorm.nut | Bin 0 -> 1932 bytes .../creatormage/woodfence/po_woodfence.nut | Bin 0 -> 3423 bytes character/creatormage/woodfence/woodfence.nut | Bin 0 -> 4268 bytes character/creatormage_load_state.nut | Bin 0 -> 3794 bytes character/priest/avenger_common.nut | 1942 ++++++++ character/priest/avenger_header.nut | 203 + character/priest/avengerattack.nut | 434 ++ character/priest/avengerjump.nut | 87 + character/priest/awakening.nut | 542 +++ character/priest/awakenningturnoff.nut | Bin 0 -> 4708 bytes character/priest/dashattack.nut | Bin 0 -> 5302 bytes character/priest/disasterex.nut | 472 ++ character/priest/earthquake.nut | 67 + character/priest/execution.nut | 618 +++ character/priest/fallingsoul.nut | 160 + character/priest/fastmove.nut | 591 +++ character/priest/hearthings.nut | 0 character/priest/hedgehog.nut | Bin 0 -> 1753 bytes character/priest/highspeedslash.nut | 202 + character/priest/pandemoniumex.nut | 252 + character/priest/passive_skill_priest.nut | 200 + character/priest/powerofdarkness.nut | 421 ++ character/priest/ripper.nut | 164 + character/priest/spincutter.nut | 391 ++ character/swordman_load_state.nut | 23 + common.nut | 665 +++ dnf_enum_header.nut | 1411 ++++++ init_character.nut | 87 + loadstate.nut | 18 + .../priest/po_devilstrike_attack1.nut | Bin 0 -> 891 bytes .../priest/po_devilstrike_attack2.nut | Bin 0 -> 891 bytes .../priest/po_devilstrike_attack3.nut | Bin 0 -> 891 bytes .../character/priest/po_disasterexp.nut | Bin 0 -> 940 bytes .../character/priest/po_earthquakerock.nut | Bin 0 -> 1378 bytes .../priest/po_pendemoniumexdevil.nut | 86 + .../priest/po_powerofdarknessarrow.nut | 24 + .../priest/po_powerofdarknesscircle.nut | Bin 0 -> 2056 bytes .../character/priest/po_ripperexplosion.nut | Bin 0 -> 1662 bytes .../character/priest/po_spincutter.nut | 189 + .../character/priest/po_spincutterthrow.nut | 62 + procAppend/procAppend_ATFighter.nut | 13 + procAppend/procAppend_ATGunner.nut | 24 + procAppend/procAppend_ATMage.nut | 13 + procAppend/procAppend_All.nut | 67 + procAppend/procAppend_CreatorMage.nut | 13 + procAppend/procAppend_DemonicSwordman.nut | 13 + procAppend/procAppend_Fighter.nut | 13 + procAppend/procAppend_Gunner.nut | 13 + procAppend/procAppend_Mage.nut | 13 + procAppend/procAppend_Priest.nut | 20 + procAppend/procAppend_Swordman.nut | 71 + procAppend/procAppend_Thief.nut | 13 + 特殊定制/a.nut | 26 + 313 files changed, 74071 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 DofileList.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_ATFighter.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_ATGunner.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_ATMage.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_All.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_CreatorMage.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_DemonicSwordman.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_Fighter.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_Gunner.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_Mage.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_Priest.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_Swordman.nut create mode 100644 DrawMainCustomUi/DrawMainCustomUi_Thief.nut create mode 100644 LenheartCallBack/Sq_CreatChr.nut create mode 100644 LenheartCallBack/Sq_DrawItem.nut create mode 100644 LenheartCallBack/Sq_DrawMainMaxLayerCustomUI.nut create mode 100644 LenheartCallBack/Sq_DrawMainTopLayerCustomUI.nut create mode 100644 LenheartCallBack/Sq_GetExeStr_Event.nut create mode 100644 LenheartCallBack/Sq_MouseEventCallBack.nut create mode 100644 LenheartCallBack/Sq_Pack_Control.nut create mode 100644 LenheartCallBack/Sq_RecoveryCallBack.nut create mode 100644 LenheartCallBack/Sq_SelectCharacter.nut create mode 100644 LenheartCallBack/Sq_SendPackType_Event.nut create mode 100644 LenheartCallBack/Sq_SettingWindow.nut create mode 100644 MoveTownEvent/MoveTownEvent.nut create mode 100644 NativeClassInit/IRDAICharacter.nut create mode 100644 NativeClassInit/IRDActiveObject.nut create mode 100644 NativeClassInit/IRDSQRCharacter.nut create mode 100644 Plugins/100UI/100UI.nut create mode 100644 Plugins/Anton/anton.nut create mode 100644 Plugins/Anton/antonbuttonclass.nut create mode 100644 Plugins/Anton/antondungeoninfo.nut create mode 100644 Plugins/Anton/antontownmainbutton.nut create mode 100644 Plugins/Anton/antontownmainparty_info.nut create mode 100644 Plugins/Anton/antontownmainparty_list.nut create mode 100644 Plugins/Anton/antontownmainparty_req.nut create mode 100644 Plugins/Anton/antontownmainparty_user.nut create mode 100644 Plugins/AradPass/AradPass.nut create mode 100644 Plugins/AvatarShape/Avata create mode 100644 Plugins/AvatarShape/AvatarShape.nut create mode 100644 Plugins/BuffSwitching/BuffSwitching.nut create mode 100644 Plugins/CollectBooks/CollectBooks.nut create mode 100644 Plugins/CollectBox/CollectBox.nut create mode 100644 Plugins/DamageFont/DamageFont.nut create mode 100644 Plugins/DragonBox/DragonBox.nut create mode 100644 Plugins/DungeonRank/DungeonRank.nut create mode 100644 Plugins/Fate_Select/Fate_Select.nut create mode 100644 Plugins/Fate_Select/Fate_Selectold.nut create mode 100644 Plugins/Fiendwar/Fiendwar.nut create mode 100644 Plugins/Fiendwar/FiendwarHall.nut create mode 100644 Plugins/Fiendwar/FiendwarHallCreateParty.nut create mode 100644 Plugins/HorseGuessing/HorseGuessing.nut create mode 100644 Plugins/LaunchAnnouncement/LaunchAnnouncement.nut create mode 100644 Plugins/Luke/luke.nut create mode 100644 Plugins/Luke/lukedungeoninfo.nut create mode 100644 Plugins/Luke/lukeparty.nut create mode 100644 Plugins/MarrySystem/MarrySystem.nut create mode 100644 Plugins/Medal/Medal.nut create mode 100644 Plugins/MidsummerParty/MidsummerParty.nut create mode 100644 Plugins/NewUpgrade/NewUpgrade.nut create mode 100644 Plugins/OnlineEvent/OnlineEvent.nut create mode 100644 Plugins/Ptst/Ptst.nut create mode 100644 Plugins/Ptst/Ptst_Func.nut create mode 100644 Plugins/RaidAuction/RaidAuction.nut create mode 100644 Plugins/Roters/New_Roters.nut create mode 100644 Plugins/Roters/Roters.nut create mode 100644 Plugins/ServerAuction/ServerAuction.nut create mode 100644 Plugins/SeverNotiAnimotion/SeverNotiAnimotion.nut create mode 100644 Plugins/SignIn/SignIn.nut create mode 100644 Plugins/Tomb/Tomb.nut create mode 100644 Plugins/TownMove/TownMove.nut create mode 100644 Plugins/Training/Training.nut create mode 100644 Plugins/Tuguan/Tuguan.nut create mode 100644 Plugins/WorldTower/WorldTower.nut create mode 100644 ProcPassiveSkill/ProcPassiveSkill_ATGunner.nut create mode 100644 ProcPassiveSkill/ProcPassiveSkill_All.nut create mode 100644 SetState/SetState_ATFighter.nut create mode 100644 SetState/SetState_ATGunner.nut create mode 100644 SetState/SetState_ATMage.nut create mode 100644 SetState/SetState_All.nut create mode 100644 SetState/SetState_CreatorMage.nut create mode 100644 SetState/SetState_DemonicSwordman.nut create mode 100644 SetState/SetState_Fighter.nut create mode 100644 SetState/SetState_Gunner.nut create mode 100644 SetState/SetState_Mage.nut create mode 100644 SetState/SetState_Priest.nut create mode 100644 SetState/SetState_Swordman.nut create mode 100644 SetState/SetState_Thief.nut create mode 100644 Tool/ClassTool.nut create mode 100644 Tool/DebugInfo.nut create mode 100644 Tool/Tool.nut create mode 100644 UI/HOOK_UI/CreatChr.nut create mode 100644 UI/Init_CodeDraw/Init_CodeDraw.nut create mode 100644 UI/Init_ItemColor/Init_ItemColor.nut create mode 100644 UI/MonsterBloodUi/MonsterBloodUi.nut create mode 100644 UI/TeamDps/TeamDps.nut create mode 100644 appendage/character/ap_atmage_bodyeffect.nut create mode 100644 appendage/character/ap_atmage_buff.nut create mode 100644 appendage/character/ap_atmage_effect.nut create mode 100644 appendage/character/ap_atmage_elemental_change.nut create mode 100644 appendage/character/ap_avenger_awakening.nut create mode 100644 appendage/character/ap_avenger_devilstrike.nut create mode 100644 appendage/character/ap_avenger_effect.nut create mode 100644 appendage/character/ap_avenger_nightmare.nut create mode 100644 appendage/character/ap_common_suck.nut create mode 100644 appendage/character/ap_powerofdarkness.nut create mode 100644 appendage/character/executionappendage.nut create mode 100644 appendage/character/hearthings.nut create mode 100644 appendage/character/scythe_mastery.nut create mode 100644 character/ATGunner/ATGunner13State.nut create mode 100644 character/ATGunner/ATGunner_po.nut create mode 100644 character/ATGunner/Ranger/Sawblade.nut create mode 100644 character/GetCurrentModuleDamageRate.nut create mode 100644 character/Swordman/Swordman13State.nut create mode 100644 character/Swordman/Swordman_po.nut create mode 100644 character/Swordman/WeaponMaster/Meteorsword.nut create mode 100644 character/Swordman/WeaponMaster/ap_Meteorsword.nut create mode 100644 character/atgunner_load_state.nut create mode 100644 character/atmage/atmage_buff.nut create mode 100644 character/atmage/atmage_common.nut create mode 100644 character/atmage/atmage_header.nut create mode 100644 character/atmage/atmage_throw.nut create mode 100644 character/atmage/atmagedashattack/atmagedashattack.nut create mode 100644 character/atmage/attack/attack.nut create mode 100644 character/atmage/attack/po_magic_ball.nut create mode 100644 character/atmage/bluedragonwill/bluedragonwill.nut create mode 100644 character/atmage/bluedragonwill/po_atbluedragonwillexp.nut create mode 100644 character/atmage/bluedragonwill/po_atbluedragonwillsub.nut create mode 100644 character/atmage/brokenarrow/brokenarrow.nut create mode 100644 character/atmage/brokenarrow/po_atbrokenarrow.nut create mode 100644 character/atmage/chainlightning/chainlightning.nut create mode 100644 character/atmage/chainlightning/po_atchainlightning.nut create mode 100644 character/atmage/chainlightning/po_atchainlightningtarget.nut create mode 100644 character/atmage/concentrate/concentrate.nut create mode 100644 character/atmage/concentrate/po_atconcentrateexp.nut create mode 100644 character/atmage/crystalattack/crystalattack.nut create mode 100644 character/atmage/crystalattack/po_crystalcore.nut create mode 100644 character/atmage/darkchange/dark_change.nut create mode 100644 character/atmage/darknessmantle/ap_atdarknessmantle_effect.nut create mode 100644 character/atmage/darknessmantle/ap_atdarknessmantle_suck.nut create mode 100644 character/atmage/darknessmantle/darknessmantle.nut create mode 100644 character/atmage/darknessmantle/po_atdarknessmantle.nut create mode 100644 character/atmage/darknessmantle/po_atdarknessmantleexp.nut create mode 100644 character/atmage/diehard/ap_atmage_diehard.nut create mode 100644 character/atmage/diehard/ap_atmage_diehardslowheal.nut create mode 100644 character/atmage/diehard/diehard.nut create mode 100644 character/atmage/elementalbuster/elementalbuster.nut create mode 100644 character/atmage/elementalbuster/po_atelementalbusterexpbody.nut create mode 100644 character/atmage/elementalchange/ap_atmage_elemental_change.nut create mode 100644 character/atmage/elementalchange/elemental_change.nut create mode 100644 character/atmage/elementalrain/elementalrain.nut create mode 100644 character/atmage/elementalrain/po_elementalrainbigball.nut create mode 100644 character/atmage/elementalrain/po_elementalrainbigballexp.nut create mode 100644 character/atmage/elementalrain/po_elementalraincreator.nut create mode 100644 character/atmage/elementalstrikeex/elementalstrikeex.nut create mode 100644 character/atmage/elementalstrikeex/po_atelementalstrikeex.nut create mode 100644 character/atmage/expressions/ap_atmage_expression.nut create mode 100644 character/atmage/fallenblossoms/fallenblossoms.nut create mode 100644 character/atmage/firepillar/firepillar.nut create mode 100644 character/atmage/firepillar/po_atfirepillar.nut create mode 100644 character/atmage/fireroad/fire_road.nut create mode 100644 character/atmage/fireroad/po_fire_road.nut create mode 100644 character/atmage/flamecircle/flamecircle.nut create mode 100644 character/atmage/flamecircle/po_atflamecircle.nut create mode 100644 character/atmage/frozenland/frozenland.nut create mode 100644 character/atmage/frozenland/po_atfrozenlandexp.nut create mode 100644 character/atmage/frozenland/po_atfrozenlandexpwaterpole.nut create mode 100644 character/atmage/frozenland/po_atfrozenlandmagiccircle.nut create mode 100644 character/atmage/frozenland/po_atfrozenlandpole.nut create mode 100644 character/atmage/holonglight/holong_light.nut create mode 100644 character/atmage/holonglight/po_atholonglight.nut create mode 100644 character/atmage/icearea/icearea.nut create mode 100644 character/atmage/icearea/po_icearea.nut create mode 100644 character/atmage/icearea/po_iceareaicerain.nut create mode 100644 character/atmage/icechakram/icechakram.nut create mode 100644 character/atmage/icechakram/po_aticechakramlarge.nut create mode 100644 character/atmage/icechakram/po_aticechakramsmallicering.nut create mode 100644 character/atmage/icechakram/po_aticechakramsmallmgr.nut create mode 100644 character/atmage/icecrash/ap_icecrash.nut create mode 100644 character/atmage/icecrash/icecrash.nut create mode 100644 character/atmage/icefieldex/icefieldex.nut create mode 100644 character/atmage/icefieldex/po_aticefieldex.nut create mode 100644 character/atmage/iceman/ap_aticemanmagiccircle.nut create mode 100644 character/atmage/iceman/iceman.nut create mode 100644 character/atmage/iceman/po_aticemanmagiccircle.nut create mode 100644 character/atmage/iceorbex/iceorbex.nut create mode 100644 character/atmage/iceorbex/po_aticeorbex.nut create mode 100644 character/atmage/iceorbex/po_aticeorbexprickle.nut create mode 100644 character/atmage/iceroad/ap_atmage_iceroad.nut create mode 100644 character/atmage/iceroad/ap_atmage_iceroadcs.nut create mode 100644 character/atmage/iceroad/iceroad.nut create mode 100644 character/atmage/iceroad/po_aticeroad.nut create mode 100644 character/atmage/icesword/ice_sword.nut create mode 100644 character/atmage/jumpattack/jump_attack.nut create mode 100644 character/atmage/jumpattack/po_magic_ball.nut create mode 100644 character/atmage/lightningwall/ap_lightningwall.nut create mode 100644 character/atmage/lightningwall/lightningwall.nut create mode 100644 character/atmage/lightningwall/po_lightningwall.nut create mode 100644 character/atmage/magiccannon/magiccannon.nut create mode 100644 character/atmage/magiccannon/po_magiccannon.nut create mode 100644 character/atmage/magicshield/ap_magicshield.nut create mode 100644 character/atmage/magicshield/magicshield.nut create mode 100644 character/atmage/manaburst/ap_atmage_manaburst.nut create mode 100644 character/atmage/manaburst/manaburst.nut create mode 100644 character/atmage/multishot/multishot.nut create mode 100644 character/atmage/multishot/po_magic_ball.nut create mode 100644 character/atmage/passive_skill_atmage.nut create mode 100644 character/atmage/pieceofice/piece_of_ice.nut create mode 100644 character/atmage/pieceofice/po_atpieceofice.nut create mode 100644 character/atmage/pieceofice/po_atpieceoficecore.nut create mode 100644 character/atmage/pushout/ap_pushout.nut create mode 100644 character/atmage/pushout/ap_pushoutexplosion.nut create mode 100644 character/atmage/pushout/pushout.nut create mode 100644 character/atmage/resonance/ap_atmage_element_attack_water.nut create mode 100644 character/atmage/resonance/ap_atmage_resonance.nut create mode 100644 character/atmage/resonance/resonance.nut create mode 100644 character/atmage/teleport/teleport.nut create mode 100644 character/atmage/tundrasoul/ap_atmage_tundrasoul.nut create mode 100644 character/atmage/tundrasoul/ap_atmage_tundrasoulcs.nut create mode 100644 character/atmage/tundrasoul/po_attundrasoulfrozen.nut create mode 100644 character/atmage/turnwindmill/po_atturnwidmill.nut create mode 100644 character/atmage/turnwindmill/turnwindmill.nut create mode 100644 character/atmage/watercannon/po_atwatercannon.nut create mode 100644 character/atmage/watercannon/po_atwatercannonexp.nut create mode 100644 character/atmage/watercannon/watercannon.nut create mode 100644 character/atmage/windstrike/po_wind_strike.nut create mode 100644 character/atmage/windstrike/wind_strike.nut create mode 100644 character/atmage_load_state.nut create mode 100644 character/avenger_load_state.nut create mode 100644 character/common/burster/ap_common_burster.nut create mode 100644 character/common/burster/burster.nut create mode 100644 character/common/common_header.nut create mode 100644 character/common_load_state.nut create mode 100644 character/creatormage/ap_creatormage_disturb.nut create mode 100644 character/creatormage/ap_creatormage_flame.nut create mode 100644 character/creatormage/ap_creatormage_guardian.nut create mode 100644 character/creatormage/ap_creatormage_ice.nut create mode 100644 character/creatormage/ap_creatormage_state.nut create mode 100644 character/creatormage/ap_creatormage_wind.nut create mode 100644 character/creatormage/creatordisturb/creatordisturb.nut create mode 100644 character/creatormage/creatorflame/creatorflame.nut create mode 100644 character/creatormage/creatorguardian/creatorguardian.nut create mode 100644 character/creatormage/creatorice/creatorice.nut create mode 100644 character/creatormage/creatormage_common.nut create mode 100644 character/creatormage/creatormage_header.nut create mode 100644 character/creatormage/creatorwind/creatorwind.nut create mode 100644 character/creatormage/firehurricane/firehurricane.nut create mode 100644 character/creatormage/firemeteo/firemeteo.nut create mode 100644 character/creatormage/firewall/firewall.nut create mode 100644 character/creatormage/iceplate/iceplate.nut create mode 100644 character/creatormage/icerock/icerock.nut create mode 100644 character/creatormage/iceshield/iceshield.nut create mode 100644 character/creatormage/mgrab/mgrab.nut create mode 100644 character/creatormage/microattack/po_microattack.nut create mode 100644 character/creatormage/mousecontrol_lib.nut create mode 100644 character/creatormage/passive_skill_creatormage.nut create mode 100644 character/creatormage/windpress/po_windpress.nut create mode 100644 character/creatormage/windpress/windpress.nut create mode 100644 character/creatormage/windstorm/po_windstorm.nut create mode 100644 character/creatormage/windstorm/windstorm.nut create mode 100644 character/creatormage/woodfence/po_woodfence.nut create mode 100644 character/creatormage/woodfence/woodfence.nut create mode 100644 character/creatormage_load_state.nut create mode 100644 character/priest/avenger_common.nut create mode 100644 character/priest/avenger_header.nut create mode 100644 character/priest/avengerattack.nut create mode 100644 character/priest/avengerjump.nut create mode 100644 character/priest/awakening.nut create mode 100644 character/priest/awakenningturnoff.nut create mode 100644 character/priest/dashattack.nut create mode 100644 character/priest/disasterex.nut create mode 100644 character/priest/earthquake.nut create mode 100644 character/priest/execution.nut create mode 100644 character/priest/fallingsoul.nut create mode 100644 character/priest/fastmove.nut create mode 100644 character/priest/hearthings.nut create mode 100644 character/priest/hedgehog.nut create mode 100644 character/priest/highspeedslash.nut create mode 100644 character/priest/pandemoniumex.nut create mode 100644 character/priest/passive_skill_priest.nut create mode 100644 character/priest/powerofdarkness.nut create mode 100644 character/priest/ripper.nut create mode 100644 character/priest/spincutter.nut create mode 100644 character/swordman_load_state.nut create mode 100644 common.nut create mode 100644 dnf_enum_header.nut create mode 100644 init_character.nut create mode 100644 loadstate.nut create mode 100644 passiveobject/character/priest/po_devilstrike_attack1.nut create mode 100644 passiveobject/character/priest/po_devilstrike_attack2.nut create mode 100644 passiveobject/character/priest/po_devilstrike_attack3.nut create mode 100644 passiveobject/character/priest/po_disasterexp.nut create mode 100644 passiveobject/character/priest/po_earthquakerock.nut create mode 100644 passiveobject/character/priest/po_pendemoniumexdevil.nut create mode 100644 passiveobject/character/priest/po_powerofdarknessarrow.nut create mode 100644 passiveobject/character/priest/po_powerofdarknesscircle.nut create mode 100644 passiveobject/character/priest/po_ripperexplosion.nut create mode 100644 passiveobject/character/priest/po_spincutter.nut create mode 100644 passiveobject/character/priest/po_spincutterthrow.nut create mode 100644 procAppend/procAppend_ATFighter.nut create mode 100644 procAppend/procAppend_ATGunner.nut create mode 100644 procAppend/procAppend_ATMage.nut create mode 100644 procAppend/procAppend_All.nut create mode 100644 procAppend/procAppend_CreatorMage.nut create mode 100644 procAppend/procAppend_DemonicSwordman.nut create mode 100644 procAppend/procAppend_Fighter.nut create mode 100644 procAppend/procAppend_Gunner.nut create mode 100644 procAppend/procAppend_Mage.nut create mode 100644 procAppend/procAppend_Priest.nut create mode 100644 procAppend/procAppend_Swordman.nut create mode 100644 procAppend/procAppend_Thief.nut create mode 100644 特殊定制/a.nut diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e34e4ef --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.associations": { + "*.nut": "squirrel", + "*.cpp": "cpp", + "awtawd-处理后": "cpp" + }, + "vue.features.codeActions.enable": false +} \ No newline at end of file diff --git a/DofileList.nut b/DofileList.nut new file mode 100644 index 0000000..bfa8487 --- /dev/null +++ b/DofileList.nut @@ -0,0 +1,121 @@ +//循环加载 + +//---@回调事件类 +dofile("sqr/LenheartCallBack/Sq_SendPackType_Event.nut"); //发包类型事件回调 +dofile("sqr/LenheartCallBack/Sq_Pack_Control.nut"); //收包类型事件回调 +dofile("sqr/LenheartCallBack/Sq_GetExeStr_Event.nut"); //获取EXE字符串回调 +dofile("sqr/LenheartCallBack/Sq_SelectCharacter.nut"); //选择角色界面回调 +dofile("sqr/LenheartCallBack/Sq_CreatChr.nut"); //创建角色界面回调 +dofile("sqr/LenheartCallBack/Sq_DrawItem.nut"); //绘制Item的函数 回调 +dofile("sqr/LenheartCallBack/Sq_DrawMainMaxLayerCustomUI.nut"); //最高层界面绘制回调 +dofile("sqr/LenheartCallBack/Sq_DrawMainTopLayerCustomUI.nut"); //窗口界面绘制回调 +dofile("sqr/LenheartCallBack/Sq_SettingWindow.nut"); //设置窗口绘制回调 +dofile("sqr/LenheartCallBack/Sq_RecoveryCallBack.nut"); //背包窗口回收回调 +dofile("sqr/LenheartCallBack/Sq_MouseEventCallBack.nut"); //鼠标点击回调 +//----------------------------------------------------------------------------------------------------- + + +//---@工具API类 +dofile("sqr/Tool/Tool.nut"); //主要拓展API工具类 +dofile("sqr/Tool/ClassTool.nut"); //主要拓展API工具类 +dofile("sqr/Tool/DebugInfo.nut"); //输出人物主要信息类 +//----------------------------------------------------------------------------------------------------- + +dofile("sqr/Plugins/Medal/Medal.nut"); //勋章系统 +//---@UI类 +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_All.nut"); //全职业界面绘制函数 +dofile("sqr/ProcPassiveSkill/ProcPassiveSkill_All.nut"); //全职业被动技能函数 +dofile("sqr/UI/HOOK_UI/CreatChr.nut"); //创建角色界面绘制函数 + +dofile("sqr/Plugins/Training/Training.nut"); //修炼场 +dofile("sqr/UI/TeamDps/TeamDps.nut"); //组队DPS +dofile("sqr/Plugins/BuffSwitching/BuffSwitching.nut"); //BUFF换装 +dofile("sqr/Plugins/NewUpgrade/NewUpgrade.nut"); //新版强化系统 +dofile("sqr/Plugins/Ptst/Ptst.nut"); //护石系统 +dofile("sqr/Plugins/Ptst/Ptst_Func.nut"); //护石函数系统 +//dofile("sqr/UI/MonsterBloodUi/MonsterBloodUi.nut");//怪物血条 +//dofile("sqr/UI/MonsterBloodUi/MonsterBloodUi_TWO.nut");//怪物血条 +//----------------------------------------------------------------------------------------------------- + +dofile("sqr/Plugins/Luke/luke.nut"); //卢克8人 +dofile("sqr/Plugins/Luke/lukeparty.nut"); //卢克8人 +dofile("sqr/Plugins/Luke/lukedungeoninfo.nut"); //卢克8人 + + + +dofile("sqr/Plugins/WorldTower/WorldTower.nut"); //世界之塔 +dofile("sqr/Plugins/RaidAuction/RaidAuction.nut"); //团本竞拍 + +dofile("sqr/Plugins/SignIn/SignIn.nut"); //每日签到 +dofile("sqr/Plugins/ServerAuction/ServerAuction.nut"); //全服拍卖 +dofile("sqr/Plugins/CollectBox/CollectBox.nut"); //宝珠图鉴 +dofile("sqr/Plugins/AvatarShape/AvatarShape.nut"); //时装变身 +dofile("sqr/Plugins/OnlineEvent/OnlineEvent.nut"); //在线活动 +dofile("sqr/Plugins/MarrySystem/MarrySystem.nut"); //结婚系统 +dofile("sqr/Plugins/Fate_Select/Fate_Select.nut"); //命运的抉择 +dofile("sqr/Plugins/DamageFont/DamageFont.nut"); //伤害字体 +dofile("sqr/Plugins/CollectBooks/CollectBooks.nut"); //收集图鉴 +dofile("sqr/Plugins/LaunchAnnouncement/LaunchAnnouncement.nut"); //上线公告 +dofile("sqr/Plugins/DungeonRank/DungeonRank.nut"); //副本排行 +dofile("sqr/Plugins/TownMove/TownMove.nut"); //城镇移动 +dofile("sqr/Plugins/HorseGuessing/HorseGuessing.nut"); //骑士马战 +dofile("sqr/Plugins/SeverNotiAnimotion/SeverNotiAnimotion.nut"); //全服公告Ani +dofile("sqr/Plugins/AradPass/AradPass.nut"); //阿拉德探险记 +dofile("sqr/Plugins/Tuguan/Tuguan.nut"); //土罐 +dofile("sqr/Plugins/MidsummerParty/MidsummerParty.nut"); //夏日音乐会 +dofile("sqr/Plugins/Tomb/Tomb.nut"); //夏日音乐会 +dofile("sqr/Plugins/100UI/100UI.nut"); //百级UI +dofile("sqr/Plugins/Fiendwar/Fiendwar.nut"); //超时空之战 + +//---@状态类 +dofile("sqr/SetState/SetState_All.nut"); //全职业设置状态函数 +dofile("sqr/procAppend/procAppend_All.nut"); //全职业Proc循环函数 +dofile("sqr/character/GetCurrentModuleDamageRate.nut"); //获取技能攻击力 +//----------------------------------------------------------------------------------------------------- + + +//---@技能类 +dofile("sqr/character/atgunner_load_state.nut"); //女漫游 +dofile("sqr/character/swordman_load_state.nut"); //鬼剑士 +//----------------------------------------------------------------------------------------------------- + +//单次加载 +if (getroottable().rawin("InitDofile") && InitDofile) { + + //初始化Item颜色类 + dofile("sqr/UI/Init_ItemColor/Init_ItemColor.nut"); + //初始化文字绘制类 + dofile("sqr/UI/Init_CodeDraw/Init_CodeDraw.nut"); + //----------------------------------------------------------------------------------------------------- + + + //城镇区域移动类 + dofile("sqr/MoveTownEvent/MoveTownEvent.nut"); + //----------------------------------------------------------------------------------------------------- + + + //---@插件类 + dofile("sqr/Plugins/DragonBox/DragonBox.nut"); //圣者遗物箱 + dofile("sqr/Plugins/Tuguan/Tuguan.nut"); //土罐的特别袖珍罐 + dofile("sqr/Plugins/Anton/anton.nut"); //安图恩20人 + dofile("sqr/Plugins/Roters/New_Roters.nut"); //罗特斯团本 + dofile("sqr/Plugins/Luke/luke.nut"); //卢克8人 + //----------------------------------------------------------------------------------------------------- + + //dofile("sqr/UI/MonsterBloodUi/MonsterBloodUi_TWO.nut");//怪物血条 + dofile("sqr/UI/MonsterBloodUi/MonsterBloodUi.nut"); //怪物血条 + InitDofile = !InitDofile; +} + +//手动加载 +if (getroottable().rawin("ArtDofile") && ArtDofile) { + + //---@插件类 + //dofile("sqr/Plugins/Anton/anton.nut"); //安图恩20人 + dofile("sqr/Plugins/DragonBox/DragonBox.nut"); //圣者遗物箱 + //----------------------------------------------------------------------------------------------------- + + //dofile("sqr/UI/MonsterBloodUi/MonsterBloodUi_TWO.nut");//怪物血条 + //dofile("sqr/UI/MonsterBloodUi/MonsterBloodUi.nut");//怪物血条 + ArtDofile = !ArtDofile; +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_ATFighter.nut b/DrawMainCustomUi/DrawMainCustomUi_ATFighter.nut new file mode 100644 index 0000000..6cfea19 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_ATFighter.nut @@ -0,0 +1,19 @@ +/* +文件名:DrawMainCustomUi_ATFighter.nut +路径:DrawMainCustomUi/DrawMainCustomUi_ATFighter.nut +创建日期:2022-09-04 20:18 +文件用途:男格斗界面绘制函数 +*/ +function drawMainCustomUI_ATFighter(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + + + +function drawCustomUI_ATFighter(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_ATGunner.nut b/DrawMainCustomUi/DrawMainCustomUi_ATGunner.nut new file mode 100644 index 0000000..1bba3f3 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_ATGunner.nut @@ -0,0 +1,18 @@ +/* +文件名:DrawMainCustomUi_ATGunner.nut +路径:DrawMainCustomUi/DrawMainCustomUi_ATGunner.nut +创建日期:2022-09-04 20:19 +文件用途:女枪手界面绘制函数 +*/ +function drawMainCustomUI_ATGunner(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + + +function drawCustomUI_ATGunner(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_ATMage.nut b/DrawMainCustomUi/DrawMainCustomUi_ATMage.nut new file mode 100644 index 0000000..1219e75 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_ATMage.nut @@ -0,0 +1,17 @@ +/* +文件名:DrawMainCustomUi_ATMage.nut +路径:DrawMainCustomUi/DrawMainCustomUi_ATMage.nut +创建日期:2022-09-04 20:19 +文件用途:男法师界面绘制函数 +*/ +function drawMainCustomUI_ATMage(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + +function drawCustomUI_ATMage(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_All.nut b/DrawMainCustomUi/DrawMainCustomUi_All.nut new file mode 100644 index 0000000..e8fea91 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_All.nut @@ -0,0 +1,757 @@ +/* +文件名:DrawMainCustomUi_All.nut +路径:DrawMainCustomUi/DrawMainCustomUi_All.nut +创建日期:2022-09-04 20:15 +文件用途:全职业界面绘制函数 +*/ + + +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_ATFighter.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_ATGunner.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_ATMage.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_CreatorMage.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_DemonicSwordman.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_Fighter.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_Gunner.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_Mage.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_Priest.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_Swordman.nut"); +dofile("sqr/DrawMainCustomUi/DrawMainCustomUi_Thief.nut"); + + + + +function Sq_TestDraw(a, b) { + local X = 63; + local Y = 124; + local obj = sq_GetMyMasterCharacter(); + // L_sq_DrawImg("lenheartsevernotianimotionswmain.img", 0, -1, 0); + // obj = sq_GetCNRDObjectToSQRCharacter(obj); + // local Ani = obj.sq_GetRestAni(); + // sq_AnimationProc(Ani); + // sq_drawCurrentFrame(Ani, 100, 200, true); + + + local MedalButton = TabTextButtonPro(obj, "小勋章Tab", X + 5, Y, "common/medal/main.ani", 7, 38, 21, "世界频道", 8, 5); + MedalButton.SwitchState = 1; + MedalButton.SetRectEnble(true, "a勋章Tab", X + 5, Y, "common/medal/main.ani", 8); + MedalButton.SetCustomClickEnble(true, "a勋章Tab", X + 5, Y, "common/medal/main.ani", 9); + + MedalButton.Show(); + if (MedalButton.isLBActive()) { + print(1); + } + + local TAni = BasicsDrawTool.T_DrawDynamicAni(obj, "common/addpoint/dh.ani", 0, 0, "asdasdas"); +} + + + + + + +// LsX <- 0 +// LsY <- 0 + +// PVFSTR <- null; + + +class Window extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + //Y坐标 + Y = null; + + YMouseSw = true; + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + } + + function Show(obj) { + //sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + + } +} + + +function TestDrawRgbaImage(X, Y, Image) { + for (local i = 0; i< 28; i++) { + for (local z = 0; z< 28; z++) { + sq_DrawLine(X + z, Y + i + 1, X + z, Y + i, sq_RGBA(Image[((z * 4) + (i * 4 * 28))], Image[((z * 4) + (i * 4 * 28))] + 1, Image[((z * 4) + (i * 4 * 28))] + 2, Image[((z * 4) + (i * 4 * 28))] + 3)); + } + } +} + + +/* + local InfoTable = { + Id = 3037, + Name = "无色小晶块", + Name2 = "Yosin-Team", + Price = 20, + Type = "材料", + Explain = " 异变的空间里特有的神奇石头, 蕴含有神秘的魔法力量。 听说任何状态下, 它都能保持方块形状。" + }; + */ +// L_sq_WAB(0x00F4AA66, 0xE9); +// L_sq_WAB(0x00F4AA66 + 1, 0xFA); +// L_sq_WAB(0x00F4AA66 + 2, 0x02); +// L_sq_WAB(0x00F4AA66 + 3, 0x00); +// L_sq_WAB(0x00F4AA66 + 4, 0x00); +// L_sq_WAB(0x00F4AA66 + 5, 0x90); + + +function drawMainCustomUI_All(obj) { + + + // if (getroottable().rawin("WindowsObject") == false) getroottable().rawset("WindowsObject", Window(100, 100, 100, 200, 10)); + // getroottable()["WindowsObject"].Show(obj); + + RecoverySystem(obj); //回收系统 + ChargeNotiFunc(obj); //充值系统 + SetUpgradeRate(); //设置强化增伤 + + local InfoTable = { + Id = 2019185, + Rarity = 4, + Name = "测试物品", + Name2 = "Yosin-Team", + Weight = 10, + CoolTime = 1000, + Price = 20, + Type = "消耗品", + Explain = " 异变的空间里特有的神奇石头, 蕴含有神秘的魔法力量。 听说任何状态下, 它都能保持方块形状。" + }; + + // local Item = ItemInfoClass(InfoTable); + // Item.Show(200, 200); + + + + + // if (KeyPress.isKeyPress(78)) { + // //local itemSS = sq_GetPopupWindowMainCotrol(170); + // // local objectManager = obj.getObjectManager(); + + // // local Skill = sq_GetSkill(obj, 1); + // //local chrobj = sq_CreateCharacter(1, 4); + // local Win = sq_GetPopupWindowMainCotrol(176); + // print("-----------------------------------------------/"); + // foreach(member, val in Win.getclass()) { + // ::print(member + "\n"); + // local attr; + // if ((attr = Win.getclass().getattributes(member)) != null) { + // foreach(i, v in attr) { + // ::print("\t" + i + " = " + (typeof v) + "\n"); + // } + // } else { + // ::print("\t\n") + // } + + // } + // } + + local RootTab = getroottable(); + if (KeyPress.isKeyPress(75)) { + + } + + if (RootTab.rawin("testchrobj")) { + // local tobj = RootTab["testchrobj"]; + // tobj = sq_ObjectToSQRCharacter(tobj); + // local charAni = tobj.sq_GetStayAni(); + // sq_AnimationProc(charAni); + // sq_drawCurrentFrame(charAni, 150, 300, false); + } + + /* + Combat += L_sq_GetCharacterAttribute(0x2364) * Chr_liliang; + Combat += L_sq_GetCharacterAttribute(0x2394) * Chr_zhili; + Combat += L_sq_GetCharacterAttribute(0x237c) * Chr_tili; + Combat += L_sq_GetCharacterAttribute(0x23ac) * Chr_jinshen; + */ + // local ANTONTOWNINDEX = 1 + + // print("X: " + W.GetXPos()); + // print("Y: " + W.GetYPos()); + + /* + local BaseAni = BasicsDrawTool.T_DrawDynamicAni(obj, "common/addpoint/dh.ani", 0, -180, 0 + "asdaasd"); + + if (sq_GetAnimationFrameIndex(BaseAni) >= 80) { + L_sq_DrawCode(" [倾泪寒大玩家]", 170, 286 - 173, sq_RGBA(255, 177, 0, 250), 1, 0); + L_sq_DrawCode("玩家 通过CDK充值 [1000W] 人民币,大哥恭喜发财,身体健康,万事如意 !!!", 170, 286 - 173, sq_RGBA(230, 200, 155, 250), 1, 0); + } + */ + + + //testani(obj); + + //print(L_sq_GetCharacterAttribute(0x1C, 22)); + + // for (local i = 0; i < 1000; i++) { + // L_sq_DrawImg("interface/windowcommon.img", 27, 200, 200); + // } + + + + + // L_sq_DrawCode("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", 206, 206 + 100, sq_RGBA(255, 255, 255, 250), 0, 1); + // L_sq_DrawCode("a b c d e f g h i j k l m n o p q r s t u v w x y z ", 206, 206 + 120, sq_RGBA(255, 255, 255, 250), 0, 1); + // L_sq_DrawCode(", , . 。 ! ! ? ? ; ; [ ] { } ( ) \" “ ” ' ’ + - * / = ", 206, 206 + 140, sq_RGBA(255, 255, 255, 250), 0, 1); + // L_sq_DrawCode("sdgergwegewrgwa", 206, 206 + 15, sq_RGBA(255, 255, 255, 250), 0, 1); + + // print(format("0x%02X", sq_RGBA(255, 255, 255, 250))); + + //MoveTownEvent(); //城镇移动事件逻辑 + //SyncMousePos(); //同步鼠标坐标 + + // DebugInfo(); + + // local skl = sq_GetSkill(obj, 169); + // sq_DrawSkillIcon(skl, 225, 12, sq_ALPHA(150)); + /* + local stage = sq_GetGlobaludpModuleStage(); + local dungeon = sq_GetDungeonByStage(stage); + local dungeonIndex = sq_GetDuegonIndex(dungeon); + local MapIndex = sq_GetMapIndex(stage); + print("MapIndex: " + MapIndex + "\n"); + */ + //print(obj.sq_GetRestAni() == sq_GetCurrentAnimation(obj)); + + /* + local stage = sq_GetGlobaludpModuleStage(); + local dungeon = sq_GetDungeonByStage(stage); + local dungeonIndex = sq_GetDuegonIndex(dungeon); + local MapIndex = sq_GetMapIndex(stage); + print("MapIndex: " + MapIndex + "\n"); + print("Xpos: " + obj.getXPos()); + print("Ypos: " + obj.getYPos()); + */ + + // BasicsDrawTool.T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/iconslot_00.ani", 196, 100, "Twwzvbqw5rrrq6wzzn"); + + // BasicsDrawTool.T_DrawStayAni(obj, "common/tuguan/main.ani", 196, 100, 0, "TuguanSystemMain"); + // BasicsDrawTool.T_DrawStayAni(obj, "common/tuguan/main.ani", 196 + 20, 100 + 30, 6, "TuguanRewardMainT"); + // for (local i = 0; i < 10; i++) { + // local ofs = i; + // if(i > 7)ofs += 1; + // BasicsDrawTool.T_DrawStayAni(obj, "common/tuguan/main.ani", 198 + 30 + ((ofs%4) * 86), 100 + 62 + ((ofs/4) * 50) , 7, "TuguanRewardMainTenX"); + // } + + + + //Sout("X偏移为: " + LsX); + //Sout("Y偏移为: " + LsY); + + //BasicsDrawTool.T_DrawDynamicAni(obj, "common/dargonbox/animation/box_a_s.ani", 196 + 20, 100 + 30, "TuguanSysteeemMainasabackgroundeff"); + + //local isRecover = sq_IsItemRecover(2682609); + //print(isRecover); + + //L_sq_SetCharacterAttribute(0x1E54,ll+2500); + // print(IMouse.GetMouseTask()); + + try { + // local Ret = file("Yosin_Game_Reloading.Sign", "r"); + local Func = loadfile("Yosin_Game_Reloading.Sign", true); + Func(); + L_Cmd("del Yosin_Game_Reloading.Sign"); + + // BasicsDrawTool.InitClass("WorldTowerObj"); + // BasicsDrawTool.InitClass("RAIDAUCTIONObj"); + BasicsDrawTool.InitClass("SIGNINCObj"); + BasicsDrawTool.InitClass("YosinEventSystem"); + // BasicsDrawTool.InitClass("ServerAuctionCObj"); + // BasicsDrawTool.InitClass("CollectBoxCObj"); + // BasicsDrawTool.InitClass("AvatarShapeCObj"); + BasicsDrawTool.InitClass("OnlineEventCObj"); + BasicsDrawTool.InitClass("TuguanObj"); + // BasicsDrawTool.InitClass("YosinPlayerEachSystem"); + // BasicsDrawTool.InitClass("MarrySystemCObj"); + // BasicsDrawTool.InitClass("WorldTowerCObj"); + // BasicsDrawTool.InitClass("Fate_SelectCObj"); + // BasicsDrawTool.InitClass("DamageFontCObj"); + BasicsDrawTool.InitClass("PtstObj"); + // BasicsDrawTool.InitClass("CollectBooksCObj"); + BasicsDrawTool.InitClass("YosinPlayerEachSystem"); + // BasicsDrawTool.InitClass("Lenheart_LaunchAnnouncementCObj"); + // BasicsDrawTool.InitClass("DungeonRankCObj"); + BasicsDrawTool.InitClass("TownMoveCObj"); + BasicsDrawTool.InitClass("HorseGuessingCObj"); + BasicsDrawTool.InitClass("AradPassCObj"); + BasicsDrawTool.InitClass("MidsummerPartyCObj"); + BasicsDrawTool.InitClass("Lenheart_100UI_DrawSkillAddClassCObj"); + BasicsDrawTool.InitClass("New_RotersCObj"); + BasicsDrawTool.InitClass("TombCObj"); + //BasicsDrawTool.InitClass("MouseObject"); + + BasicsDrawTool.InitClass("LUKEDUNGEONINFOCONTROL"); + + + BasicsDrawTool.InitClass("FiendwarCObj"); + BasicsDrawTool.InitClass("FiendwarHallCObj"); + BasicsDrawTool.InitClass("FiendwarHallCreatePartyCObj"); + } catch (exception) { + if (exception != "cannot open the file") + print("Reloading Script Fail !!! \n" + exception); + } + + + + + if (KeyPress.isKeyPress(77)) { + /* + local T = { + op = 50001001, + testint = 1, + testfloat = 0.5, + testbool = true, + teststring = "测试", + testtable = { + a = 1, + b = 2 + }, + testarrayint = [1, 2, 3], + testarrayfloat = [1.0, 2.0, 3.0], + testarraybool = [true, false, true], + testarraystring = ["好好好", "这么玩"], + testarrayTable = [{ + c = 6, + d = 7 + }, { + e = 8, + f = 9 + }], + testarrayArray = [ + [1, 2], + [3, 4] + ], + } + local Str = L_sq_EncondeJson(T); + + L_sq_SendPackType(130); + L_sq_SendPackWChar(Str); + L_sq_SendPack(); + */ + // local str = Json.Encode(T); + // print(str); + // 2023102201 + // local T = { + // op = 20059003, + // // realop = 20055262, + // // itemId = [3037, 3038, 3039], + // // Type = 1, + // } + // BasicsDrawTool.SendPack(T); + + // obj.setHp(obj.getHp() - (obj.getHpMax() * 0.2).tointeger(), null, true); + // obj.sendSetMpPacket((obj.getMp() - (obj.getMpMax() * 0.2)).tointeger()); + // L_sq_Open_ExWindow(0x1ADE090, 5, 0, 1); + + // print(format("address : %02x", L_Sq_GetSkillAddress(1))); + + + // L_sq_Test(L_Sq_GetObjectAddress(getroottable().testobj), 27); + /* + local objectManager = obj.getObjectManager(); + if (objectManager) { + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i< CollisionObjectNumber; i += 1) { + local object = objectManager.getCollisionObject(i); + local activeObj = sq_GetCNRDObjectToActiveObject(object); + // local activeObj = sq_GetCNRDObjectToSQRCharacter(object); + + // if (sq_IsMyControlObject(activeObj)) { + // Sout("对象的名字: %L", L_Sq_GetObjectName(object)); + local Level = L_Sq_GetObjectLevel(activeObj); + print(Level); + if (Level == 80) { + print(111); + L_sq_Test(L_Sq_GetObjectAddress(activeObj), 1); + // local skillmgr = activeObj.getSkillManager(); + // local SkillId = 0; + + // while (true) { + // local SkillIdT = sq_getRandom(1, 250); + // local skl = sq_GetSkill(activeObj, SkillIdT); + // if (skl) { + + // print(SkillIdT); + // L_sq_Test(L_Sq_GetObjectAddress(activeObj), SkillIdT); + // break; + // } + // } + } + //if (sq_IsAiCharacter(activeObj)) { + // print(123123123); + //} + // } + // local Address = L_Sq_GetObjectAddress(object); + // if (Address == L_Sq_GetRidingObjectAddress(obj)) { + // local activeObj = sq_GetCNRDObjectToActiveObject(object); + // getroottable()["Lenheart100UIMyRidingObject"] <- activeObj; + // } + } + } + */ + // L_sq_Test(); + + // L_sq_Open_ExWindow(0x1ADE090, 5, 0, 1); + // L_sq_WAB(0xB3F012B, 0x80); + + // L_sq_Test(L_Sq_GetObjectAddress(obj), 62); + + // print(format("%02X", P)); + + + + + } + + + // L_sq_Test(335, 15); + // L_Sq_DrawSkill(L_Sq_GetSkillAddress(46), 300, 300, -1, 0, 0, 1, 1, 0, 0); + + // local ssani = BasicsDrawTool.T_DrawDynamicAni(obj, "common/collectbooks/iconslot_01.ani", 200,200, "TuguassnR00asdasd"); + // if(sq_IsEnd(ssani)){ + // obj.sq_PlaySound("DANJIN_GAMBLE_CLASS_A"); + // sq_Rewind(ssani); + // } + + // print(L_sq_GetTownIndex()); + + local RootTab = getroottable(); + if (KeyPress.isKeyPress(76)) { + + //ClearIntData(obj, 81, 4); + // ClearSkillCoolTime(obj, 81); + // print(obj.sq_GetLevelData(72, 6, sq_GetSkillLevel(obj, 72))); + + //ClearLevelData(obj, 25, 0); + //81号技能的4号位增加3倍 + // local BaseData = obj.sq_GetIntData(81, 4); + //AddIntData(obj, 72, 0, 1); + //AddSkillCoolTime(obj, 81, -40000); + + //AddLevelData(obj, 25, 0, 20); + // obj.sq_GetLevelData(2); + //print(obj.L_sq_GetLevelData(2)); + // local Arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; + // local Scobj = ScrollControl(Arr, 5, 2); + // RootTab.rawset("TestScobj", Scobj); + // IRDSQRCharacter.pushPassiveObj("character/swordman/swordman_po.nut", 24000001); + // IRDSQRCharacter.pushPassiveObj("Character/ATMage/WindStrike/po_wind_strike.nut", 24201); + + + // local os = sq_CreateAICharacter(4999); + // os.setCurrentPos(obj.getXPos() + 100, obj.getYPos(), 0); + // sq_AddObject(obj, os, OBJECTTYPE_DRAWONLY, false); + + // local os = sq_CreateAICharacter(4999); + // os.setCurrentPos(obj.getXPos() + 100, obj.getYPos(), 0); + // sq_AddObject(obj, os, OBJECTTYPE_DRAWONLY, false); + + //print(sq_GetIntData(obj, 169, 1)); + //print(obj.sq_GetIntData(169, 1)); + //print(L_sq_GetIntData(obj,169,1)); + // getroottable().testobj <- sq_CreateAICharacter(40401); + + // getroottable().testobj.setCurrentPos(obj.getXPos() + 100, obj.getYPos(), 0); + // sq_AddObject(obj, getroottable().testobj, OBJECTTYPE_DRAWONLY, false); + + + // L_sq_Open_ExWindow2(0x1ADE090, 69, "asdasd", 0); + } + + + // L_sq_DrawImg("Interface2/event/Chn_event_2020/201029_AncientHeroLuckyBox/common_open.img", 1, 100, 100, 0, sq_RGBA(255, 255, 255, 250)); + + + if (KeyPress.isKeyPress(78)) { + // local Arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; + // local Scobj = ScrollControl(Arr, 5, 2); + // RootTab.rawset("TestScobj", Scobj); + + //IRDSQRCharacter.pushPassiveObj("character/swordman/swordman_po.nut", 24000001); + + + // local Base = Clock(); + // for (local i = 0; i < 2000; i++) { + // L_sq_DrawImg("common/etc/combo.img", 100000000, -1, -1, sq_RGBA(250, 0, 0, 0)); + // //L_sq_DrawImg("common/etc/combo.img", 1, 100, 100, 0, sq_RGBA(255, 255, 255, 250)); + // } + // print("ok: " + (Clock() - Base)); + + //getroottable()["DamageFontCObj"].PushDamageFontArray(0x4000000, 200, 200, 0, 1234567890, 0); + //} + // print(obj.sq_GetLevelData(25, 0, sq_GetSkillLevel(obj, 25))); + // print(L_Sq_GetSkillAddress(25)); + + // print(getroottable().TestAddr); + // L_sq_NewInputBox(0x3AEC9800); + // setVisibleInput(); + // L_sq_NewInputBox(0, 0, 100, 20); + // L_sq_Open_ExWindow(0x1ADE090, 269, 0, 1); + L_NewWindows("Lenheart", 24, 0x65535); + + } + + + //L_sq_DrawNumber(0,0,sq_RGBA(255, 255, 255, 250),1.0,1.0,0,18,6,1234567890); + //L_sq_DrawImg("common/etc/combo.img", 0, 100, 100, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); + // local Ani = obj.getCurrentAnimation(); + // Ani.setEffectLayer(true, 6, true, sq_RGB(255, 0, 0), sq_ALPHA(100), true, true); + + + + if (RootTab.rawin("TestScobj")) { + + + local Scobj = RootTab["TestScobj"]; + + if (IMouse.IsWheelUp()) { + Scobj.M(); + } + if (IMouse.IsWheelDown()) { + Scobj.A(); + } + + // foreach(v in Scobj.FocusList) { + // local printstr = ""; + // foreach(num in v) { + // printstr += num; + // printstr += " "; + // } + // print(printstr); + // } + // print("\n"); + } + + /* + local Button = ServerAuctionPro(obj, "TTTA", 300, 500, "common/bianshen/bianshen.ani", 28, 28, 16); + Button.SetRectEnble(true, "TTTAr", 300, 500, "common/bianshen/bianshen.ani", 17); + Button.SetCustomClickEnble(true, "TTTAc", 300, 500, "common/bianshen/bianshen.ani", 18); + Button.Show(); + + if (Button.isLBActive()) { + L_sq_SendPackType(214); + L_sq_SendPackByte(2); + L_sq_SendPackWord(20218); + L_sq_SendPack(); + } + */ + + + //L_sq_Test(); + + // //上 + // if (KeyPress.isKeyPress(77)) { + // LsY--; + // } + + // //下 + // if (KeyPress.isKeyPress(71)) { + // LsY++; + // } + + + // //左 + // if (KeyPress.isKeyPress(73)) { + // LsX--; + // } + + + // //右 + // if (KeyPress.isKeyPress(75)) { + // LsX++; + // } + /* + + + if (KeyPress.isKeyPress(77)) { + //GameC.sendSummonMonsterPacketWithFriend(obj, 107010506, 86, 10000000, obj.getXPos() + 100, obj.getYPos(), 0, 100); + L_sq_GoDungeon(18081); + } + + if (KeyPress.isKeyPress(76)) { + //GameC.sendSummonMonsterPacketWithFriend(obj, 107010506, 86, 10000000, obj.getXPos() + 100, obj.getYPos(), 0, 100); + //L_sq_MoveTown(23, 2, 100, 300); + + } + + if (KeyPress.isKeyPress(75)) { + + } + + + if (KeyPress.isKeyPress(79)) { + ArtDofile = true; + } + */ + + +} + +function Testdsahjkds(name) { + Sout("当前交互的玩家名字是: %L", name); +} + +function drawCustomUI_All(obj) { + Training(obj); //修炼场 + //NewMonsterBloodUi(obj); //怪物血条 + //monhpprint(obj);//怪物血条 +} + + +/* +//绘制转职时装层 +function drawGrowAvatarAniType(a,b,c,d,e,f) { + + UnderBaseDraw.T_DrawDynamicAni("character/gunner/effect/animation/revolvercriticaldamageup/revolver_critical_damage_up1.ani", c, d,"qqBMain0"); + +} +*/ + +//绘制人物执行 +function drawAppend_VirtualCharacter(a, b, c, d, e, f) { + local obj = sq_GetMyMasterCharacter(); + + // Sout("a: %L",a); + // Sout("b: %L",b); + // Sout("c: %L",c); + // Sout("d: %L",d); + // Sout("e: %L",e); + // Sout("f: %L",f); + + + // BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3/Chivalry_S3_Bottom_00.ani", c, d, "Server_AuctionSystemTimeP22"); + // BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3_2/Chivalry_S3_Text.ani", c, d, "Server_AuctionSystemTimeP"); + // BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3/Chivalry_S3_Text.ani", c, d - 50, "Server_AuctionSystemTimeP2"); + // BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3_3/Chivalry_S3_Text.ani", c, d - 100, "Server_AuctionSystemTimeP3"); +} + + + +/* +//绘制人物执行 只在副本 +function drawAppend_ATMage(a,b,c,d) +{ + UnderBaseDraw.T_DrawDynamicAni("character/gunner/effect/animation/revolvercriticaldamageup/revolver_critical_damage_up1.ani", c, d,"qqBMain0"); + //Sout("a: %L",a.GetName()); + //Sout("b: %L",b); + //Sout("c: %L",c); + //Sout("d: %L",d); + +} +*/ +/* +function checkOverItemObject_ATMage(a) +{ + //Sout("a: %L",a.GetName()); +} +*/ + + + + + + + + + +function TOW_CharacterAppendage(obj) { + + + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "thetowerofworld/2023.02.04_thetowerofworld/ap_tocharacter.nut")) { + + local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 14, false, + "thetowerofworld/2023.02.04_thetowerofworld/ap_tocharacter.nut", true); + + masterAppendage.getVar("ScanTime").clear_vector(); + masterAppendage.getVar("ScanTime").push_vector(-9999); + + } else { + + local apd = obj.GetSquirrelAppendage("thetowerofworld/2023.02.04_thetowerofworld/ap_tocharacter.nut"); + + local encodeT = apd.getVar("ScanTime").get_vector(0); + local curT = apd.getTimer().Get() + + if (curT - encodeT > 500) { + apd.getVar("ScanTime").set_vector(0, curT); + TOW_ScanMonsterAppendage(obj); + + + } + + + } + +} + + + +function TOW_ScanMonsterAppendage(obj) { + + if (!obj) + return null; + + local objectManager = obj.getObjectManager(); + + if (objectManager == null) + return null; + + for (local i = 0; i< objectManager.getCollisionObjectNumber(); i += 1) { + local object = objectManager.getCollisionObject(i); + + if (object && object.isObjectType(OBJECTTYPE_MONSTER)) { + object = sq_GetCNRDObjectToActiveObject(object); + + if (!CNSquirrelAppendage.sq_IsAppendAppendage(object, "thetowerofworld/2023.02.04_thetowerofworld/ap_tomonster.nutt")) { + + local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, object, 14, false, + "thetowerofworld/2023.02.04_thetowerofworld/ap_tomonster.nut", true); + } + } + + } + + return null; + +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_CreatorMage.nut b/DrawMainCustomUi/DrawMainCustomUi_CreatorMage.nut new file mode 100644 index 0000000..cc3fb42 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_CreatorMage.nut @@ -0,0 +1,19 @@ +/* +文件名:DrawMainCustomUi_CreatorMage.nut +路径:DrawMainCustomUi/DrawMainCustomUi_CreatorMage.nut +创建日期:2022-09-04 20:19 +文件用途:缔造者界面绘制函数 +*/ +function drawMainCustomUI_CreatorMage(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + + + +function drawCustomUI_CreatorMage(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_DemonicSwordman.nut b/DrawMainCustomUi/DrawMainCustomUi_DemonicSwordman.nut new file mode 100644 index 0000000..230ad3c --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_DemonicSwordman.nut @@ -0,0 +1,17 @@ +/* +文件名:DrawMainCustomUi_DemonicSwordman.nut +路径:DrawMainCustomUi/DrawMainCustomUi_DemonicSwordman.nut +创建日期:2022-09-04 20:19 +文件用途:黑暗武士界面绘制函数 +*/ +function drawMainCustomUI_DemonicSwordman(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + +function drawCustomUI_DemonicSwordman(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_Fighter.nut b/DrawMainCustomUi/DrawMainCustomUi_Fighter.nut new file mode 100644 index 0000000..c938479 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_Fighter.nut @@ -0,0 +1,17 @@ +/* +文件名:DrawMainCustomUi_Fighter.nut +路径:DrawMainCustomUi/DrawMainCustomUi_Fighter.nut +创建日期:2022-09-04 20:19 +文件用途:女格斗界面绘制函数 +*/ +function drawMainCustomUI_Fighter(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + +function drawCustomUI_Fighter(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_Gunner.nut b/DrawMainCustomUi/DrawMainCustomUi_Gunner.nut new file mode 100644 index 0000000..cb1fcd9 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_Gunner.nut @@ -0,0 +1,17 @@ +/* +文件名:DrawMainCustomUi_Gunner.nut +路径:DrawMainCustomUi/DrawMainCustomUi_Gunner.nut +创建日期:2022-09-04 20:19 +文件用途:男枪手界面绘制函数 +*/ +function drawMainCustomUI_Gunner(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + +function drawCustomUI_Gunner(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_Mage.nut b/DrawMainCustomUi/DrawMainCustomUi_Mage.nut new file mode 100644 index 0000000..570db58 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_Mage.nut @@ -0,0 +1,18 @@ +/* +文件名:DrawMainCustomUi_Mage.nut +路径:DrawMainCustomUi/DrawMainCustomUi_Mage.nut +创建日期:2022-09-04 20:20 +文件用途:女法师界面绘制函数 +*/ +function drawMainCustomUI_Mage(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + + +function drawCustomUI_Mage(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_Priest.nut b/DrawMainCustomUi/DrawMainCustomUi_Priest.nut new file mode 100644 index 0000000..cfa96f2 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_Priest.nut @@ -0,0 +1,18 @@ +/* +文件名:DrawMainCustomUi_Priest.nut +路径:DrawMainCustomUi/DrawMainCustomUi_Priest.nut +创建日期:2022-09-04 20:20 +文件用途:圣职者界面绘制函数 +*/ +function drawMainCustomUI_Priest(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + + +function drawCustomUI_Priest(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/DrawMainCustomUi/DrawMainCustomUi_Swordman.nut b/DrawMainCustomUi/DrawMainCustomUi_Swordman.nut new file mode 100644 index 0000000..0c00369 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_Swordman.nut @@ -0,0 +1,19 @@ +/* +文件名:DrawMainCustomUi_Swordman.nut +路径:DrawMainCustomUi/DrawMainCustomUi_Swordman.nut +创建日期:2022-09-04 20:15 +文件用途:鬼剑士绘制界面回调函数(原生) +*/ +function drawMainCustomUI_Swordman(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + + +function drawCustomUI_Swordman(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} + diff --git a/DrawMainCustomUi/DrawMainCustomUi_Thief.nut b/DrawMainCustomUi/DrawMainCustomUi_Thief.nut new file mode 100644 index 0000000..d5133c2 --- /dev/null +++ b/DrawMainCustomUi/DrawMainCustomUi_Thief.nut @@ -0,0 +1,18 @@ +/* +文件名:DrawMainCustomUi_Thief.nut +路径:DrawMainCustomUi/DrawMainCustomUi_Thief.nut +创建日期:2022-09-04 20:20 +文件用途:暗夜使者界面绘制函数 +*/ +function drawMainCustomUI_Thief(obj) { + if (!obj) + return; + drawMainCustomUI_All(obj); +} + + +function drawCustomUI_Thief(obj) { + if (!obj) + return; + drawCustomUI_All(obj); +} \ No newline at end of file diff --git a/LenheartCallBack/Sq_CreatChr.nut b/LenheartCallBack/Sq_CreatChr.nut new file mode 100644 index 0000000..62e04af --- /dev/null +++ b/LenheartCallBack/Sq_CreatChr.nut @@ -0,0 +1,4 @@ +function Sq_CreatChr(chunk) { + CreatChr(); +} + diff --git a/LenheartCallBack/Sq_DrawItem.nut b/LenheartCallBack/Sq_DrawItem.nut new file mode 100644 index 0000000..0a9ee29 --- /dev/null +++ b/LenheartCallBack/Sq_DrawItem.nut @@ -0,0 +1,31 @@ +/* +文件名:Sq_DrawItem.nut +路径:LenheartCallBack/Sq_DrawItem.nut +创建日期:2022-09-05 21:11 +文件用途:绘制Item的函数 CallBack +*/ +if (!getroottable().rawin("Sq_DrawItemTable")) Sq_DrawItemTable <- {} + +function DrawItem_Siroco(Xpos, Ypos) { + local obj = sq_GetMyMasterCharacter(); + BasicsDrawTool.T_DrawDynamicAni(obj, "common/item_effect/siroco.ani", Xpos, Ypos, "sirocoequani"); +} + + +Sq_DrawItemTable.rawset(L_Sq_GetImg(2019185), DrawItem_Siroco); +Sq_DrawItemTable.rawset(L_Sq_GetImg(2022110703), DrawItem_Siroco); +Sq_DrawItemTable.rawset(L_Sq_GetImg(2022110704), DrawItem_Siroco); + + +function Sq_DrawItemBack(Xpos, Ypos, Image) { + //Sout("X坐标 %L",Xpos); + //Sout("Y坐标 %L",Ypos); + //UnderBaseDraw.T_DrawDynamicAni("character/gunner/effect/animation/revolvercriticaldamageup/revolver_critical_damage_up1.ani", Xpos + 10, Ypos + 40,"qqBMain0"); +} + +function Sq_DrawItemFront(Xpos, Ypos, Image) { + + // if (Xpos == 10 && Ypos == 4) DebugInfo(); + if (Sq_DrawItemTable.rawin(Image)) Sq_DrawItemTable[Image](Xpos, Ypos); + //UnderBaseDraw.T_DrawDynamicAni("common/item_effect/100.ani", Xpos, Ypos, "qqBMain0"); +} \ No newline at end of file diff --git a/LenheartCallBack/Sq_DrawMainMaxLayerCustomUI.nut b/LenheartCallBack/Sq_DrawMainMaxLayerCustomUI.nut new file mode 100644 index 0000000..6a9558f --- /dev/null +++ b/LenheartCallBack/Sq_DrawMainMaxLayerCustomUI.nut @@ -0,0 +1,253 @@ +function Sq_DrawMainMaxLayerCustomUI(pack) { + local obj = sq_GetMyMasterCharacter(); + if (!obj) return; + + local RootTab = getroottable(); + if (RootTab.rawin("LenheartBaseFuncTab")) { + local LenheartFunc = RootTab["LenheartBaseFuncTab"]; + foreach(Func in LenheartFunc) { + Func(obj); + } + } + + DrawYosinEventIconSystem(obj); + DrawYosinPlayerEachSystem(obj); + + // AvatarShape(obj); //时装变身 + DamageFont(obj); //伤害字体 + + DargonBox(obj); //龙盒 + Medal(obj); //勋章系统 + + Anton(obj); //安图恩 + AntonTopDraw(obj); //安图恩绘制 + Luke(obj); //卢克 + DrawLukeParty(obj); //卢克绘制 + + //TeamDPS(obj);//队伍dps + + BuffSwitching(obj); //buff换装 + UpgradeSystem(obj); //新版强化系统 + Ptst(obj); //护石系统 + + + + + + Raid_Auction(obj); //团本竞拍 + + // SignIn(obj); //每日签到 + + ServerAuction(obj); //全服拍卖 + + // OnlineEvent(obj); //在线活动 + + MarrySystem(obj); //结婚系统 + + WorldTower(obj); //世界之塔 + + Fate_Select(obj); //命运的抉择 + + local RootTab = getroottable(); + if (RootTab.rawin("LenheartFuncTab")) { + local LenheartFunc = RootTab["LenheartFuncTab"]; + foreach(Func in LenheartFunc) { + Func(obj); + } + } + + + Lenheartancient(obj); + + + LenheartSeverNotiAnimotion(obj); + + +} + + + + +/* + + + +*/ + + +function Lenheartancient(obj) { + if (!obj) + return; + local WeaponIndex = [28285]; + local ExWeaponIndex = [28285]; + local OpenSwitch = 0; + foreach(v in WeaponIndex) { + if (L_sq_GetCharacterAttribute(0x1c, 1) == v) OpenSwitch = 1; + } + foreach(v in WeaponIndex) { + if (L_sq_GetCharacterAttribute(0x1c, 1) == v) OpenSwitch = 2; + } + if (OpenSwitch == 0) return; + + obj = sq_GetCNRDObjectToSQRCharacter(obj); + local OutbreakBool = obj.getMyPassiveObject(48882, 0); //获取我创造的obj 荒古开启信号 + local ap = obj.GetSquirrelAppendage("nutweapon/ancient/ap_ancient.nut"); //获取AP + + local AncientAttackHit = obj.getVar("AncientAttackHit"); //定义储存器 + local AncientPowerValue = AncientAttackHit.getInt(0); //获取荒古魔能积攒数值 + local AncientPowerStaAdd = 350; //获取常规状态伤害增加率 + local AncientPowerLisAdd = 200; //获取魔能开启状态伤害增加率 + if (OpenSwitch == 2 && AncientPowerValue == 0) { + AncientAttackHit.setInt(0, 100); + } + + AncientAttackHit.setInt(10, AncientPowerStaAdd); //设置技能伤害提升 -- 常规 + + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "nutweapon/ancient/ap_ancient.nut")) //如果AP不在身上 附加AP给 人物 + { + CNSquirrelAppendage.sq_RemoveAppendage(obj, "nutweapon/ancient/ap_ancient.nut"); + local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "nutweapon/ancient/ap_ancient.nut", true); + } + + + if (AncientPowerValue == 101 || AncientPowerValue == 103 || AncientPowerValue == 105 || AncientPowerValue == 107) //开启魔能的后续状态 + { + if (OutbreakBool || AncientPowerValue == 103 || AncientPowerValue == 105) { + AncientAttackHit.setInt(0, AncientPowerValue + 1); + CNSquirrelAppendage.sq_RemoveAppendage(obj, "nutweapon/ancient/ap_ancient.nut"); + local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "nutweapon/ancient/ap_ancient.nut", true); + } + if (AncientPowerValue == 107) { + obj.sq_SendCreatePassiveObjectPacket(48883, 0, 0, 0, 0); + AncientAttackHit.setInt(0, 0); + } + } + + + if (AncientPowerValue >= 102) AncientAttackHit.setInt(10, AncientPowerStaAdd + AncientPowerLisAdd); //如果魔能开启则设置技能伤害提升 --爆发 + +} + + + + + + + +function proc_appendage_ancient(appendage) { + if (!appendage) return; + + local obj = appendage.getParent(); //获取父对象 + obj = sq_GetCNRDObjectToSQRCharacter(obj); //转换为角色类 + local AncientAttackHit = obj.getVar("AncientAttackHit"); //定义储存器 + local AncientPowerValue = AncientAttackHit.getInt(0); //获取荒古魔能数值 + + if (AncientAttackHit.getInt(16) != AncientAttackHit.getInt(0)) //储存器 缓冲值 不等于 荒古魔能数值 + { + if (AncientPowerValue == 0) //魔能为0删除动画 + { + appendage.sq_DeleteEffectFront(); + } + if (AncientPowerValue > 0 && AncientPowerValue< 20) //画动画 + { + if (AncientAttackHit.getInt(16) <= 0 || AncientAttackHit.getInt(16) >= 20) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/1/particle2.ani"); + } + } + if (AncientPowerValue >= 20 && AncientPowerValue< 40) //画动画 + { + if (AncientAttackHit.getInt(16)< 20 || AncientAttackHit.getInt(16) >= 40) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/2/particle2.ani"); + } + } + if (AncientPowerValue >= 40 && AncientPowerValue< 60) //画动画 + { + if (AncientAttackHit.getInt(16)< 40 || AncientAttackHit.getInt(16) >= 60) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/3/particle1.ani"); + } + } + if (AncientPowerValue >= 60 && AncientPowerValue< 80) //画动画 + { + if (AncientAttackHit.getInt(16)< 60 || AncientAttackHit.getInt(16) >= 80) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/4/particle1.ani"); + } + } + if (AncientPowerValue >= 80 && AncientPowerValue< 100) //画动画 + { + if (AncientAttackHit.getInt(16)< 80 || AncientAttackHit.getInt(16) >= 100) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/5/particle1.ani"); + } + } + if (AncientPowerValue == 100) //画动画 + { + if (AncientAttackHit.getInt(16)< 100) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/6/new_effect.ani"); + AncientAttackHit.setInt(0, AncientAttackHit.getInt(0) + 1); + } + } + + //开启魔能后 + if (AncientPowerValue == 102 && AncientAttackHit.getInt(16) != 102) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/open/01_red/red_onedodge2.ani"); + } + if (AncientPowerValue == 104 && AncientAttackHit.getInt(16) != 104) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/open/02_yellow/yellow_onedodge2.ani"); + } + if (AncientPowerValue == 106 && AncientAttackHit.getInt(16) != 106) { + appendage.sq_DeleteEffectFront(); + appendage.sq_AddEffectFront("common/nutwepen/ancient/open/03_white/white_onedodge2.ani"); + } + + AncientAttackHit.setInt(16, AncientAttackHit.getInt(0)); //同步储存器 缓冲值和魔能值 + } + + + + local Time = appendage.getTimer().Get(); //获取AP持续时间 + if (Time > AncientAttackHit.getInt(15) && AncientPowerValue< 100) //AP时间大于 储存器中的缓冲时间 并且魔能值小于100 + { + if (Time - AncientAttackHit.getInt(15) >= 5000) //如果超过五秒没有攻击 + { + AncientAttackHit.setInt(0, AncientPowerValue - 10); //减少十点魔能 + AncientAttackHit.setInt(15, appendage.getTimer().Get()); //同步缓冲区 + if (AncientAttackHit.getInt(0)< 0) AncientAttackHit.setInt(0, 0); //如果是负数就归零 + } + } + if (AncientPowerValue > 101) //如果处于魔能开启状态 + { + if (Time > 7000) //每过7秒 进入下一阶段 + { + AncientAttackHit.setInt(0, AncientPowerValue + 1); + appendage.setValid(false); + } + } +} + + + +function onAttackParent_appendage_ancient(appendage, realAttacker, damager, boundingBox, isStuck) { + if (!appendage) return; + + local obj = appendage.getParent(); //获取父对象 + obj = sq_GetCNRDObjectToSQRCharacter(obj); //转化为角色类对象 + + local AncientAttackHit = obj.getVar("AncientAttackHit"); //定义储存器 + AncientAttackHit.clear_vector(); //清栈 初始化储存器 + + local AncientPowerValue = AncientAttackHit.getInt(0); //获取魔能值 + + if (AncientPowerValue< 100) //魔能值小于100时 + { + AncientAttackHit.setInt(0, AncientPowerValue + 1); //攻击魔能值+1 + AncientAttackHit.setInt(15, appendage.getTimer().Get()); //同步储存器缓冲时间 + } + +} \ No newline at end of file diff --git a/LenheartCallBack/Sq_DrawMainTopLayerCustomUI.nut b/LenheartCallBack/Sq_DrawMainTopLayerCustomUI.nut new file mode 100644 index 0000000..0025a77 --- /dev/null +++ b/LenheartCallBack/Sq_DrawMainTopLayerCustomUI.nut @@ -0,0 +1,11 @@ +function Sq_DrawMainTopLayerCustomUI(pack) { + local obj = sq_GetMyMasterCharacter(); + + + + // DrawWorldTower(obj);//世界之塔 +} + + + + diff --git a/LenheartCallBack/Sq_GetExeStr_Event.nut b/LenheartCallBack/Sq_GetExeStr_Event.nut new file mode 100644 index 0000000..b714716 --- /dev/null +++ b/LenheartCallBack/Sq_GetExeStr_Event.nut @@ -0,0 +1,12 @@ +/* +文件名:Sq_GetExeStr_Event.nut +路径:LenheartCallBack/Sq_GetExeStr_Event.nut +创建日期:2022-09-06 15:52 +文件用途:获取EXE字符串HOOK +*/ + +function Sq_GetExeStr_Event(StrIndex) { + //Sout("StrIndex: %L",StrIndex); + //if(StrIndex == 29002)StrIndex = 60291; + return StrIndex; +} \ No newline at end of file diff --git a/LenheartCallBack/Sq_MouseEventCallBack.nut b/LenheartCallBack/Sq_MouseEventCallBack.nut new file mode 100644 index 0000000..748ac61 --- /dev/null +++ b/LenheartCallBack/Sq_MouseEventCallBack.nut @@ -0,0 +1,50 @@ +/* +文件名:Sq_MouseEventCallBack.nut +路径:LenheartCallBack/Sq_MouseEventCallBack.nut +创建日期:2023-02-10 05:58 +文件用途:鼠标回调 +*/ +class MouseEvent { + Lb = 0; + LbEvent = false; + Rb = 0; + RbEvent = false; + Mb = 0; + MbEvent = false; + constructor() { + + } +} +if (getroottable().rawin("MouseObject") == false) getroottable().rawset("MouseObject", MouseEvent()); + +function Sq_MouseEventCallBack(Lb, Rb, Mb) { + if (getroottable().rawin("MouseObject") == false) return; + local Tobj = getroottable()["MouseObject"]; + + if (Tobj.Lb == 0 && Lb == 1) { + Tobj.Lb = Lb; + } else if (Tobj.Lb == 1 && Lb == 0) { + Tobj.Lb = Lb; + Tobj.LbEvent = true; + } else { + Tobj.LbEvent = false; + } + + if (Tobj.Rb == 0 && Rb == 1) { + Tobj.Rb = Rb; + } else if (Tobj.Rb == 1 && Rb == 0) { + Tobj.Rb = Rb; + Tobj.RbEvent = true; + } else { + Tobj.RbEvent = false; + } + + if (Tobj.Mb == 0 && Mb == 1) { + Tobj.Mb = Mb; + } else if (Tobj.Mb == 1 && Lb == 0) { + Tobj.Mb = Mb; + Tobj.MbEvent = true; + } else { + Tobj.MbEvent = false; + } +} \ No newline at end of file diff --git a/LenheartCallBack/Sq_Pack_Control.nut b/LenheartCallBack/Sq_Pack_Control.nut new file mode 100644 index 0000000..4778bf5 --- /dev/null +++ b/LenheartCallBack/Sq_Pack_Control.nut @@ -0,0 +1,13 @@ +if (!getroottable().rawin("Pack_Control")) Pack_Control <- {} + +function Sq_Pack_Control(chunk) { + + local Pack_Json = Json_STL("buffer"); + Pack_Json.Parse(chunk, 0, false); + local Op = Pack_Json.Get("op"); + + if (Pack_Control.rawin(Op) == true) { + Pack_Control[Op](chunk); + } + Pack_Json.Delete(); +} \ No newline at end of file diff --git a/LenheartCallBack/Sq_RecoveryCallBack.nut b/LenheartCallBack/Sq_RecoveryCallBack.nut new file mode 100644 index 0000000..93675f2 --- /dev/null +++ b/LenheartCallBack/Sq_RecoveryCallBack.nut @@ -0,0 +1,190 @@ +/* +文件名:Sq_RecoveryCallBack.nut +路径:LenheartCallBack/Sq_RecoveryCallBack.nut +创建日期:2022-11-03 02:04 +文件用途:回收功能CallBack +*/ + +/* +11D24F0 + + +*/ + +//设置回收模式 +function Sq_RecoveryTypeSetCallBack(Type) { + getroottable().rawset("RecoverySystemType", Type); +} + +//鼠标位置回调 +function Sq_Set_Inventory_M_Pos(This) { + //print(This); + //在回收模式中 + if (getroottable().rawin("RecoverySystemState") && getroottable()["RecoverySystemState"] == true) { + local StaticPos = L_sq_RA(This + 0x310); + if (StaticPos >= 0) { + if (KeyPress.isKeyPress(7)) { + local Time = TimeSTL("RecoveryCD", 1000); + if (Time.Get() == false || Time.Get() == 1000) { + Time.Reset(); + Time.Start(); + local Type = getroottable()["RecoverySystemType"]; + + local SendType = 0; + local SendPos = 0; + + //回收物品栏 + if (Type >= 1 && Type <= 5) { + SendPos = 9 + ((Type - 1) * 48); + } + + //回收时装 + else if (Type == 6) { + SendType = 1; + } + //回收徽章 + else if (Type == 7) { + SendType = 0; + SendPos = 249; + } + //回收宠物 + else if (Type == 8) { + SendType = 7; + } + //回收宠物装备 + else if (Type == 9) { + SendType = 7; + SendPos = 140; + } + //回收宠物消耗品 + else if (Type == 10) { + SendType = 7; + SendPos = 189; + } + + // local RecoverySomething = Json_STL("RecoverySomething"); + // RecoverySomething.Put("op", 20003001); + // RecoverySomething.Put("Type", SendType); + // RecoverySomething.Put("Pos", StaticPos + SendPos); + // local str = RecoverySomething.GetString(); + // L_sq_SendPackType(130); + // L_sq_SendPackWChar(str); + // L_sq_SendPack(); + // RecoverySomething.Delete(); + + local RecoverySomething = Json_STL("RecoverySomething"); + RecoverySomething.Put("op", 20003107); + RecoverySomething.Put("Type", SendType); + RecoverySomething.Put("Pos", StaticPos + SendPos); + local str = RecoverySomething.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + RecoverySomething.Delete(); + } + } + } + } + //在装备强化模式中 + if (getroottable().rawin("UpgradeObj") && getroottable()["UpgradeObj"].Sw == true && getroottable()["UpgradeObj"].State == true) { + local StaticPos = L_sq_RA(This + 0x310); + if (StaticPos >= 0) { + if (getroottable().rawin("MouseObject")) { + local Mobj = getroottable()["MouseObject"]; + if (Mobj.LbEvent) { + print(11); + local UpGradeSomething = Json_STL("UpGradeSomething"); + UpGradeSomething.Put("op", 20018001); + UpGradeSomething.Put("Pos", StaticPos + 9); + local str = UpGradeSomething.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + UpGradeSomething.Delete(); + } + } + } + } +} + + + + +function GetRecoveryPPos(Type) { + if (Type == 1) { + + } +} + + +function Sq_RecoveryCallBack(x, y) { + //print(x); + //print(IMouse.GetXPos()); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, 42, 23) && IMouse.isButtonUpEvent()) { + getroottable().rawset("RecoverySystemState", true); + getroottable().rawset("RecoverySystemSwitch", true); + } + + /* + //如果背包拓展偏移值不存在 + if (!getroottable().rawin("InventorySize") || getroottable()["InventorySize"] == -1) { + if (!Pack_Control.rawin("InventorySize_switch")) { + local GetInventorySize = Json_STL("GetInventorySize"); + GetInventorySize.Put("op", 607); + local str = GetInventorySize.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetInventorySize.Delete(); + Pack_Control.rawset("InventorySize_switch", 1); + } + } else { + + } + */ + /* + local InventoryWindow = sq_GetPopupWindowMainCotrol(64); + if (InventoryWindow) { + local X = InventoryWindow.GetXPos(); + local Y = InventoryWindow.GetYPos(); + for (local i = 0; i < 8; i++) { + for (local z = 0; z < 6; z++) { + //sq_DrawBox(X + (i * 30), Y + 206 + (z * 30), 28, 28, 0xffffffff); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + (i * 30), Y + 206 + (z * 30), 28, 28)) { + //Sout("指向的行数: %L 指向的列数: %L", i.tostring(), z.tostring()); + if (KeyPress.isKeyPress(7)) { + local Pos = (i + 9) + (z * 8); + + local RecoveryEqu = Json_STL("RecoveryEqu"); + RecoveryEqu.Put("op", 10052001); + RecoveryEqu.Put("POS", Pos); + local str = RecoveryEqu.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + RecoveryEqu.Delete(); + } + } + } + + } + + } + */ +} + +function RecoverySystem(obj) { + //如果在回收状态 改变鼠标 + if (getroottable().rawin("RecoverySystemState") && getroottable()["RecoverySystemState"] == true && sq_GetPopupWindowMainCotrol(64)) { + IMouse.SetMouseTask(13); + if (IMouse.isButtonUpEvent()) getroottable().rawset("RecoverySystemState", false); + } else //否则就设置一次归零 + { + getroottable().rawset("RecoverySystemState", false); + if (getroottable().rawin("RecoverySystemSwitch") && getroottable()["RecoverySystemSwitch"] == true) { + IMouse.SetMouseTask(0); + getroottable().rawset("RecoverySystemSwitch", false); + } + } + +} \ No newline at end of file diff --git a/LenheartCallBack/Sq_SelectCharacter.nut b/LenheartCallBack/Sq_SelectCharacter.nut new file mode 100644 index 0000000..586136e --- /dev/null +++ b/LenheartCallBack/Sq_SelectCharacter.nut @@ -0,0 +1,3 @@ +function Sq_SelectCharacter(Chunk) { + //CreatChr(pack); +} \ No newline at end of file diff --git a/LenheartCallBack/Sq_SendPackType_Event.nut b/LenheartCallBack/Sq_SendPackType_Event.nut new file mode 100644 index 0000000..4aea01a --- /dev/null +++ b/LenheartCallBack/Sq_SendPackType_Event.nut @@ -0,0 +1,111 @@ +if (!getroottable().rawin("SendPackTypeTable")) SendPackTypeTable <- {} +SendPackDeBug <- false; + +function Sq_SendPackType_Event(Type) { + if (SendPackDeBug) Sout("发包类型: %L", Type); + //调用发包CallBack + if (SendPackTypeTable.rawin(Type)) { + SendPackTypeTable[Type](Type); + } +} + + +function Sq_SendPackByte_Event(Parm) { + if (SendPackDeBug) Sout("构造Byte: %L", Parm); + +} + + +function Sq_SendPackWord_Event(Parm) { + if (SendPackDeBug) Sout("构造Word: %L", Parm); + +} + +function Sq_SendPackDWord_Event(Parm) { + if (SendPackDeBug) Sout("构造DWord: %L", Parm); + +} + +function Sq_SendPackChar_Event(Parm) { + if (SendPackDeBug) Sout("构造Char: %L", Parm); +} + +function Sq_SendPack_Event() { + if (SendPackDeBug) Sout("发包事件 %L", "\n\n"); + +} +/* +function drawGrowAvatarAniType(a,b,c,d,e,f) { + print(a); + print(b); + print(c); + print(d); + + print(e); + print(f); +} + +function drawAppend_VirtualCharacter() + +function onOpenPopupWindow_ATMage + +function onLButtonUpCharacter_ATMage + +function onMouseMoveCharacter_ATMage + +function onClosePopupWindow_ATMage + +function onInActiveWindow_ATMage + +function onMouseLeftButtonDown_ATMage + +function onMouseLeftButtonUp_ATMage + +function onMouseRightButtonDown_ATMage + +function onMouseRightButtonUp_ATMage + +function drawAppend_ATMage + +function checkOverItemObject_ATMage + +function onDestroyObject_ATMage + +function addSetStatePacket_ATMage + +function getImmuneTypeDamgeRate_ATMage + +function getImmuneType_ATMage + +function onBeforeDamage_ATMage + +function isCounterState_ATMage + +function setEnableCancelSkill_ATMage + +function prepareDraw_ATMage + +function getScrollBasisPos_Attack + +function onEnterFrame_Attack + +function getAttackCancelStartFrameSize_ATMage + +function getAttackCancelStartFrame_ATMage + +function onIsCheckHitCollision_Attack + +function isForceHitCheck_Attack + +function onCreateObject_ //创建Obj时 + +function isApplyConversionSkillPassiveObject_ATMage + +function onUseSkill_WindStrike(obj,a,b)//使用技能时 + + + + +8606795 + +*/ \ No newline at end of file diff --git a/LenheartCallBack/Sq_SettingWindow.nut b/LenheartCallBack/Sq_SettingWindow.nut new file mode 100644 index 0000000..d392059 --- /dev/null +++ b/LenheartCallBack/Sq_SettingWindow.nut @@ -0,0 +1,219 @@ +/* +文件名:Sq_SettingWindow.nut +路径:LenheartCallBack/Sq_SettingWindow.nut +创建日期:2022-10-21 08:29 +文件用途:设置窗口回调函数 +*/ + +//切换武器回调 +// function SelectWeapon(Type) { +// SetUpgradeRate(); +// } +// if (getroottable().rawin("SendPackTypeTable")) getroottable()["SendPackTypeTable"].rawset(19, SelectWeapon); + +//上传设置发包 +function ReqPlayerSettingSet(Type) { + local MonsterBloodSB = getroottable()["MonsterBloodSwitchButtonObj"]; + local GameShakeSB = getroottable()["GameShakeSwitchButtonObj"]; + local DamageNumSB = getroottable()["DamageNumSwitchButtonObj"]; + local Tabbuffer = { + MonsterBloodSB = MonsterBloodSB.SwitchState, + GameShakeSB = GameShakeSB.SwitchState, + DamageNumSB = DamageNumSB.SwitchState, + } + local PlayerSettingSetPack = Json_STL("PlayerSettingSetPack"); + PlayerSettingSetPack.Put("op", 20001001); + PlayerSettingSetPack.Put("Setting", Json_STL.Encode(Tabbuffer)); + + + local str = PlayerSettingSetPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + PlayerSettingSetPack.Delete(); +} +if (getroottable().rawin("SendPackTypeTable")) getroottable()["SendPackTypeTable"].rawset(200, ReqPlayerSettingSet); + +//获取设置收包 +function RcvPlayerSettingSet(Chunk) { + local RootTab = getroottable(); + local Buffer = Json_STL("RcvPlayerSettingSetBuffer"); + Buffer.Parse(Chunk, 0, false); + local str = Buffer.Get("Setting"); + Buffer.Delete(); + if (str && str.len() > 0) { + local SettingBuffer = Json_STL("SettingBuffer"); + SettingBuffer.Parse(str, 0, false); + RootTab.rawset("S_MonsterBloodSB", SettingBuffer.Get("MonsterBloodSB")); + RootTab.rawset("S_GameShakeSB", SettingBuffer.Get("GameShakeSB")); + RootTab.rawset("S_DamageNumSB", SettingBuffer.Get("DamageNumSB")); + SettingBuffer.Delete(); + } else { + RootTab.rawset("S_MonsterBloodSB", false); + RootTab.rawset("S_GameShakeSB", false); + RootTab.rawset("S_DamageNumSB", false); + } + //设置一下伤害字体上限 + if (RootTab["S_DamageNumSB"]) { + L_sq_WA(0x7EEA7A, 999999999); + L_sq_WA(0x7EEAA7, 999999999); + } +} + +if (getroottable().rawin("Pack_Control")) getroottable()["Pack_Control"].rawset(20001002, RcvPlayerSettingSet); + + +function InitGameSetting(obj) { + local PlayerSettingGetPack = Json_STL("PlayerSettingGetPack"); + PlayerSettingGetPack.Put("op", 20001003); + local str = PlayerSettingGetPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + PlayerSettingGetPack.Delete(); +} + + + +function Sq_SettingWindowCallBack(Xpos, Ypos) { + local obj = sq_GetMyMasterCharacter(); + + L_sq_DrawCode(":: 开启新版怪物血条", Xpos + 228, Ypos + 32, 0xFF93C5DD, 0, 1); + L_sq_DrawCode(" ┄┄┄┄┄", Xpos + 338, Ypos + 32, 0x9693C5DD, 0, 1); + L_sq_DrawCode(":: 关闭震动屏幕效果", Xpos + 228, Ypos + 32 + 19, 0xFF93C5DD, 0, 1); + L_sq_DrawCode(" ┄┄┄┄┄", Xpos + 338, Ypos + 32 + 19, 0x9693C5DD, 0, 1); + L_sq_DrawCode(":: 新版伤害字体上限", Xpos + 228, Ypos + 32 + 19 + 19, 0xFF93C5DD, 0, 1); + L_sq_DrawCode(" ┄┄┄┄┄", Xpos + 338, Ypos + 32 + 19 + 19, 0x9693C5DD, 0, 1); + + + //怪物血条 + //if (!getroottable().rawin("MonsterBloodSwitchButtonObj")) { + local MonsterBloodSB = SettingWindowSwitchButtonPro(obj, "MonsterBloodSwitchButton", Xpos + 410, Ypos + 32, "ui/optionwindow/custombutton/switchbutton.ani", 0, 16, 15); + MonsterBloodSB.SetRectEnble(true, "MonsterBloodSwitchButtonR", Xpos + 410, Ypos + 32, "ui/optionwindow/custombutton/switchbutton.ani", 1); + MonsterBloodSB.SetCustomClickEnble(true, "MonsterBloodSwitchButtonC", Xpos + 410, Ypos + 32, "ui/optionwindow/custombutton/switchbutton.ani", 1); + MonsterBloodSB.SetSwitchStateAni("MonsterBloodSwitchButtonS", "ui/optionwindow/custombutton/switchbutton.ani", 2); + if (getroottable().rawin("S_MonsterBloodSB")) MonsterBloodSB.SwitchState = getroottable()["S_MonsterBloodSB"]; + else MonsterBloodSB.SwitchState = false; + getroottable().rawset("MonsterBloodSwitchButtonObj", MonsterBloodSB); + //} + if (getroottable().rawin("MonsterBloodSwitchButtonObj")) { + local MonsterBloodSB = getroottable()["MonsterBloodSwitchButtonObj"]; + MonsterBloodSB.Show(); + if (MonsterBloodSB.isLBActive()) { + MonsterBloodSB.SwitchState = !MonsterBloodSB.SwitchState; + getroottable().rawset("S_MonsterBloodSB", MonsterBloodSB.SwitchState); + } + } + + //游戏震动 + //if (!getroottable().rawin("GameShakeSwitchButtonObj")) { + local GameShakeSB = SettingWindowSwitchButtonPro(obj, "GameShakeSwitchButton", Xpos + 410, Ypos + 32 + 19, "ui/optionwindow/custombutton/switchbutton.ani", 0, 16, 15); + GameShakeSB.SetRectEnble(true, "GameShakeSwitchButtonR", Xpos + 410, Ypos + 32 + 19, "ui/optionwindow/custombutton/switchbutton.ani", 1); + GameShakeSB.SetCustomClickEnble(true, "GameShakeSwitchButtonC", Xpos + 410, Ypos + 32 + 19, "ui/optionwindow/custombutton/switchbutton.ani", 1); + GameShakeSB.SetSwitchStateAni("GameShakeSwitchButtonS", "ui/optionwindow/custombutton/switchbutton.ani", 2); + if (getroottable().rawin("S_GameShakeSB")) GameShakeSB.SwitchState = getroottable()["S_GameShakeSB"]; + else GameShakeSB.SwitchState = false; + getroottable().rawset("GameShakeSwitchButtonObj", GameShakeSB); + //} + if (getroottable().rawin("GameShakeSwitchButtonObj")) { + local GameShakeSB = getroottable()["GameShakeSwitchButtonObj"]; + GameShakeSB.Show(); + if (GameShakeSB.isLBActive()) { + GameShakeSB.SwitchState = !GameShakeSB.SwitchState; + getroottable().rawset("S_GameShakeSB", GameShakeSB.SwitchState); + } + } + + //伤害字体上限 + //if (!getroottable().rawin("DamageNumSwitchButtonObj")) { + local DamageNumSB = SettingWindowSwitchButtonPro(obj, "DamageNumSwitchButton", Xpos + 410, Ypos + 32 + 19 + 19, "ui/optionwindow/custombutton/switchbutton.ani", 0, 16, 15); + DamageNumSB.SetRectEnble(true, "DamageNumSwitchButtonR", Xpos + 410, Ypos + 32 + 19 + 19, "ui/optionwindow/custombutton/switchbutton.ani", 1); + DamageNumSB.SetCustomClickEnble(true, "DamageNumSwitchButtonC", Xpos + 410, Ypos + 32 + 19 + 19, "ui/optionwindow/custombutton/switchbutton.ani", 1); + DamageNumSB.SetSwitchStateAni("DamageNumSwitchButtonS", "ui/optionwindow/custombutton/switchbutton.ani", 2); + if (getroottable().rawin("S_DamageNumSB")) DamageNumSB.SwitchState = getroottable()["S_DamageNumSB"]; + else DamageNumSB.SwitchState = false; + getroottable().rawset("DamageNumSwitchButtonObj", DamageNumSB); + //} + if (getroottable().rawin("DamageNumSwitchButtonObj")) { + local DamageNumSB = getroottable()["DamageNumSwitchButtonObj"]; + DamageNumSB.Show(); + if (DamageNumSB.isLBActive()) { + DamageNumSB.SwitchState = !DamageNumSB.SwitchState; + getroottable().rawset("S_DamageNumSB", DamageNumSB.SwitchState); + } + } +} + + + +//踢自己 +function KickMySelf(chunk) { + local KickMySelf = Json_STL("KickMySelf"); + KickMySelf.Put("op", 77777); + local str = KickMySelf.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + KickMySelf.Delete(); + L_sq_SendPack(); +} +if (getroottable().rawin("Pack_Control")) getroottable()["Pack_Control"].rawset(77778, KickMySelf); + +//全屏拾物 +function MoveItems(chunk) { + local obj = sq_GetMyMasterCharacter(); + local objectManager = obj.getObjectManager(); + if (!objectManager) return; + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < CollisionObjectNumber; i += 1) { + local object = objectManager.getCollisionObject(i); + if (object.isObjectType(OBJECTTYPE_ITEM)) { + sq_SetCurrentPos(object, obj.getXPos(), obj.getYPos(), 0); + } + } +} +if (getroottable().rawin("Pack_Control")) getroottable()["Pack_Control"].rawset(900, MoveItems); + + +//充值全服公告动画 +function ChargeNotiFunc(obj) { + if (getroottable().rawin("ChargeNotiTab") && getroottable()["ChargeNotiTab"].len() > 0) { + local BaseAni = BasicsDrawTool.T_DrawDynamicAni(obj, "common/addpoint/dh.ani", 0, -180, "ChargeNotiAni"); + if (sq_GetAnimationFrameIndex(BaseAni) >= 80) { + //L_sq_DrawCode(" [" + getroottable()["ChargeNotiTab"][0].name + "]", 170, 286 - 173, sq_RGBA(255, 177, 0, 250), 1, 0); + local NotiObj = getroottable()["ChargeNotiTab"][0]; + local StrArr = NotiObj.Noti; + + L_sq_DrawCode(StrArr[0] + NotiObj.name + StrArr[1] + StrArr[2] + NotiObj.point + StrArr[3], NotiObj.nameposx,NotiObj.nameposy, NotiObj.color, 1, 0); + } + if (sq_GetCurrentTime(BaseAni) >= 6000) { + sq_Rewind(BaseAni); + getroottable()["ChargeNotiTab"].remove(0); + } + } +} + +//大佬充值全服公告 +function ChargeNoti(Chunk) { + local Buffer = Json_STL("ChargeNotiBuffer"); + Buffer.Parse(Chunk, 0, false); + local Tab = { + name = Buffer.Get("name"), + point = Buffer.Get("Point"), + nameposx = Buffer.Get("NameXpos"), + nameposy = Buffer.Get("NameYpos"), + Noti = [Buffer.Get("ExNot0"), Buffer.Get("ExNot1"), Buffer.Get("ExNot2"), Buffer.Get("ExNot3")], + color = sq_RGBA(Buffer.Get("R"),Buffer.Get("G"),Buffer.Get("B"),Buffer.Get("A")), + } + local arr; + if (!getroottable().rawin("ChargeNotiTab")) { + arr = []; + } else { + arr = getroottable()["ChargeNotiTab"]; + } + arr.append(Tab); + getroottable().rawset("ChargeNotiTab", arr); + + Buffer.Delete(); +} +if (getroottable().rawin("Pack_Control")) getroottable()["Pack_Control"].rawset(20005002, ChargeNoti); \ No newline at end of file diff --git a/MoveTownEvent/MoveTownEvent.nut b/MoveTownEvent/MoveTownEvent.nut new file mode 100644 index 0000000..e8a1561 --- /dev/null +++ b/MoveTownEvent/MoveTownEvent.nut @@ -0,0 +1,34 @@ +/* +文件名:MoveTownEvent.nut +路径:MoveTownEvent/MoveTownEvent.nut +创建日期:2022-09-06 13:21 +文件用途:城镇移动事件 +*/ +MoveTownEventTable <- {} + +//进入修炼场 +function MoveTraining() { + L_sq_GoDungeon(6000); +} + +MoveTownEventTable.rawset([2, 4, 915, 135, 990, 170], MoveTraining); + + +function MoveTownEvent() { + local TownIndex = L_sq_GetTownIndex(); + local TownRegion = L_sq_GetRegionIndex() + local TownXpos = L_sq_GetTownXpos(); + local TownYpos = L_sq_GetTownYpos(); + print(TownXpos); + print(TownYpos); + foreach(PosTable, Func in MoveTownEventTable) { + if (TownIndex == PosTable[0] && TownRegion == PosTable[1] && TownXpos >= PosTable[2] && TownYpos >= PosTable[3] && TownXpos <= PosTable[4] && TownYpos <= PosTable[5]) { + if (!MoveTownEventTable.rawin("Mark" + PosTable)) { + MoveTownEventTable.rawset("Mark" + PosTable, 1); + Func(); + } + } else { + if (MoveTownEventTable.rawin("Mark" + PosTable)) MoveTownEventTable.rawdelete("Mark" + PosTable); + } + } +} \ No newline at end of file diff --git a/NativeClassInit/IRDAICharacter.nut b/NativeClassInit/IRDAICharacter.nut new file mode 100644 index 0000000..3f5f906 --- /dev/null +++ b/NativeClassInit/IRDAICharacter.nut @@ -0,0 +1,47 @@ +function IRDAICharacter::GetAddress() { + return L_Sq_GetObjectAddress(this); +} + +function IRDAICharacter::GetName() { + return L_Sq_GetObjectName(this); +} + +function IRDAICharacter::GetLevel() { + return L_Sq_GetObjectLevel(this); +} + +// function IRDAICharacter::sq_GetIntData(SkillId,Idx) { +// local ret = L_sq_GetIntData(SkillId,Idx); +// return ret + HookIntData(this,SkillId,Idx); +// } + +// function IRDAICharacter::sq_getIntData(SkillId,Idx) { +// local ret = L_sq_GetIntData(SkillId,Idx); +// return ret + HookIntData(this,SkillId,Idx); +// } + +// function IRDAICharacter::sq_GetLevelData(SkillId,Idx,SkillLevel) { +// local ret = L_sq_GetLevelData(SkillId,Idx,SkillLevel); +// return ret + HookLevelData(this,SkillId,Idx,SkillLevel); +// } + +// function IRDAICharacter::sq_getLevelData(SkillId,Idx,SkillLevel) { +// local ret = L_sq_GetLevelData(SkillId,Idx,SkillLevel); +// return ret + HookLevelData(this,SkillId,Idx,SkillLevel); +// } + + +function IRDMonster::GetAddress() { + return L_Sq_GetObjectAddress(this); +} + +function IRDCollisionObject::GetAddress() { + return L_Sq_GetObjectAddress(this); +} + +function IRDItem::GetAddress() { + return L_Sq_GetObjectAddress(this); +} + + + diff --git a/NativeClassInit/IRDActiveObject.nut b/NativeClassInit/IRDActiveObject.nut new file mode 100644 index 0000000..73289e9 --- /dev/null +++ b/NativeClassInit/IRDActiveObject.nut @@ -0,0 +1,11 @@ +function IRDActiveObject::GetAddress() { + return L_Sq_GetObjectAddress(this); +} + +function IRDActiveObject::GetName() { + return L_Sq_GetObjectName(this); +} + +function IRDActiveObject::GetLevel() { + return L_Sq_GetObjectLevel(this); +} \ No newline at end of file diff --git a/NativeClassInit/IRDSQRCharacter.nut b/NativeClassInit/IRDSQRCharacter.nut new file mode 100644 index 0000000..0fbd943 --- /dev/null +++ b/NativeClassInit/IRDSQRCharacter.nut @@ -0,0 +1,52 @@ +function IRDSQRCharacter::GetAddress() { + return L_Sq_GetObjectAddress(this); +} + +function IRDSQRCharacter::GetName() { + return L_Sq_GetObjectName(this); +} + +function IRDSQRCharacter::GetLevel() { + return L_Sq_GetObjectLevel(this); +} + +// function IRDSQRCharacter::sq_GetIntData(SkillId, Idx) { + +// local ret = L_sq_GetIntData(SkillId, Idx); +// return ret + HookIntData(this, SkillId, Idx); +// } + +// function IRDSQRCharacter::sq_getIntData(SkillId, Idx) { +// local ret = L_sq_GetIntData(SkillId, Idx); +// return ret + HookIntData(this, SkillId, Idx); +// } + +// function IRDSQRCharacter::sq_GetLevelData(...) { +// if (vargc == 1) { +// local ret = L_sq_GetLevelData(vargv[0]); +// local SkillId = this.getCurrentSkillIndex(); +// local SkillLevel = this.sq_GetSkillLevel(SkillId); +// return ret + HookLevelData(this, SkillId, vargv[0]); +// } else { +// local SkillId = vargv[0]; +// local Idx = vargv[1]; +// local SkillLevel = vargv[2]; +// local ret = L_sq_GetLevelData(SkillId, Idx, SkillLevel); +// return ret + HookLevelData(this, SkillId, Idx); +// } +// } + +// function IRDSQRCharacter::sq_getLevelData(...) { +// if (vargc == 1) { +// local ret = L_sq_GetLevelData(vargv[0]); +// local SkillId = this.getCurrentSkillIndex(); +// local SkillLevel = this.sq_GetSkillLevel(SkillId); +// return ret + HookLevelData(this, SkillId, vargv[0]); +// } else { +// local SkillId = vargv[0]; +// local Idx = vargv[1]; +// local SkillLevel = vargv[2]; +// local ret = L_sq_GetLevelData(SkillId, Idx, SkillLevel); +// return ret + HookLevelData(this, SkillId, Idx); +// } +// } \ No newline at end of file diff --git a/Plugins/100UI/100UI.nut b/Plugins/100UI/100UI.nut new file mode 100644 index 0000000..c1821ed --- /dev/null +++ b/Plugins/100UI/100UI.nut @@ -0,0 +1,1108 @@ +/* +文件名:100UI.nut +路径:Plugins/100UI/100UI.nut +创建日期:2023-11-01 20:56 +文件用途: +*/ + +function Lenheart_100UI_DrawHPMP(obj) { + //我的异常 + local HPRGBA = { + R = 255, + G = 0, + B = 0, + A = 250, + }; + local MPRGBA = { + R = 0, + G = 0, + B = 255, + A = 250 + }; + local HPK = 212; + local HPB = 1; + local MPK = 213; + local MPB = 2; + //中毒 + if (sq_IsValidActiveStatus(obj, ACTIVESTATUS_POISON)) { + HPRGBA = { + R = 128, + G = 0, + B = 128, + A = 250 + }; + HPK = 214; + HPB = 20; + } + if (sq_IsRidingObject(obj)) { + HPRGBA = { + R = 255, + G = 128, + B = 0, + A = 250 + }; + MPRGBA = { + R = 255, + G = 128, + B = 0, + A = 250 + }; + HPK = 215; + HPB = 64; + MPK = 215; + MPB = 64; + + local objectManager = obj.getObjectManager(); + if (objectManager) { + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i< CollisionObjectNumber; i += 1) { + local object = objectManager.getCollisionObject(i); + local Address = L_Sq_GetObjectAddress(object); + if (Address == L_Sq_GetRidingObjectAddress(obj)) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + getroottable()["Lenheart100UIMyRidingObject"] <- activeObj; + } + } + } + } else { + getroottable().rawdelete("Lenheart100UIMyRidingObject"); + } + + + local Gobj = obj; + if (sq_IsRidingObject(obj) && getroottable().rawin("Lenheart100UIMyRidingObject")) Gobj = getroottable().Lenheart100UIMyRidingObject; + // local Str = "生命值: " + Gobj.getHp() + "/" + Gobj.getHpMax(); + + + //生命值比例 + local HpRate = (Gobj.getHp().tofloat() / Gobj.getHpMax().tofloat()); + //生命值损失数组 + if (!("Lenheart_100UI_HpDamageArr" in getroottable())) { + getroottable().Lenheart_100UI_HpDamageArr <- []; + } + //生命值损失标志 + if (!("Lenheart_100UI_HpDamageRateFlag" in getroottable())) { + getroottable().Lenheart_100UI_HpDamageRateFlag <- HpRate; + } + + + //Push + if (getroottable().Lenheart_100UI_HpDamageRateFlag != HpRate && (abs((getroottable().Lenheart_100UI_HpDamageRateFlag * 1000.0 - HpRate * 1000.0)) >= 10)) { + local MaxHpDamgeArrLen = 100; + if (getroottable().Lenheart_100UI_HpDamageArr.len()< MaxHpDamgeArrLen) { + local T = { + OldHpRate = getroottable().Lenheart_100UI_HpDamageRateFlag, + NowHpRate = HpRate, + Time = Clock(), + } + getroottable().Lenheart_100UI_HpDamageArr.append(T); + + if (!("Lenheart_100UI_HpDamageEff" in getroottable())) { + getroottable().Lenheart_100UI_HpDamageEff <- { + OldHpRate = getroottable().Lenheart_100UI_HpDamageRateFlag, + Time = Clock(), + }; + } + } + } + getroottable().Lenheart_100UI_HpDamageRateFlag <- HpRate; + + if ("Lenheart_100UI_HpDamageEff" in getroottable()) { + local ValueHpBack = getroottable().Lenheart_100UI_HpDamageEff; + local DstTime = Clock() - ValueHpBack.Time; + local HpOffset = 534 + (63 * (1.0 - ValueHpBack.OldHpRate)).tointeger(); + if (DstTime > 500) { + HpOffset = sq_GetUniformVelocity(534 + (63 * (1.0 - ValueHpBack.OldHpRate)).tointeger(), 534 + (63 * (1.0 - HpRate)).tointeger(), DstTime - 500, 500); + } + setClip(222, HpOffset, 222 + 64, 534 + (63 * (1.0 - HpRate)).tointeger()); //开始裁切 + local HpAni = BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/lenheartnew/hpmp_vessel.ani", 222 - 45, 534 + 31, "ui/hud/lenheartnew/hpmp_vesselHp"); + HpAni.setRGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HPRGBA.A); + releaseClip(); //裁切结束 + + if (DstTime > 1000) { + getroottable().rawdelete("Lenheart_100UI_HpDamageEff"); + } + } + + + foreach(Pos, Value in getroottable().Lenheart_100UI_HpDamageArr) { + local DstTime = Clock() - Value.Time; + if (DstTime <= 1000) { + if (DstTime <= 500) { + local HP_Eff_Alpha = sq_GetUniformVelocity(250, 0, DstTime, 500); + setClip(222, 534 + (63 * (1.0 - Value.OldHpRate)).tointeger(), 222 + 64, 534 + (63 * (1.0 - Value.NowHpRate)).tointeger()); //开始裁切 + L_sq_DrawImg("interface2/hud/hud.img", 36, 226, 536, 0, sq_RGBA(255, 255, 255, HP_Eff_Alpha), 1.0, 1.0); + releaseClip(); //裁切结束 + } + } else { + getroottable().Lenheart_100UI_HpDamageArr.remove(Pos); + } + + } + + + + + //血球绘制逻辑 + setClip(222, 534 + (63 * (1.0 - HpRate)).tointeger(), 222 + 64, 534 + 63); //开始裁切 + L_sq_DrawImg("interface2/hud/hud.img", HPB, 226, 536); + local HpAni = BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/lenheartnew/hpmp_vessel.ani", 222 - 45, 534 + 31, "ui/hud/lenheartnew/hpmp_vesselHp"); + HpAni.setRGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HPRGBA.A); + releaseClip(); //裁切结束 + + + //悬停逻辑 + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 222, 534, 64, 63)) { + local T = { + X = IMouse.GetXPos(), + Y = IMouse.GetYPos(), + } + getroottable().rawset("Lenheart100UIHPSTR", T); + } else { + getroottable().rawdelete("Lenheart100UIHPSTR"); + } + //血槽外框逻辑 + L_sq_DrawImg("interface2/hud/hud.img", HPK, 222, 534); + + + + + + + + //魔法值比例 + local MpRate = (Gobj.getMp().tofloat() / Gobj.getMpMax().tofloat()); + //生命值损失数组 + if (!("Lenheart_100UI_MpDamageArr" in getroottable())) { + getroottable().Lenheart_100UI_MpDamageArr <- []; + } + //生命值损失标志 + if (!("Lenheart_100UI_MpDamageRateFlag" in getroottable())) { + getroottable().Lenheart_100UI_MpDamageRateFlag <- MpRate; + } + + + + //Push + if (getroottable().Lenheart_100UI_MpDamageRateFlag != MpRate && (abs((getroottable().Lenheart_100UI_MpDamageRateFlag * 1000.0 - MpRate * 1000.0)) >= 10)) { + local MaxMpDamgeArrLen = 100; + if (getroottable().Lenheart_100UI_MpDamageArr.len()< MaxMpDamgeArrLen) { + local T = { + OldMpRate = getroottable().Lenheart_100UI_MpDamageRateFlag, + NowMpRate = MpRate, + Time = Clock(), + } + getroottable().Lenheart_100UI_MpDamageArr.append(T); + + if (!("Lenheart_100UI_MpDamageEff" in getroottable())) { + getroottable().Lenheart_100UI_MpDamageEff <- { + OldMpRate = getroottable().Lenheart_100UI_MpDamageRateFlag, + Time = Clock(), + }; + } + } + } + getroottable().Lenheart_100UI_MpDamageRateFlag <- MpRate; + + if ("Lenheart_100UI_MpDamageEff" in getroottable()) { + + local ValueMpBack = getroottable().Lenheart_100UI_MpDamageEff; + local DstTime = Clock() - ValueMpBack.Time; + local MpOffset = 534 + (63 * (1.0 - ValueMpBack.OldMpRate)).tointeger(); + if (DstTime > 500) { + MpOffset = sq_GetUniformVelocity(534 + (63 * (1.0 - ValueMpBack.OldMpRate)).tointeger(), 534 + (63 * (1.0 - MpRate)).tointeger(), DstTime - 500, 500); + } + setClip(514, MpOffset, 514 + 64, 534 + (63 * (1.0 - MpRate)).tointeger()); //开始裁切 + local MpAni = BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/lenheartnew/hpmp_vessel.ani", 514 - 45, 534 + 31, "ui/hud/lenheartnew/Mpmp_vesselMp"); + MpAni.setRGBA(MPRGBA.R, MPRGBA.G, MPRGBA.B, MPRGBA.A); + releaseClip(); //裁切结束 + + if (DstTime > 1000) { + getroottable().rawdelete("Lenheart_100UI_MpDamageEff"); + } + } + + + foreach(Pos, Value in getroottable().Lenheart_100UI_MpDamageArr) { + local DstTime = Clock() - Value.Time; + if (DstTime <= 1000) { + if (DstTime <= 500) { + local Mp_Eff_Alpha = sq_GetUniformVelocity(250, 0, DstTime, 500); + setClip(514, 534 + (63 * (1.0 - Value.OldMpRate)).tointeger(), 514 + 64, 534 + (63 * (1.0 - Value.NowMpRate)).tointeger()); //开始裁切 + L_sq_DrawImg("interface2/hud/hud.img", 36, 518, 536, 0, sq_RGBA(255, 255, 255, Mp_Eff_Alpha), 1.0, 1.0); + releaseClip(); //裁切结束 + } + } else { + getroottable().Lenheart_100UI_MpDamageArr.remove(Pos); + } + + } + + + + //蓝球绘制逻辑 + setClip(518, 534 + (63 * (1.0 - MpRate)).tointeger(), 518 + 64, 534 + 63); //开始裁切 + L_sq_DrawImg("interface2/hud/hud.img", MPB, 518, 536); + local MpAni = BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/lenheartnew/hpmp_vessel.ani", 514 - 45, 534 + 31, "ui/hud/lenheartnew/hpmp_vesselMp"); + MpAni.setRGBA(MPRGBA.R, MPRGBA.G, MPRGBA.B, MPRGBA.A); + releaseClip(); //裁切结束 + + + //悬停逻辑 + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 514, 534, 64, 63)) { + local T = { + X = IMouse.GetXPos(), + Y = IMouse.GetYPos(), + } + getroottable().rawset("Lenheart100UIMPSTR", T); + } else { + getroottable().rawdelete("Lenheart100UIMPSTR"); + } + //血槽外框逻辑 + L_sq_DrawImg("interface2/hud/hud.img", MPK, 514, 534); + +} + +function Lenheart_100UI_Event_BackGround() { + if (getroottable().rawin("LenheartEventOffset") && getroottable()["LenheartEventOffset"] == 519) { + local Yl = 0; + if (getroottable().rawin("YosinEventSystem")) { + local Count = (getroottable().YosinEventSystem.len() + (L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c))); + if (Count > 8) Count = 8; + Yl = Count * 20; + } else { + local Count = (L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c)); + if (Count > 8) Count = 8; + Yl = Count * 20; + } + local YAd = 0; + if (getroottable().rawin("YosinEventSystem")) { + local Count = (getroottable().YosinEventSystem.len() + (L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c))) / 9; + YAd = Count * 20; + } else { + local Count = (L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c)) / 9; + YAd = Count * 20; + } + L_sq_DrawWindow(595, 514 - YAd, Yl - 1, YAd, "interface2/hud/hudbox.img", 0, 22, 20, 7, 21); + } +} + +function Lenheart_100UI(obj) { + + //血球篮球 + Lenheart_100UI_DrawHPMP(obj); + + + L_sq_DrawImg("interface2/hud/hud.img", 202, 176, 582); + + + //传送 + TownMove(obj); + + //等级和sp点 + { + local ChrLevel = L_Sq_GetObjectLevel(obj); + local ChrSp = L_sq_GetSp(); + + L_sq_DrawCode("Lv." + ChrLevel.tostring(), 222 - (LenheartTextClass.GetStringLength("Lv." + ChrLevel.tostring()) / 2), 587, sq_RGBA(230, 200, 155, 255), 1, 1); + L_sq_DrawCode(ChrSp.tostring(), 574 - (LenheartTextClass.GetStringLength(ChrSp.tostring()) / 2), 587, sq_RGBA(230, 200, 155, 255), 1, 1); + } + + + + //经验条 + { + local NowExp = L_sq_GetExp(1); + local MaxExp = L_sq_GetExp(0); + local ExpRate = (NowExp.tofloat() / MaxExp.tofloat()).tofloat(); + + if (L_Sq_GetObjectLevel(obj) == 100) { + L_sq_DrawImg("interface2/hud/hud.img", 60, 250, 595); + } else { + setClip(250, 595, 248 + (300.0 * ExpRate).tointeger(), 596 + 4); //开始裁切 + L_sq_DrawImg("interface2/hud/hud.img", 4, 250, 595); + releaseClip(); //裁切结束 + } + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 250, 595, 300, 4)) { + local T = { + X = IMouse.GetXPos(), + Y = IMouse.GetYPos(), + } + getroottable().rawset("Lenheart100UIEXPSTR", T); + } else { + getroottable().rawdelete("Lenheart100UIEXPSTR"); + } + } + + + //铃铛按钮 + local RefreshButton = LenheartTabbars(596, 554, 27, 27); + RefreshButton.SetFrame("interface2/HUD/HUD.img", 204); + RefreshButton.Show(); + if (RefreshButton.isLBActive()) { + if (getroottable().rawin("MouseObject")) { + if (!getroottable().rawin("LenheartEventOffset") || getroottable()["LenheartEventOffset"] == 900) { + getroottable()["LenheartEventOffset"] <- 519 + getroottable()["YosinEventIconInfoYpos"] <- 519 + } else { + getroottable()["LenheartEventOffset"] <- 900 + getroottable()["YosinEventIconInfoYpos"] <- 900 + } + L_sq_RefreshEventIcon(); + } + } + BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/animation2/informationnoti_alarm00.ani", 601, 558 + (RefreshButton.isLBDown() ? 1 : 0), "铃铛晃动动画"); + L_sq_DrawImg("interface2/hud/hulun.img", 5, 611, 552 + (RefreshButton.isLBDown() ? 1 : 0)); + + + // print(L_sq_GetPassLevel()); + //冒险团 + local PassPartyButton = LenheartTabbars(577, 555, 21, 23); + PassPartyButton.SetFrame("interface2/hud/advhud.img", 2); + PassPartyButton.Show(); + L_sq_DrawCode(L_sq_GetPassLevel().tostring(), 588 - (LenheartTextClass.GetStringLength(L_sq_GetPassLevel().tostring())) / 2, 561 + (PassPartyButton.isLBDown() ? 1 : 0), 0xFFFFFFFF, 1, 1); + if (PassPartyButton.isLBActive()) { + L_NewWindows("Lenheart", 33, 0x65535); + } + + + + + //拍卖行 + local AuctionButton = LenheartTabbars(780, 553, 21, 23); + AuctionButton.SetFrame("interface2/hud/hud.img", 17); + AuctionButton.Show(); + if (AuctionButton.isLBActive()) { + getroottable().IsLenheart_100UI_AuctionState <- true; + } + + + + + if ("IsLenheart_100UI_AuctionState" in getroottable()) { + L_sq_DrawWindow(684, 490, 96, 40, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + local AButton = LenheartTabbars(690, 495, 108, 21); + AButton.SetFrame("interface2/global_navigation/extrafeature/extrafeature_cn.img", 0); + AButton.Show(); + if (AButton.isLBActive()) { + L_sq_Open_ExWindow(0x1ADE090, 13, 0, 1); + } + + local BButton = LenheartTabbars(690, 495 + 26, 108, 21); + BButton.SetFrame("interface2/global_navigation/extrafeature/extrafeature_cn.img", 4); + BButton.Show(); + if (BButton.isLBActive()) { + L_sq_Open_ExWindow(0x1ADE090, 14, 0, 1); + } + + if (getroottable().rawin("MouseObject")) { + local Mobj = getroottable()["MouseObject"]; + if (Mobj.LbEvent && !AuctionButton.isInRect()) { + getroottable().rawdelete("IsLenheart_100UI_AuctionState"); + } + } + } + +} + + + +function Lenheart_100UITop(obj) { + + Lenheart_100UI_DrawSkillAddSystem(obj); + + //悬停层绘制 + { + if (getroottable().rawin("Lenheart100UIEXPSTR")) { + + if (L_Sq_GetObjectLevel(obj) == 100) { + L_sq_DrawWindow(IMouse.GetXPos() - 150, IMouse.GetYPos() - 36, 144, 12, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawCode("已满级!等待服务器开启转生!", IMouse.GetXPos() - 142, IMouse.GetYPos() - 24, 0xFFFFFFFF, 1, 1); + } else { + local Str = "当前经验值: " + L_sq_GetExp(1) + " 总经验值: " + L_sq_GetExp(0); + L_sq_DrawWindow(IMouse.GetXPos() - 150, IMouse.GetYPos() - 36, 144 + LenheartTextClass.GetStringLength(L_sq_GetExp(1).tostring() + L_sq_GetExp(0).tostring()), 12, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawCode(Str, IMouse.GetXPos() - 140, IMouse.GetYPos() - 24, 0xFFFFFFFF, 1, 1); + } + } + if (getroottable().rawin("Lenheart100UIHPSTR")) { + local Gobj = obj; + if (sq_IsRidingObject(obj) && getroottable().rawin("Lenheart100UIMyRidingObject")) Gobj = getroottable().Lenheart100UIMyRidingObject; + local Str = "生命值: " + Gobj.getHp() + "/" + Gobj.getHpMax(); + + L_sq_DrawWindow(IMouse.GetXPos() - 140 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 36, 0 + LenheartTextClass.GetStringLength(Str), 12, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawCode(Str, IMouse.GetXPos() - 126 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 24, 0xFFFFFFFF, 1, 1); + + } + if (getroottable().rawin("Lenheart100UIMPSTR")) { + local Gobj = obj; + if (sq_IsRidingObject(obj) && getroottable().rawin("Lenheart100UIMyRidingObject")) Gobj = getroottable().Lenheart100UIMyRidingObject; + + local Str = "魔法值: " + Gobj.getMp() + "/" + Gobj.getMpMax(); + + L_sq_DrawWindow(IMouse.GetXPos() - 140 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 36, 0 + LenheartTextClass.GetStringLength(Str), 12, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawCode(Str, IMouse.GetXPos() - 126 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 24, 0xFFFFFFFF, 1, 1); + + } + } + + +} + +function Sq_Get_Event_Pos(a) { + if (getroottable().rawin("LenheartEventOffset")) + return getroottable()["LenheartEventOffset"]; + else { + getroottable()["LenheartEventOffset"] <- 519 + getroottable()["YosinEventIconInfoYpos"] <- 519 + return getroottable()["LenheartEventOffset"]; + } + +} + +if (getroottable().rawin("LenheartBaseFuncTab")) { + getroottable()["LenheartBaseFuncTab"].rawset("100UI_LenheartFunc", Lenheart_100UITop); +} else { + local T = {}; + T.rawset("100UI_LenheartFunc", Lenheart_100UITop); + getroottable().rawset("LenheartBaseFuncTab", T); +} + + + +function Lenheart_UI_MiniMap_CallBack(Chunk) { + // print(Chunk); + local Jso = Json.Decode(Chunk); + getroottable().Lenheart_UI_MiniMap_Info <- Jso; +} +Pack_Control.rawset(30008008, Lenheart_UI_MiniMap_CallBack); + + +function Sq_DrawMiniMapUI(obj) { + local obj = sq_GetMyMasterCharacter(); + if (!obj) return; + + //没拿过信息拿一次 + if (!("Lenheart_UI_MiniMap_OpenPack" in getroottable())) { + local T = { + op = 20231010, + realop = 30008008, + Type = 3, + } + BasicsDrawTool.SendPack(T); + getroottable().Lenheart_UI_MiniMap_OpenPack <- true; + } + + + L_sq_DrawImg("interface/minimap_minimap_town.img", 8, 131, 7); + if ("Lenheart_UI_MiniMap_Info" in getroottable()) { + local Id = 0; + if ("Lenheart_UI_MiniMap_Info_NowId" in getroottable()) Id = getroottable().Lenheart_UI_MiniMap_Info_NowId; + L_sq_DrawCode(getroottable().Lenheart_UI_MiniMap_Info.regionInfo[Id].Name, 135, 10, 0xFFFFFFFF, 1, 1); + } + + //遮挡原生按钮 + if ((getroottable().rawin("Lenheart_MiniMapWindow"))) { + getroottable().Lenheart_MiniMapWindow.Show(obj); + } else { + getroottable().Lenheart_MiniMapWindow <- LenheartWindow(230, 0, 30, 30, 0); //坐标 大小 标题栏高度 + } + + //绘制自己三角 + local AButton = LenheartTabbars(237, 8, 108, 21); + AButton.SetFrame("interface/windowcommon.img", 59); + AButton.Show(); + if (AButton.isLBActive()) { + getroottable().Lenheart_UI_MiniMap_Open <- true; + } + + if (!("Lenheart_UI_MiniMap_Open" in getroottable())) { + //关闭遮挡 + if ((getroottable().rawin("Lenheart_MiniMapSelectWindow"))) { + if (getroottable().Lenheart_MiniMapSelectWindow.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + getroottable().Lenheart_MiniMapSelectWindow.YMouseSw = true; + L_sq_WA(0x1b46898, 0); + getroottable().rawdelete("Lenheart_MiniMapSelectWindow"); + } + } + } + //判断三角打开 + else { + if ("Lenheart_UI_MiniMap_Info" in getroottable()) { + //遮挡下面地图不让点 + if ((getroottable().rawin("Lenheart_MiniMapSelectWindow"))) { + getroottable().Lenheart_MiniMapSelectWindow.Show(obj); + } else { + getroottable().Lenheart_MiniMapSelectWindow <- LenheartWindow(0, 30, 800, 600, 0); //坐标 大小 标题栏高度 + } + + local Info = getroottable().Lenheart_UI_MiniMap_Info; + local SFxuanting = false; + foreach(Pos, Value in Info.regionInfo) { + L_sq_DrawImg("interface/minimap_minimap_town.img", 9, 131, 25 + (Pos * 18)); + // L_sq_DrawWindow(128, 24 + (Pos * 18), 108, 10, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawCode(Value.Name, 135, 28 + (Pos * 18), 0xFFFFFFFF, 1, 1); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 131, 25 + (Pos * 18), 108, 10)) { + SFxuanting = true; + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface/minimap_minimap_town.img", 16, 131, 25 + (Pos * 18)); + L_sq_ReleaseDrawImgModel(); + if (getroottable().rawin("MouseObject")) { + if (getroottable()["MouseObject"].LbEvent) { + getroottable().rawdelete("Lenheart_UI_MiniMap_Open"); + L_sq_Select_MiniMap_Index(Value.Id); + getroottable().Lenheart_UI_MiniMap_Info_NowId <- Pos; + break; + // getroottable().Lenheart_UI_MiniMap_Open <- false; + } + } + } + } + } + } + +} + + + + + + + + + + + + + +class Lenheart_100UI_DrawSkillAddClassC extends BasicsDrawTool { + + + Mobj = null; + + //技能信息 + MySkillInfoTable = null; + //技能按键数组 + + + + //拓展技能格子 + Add_Ex_Slot1 = null; + Add_Ex_Slot1_Key = null; + Add_Ex_Slot2 = null; + Add_Ex_Slot2_Key = null; + + //格子大小 + Rate = 0.75; + //悬停特效 + TopEffectobj = null; + ExTopEffectobj = null; + //点击信息 + ClickInfoobj = null; + + + //我的原生快捷栏技能Map + QuickSkillList = null; + //我的可设置快捷技能键技能Map + SettingSkillList = null; + //设置技能键位Buffer + SettingKeyCodeBuffer = null; + + function GetSkillInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + // Sout("收到包内容: %L", Chunk); + local Index = 0; + foreach(Pos, Value in Jso.regionInfo) { + //Vlaue是每一个技能的对象 + if (Value.type == "[active]\r") { + MySkillInfoTable[Value.Id] <- Jso.regionInfo[Index]; + } + Index++; + } + } + + function GetSkillInfo() { + local obj = sq_GetMyMasterCharacter(); + + for (local z = 0; z< 26; z++) { + local SkillIdList = []; + for (local i = 0; i< 10; i++) { + SkillIdList.append(i + (z * 10)); + } + local T = { + op = 20231010, + realop = 80000002, + Type = 4, + SkillId = SkillIdList, + Job = sq_getJob(obj), + NeedLable = ["type", "Icon", "command", "name", "Id"], + } + // local pack = L_sq_EncondeJson(T); + // L_sq_SendPackType(130); + // L_sq_SendPackWChar(pack); + // L_sq_SendPack(); + } + + } + + function HookInput(Code) { + if (ExTopEffectobj) { + if ("ClickFlag" in ExTopEffectobj) { + SettingKeyCodeBuffer = Code; + } + } + } + + constructor() { + MySkillInfoTable = {}; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + + RegisterInputHook("Lenheart_100_UI_Key_Register", HookInput.bindenv(this)); + + + Pack_Control.rawset(80000002, GetSkillInfoCallBack.bindenv(this)); + + GetSkillInfo(); + } + + function DrawOneSlot(x, y) { + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, x, y, 0, sq_RGBA(255, 255, 255, 250), Rate, Rate); + + + } + + function DrawOneSkill(obj, Idx, x, y) { + local ImgArr = split(MySkillInfoTable[Idx].Icon[0], "\r"); + L_sq_DrawImg(ImgArr[0], ImgArr[1].tointeger(), x, y, 0, sq_RGBA(255, 255, 255, 250), Rate, Rate); + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, x, y, (28 * Rate).tointeger(), (28 * Rate).tointeger())) { + local T = { + X = x, + Y = y + } + TopEffectobj = T; + if (Mobj.Lb == 1) { + TopEffectobj = null; + if (!ClickInfoobj) ClickInfoobj = Idx; + } + } + } + + + + function DrawTopEffect(obj) { + if (TopEffectobj) { + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 353, TopEffectobj.X - 1, TopEffectobj.Y - 1, 0, sq_RGBA(255, 255, 255, 250), Rate, Rate); + L_sq_ReleaseDrawImgModel(); + } + } + + function DrawExTopEffect(obj) { + if (ExTopEffectobj) { + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 353, ExTopEffectobj.X - 1, ExTopEffectobj.Y - 1, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); + L_sq_ReleaseDrawImgModel(); + + + //绘制设置说明 + if (!MainState) { + local width = 200; + local QuestTipsStr = "保持按住鼠标右键,以设置技能快捷键。"; + local Color = 0xFFFFFFFF; + if ("ClickFlag" in ExTopEffectobj) { + QuestTipsStr = "请按下要设定的键盘快捷键,注意不要冲突。"; + width = 220; + Color = sq_RGBA(255, 242, 0, 250); + } + L_sq_DrawWindow(ExTopEffectobj.X - 100, ExTopEffectobj.Y - 30, width, 10, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawCode(QuestTipsStr, ExTopEffectobj.X - 94, ExTopEffectobj.Y - 25, Color, 1, 1); + } + } + } + + function DrawClickSkill(obj) { + if (ClickInfoobj != null) { + local ImgArr = split(MySkillInfoTable[ClickInfoobj].Icon[0], "\r"); + L_sq_DrawImg(ImgArr[0], ImgArr[1].tointeger(), IMouse.GetXPos() - 14, IMouse.GetYPos() - 14, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); + } + } + + function DrawSlot(obj) { + for (local i = 0; i< 40; i++) { + DrawOneSlot((X + (30 * Rate) * (i % 10)).tointeger(), Y + ((30 * Rate) * (i / 10)).tointeger()); + } + } + + function DrawSkill(obj) { + // for (local i = 0; i< 40; i++) { + // DrawOneSkill(obj, i * 2, (X + (30 * Rate) * (i % 10)).tointeger(), Y + ((30 * Rate) * (i / 10)).tointeger()); + // } + local i = 0; + foreach(Key, Value in SettingSkillList) { + + DrawOneSkill(obj, Key, (X + (30 * Rate) * (i % 10)).tointeger(), Y + ((30 * Rate) * (i / 10)).tointeger()); + i++; + } + + //如果松手 选中技能清空 + if (Mobj.Lb == 0) { + ClickInfoobj = null; + } + } + + //检查我有什么技能 + function CheckMySkill(obj) { + if (QuickSkillList) return; + QuickSkillList = {}; + SettingSkillList = {}; + + //我的技能管理器 + local SkillMgr = obj.getSkillManager(); + if (!SkillMgr) return; + + //遍历技能 + for (local i = 1; i< 255; i++) { + local SoltIndex = SkillMgr.getQuickSlotNumber(i); + //在快捷技能栏槽上 + if ((SoltIndex >= 0 && SoltIndex <= 6) || (SoltIndex >= 198 && SoltIndex <= 203)) { + QuickSkillList[i] <- true; + } + } + + + for (local i = 0; i< 255; i++) { + local Skl = sq_GetSkill(obj, i); + if (Skl) { + if (sq_GetSkillLevel(obj, i) > 0 && MySkillInfoTable.rawin(i) && !(QuickSkillList.rawin(i))) { + SettingSkillList[i] <- true; + } + } + } + } + + + function DrawAddExSkill(obj) { + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, 485, 532); + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, 485, 564); + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 485, 532, 30, 30)) { + local T = { + X = 485, + Y = 534 + } + ExTopEffectobj = T; + //如果松手 选中技能清空 + if (Mobj.Lb == 0 && ClickInfoobj != null) { + Add_Ex_Slot1 = ClickInfoobj; + ClickInfoobj = null; + } + + if (Mobj.Rb == 1) { + ExTopEffectobj.ClickFlag <- true; + if (SettingKeyCodeBuffer) { + Add_Ex_Slot1_Key = SettingKeyCodeBuffer; + } + } else { + SettingKeyCodeBuffer = null; + } + } + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 485, 564, 30, 30)) { + local T = { + X = 485, + Y = 566 + } + ExTopEffectobj = T; + //如果松手 选中技能清空 + if (Mobj.Lb == 0 && ClickInfoobj != null) { + Add_Ex_Slot2 = ClickInfoobj; + ClickInfoobj = null; + } + + if (Mobj.Rb == 1) { + ExTopEffectobj.ClickFlag <- true; + if (SettingKeyCodeBuffer) { + Add_Ex_Slot2_Key = SettingKeyCodeBuffer; + } + } else { + SettingKeyCodeBuffer = null; + } + } + + + //绘制技能图标 + if (Add_Ex_Slot1) { + local ImgArr = split(MySkillInfoTable[Add_Ex_Slot1].Icon[0], "\r"); + L_sq_DrawImg(ImgArr[0], ImgArr[1].tointeger(), 485, 534, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); + local skl = sq_GetSkill(obj, Add_Ex_Slot1); + if (skl.isInCoolTime()) { + //这里是总冷却时间 + local cooltime = skl.getCoolTime(obj, -1); + local Rate = sq_GetUniformVelocity(30, 0, (Clock() - Add_Ex_Slot1_Use_Time), cooltime); + setClip(485, 532, 485 + 30, 532 + Rate); //开始裁切 + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, 485, 532); + releaseClip(); //裁切结束 + } + } + if (Add_Ex_Slot2) { + local ImgArr = split(MySkillInfoTable[Add_Ex_Slot2].Icon[0], "\r"); + L_sq_DrawImg(ImgArr[0], ImgArr[1].tointeger(), 485, 566, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); + local skl = sq_GetSkill(obj, Add_Ex_Slot2); + if (skl.isInCoolTime()) { + //这里是总冷却时间 + local cooltime = skl.getCoolTime(obj, -1); + local Rate = sq_GetUniformVelocity(30, 0, (Clock() - Add_Ex_Slot2_Use_Time), cooltime); + setClip(485, 566, 485 + 30, 566 + Rate); //开始裁切 + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, 485, 566); + releaseClip(); //裁切结束 + } + } + //绘制按键角标 + if (Add_Ex_Slot1_Key) { + local Code = GetDrawCode(Add_Ex_Slot1_Key); + L_sq_DrawImg("interface/keyshortcut.img", Code, 485, 534); + } + if (Add_Ex_Slot2_Key) { + local Code = GetDrawCode(Add_Ex_Slot2_Key); + L_sq_DrawImg("interface/keyshortcut.img", Code, 485, 566); + } + } + + function GetDrawCode(Code) { + //小键盘按键 + if (Code >= 96 && Code <= 105) { + Code -= 61; + return Code; + } + //英文字母 + if (Code >= 65 && Code <= 90) { + Code -= 10; + return Code; + } + //F1 - 9 + if (Code >= 112 && Code <= 123) { + Code -= 31; + return Code; + } + + switch (Code) { + //左 + case 37: + return 0; + //右 + case 39: + return 1; + //上 + case 38: + return 2; + //下 + case 40: + return 3; + //Ctrl + case 17: + return 4; + //shift + case 16: + return 7; + //alt + case 18: + return 10; + //空格 + case 32: + return 13; + //Tab + case 9: + return 31; + //大写键 + case 20: + return 32; + } + + return Code; + } + + + function DrawMain(obj) { + //绘制技能格子 + DrawSlot(obj); + //绘制技能 + DrawSkill(obj); + + + + + //绘制悬停特效 + DrawTopEffect(obj); + //绘制点击技能 + DrawClickSkill(obj); + } + + X = 290; + Y = 440; + MainState = false; + WindowObj = null; + + function WindowLogic(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = LenheartWindow(X, Y, 226, 90, 0); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + Add_Ex_Slot1_Push_Flag = false; + Add_Ex_Slot1_Push_Array = null; + Add_Ex_Slot1_Use_Time = null; + + Add_Ex_Slot2_Push_Flag = false; + Add_Ex_Slot2_Push_Array = null; + Add_Ex_Slot2_Use_Time = null; + //技能按键逻辑 + function SkillKeyInput(obj) { + if (sq_GetCurrentModuleType() == 1) return; + local A_Flag = L_sq_IsKeyDown(Add_Ex_Slot1_Key); + if (!Add_Ex_Slot1_Push_Flag) { + if (A_Flag) { + Add_Ex_Slot1_Push_Flag = A_Flag; + Add_Ex_Slot1_Push_Array = [ + [DIK_RIGHT, DIK_Z] + ]; + } + } else { + if (!A_Flag) Add_Ex_Slot1_Push_Flag = A_Flag; + } + + local B_Flag = L_sq_IsKeyDown(Add_Ex_Slot2_Key); + if (!Add_Ex_Slot2_Push_Flag) { + if (B_Flag) { + Add_Ex_Slot2_Push_Flag = B_Flag; + Add_Ex_Slot2_Push_Array = [ + [DIK_RIGHT, DIK_Z] + ]; + //TODO 这里判断面向给一次数组 + } + } else { + if (!B_Flag) Add_Ex_Slot2_Push_Flag = B_Flag; + } + + } + + //技能释放逻辑 + function SkillUse(obj) { + if (Add_Ex_Slot1_Push_Array) { + local Arr = Add_Ex_Slot1_Push_Array; + if (Arr.len() > 0) { + if (typeof(Arr[0]) == "array") { + foreach(Key in Arr[0]) { + L_sq_UseSkill(Key); + } + } else { + L_sq_UseSkill(Arr[0]); + } + + //有队列就清队列 但最后一位不清 + if (Arr.len() > 1) Add_Ex_Slot1_Push_Array.remove(0); + else { + //只剩技能键的时候判断是否松开在清 + if (!Add_Ex_Slot1_Push_Flag) { + Add_Ex_Slot1_Push_Array.remove(0); + Add_Ex_Slot1_Use_Time = Clock(); + } + } + } else { + Add_Ex_Slot1_Push_Array = null; + } + } + + if (Add_Ex_Slot2_Push_Array) { + local Arr = Add_Ex_Slot2_Push_Array; + if (Arr.len() > 0) { + if (typeof(Arr[0]) == "array") { + foreach(Key in Arr[0]) { + L_sq_UseSkill(Key); + } + } else { + L_sq_UseSkill(Arr[0]); + } + + //有队列就清队列 但最后一位不清 + if (Arr.len() > 1) Add_Ex_Slot2_Push_Array.remove(0); + else { + //只剩技能键的时候判断是否松开在清 + if (!Add_Ex_Slot2_Push_Flag) { + Add_Ex_Slot2_Push_Array.remove(0); + Add_Ex_Slot2_Use_Time = Clock(); + } + } + } else { + Add_Ex_Slot2_Push_Array = null; + } + } + } + + function Proc(obj) { + TopEffectobj = null; + ExTopEffectobj = null; + + //绘制拓展技能 + DrawAddExSkill(obj); + DrawExTopEffect(obj); + //窗口逻辑 + WindowLogic(obj); + //技能按键逻辑 + SkillKeyInput(obj); + //技能释放逻辑 + SkillUse(obj); + + // MainState = true; + // sq_DrawBox(X, Y + 66, 224, 26, 0xffffffff); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y + 66, 224, 26)) { + CheckMySkill(obj); + MainState = true; + } else { + if (MainState) { + if (!sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 226, 90 + 62)) { + MainState = false; + QuickSkillList = null; + } + } else { + MainState = false; + QuickSkillList = null; + } + } + } +} + + + + + + + + + +//技能新增系统 +function Lenheart_100UI_DrawSkillAddSystem(obj) { + + local RootTab = getroottable(); + if (!RootTab.rawin("Lenheart_100UI_DrawSkillAddClassCObj")) { + local Cobj = Lenheart_100UI_DrawSkillAddClassC(); + RootTab.rawset("Lenheart_100UI_DrawSkillAddClassCObj", Cobj); + } else { + RootTab["Lenheart_100UI_DrawSkillAddClassCObj"].Proc(obj); + } + +} \ No newline at end of file diff --git a/Plugins/Anton/anton.nut b/Plugins/Anton/anton.nut new file mode 100644 index 0000000..308e154 --- /dev/null +++ b/Plugins/Anton/anton.nut @@ -0,0 +1,93 @@ + +dofile("sqr/Plugins/Anton/antonbuttonclass.nut"); //安图恩按钮类 + +dofile("sqr/Plugins/Anton/antontownmainbutton.nut"); //安图恩城镇开启攻坚队界面按钮部分 + +dofile("sqr/Plugins/Anton/antontownmainparty_list.nut"); //安图恩城镇队伍列表部分 +dofile("sqr/Plugins/Anton/antontownmainparty_info.nut"); //安图恩城镇队伍信息部分 +dofile("sqr/Plugins/Anton/antontownmainparty_req.nut"); //安图恩城镇队伍组队部分 +dofile("sqr/Plugins/Anton/antontownmainparty_user.nut"); //安图恩城镇队伍玩家部分 + + + +dofile("sqr/Plugins/Anton/antondungeoninfo.nut"); //安图恩开始攻坚主界面按钮 + + + +function Anton(obj) { + + //判断 查看信息窗口 交易窗口如果开启则隐藏UI + { + if (sq_GetPopupWindowMainCotrol(74) || sq_GetPopupWindowMainCotrol(64)) { + local window = sq_GetPopupWindowMainCotrol(267); + if (window) window.SetVisible(false); + } else { + local window = sq_GetPopupWindowMainCotrol(267); + if (window) window.SetVisible(true); + } + } + + //如果不在安图恩区域则不执行 + if (L_sq_GetTownIndex() != 18 || L_sq_GetRegionIndex() < 1) return; + + //检查自己是否断线重连 + if (!getroottable().rawin("AntonDConnect")) { + local AntonDConnect = Json_STL("AntonDConnect"); + AntonDConnect.Put("op", 1075); + local str = AntonDConnect.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonDConnect.Delete(); + getroottable().rawset("AntonDConnect", true); + } + + //安图恩城镇开启攻坚队界面按钮部分 + AntonTownMainButtonControl(obj); + + //安图恩城镇攻坚队界面 攻坚队队伍列表部分 + AntonTownMainControl_PartyList(obj); + //安图恩城镇攻坚队界面 攻坚队队伍信息部分 + AntonTownMainControl_PartyInfo(obj); + //安图恩城镇攻坚队界面 攻坚队队伍申请部分 + AntonTownMainControl_PartyReq(obj); + + + //安图恩攻坚副本信息 + AntonDungeonInfoControlFunc(obj); +} + +function AntonTopDraw(obj) { + local RootTab = getroottable(); + + //如果不在安图恩区域则不执行 + if (L_sq_GetTownIndex() != 18 || L_sq_GetRegionIndex() < 1) return; + + //如果界面按钮被点击状态为打开 就运行攻坚队伍列表 绘制 + if (RootTab.rawin("ANTONTEAMMAINBUTTON") && RootTab["ANTONTEAMMAINBUTTON"].WindowSwitch == true) { + RootTab["ANTONTOWNMAINCONTROLLIST"].Run(obj); + } + + //如果安图恩队伍被点击状态为打开 就运行攻坚队伍信息 绘制 + if (RootTab.rawin("ANTONTOWNMAINCONTROLLIST") && RootTab["ANTONTOWNMAINCONTROLLIST"].NowSelectTeam != null) { + RootTab["ANTONTOWNCONTROLINFO"].Run(obj); + } + + + //如果安图恩攻坚已经开始 + if (RootTab.rawin("ANTONDUNGEONINFOCONTROL") && RootTab["ANTONDUNGEONINFOCONTROL"].PageState == 1) { + RootTab["ANTONDUNGEONINFOCONTROL"].Draw(obj); + } + + + //如果安图恩主界面开启就绘制申请队伍人信息 + RootTab["ANTONTOWNMAINCONTROLREQ"].Run(obj); +} + + + + + + + + diff --git a/Plugins/Anton/antonbuttonclass.nut b/Plugins/Anton/antonbuttonclass.nut new file mode 100644 index 0000000..8192cd8 --- /dev/null +++ b/Plugins/Anton/antonbuttonclass.nut @@ -0,0 +1,360 @@ +//HudPro按钮类 +class AntonButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + Index = 0; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gIndex) + { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + Index = gIndex; + } + //绘制按钮 + function Show() + { + isLBDown(); + isRBDown(); + if(ClickEnble) //是否开启点击效果 + { + if(isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if(!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if(CustomClickEnble) //是否开启自定义点击效果 + { + if(isLBDown()) //按下左键并且按钮处于弹起状态 + { + if(!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if(RectEnble) //开启悬停效果时 + { + if((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if(!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if(!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if(!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, Index, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) + { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) + { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) + { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) + { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() + { + if(sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() + { + if(isInRect() && IMouse.GetLButton() == 1) + { + obj.getVar(ButtonName).setBool(0, true); + return true; + } + else return false; + } + //右键按下状态 + function isRBDown() + { + if(isInRect() && IMouse.GetRButton() == 2) + { + obj.getVar(ButtonName).setBool(1, true); + return true; + } + else return false; + } + //左键弹起状态 + function isLBUp() + { + if(isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() + { + if(isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() + { + if(isInRect() && IMouse.isButtonUpEvent() && obj.getVar(ButtonName).getBool(0) == true) + { + obj.getVar(ButtonName).setBool(0, false); + return true; + } + else return false; + } + //右键单击状态 + function isRBActive() + { + if(isInRect() && IMouse.isButtonUpEvent() && obj.getVar(ButtonName).getBool(1) == true) + { + obj.getVar(ButtonName).setBool(1, false); + return true; + } + else return false; + } + //别处点击 + function isNotLBActive() + { + + if(!isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } + //别处右键点击 + function isNotRBActive() + { + if(!isInRect() && IMouse.GetRButton() == 2) return true; + else return false; + } +} + + + +//Switch按钮类 +class AntonSwitchButtonPro extends SwitchButtonPro +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + SwitchState = false; //复选框是否选中 + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + BaseAnifileFrame = null; //调用的Ani帧数 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gBaseAnifileFrame, gWidth, gLength) + { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + BaseAnifileFrame = gBaseAnifileFrame; + width = gWidth; + length = gLength; + } + + //绘制按钮 + function Show() + { + + + if(ClickEnble) //是否开启点击效果 + { + if(isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if(!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if(CustomClickEnble) //是否开启自定义点击效果 + { + if(isLBDown()) //按下左键并且按钮处于弹起状态 + { + if(!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if(RectEnble) //开启悬停效果时 + { + if((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if(!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + + if(!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if(!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseAnifileFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + + if(!isInRect() && SwitchState) + { + if(!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) + { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) + { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) + { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) + { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() + { + if(sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() + { + if(isInRect() && IMouse.GetLButton() == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() + { + if(isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() + { + if(isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() + { + if(isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } + +} \ No newline at end of file diff --git a/Plugins/Anton/antondungeoninfo.nut b/Plugins/Anton/antondungeoninfo.nut new file mode 100644 index 0000000..c6f6d12 --- /dev/null +++ b/Plugins/Anton/antondungeoninfo.nut @@ -0,0 +1,1480 @@ +/* +文件名:antondungeoninfo.nut +路径:Plugins/Anton/antondungeoninfo.nut +创建日期:2022-09-13 15:21 +文件用途:安图恩攻坚中 信息 +*/ +class AntonDungeonInfoControl_C extends BasicsDrawTool { + X = 0; + Y = 0; + State = -1; //安图恩攻坚状态 + PageState = 0; //攻坚信息面板展开状态 + MouseTask = 0; //鼠标类型事件 + + OpenMainButtonObject = null; //展开攻坚信息按钮 + FightMaxTime = null; //剩余时间最大值 + FightTimer = null; //剩余时间计时器 + + PartyMove_SelectDungeon_Button = null; //小队移动选择地下城按钮 + PartyMove_ReturnTown_Button = null; //PartyMove_ReturnTown_Button + + ReturnTwonFlag = 0; //返回城镇的flag + + DrawStartAniMark = false; //开始攻坚动画Mark + + //1阶段对象 + HeiWuObject = null; //黑雾之源对象 + JianPaoObject = null; //舰炮防御战对象 + JianPaoTimer = null; //舰炮时间容器对象 + ZhenChan_A_Object = null; //震颤A对象 + ZhenChan_A_Timer = null; //震颤A时间容器对象 + ZhenChan_B_Object = null; //震颤B对象 + ZhenChan_B_Timer = null; //震颤B时间容器对象 + QingTian_A_Object = null; //擎天A对象 + QingTian_B_Object = null; //擎天B对象 + + + //2阶段对象 + NengLiangObject = null; //能源阻截站对象 + HuoShanObject = null; //黑色火山对象 + FuHua1_Object = null; //孵化1对象 + FuHua1_Timer = null; //孵化1时间容器对象 + FuHua2_Object = null; //孵化2对象 + FuHua2_Timer = null; //孵化2时间容器对象 + FuHua3_Object = null; //孵化3对象 + FuHua3_Timer = null; //孵化3时间容器对象 + FuHua4_Object = null; //孵化4对象 + FuHua4_Timer = null; //孵化4时间容器对象 + XinZang_Object = null; //心脏对象 + + MapIndexTable = null; //判断孵化进入的操作表 + MapMoveMark = false; //副本中移动的标志 + HuoShanMonserTable = null; //火山怪物投放表 + + Reward_Object = null; //奖励包 + AllReward_Object = null; //全体奖励包 + Reward_Timer_Object = null; //奖励包时间对象 + Reward_Info = null; //通过时间和复活币使用量 + + //安图恩攻坚信息包 + function ReadAntonDungeonInfoPack(chunk) { + Sout("\n\n收到安图恩攻坚信息包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("AntonDungeonInfoJson"); //自动判断清空 + local JsonObj = Json_STL("AntonDungeonInfoJson"); + RootTab.rawset("AntonDungeonInfoJson", JsonObj); + RootTab["AntonDungeonInfoJson"].Parse(chunk, 0, false); + + + //告诉副本类开始计时 + if (RootTab.rawin("ANTONDUNGEONINFOCONTROL")) { + local Cobj = RootTab["ANTONDUNGEONINFOCONTROL"]; + Cobj.FightMaxTime = JsonObj.Get("JiShiQi->GongJian_End_ShiJian"); + if (Cobj.FightTimer) { + Cobj.FightTimer.Delete(); + } + + //时间倒计时开始 + Cobj.FightTimer = TimeSTL("FightTimer", Cobj.FightMaxTime); + Cobj.FightTimer.Reset(); + Cobj.FightTimer.Start(); + + //同步攻坚状态 + Cobj.State = JsonObj.Get("Party_State") - 1; + + //一阶段收包机制 + if (Cobj.State == 0) { + //黑雾之源收包 + { + Cobj.HeiWuObject = null; + if (JsonObj.Get("HeiWu_State") != false) { + //得到副本剩余生命 + local gClearNumber = 4 - JsonObj.Get("HeiWu_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("HeiWu_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("HeiWu_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("HeiWu_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("HeiWu_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("HeiWu_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.HeiWuObject = { + Name = "heiwu", + NameImg = 0, + X = 78, + Y = 330, + BloodType = 4, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 0, + }; + } else { + Cobj.HeiWuObject = { + Name = "heiwu", + X = 78, + Y = 330, + ClearNumber = 0, + }; + } + } + } + + //舰炮防御战收包 + { + Cobj.JianPaoObject = null; + if (JsonObj.Get("JianPao_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("JianPao_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("JianPao_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("JianPao_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("JianPao_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("JianPao_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("JianPao_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果舰炮时间容器存在则先删除他 + if (Cobj.JianPaoTimer) Cobj.JianPaoTimer.Delete(); + Cobj.JianPaoTimer = null; + Cobj.JianPaoTimer = TimeSTL("JianPaoTimer", JsonObj.Get("JiShiQi->JianPao_BaoZhaShiJian")); + Cobj.JianPaoTimer.Start(); + Cobj.JianPaoObject = { + Name = "jianpao", + NameImg = 1, + X = 334, + Y = 200, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 3, + Reload = 1, + Timer = Cobj.JianPaoTimer, + TimeMax = JsonObj.Get("JiShiQi->JianPaoBaoZha_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->JianPao_BaoZhaShiJian"), + }; + } else { + //如果舰炮时间容器存在则先删除他 + if (Cobj.JianPaoTimer) Cobj.JianPaoTimer.Delete(); + Cobj.JianPaoTimer = null; + Cobj.JianPaoTimer = TimeSTL("JianPaoTimer", JsonObj.Get("JiShiQi->JianPao_FuHuoShiJian")); + Cobj.JianPaoTimer.Start(); + Cobj.JianPaoObject = { + Name = "jianpao", + X = 334, + Y = 200, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.JianPaoTimer, + TimeMax = JsonObj.Get("JiShiQi->JianPaoFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->JianPao_FuHuoShiJian"), + }; + } + } + } + + //震颤A收包 + { + Cobj.ZhenChan_A_Object = null; + if (JsonObj.Get("ZhenChan_A_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("ZhenChan_A_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("ZhenChan_A_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("ZhenChan_A_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("ZhenChan_A_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("ZhenChan_A_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("ZhenChan_A_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果震颤A时间容器存在则先删除他 + if (Cobj.ZhenChan_A_Timer) Cobj.ZhenChan_A_Timer.Delete(); + Cobj.ZhenChan_A_Timer = null; + Cobj.ZhenChan_A_Timer = TimeSTL("ZhenChan_A_Timer", JsonObj.Get("JiShiQi->ZhenChan_A_BaoZhaShiJian")); + Cobj.ZhenChan_A_Timer.Start(); + Cobj.ZhenChan_A_Object = { + Name = "zhenchan_A", + NameImg = 4, + X = 234, + Y = 330, + BloodType = 1, + ClearNumber = gClearNumber, + Reload = 1, + Party = gParty, + DungeonUID = 1, + Timer = Cobj.ZhenChan_A_Timer, + TimeMax = JsonObj.Get("JiShiQi->ZhenChanBaoZha_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->ZhenChan_A_BaoZhaShiJian"), + }; + } else { + //如果震颤A时间容器存在则先删除他 + if (Cobj.ZhenChan_A_Timer) Cobj.ZhenChan_A_Timer.Delete(); + Cobj.ZhenChan_A_Timer = null; + Cobj.ZhenChan_A_Timer = TimeSTL("ZhenChan_A_Timer", JsonObj.Get("JiShiQi->ZhenChan_A_FuHuoShiJian")); + Cobj.ZhenChan_A_Timer.Start(); + Cobj.ZhenChan_A_Object = { + Name = "zhenchan_a", + X = 234, + Y = 330, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.ZhenChan_A_Timer, + TimeMax = JsonObj.Get("JiShiQi->ZhenChanFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->ZhenChan_A_FuHuoShiJian"), + }; + } + } + } + + //震颤B收包 + { + Cobj.ZhenChan_B_Object = null; + if (JsonObj.Get("ZhenChan_B_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("ZhenChan_B_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("ZhenChan_B_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("ZhenChan_B_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("ZhenChan_B_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("ZhenChan_B_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("ZhenChan_B_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果震颤B时间容器存在则先删除他 + if (Cobj.ZhenChan_B_Timer) Cobj.ZhenChan_B_Timer.Delete(); + Cobj.ZhenChan_B_Timer = null; + Cobj.ZhenChan_B_Timer = TimeSTL("ZhenChan_B_Timer", JsonObj.Get("JiShiQi->ZhenChan_B_BaoZhaShiJian")); + Cobj.ZhenChan_B_Timer.Start(); + Cobj.ZhenChan_B_Object = { + Name = "zhenchan_B", + NameImg = 5, + X = 450, + Y = 330, + BloodType = 1, + ClearNumber = gClearNumber, + Reload = 1, + Party = gParty, + DungeonUID = 11, + Timer = Cobj.ZhenChan_B_Timer, + TimeMax = JsonObj.Get("JiShiQi->ZhenChanBaoZha_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->ZhenChan_B_BaoZhaShiJian"), + }; + } else { + //如果震颤B时间容器存在则先删除他 + if (Cobj.ZhenChan_B_Timer) Cobj.ZhenChan_B_Timer.Delete(); + Cobj.ZhenChan_B_Timer = null; + Cobj.ZhenChan_B_Timer = TimeSTL("ZhenChan_B_Timer", JsonObj.Get("JiShiQi->ZhenChan_B_FuHuoShiJian")); + Cobj.ZhenChan_B_Timer.Start(); + Cobj.ZhenChan_B_Object = { + Name = "zhenchan_B", + X = 450, + Y = 330, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.ZhenChan_B_Timer, + TimeMax = JsonObj.Get("JiShiQi->ZhenChanFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->ZhenChan_B_FuHuoShiJian"), + }; + } + } + } + + //擎天A收包 + { + Cobj.QingTian_A_Object = null; + if (JsonObj.Get("QingTian_A_State") != false) { + //得到副本剩余生命 + local gClearNumber = 2 - JsonObj.Get("QingTian_A_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("QingTian_A_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("QingTian_A_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("QingTian_A_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("QingTian_A_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("QingTian_A_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.QingTian_A_Object = { + Name = "qingtian_A", + NameImg = 2, + X = 224, + Y = 430, + BloodType = 2, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 2, + }; + } else { + Cobj.QingTian_A_Object = { + Name = "qingtian_a", + X = 224, + Y = 430, + ClearNumber = 0, + }; + } + } + } + + //擎天B收包 + { + Cobj.QingTian_B_Object = null; + if (JsonObj.Get("QingTian_B_State") != false) { + //得到副本剩余生命 + local gClearNumber = 2 - JsonObj.Get("QingTian_B_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("QingTian_B_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("QingTian_B_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("QingTian_B_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("QingTian_B_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("QingTian_B_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.QingTian_B_Object = { + Name = "qingtian_B", + NameImg = 3, + X = 470, + Y = 430, + BloodType = 2, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 21, + }; + } else { + Cobj.QingTian_B_Object = { + Name = "qingtian_b", + X = 470, + Y = 430, + ClearNumber = 0, + }; + } + } + } + } + + //二阶段收包机制 + if (Cobj.State == 3) { + { + Cobj.HeiWuObject = null; //黑雾之源对象 + Cobj.JianPaoObject = null; //舰炮防御战对象 + if (Cobj.JianPaoTimer) { + Cobj.JianPaoTimer.Delete(); + Cobj.JianPaoTimer = null; //舰炮时间容器对象 + } + Cobj.ZhenChan_A_Object = null; //震颤A对象 + if (Cobj.ZhenChan_A_Timer) { + Cobj.ZhenChan_A_Timer.Delete(); + Cobj.ZhenChan_A_Timer = null; //震颤A时间容器对象 + } + Cobj.ZhenChan_B_Object = null; //震颤B对象 + if (Cobj.ZhenChan_B_Timer) { + Cobj.ZhenChan_B_Timer.Delete(); + Cobj.ZhenChan_B_Timer = null; //震颤B时间容器对象 + } + Cobj.QingTian_A_Object = null; //擎天A对象 + Cobj.QingTian_B_Object = null; //擎天B对象 + } + + //能源阻截站收包 + { + Cobj.NengLiangObject = null; + if (JsonObj.Get("NengLiang_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("NengLiang_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("NengLiang_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("NengLiang_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("NengLiang_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("NengLiang_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("NengLiang_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.NengLiangObject = { + Name = "nengliang", + NameImg = 7, + X = 340, + Y = 230, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 4, + Ani = 17, + }; + } else { + Cobj.NengLiangObject = { + Name = "nengliang", + X = 340, + Y = 230, + ClearNumber = 0, + }; + } + } + } + + //黑色火山收包 + { + Cobj.HuoShanObject = null; + if (JsonObj.Get("HuoShan_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("HuoShan_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("HuoShan_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("HuoShan_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("HuoShan_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("HuoShan_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("HuoShan_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.HuoShanObject = { + Name = "huoshan", + NameImg = 6, + X = 336, + Y = 145, + BloodType = 99, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 5, + Zhangai = 0, + Ani = 16, + NengLiang = JsonObj.Get("HuoShan_NengLiang"), + }; + } else { + Cobj.HuoShanObject = { + Name = "huoshan", + X = 336, + Y = 145, + ClearNumber = 0, + Zhangai = 0, + }; + } + } + } + + //孵化1收包 + { + Cobj.FuHua1_Object = null; + if (JsonObj.Get("FuHua1_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("FuHua1_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("FuHua1_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("FuHua1_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("FuHua1_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("FuHua1_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("FuHua1_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果孵化1时间容器存在则先删除他 + if (Cobj.FuHua1_Timer) Cobj.FuHua1_Timer.Delete(); + Cobj.FuHua1_Timer = null; + Cobj.FuHua1_Timer = TimeSTL("FuHua1_Timer", JsonObj.Get("JiShiQi->FuHua1_TouSonShiJian")); + Cobj.FuHua1_Timer.Start(); + Cobj.FuHua1_Object = { + Name = "FuHua1", + NameImg = 9, + X = 110, + Y = 340, + BloodType = 1, + ClearNumber = gClearNumber, + Reload = 1, + Party = gParty, + Timer = Cobj.FuHua1_Timer, + TimeMax = JsonObj.Get("JiShiQi->FuHuaTouSong_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->FuHua1_TouSonShiJian"), + }; + } else { + //如果孵化1时间容器存在则先删除他 + if (Cobj.FuHua1_Timer) Cobj.FuHua1_Timer.Delete(); + Cobj.FuHua1_Timer = null; + Cobj.FuHua1_Timer = TimeSTL("FuHua1_Timer", JsonObj.Get("JiShiQi->FuHua1_FuHuoShiJian")); + Cobj.FuHua1_Timer.Start(); + Cobj.FuHua1_Object = { + Name = "FuHua1", + X = 110, + Y = 340, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.FuHua1_Timer, + TimeMax = JsonObj.Get("JiShiQi->FuHuaFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->FuHua1_FuHuoShiJian"), + }; + } + } + } + + //孵化2收包 + { + Cobj.FuHua2_Object = null; + if (JsonObj.Get("FuHua2_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("FuHua2_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("FuHua2_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("FuHua2_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("FuHua2_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("FuHua2_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("FuHua2_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果孵化2时间容器存在则先删除他 + if (Cobj.FuHua2_Timer) Cobj.FuHua2_Timer.Delete(); + Cobj.FuHua2_Timer = null; + Cobj.FuHua2_Timer = TimeSTL("FuHua2_Timer", JsonObj.Get("JiShiQi->FuHua2_TouSonShiJian")); + Cobj.FuHua2_Timer.Start(); + Cobj.FuHua2_Object = { + Name = "FuHua2", + NameImg = 10, + X = 240, + Y = 340, + BloodType = 1, + ClearNumber = gClearNumber, + Reload = 1, + Party = gParty, + Timer = Cobj.FuHua2_Timer, + TimeMax = JsonObj.Get("JiShiQi->FuHuaTouSong_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->FuHua2_TouSonShiJian"), + }; + } else { + //如果孵化2时间容器存在则先删除他 + if (Cobj.FuHua2_Timer) Cobj.FuHua2_Timer.Delete(); + Cobj.FuHua2_Timer = null; + Cobj.FuHua2_Timer = TimeSTL("FuHua2_Timer", JsonObj.Get("JiShiQi->FuHua2_FuHuoShiJian")); + Cobj.FuHua2_Timer.Start(); + Cobj.FuHua2_Object = { + Name = "FuHua2", + X = 240, + Y = 340, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.FuHua2_Timer, + TimeMax = JsonObj.Get("JiShiQi->FuHuaFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->FuHua2_FuHuoShiJian"), + }; + } + } + } + + //孵化3收包 + { + Cobj.FuHua3_Object = null; + if (JsonObj.Get("FuHua3_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("FuHua3_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("FuHua3_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("FuHua3_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("FuHua3_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("FuHua3_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("FuHua3_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果孵化3时间容器存在则先删除他 + if (Cobj.FuHua3_Timer) Cobj.FuHua3_Timer.Delete(); + Cobj.FuHua3_Timer = null; + Cobj.FuHua3_Timer = TimeSTL("FuHua3_Timer", JsonObj.Get("JiShiQi->FuHua3_TouSonShiJian")); + Cobj.FuHua3_Timer.Start(); + Cobj.FuHua3_Object = { + Name = "FuHua3", + NameImg = 11, + X = 470, + Y = 340, + BloodType = 1, + ClearNumber = gClearNumber, + Reload = 1, + Party = gParty, + Timer = Cobj.FuHua3_Timer, + TimeMax = JsonObj.Get("JiShiQi->FuHuaTouSong_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->FuHua3_TouSonShiJian"), + }; + } else { + //如果孵化3时间容器存在则先删除他 + if (Cobj.FuHua3_Timer) Cobj.FuHua3_Timer.Delete(); + Cobj.FuHua3_Timer = null; + Cobj.FuHua3_Timer = TimeSTL("FuHua3_Timer", JsonObj.Get("JiShiQi->FuHua3_FuHuoShiJian")); + Cobj.FuHua3_Timer.Start(); + Cobj.FuHua3_Object = { + Name = "FuHua3", + X = 470, + Y = 340, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.FuHua3_Timer, + TimeMax = JsonObj.Get("JiShiQi->FuHuaFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->FuHua3_FuHuoShiJian"), + }; + } + } + } + + //孵化4收包 + { + Cobj.FuHua4_Object = null; + if (JsonObj.Get("FuHua4_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("FuHua4_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("FuHua4_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("FuHua4_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("FuHua4_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("FuHua4_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("FuHua4_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果孵化4时间容器存在则先删除他 + if (Cobj.FuHua4_Timer) Cobj.FuHua4_Timer.Delete(); + Cobj.FuHua4_Timer = null; + Cobj.FuHua4_Timer = TimeSTL("FuHua4_Timer", JsonObj.Get("JiShiQi->FuHua4_TouSonShiJian")); + Cobj.FuHua4_Timer.Start(); + Cobj.FuHua4_Object = { + Name = "FuHua4", + NameImg = 12, + X = 600, + Y = 340, + BloodType = 1, + ClearNumber = gClearNumber, + Reload = 1, + Party = gParty, + Timer = Cobj.FuHua4_Timer, + TimeMax = JsonObj.Get("JiShiQi->FuHuaTouSong_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->FuHua4_TouSonShiJian"), + }; + } else { + //如果孵化4时间容器存在则先删除他 + if (Cobj.FuHua4_Timer) Cobj.FuHua4_Timer.Delete(); + Cobj.FuHua4_Timer = null; + Cobj.FuHua4_Timer = TimeSTL("FuHua4_Timer", JsonObj.Get("JiShiQi->FuHua4_FuHuoShiJian")); + Cobj.FuHua4_Timer.Start(); + Cobj.FuHua4_Object = { + Name = "FuHua4", + X = 600, + Y = 340, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.FuHua4_Timer, + TimeMax = JsonObj.Get("JiShiQi->FuHuaFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->FuHua4_FuHuoShiJian"), + }; + } + } + } + + //心脏收包 + { + Cobj.XinZang_Object = null; + if (JsonObj.Get("XinZang_State") != false) { + //得到副本剩余生命 + local gClearNumber = 5 - JsonObj.Get("XinZang_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("XinZang_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("XinZang_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("XinZang_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("XinZang_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("XinZang_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.XinZang_Object = { + Name = "xinzang", + NameImg = 8, + X = 336, + Y = 300, + BloodType = 5, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 12010, + //Ani = 16, + NengLiang = JsonObj.Get("XinZang_NengLiang"), + }; + } else { + Cobj.XinZang_Object = { + Name = "xinzang", + X = 336, + Y = 145, + ClearNumber = 0, + }; + } + } + } + + //感染收包 + local Ganran = JsonObj.Get("GanRanId"); + if (Ganran) { + switch (Ganran) { + case 1: + Cobj.FuHua1_Object.rawset("GanRan", 1); + break; + case 2: + Cobj.FuHua2_Object.rawset("GanRan", 1); + break; + case 3: + Cobj.FuHua3_Object.rawset("GanRan", 1); + break; + case 4: + Cobj.FuHua4_Object.rawset("GanRan", 1); + break; + } + } + + } + } + } + + //收取奖励包 + function ReadReward(chunk) { + Sout("\n\n收到奖励包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("ReadRewardJson"); //自动判断清空 + local JsonObj = Json_STL("ReadRewardJsonBuffer"); + RootTab.rawset("ReadRewardJson", JsonObj); + RootTab["ReadRewardJson"].Parse(chunk, 0, false); + + if (RootTab.rawin("ANTONDUNGEONINFOCONTROL")) { + local Cobj = RootTab["ANTONDUNGEONINFOCONTROL"]; + Cobj.Reward_Object = null; + local ArrBuffer = []; + for (local i = 0; i < 4; i++) { + if (JsonObj.Get("Items->" + i + "->IsGolden") == false) continue; + local TabBuffer = { + SetFlagAniIndex = JsonObj.Get("Items->" + i + "->IsGolden"), + PlayerJob = JsonObj.Get("Items->" + i + "->PlayerJob"), + PlayerJobEx = JsonObj.Get("Items->" + i + "->PlayerJobEx"), + Name = JsonObj.Get("Items->" + i + "->Name"), + ItemGrade = JsonObj.Get("Items->" + i + "->Grade"), + ItemId = JsonObj.Get("Items->" + i + "->Item"), + ItemCount = JsonObj.Get("Items->" + i + "->Num"), + ItemName = JsonObj.Get("Items->" + i + "->ItemName"), + ItemColor = JsonObj.Get("Items->" + i + "->ItemColour"), + } + ArrBuffer.append(TabBuffer); + } + Cobj.Reward_Object = ArrBuffer; + Cobj.State = JsonObj.Get("State"); + + local AllArrBuffer = []; + for (local i = 0; i < 20; i++) { + if (JsonObj.Get("Items2->" + i + "->IsGolden") == false) continue; + local TabBuffer = { + SetFlagAniIndex = JsonObj.Get("Items2->" + i + "->IsGolden"), + PlayerJob = JsonObj.Get("Items2->" + i + "->PlayerJob"), + PlayerJobEx = JsonObj.Get("Items2->" + i + "->PlayerJobEx"), + Name = JsonObj.Get("Items2->" + i + "->Name"), + ItemGrade = JsonObj.Get("Items2->" + i + "->Grade"), + ItemId = JsonObj.Get("Items2->" + i + "->Item"), + ItemCount = JsonObj.Get("Items2->" + i + "->Num"), + ItemName = JsonObj.Get("Items2->" + i + "->ItemName"), + ItemColor = JsonObj.Get("Items2->" + i + "->ItemColour"), + } + AllArrBuffer.append(TabBuffer); + } + Cobj.AllReward_Object = AllArrBuffer; + + Cobj.Reward_Timer_Object = TimeSTL("Anton_Reward_Timer_Object", 10000); + Cobj.Reward_Timer_Object.Delete(); + Cobj.Reward_Timer_Object = null; + Cobj.Reward_Timer_Object = TimeSTL("Anton_Reward_Timer_Object", 10000); + Cobj.Reward_Timer_Object.Start(); + Cobj.Reward_Info = [ + JsonObj.Get("SuccessTime"), + JsonObj.Get("DeathNum"), + ]; + } + } + + //攻坚开始传送玩家进区域 1阶段开始 + function StartMovePlayer(chunk) { + Sout("\n\n收到攻坚开始传送玩家进区域包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("MovePlayerJson"); //自动判断清空 + local JsonObj = Json_STL("MovePlayerJsonBuffer"); + RootTab.rawset("MovePlayerJson", JsonObj); + RootTab["MovePlayerJson"].Parse(chunk, 0, false); + + + local TownIndex = RootTab["MovePlayerJson"].Get("TownIndex"); + local ReIndex = RootTab["MovePlayerJson"].Get("ReIndex"); + + L_sq_MoveTown(TownIndex, ReIndex, 200, 200); + + //告诉副本类开始攻坚一阶段了 + if (RootTab.rawin("ANTONDUNGEONINFOCONTROL")) { + RootTab["ANTONDUNGEONINFOCONTROL"].State = 0; + RootTab["ANTONDUNGEONINFOCONTROL"].DrawStartAniMark = true; + } + } + + //攻坚二阶段开始事件 + function StartTwoR(chunk) { + Sout("\n\n收到攻坚2阶段开始包 :\n %L", chunk) + local RootTab = getroottable(); + if (RootTab.rawin("ANTONDUNGEONINFOCONTROL")) { + RootTab["ANTONDUNGEONINFOCONTROL"].DrawStartAniMark = true; + } + } + + //退出攻坚队传送玩家进区域 + function ExitMovePlayer(chunk) { + Sout("\n\n收到退出攻坚队传送玩家进区域包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("MovePlayerJson"); //自动判断清空 + local JsonObj = Json_STL("MovePlayerJsonBuffer"); + RootTab.rawset("MovePlayerJson", JsonObj); + RootTab["MovePlayerJson"].Parse(chunk, 0, false); + + + local TownIndex = RootTab["MovePlayerJson"].Get("TownIndex"); + local ReIndex = RootTab["MovePlayerJson"].Get("ReIndex"); + + L_sq_MoveTown(TownIndex, ReIndex, 1036, 335); + } + + //队长进入副本事件 + function PartyMSelectDungeon(chunk) { + Sout("\n\n收到队长进入副本事件包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("PartyMSelectDungeonJson"); //自动判断清空 + local JsonObj = Json_STL("PartyMSelectDungeonJsonBuffer"); + RootTab.rawset("PartyMSelectDungeonJson", JsonObj); + RootTab["PartyMSelectDungeonJson"].Parse(chunk, 0, false); + + local DungeonTID = RootTab["PartyMSelectDungeonJson"].Get("DungeonTID"); + L_sq_GoDungeon(DungeonTID); + } + + //队长返回城镇事件 + function PartyMReturnTown(chunk) { + Sout("\n\n收到队长返回城镇事件包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("PartyMReturnTownJson"); //自动判断清空 + local JsonObj = Json_STL("PartyMReturnTownJsonBuffer"); + RootTab.rawset("PartyMReturnTownJson", JsonObj); + RootTab["PartyMReturnTownJson"].Parse(chunk, 0, false); + + if (RootTab.rawin("ANTONDUNGEONINFOCONTROL")) { + local Cobj = RootTab["ANTONDUNGEONINFOCONTROL"]; + if (sq_GetCurrentModuleType() == 3) { + local AntonBackTown = Json_STL("AntonBackTown"); + AntonBackTown.Put("op", 1059); + local str = AntonBackTown.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonBackTown.Delete(); + } else { + Cobj.ReturnTwonFlag = 1; + } + } + } + + //火山怪物投放包 + function HuoShanMonsterEvent(chunk) { + Sout("\n\n收到火山投放怪物事件包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("PartyMReturnTownJson"); //自动判断清空 + local JsonObj = Json_STL("PartyMReturnTownJsonBuffer"); + RootTab.rawset("PartyMReturnTownJson", JsonObj); + RootTab["PartyMReturnTownJson"].Parse(chunk, 0, false); + local Cobj = RootTab["ANTONDUNGEONINFOCONTROL"]; + if (sq_GetCurrentModuleType() == 3) { + local obj = sq_GetMyMasterCharacter(); + obj = sq_ObjectToSQRCharacter(obj); + //print(Cobj.HuoShanMonserTable[JsonObj.Get("FuHuaId")]); + obj.sq_SendCreatePassiveObjectPacket(Cobj.HuoShanMonserTable[JsonObj.Get("FuHuaId")], 0, 120, 1, 0); + } + } + + constructor() { + //读取安图恩攻坚信息包 + Pack_Control.rawset(1052, ReadAntonDungeonInfoPack); + //攻坚开始传送玩家事件 + Pack_Control.rawset(1044, StartMovePlayer); + //攻坚二阶段开始事件 + Pack_Control.rawset(1046, StartTwoR); + //退出攻坚队传送玩家事件 + Pack_Control.rawset(1038, ExitMovePlayer); + //队长进入副本事件 + Pack_Control.rawset(1054, PartyMSelectDungeon); + //队长返回城镇事件 + Pack_Control.rawset(1056, PartyMReturnTown); + //收取奖励包 + Pack_Control.rawset(1072, ReadReward); + //收取火山怪物投放包 + Pack_Control.rawset(1082, HuoShanMonsterEvent); + //初始化判断孵化进入操作表 + MapIndexTable = {}; + MapIndexTable.rawset(33100, 1); + MapIndexTable.rawset(33103, 2); + MapIndexTable.rawset(33119, 3); + MapIndexTable.rawset(33116, 4); + //火山怪物投放表 + HuoShanMonserTable = {}; + HuoShanMonserTable.rawset(1, 202210052); + HuoShanMonserTable.rawset(2, 202210053); + HuoShanMonserTable.rawset(3, 202210054); + HuoShanMonserTable.rawset(4, 202210055); + } + + //绘制攻坚剩余时间 + function DrawTime(obj) { + + //如果还没收到配置包的时候直接返回 + if (!FightMaxTime) return; + + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", X + 528, Y + 23, 1, "安图恩剩余攻坚时间主界面"); + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", X + 566, Y + 25, 2, "安图恩剩余攻坚时间文字"); + + //计算剩余时间并绘制 + local Time = (FightMaxTime - FightTimer.Get()); + local Hours = (Time / 3600000).tostring(); + if (Hours.len() < 2) Hours = "0" + Hours; + if (Hours.len() > 2) Hours = Hours.slice(Hours.len() - 2, Hours.len()); + local minutes = (Time / 60000).tostring(); + if (minutes.len() < 2) minutes = "0" + minutes; + if (minutes.len() > 2) minutes = minutes.slice(minutes.len() - 2, minutes.len()); + local seconds = (Time / 1000 % 60).tostring(); + if (seconds.len() < 2) seconds = "0" + seconds; + if (seconds.len() > 2) seconds = seconds.slice(seconds.len() - 2, seconds.len()); + + for (local i = 0; i < 2; i++) { + T_DrawStayAni(obj, "common/anton/new/newopendungeonnum.ani", X + 538 + (i * 18), Y + 51, Hours.slice(0 + i, 1 + i).tointeger(), "安图恩剩余攻坚时间时" + i); + T_DrawStayAni(obj, "common/anton/new/newopendungeonnum.ani", X + 584 + (i * 18), Y + 51, minutes.slice(0 + i, 1 + i).tointeger(), "安图恩剩余攻坚时间分" + i); + T_DrawStayAni(obj, "common/anton/new/newopendungeonnum.ani", X + 628 + (i * 18), Y + 51, seconds.slice(0 + i, 1 + i).tointeger(), "安图恩剩余攻坚时间分" + i); + } + + //Sout("时: %L 分: %L 秒: %L",Hours,minutes,seconds); + } + + + //绘制展开攻坚信息按钮 + function DrawMainButton(obj) { + //如果展开按钮不存在 + if (!OpenMainButtonObject) { + OpenMainButtonObject = AntonButtonPro(obj, "AntonDungeonOpenMainButtonObject", 690, 35, "common/anton/new/newopendungeoninfobutton.ani", 103, 22, 0); + OpenMainButtonObject.SetRectEnble(true, "AntonDungeonOpenMainButtonObjectr", 690, 35, "common/anton/new/newopendungeoninfobutton.ani", 1); + OpenMainButtonObject.SetCustomClickEnble(true, "AntonDungeonOpenMainButtonObjectc", 690, 35, "common/anton/new/newopendungeoninfobutton.ani", 2); + } + //未点击 窗口也未打开 + if (!sq_GetPopupWindowMainCotrol(267)) { + OpenMainButtonObject.Show(); + if (OpenMainButtonObject.isLBActive()) { + PageState = 1; + L_NewWindows("Lenheart", 267, 0x65535); + + + local RootTab = getroottable(); + RootTab["ANTONTOWNMAINCONTROLLIST"].NowSelectTeamFunc = null; //把功能选择页关掉 + RootTab["ANTONTOWNMAINCONTROLLIST"].NowSelectTeam = null; //把功能选择页关掉 + RootTab["ANTONTEAMMAINBUTTON"].State = 0; + RootTab["ANTONTEAMMAINBUTTON"].WindowSwitch = false; + + } + } + if (PageState == 1 && !sq_GetPopupWindowMainCotrol(267)) { + PageState = 0; + } + } + + + //绘制副本对象 + function DrawDungeonObjInfo(obj, DgnObj) { + //如果副本已经死亡 + if (DgnObj.ClearNumber == 0) { + //绘制副本血槽背景 + local Bkani = 6; + if (DgnObj.rawin("Reload")) Bkani = 15; + if (DgnObj.rawin("Ani")) Bkani = DgnObj.Ani; + /* + if (DgnObj.rawin("GanRan")) { + Bkani = 18; + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 1, DgnObj.Y + 1, 19, "安图恩攻坚战况副本血槽背景感染外框"); + } + */ + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X, DgnObj.Y, Bkani, "D安图恩攻坚战况副本血槽背景" + DgnObj.Name); + //绘制副本血槽名称背景 + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 42, DgnObj.Y - 16, 5, "D安图恩攻坚战况副本血槽名称背景" + DgnObj.Name); + //绘制副本血槽名称 + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 42, DgnObj.Y - 16, 7, "D安图恩攻坚战况副本血槽名称" + DgnObj.Name); + //判断是否需要绘制复活时间 + if (DgnObj.rawin("Timer")) { + local TimeMax = (DgnObj.TimeMax / 1000); + local Time = ((DgnObj.Timer.Get() + (DgnObj.TimeMax - DgnObj.TimeOffset)) / 1000); + local TimeStr = (TimeMax - Time).tostring(); + L_Code_STL(TimeStr, DgnObj.X + 34 - (TimeStr.len() * 2), DgnObj.Y + 28, 0xffffffff, 1); + //绘制复活时间进度条 + local TimeHun = ((Time.tofloat() / TimeMax.tofloat()) * 100.0).tointeger(); + T_DrawStayAni(obj, "common/anton/new/newantonloading2.ani", DgnObj.X, DgnObj.Y, TimeHun, "安图恩攻坚战况副本复活时间进度条" + TimeHun); + } + } + //如果还没死亡 + else { + //绘制副本血槽背景 + local Bkani = 4; + if (DgnObj.rawin("Reload")) Bkani = 15; + if (DgnObj.rawin("Ani")) Bkani = DgnObj.Ani; + //绘制感染 + if (DgnObj.rawin("GanRan")) { + Bkani = 18; + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 1, DgnObj.Y + 1, 19, "安图恩攻坚战况副本血槽背景感染外框"); + } + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X, DgnObj.Y, Bkani, "安图恩攻坚战况副本血槽背景" + DgnObj.Name); + //绘制副本血槽名称背景 + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 42, DgnObj.Y - 16, 5, "安图恩攻坚战况副本血槽名称背景" + DgnObj.Name); + //绘制副本血槽名称 + T_DrawStayAni(obj, "common/anton/new/newopendungeonname.ani", DgnObj.X + 42, DgnObj.Y - 16, DgnObj.NameImg, "安图恩攻坚战况副本血槽名称" + DgnObj.Name); + //绘制副本血量 + //火山单独绘制 + if (DgnObj.BloodType == 99) { + local NengLiangstr = DgnObj.NengLiang.tostring(); + if (NengLiangstr.len() == 1) NengLiangstr = "00" + NengLiangstr; + if (NengLiangstr.len() == 2) NengLiangstr = "0" + NengLiangstr; + for (local i = 0; i < 3; i++) { + local index = NengLiangstr.slice(0 + i, 1 + i).tointeger(); + T_DrawStayAni(obj, "common/anton/new/newnum.ani", DgnObj.X + 23 + (i * 8), DgnObj.Y + 40, index "安图恩剩余火山能量" + i + index); + } + local NengLiang = abs(DgnObj.NengLiang - 100) + T_DrawStayAni(obj, "common/anton/new/newantonloading3.ani", DgnObj.X, DgnObj.Y, NengLiang, "安图恩攻坚战况副本火山血" + NengLiang); + } + //别的副本绘制 马勒戈壁写烦起来了 瞎比乱写了 架构去他妈 + else { + T_DrawStayAni(obj, "common/anton/new/newopendungeonblood/" + DgnObj.BloodType + "_" + DgnObj.ClearNumber + ".ani", DgnObj.X, DgnObj.Y, 0, "安图恩攻坚战况副本血" + DgnObj.BloodType + "_" + DgnObj.ClearNumber); + } + //判断是否需要绘制爆炸时间 + if (DgnObj.rawin("Timer")) { + local TimeMax = (DgnObj.TimeMax / 1000); + local Time = ((DgnObj.Timer.Get() + (DgnObj.TimeMax - DgnObj.TimeOffset)) / 1000); + local TimeStr = (TimeMax - Time).tostring(); + L_Code_STL(TimeStr, DgnObj.X + 34 - (TimeStr.len() * 2), DgnObj.Y + 28, 0xffffffff, 1); + //绘制爆炸时间进度条 + local TimeHun = ((Time.tofloat() / TimeMax.tofloat()) * 100.0).tointeger(); + T_DrawStayAni(obj, "common/anton/new/newantonloading2.ani", DgnObj.X, DgnObj.Y, TimeHun, "安图恩攻坚战况副本爆炸时间进度条" + TimeHun); + } + + + //绘制队伍 + for (local i = 0; i < DgnObj.Party.len(); i++) { + //绘制底框 + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X - 66, DgnObj.Y - 20 + (i * 22), 8 + i, "安图恩攻坚战况队伍底框" + i); + //绘制队伍编号 注意:因为这个傻逼图TM的不对称 要单独 判断位置 + local Offset = 0; + if (i == 1 || i == 2) Offset = 1; + if (i == 3) Offset = 6; + if (i == 4) Offset = 7; + T_DrawStayAni(obj, "common/anton/new/newopendungeonpartymark.ani", DgnObj.X - 63, DgnObj.Y - 17 + (i * 22) + Offset, DgnObj.Party[i][0], "安图恩攻坚战况队伍编号" + DgnObj.Party[0]); + //绘制队伍人数 + for (local z = 0; z < DgnObj.Party[i][3] - 1; z++) { + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X - 27 + (z * 7), DgnObj.Y - 14 + (i * 22) + Offset, 13, "安图恩攻坚战况队伍人数"); + } + //绘制队长头像TM的这个傻逼东西又偏了 在+1 + if (Offset == 6 || Offset == 7) ++Offset; + T_DrawStayAniRate(obj, "common/anton/face/" + DgnObj.Party[i][1] + "/" + (DgnObj.Party[i][2] % 16) + ".ani", DgnObj.X - 44, DgnObj.Y - 16 + (i * 22) + Offset, 0, "缩小安图恩头像编号" + DgnObj.Party[i][1] + DgnObj.Party[i][2], 0.50); + } + } + if (MouseTask == 1 && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, DgnObj.X, DgnObj.Y, 71, 71) && IMouse.isButtonUpEvent()) { + if (!DgnObj.rawin("DungeonUID")) return; + obj.sq_PlaySound("CLICK_BUTTON1"); + local AntonSelectDungeon = Json_STL("AntonSelectDungeon"); + AntonSelectDungeon.Put("op", 1051); + AntonSelectDungeon.Put("DungeonUID", DgnObj.DungeonUID); + local str = AntonSelectDungeon.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonSelectDungeon.Delete(); + MouseTask = 2; + } + } + + //绘制小队移动类 + function DrawPartyMoveClss(obj) { + local ThisX = X + 540; + local ThisY = Y + 508; + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", ThisX, ThisY, 14, "安图恩攻坚战况主界面小队移动背景"); + + //如果 小队移动选择地下城按钮 未初始化时 初始化 + if (PartyMove_SelectDungeon_Button == null) { + PartyMove_SelectDungeon_Button = AntonButtonPro(obj, "AntonPartyMove_SelectDungeon_Button", ThisX + 7, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 95, 29, 6); + PartyMove_SelectDungeon_Button.SetRectEnble(true, "AntonPartyMove_SelectDungeon_Buttonr", ThisX + 7, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 7); + PartyMove_SelectDungeon_Button.SetCustomClickEnble(true, "AntonPartyMove_SelectDungeon_Buttonc", ThisX + 7, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 8); + } + PartyMove_SelectDungeon_Button.Show(); + if (PartyMove_SelectDungeon_Button.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + MouseTask = 1; + } + //如果 小队移动返回城镇按钮 未初始化时 初始化 + if (PartyMove_ReturnTown_Button == null) { + PartyMove_ReturnTown_Button = AntonButtonPro(obj, "AntonPartyMove_ReturnTown_Button", ThisX + 108, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 95, 29, 9); + PartyMove_ReturnTown_Button.SetRectEnble(true, "AntonPartyPartyMove_ReturnTown_Buttonr", ThisX + 108, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 10); + PartyMove_ReturnTown_Button.SetCustomClickEnble(true, "AntonPartyPartyMove_ReturnTown_Buttonc", ThisX + 108, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 11); + } + PartyMove_ReturnTown_Button.Show(); + if (PartyMove_ReturnTown_Button.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + //不在城镇里点击返回城镇按钮才会发包 + if (sq_GetCurrentModuleType() != 1) { + local TryAntonBackTown = Json_STL("TryAntonBackTown"); + TryAntonBackTown.Put("op", 1053); + local str = TryAntonBackTown.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + TryAntonBackTown.Delete(); + } + } + } + + //绘制开始攻坚动画 + function DrawStartAni(obj, Type) { + if(Type == 0)Type = 1; + else if(Type == 3)Type = 2; + if (DrawStartAniMark == true) { + local anieff = BasicsDrawTool.T_DrawDynamicAni(obj, "common/anton/new/starteff.ani", 250, 210, "开始攻坚标题背景eff"); + local ani1 = BasicsDrawTool.T_DrawDynamicAni(obj, "common/anton/new/start" + Type + ".ani", 250, 210 + 26, "开始攻坚标题背景1"); + if (sq_GetAnimationFrameIndex(ani1) >= 28) { + sq_Rewind(anieff); + sq_Rewind(ani1); + DrawStartAniMark = false; + } + } + } + + //绘制攻坚队攻坚信息 + function DrawAntonPartyInfo(obj) { + //绘制主界面背景 + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", X, Y + 20, 0, "安图恩攻坚战况主界面背景"); + //绘制主界面背景乌龟 + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", X + 25, Y + 70, 3, "安图恩攻坚战况主界面背景乌龟"); + //绘制主界面小队移动类 + DrawPartyMoveClss(obj); + + //1阶段 + if (State == 0) { + //黑雾之源对象绘制 + if (HeiWuObject) DrawDungeonObjInfo(obj, HeiWuObject); + //震颤A对象绘制 + if (ZhenChan_A_Object) DrawDungeonObjInfo(obj, ZhenChan_A_Object); + //震颤B对象绘制 + if (ZhenChan_B_Object) DrawDungeonObjInfo(obj, ZhenChan_B_Object); + //擎天A对象绘制 + if (QingTian_A_Object) DrawDungeonObjInfo(obj, QingTian_A_Object); + //擎天B对象绘制 + if (QingTian_B_Object) DrawDungeonObjInfo(obj, QingTian_B_Object); + //舰炮防御战对象绘制 + if (JianPaoObject) DrawDungeonObjInfo(obj, JianPaoObject); + } + + + + //2阶段 + if (State == 3) { + //能源阻截站对象绘制 + if (NengLiangObject) DrawDungeonObjInfo(obj, NengLiangObject); + //黑色火山对象绘制 + if (HuoShanObject) DrawDungeonObjInfo(obj, HuoShanObject); + //孵化1对象绘制 + if (FuHua1_Object) DrawDungeonObjInfo(obj, FuHua1_Object); + //孵化2对象绘制 + if (FuHua2_Object) DrawDungeonObjInfo(obj, FuHua2_Object); + //孵化3对象绘制 + if (FuHua3_Object) DrawDungeonObjInfo(obj, FuHua3_Object); + //孵化4对象绘制 + if (FuHua4_Object) DrawDungeonObjInfo(obj, FuHua4_Object); + //心脏对象绘制 + if (XinZang_Object) DrawDungeonObjInfo(obj, XinZang_Object); + } + } + + //设置鼠标事件类型 + function SetMouseTesk() { + //有活动设置 + if (MouseTask == 1) IMouse.SetMouseTask(47); + //点击就还原 + if (IMouse.GetRButton() == 2 && MouseTask == 1) MouseTask = 2; + //还原以后在解锁 + if (MouseTask == 2) { + IMouse.SetMouseTask(0); + MouseTask = 0; + } + } + + //判断是否可重合 + function PosEvent(Pos, MPos) { + local Offset = abs(Pos - MPos); + if (Offset < 10) return true; + else return false; + } + //判断自身地图相关事件 + function MapEventTest(obj) { + if (sq_GetCurrentModuleType() != 3) return; + local stage = sq_GetGlobaludpModuleStage(); + local MapIndex = sq_GetMapIndex(stage); + if (MapIndexTable.rawin(MapIndex)) { + local X = obj.getXPos(); + local Y = obj.getYPos(); + local Mark = false; + if (MapIndex == 33103 && PosEvent(X, 737) && PosEvent(Y, 354)) Mark = true; + if (MapIndex == 33100 && PosEvent(X, 369) && PosEvent(Y, 387)) Mark = true; + if (MapIndex == 33116 && PosEvent(X, 365) && PosEvent(Y, 374)) Mark = true; + if (MapIndex == 33119 && PosEvent(X, 838) && PosEvent(Y, 424)) Mark = true; + + if (Mark == true && MapMoveMark == false) { + local AntonFHMoveDungeon = Json_STL("AntonFHMoveDungeon"); + AntonFHMoveDungeon.Put("op", 1057); + AntonFHMoveDungeon.Put("DungeonUID", MapIndexTable[MapIndex]); + local str = AntonFHMoveDungeon.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonFHMoveDungeon.Delete(); + MapMoveMark = true; + } else if (Mark == false) MapMoveMark = false; + } else { + MapMoveMark = false; + } + } + + //绘制透明度静态图片 + function Anton_DrawStayAniAlpha(obj, aniFileName, x, y, index, aniname, Alpha) { + local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName); + sq_DrawSpecificFrameEffect_SIMPLE(SelectAni, x, y, index, sq_RGB(255, 255, 255), sq_ALPHA(Alpha), false); + return SelectAni; + } + + //绘制翻牌奖励 + function DrawReward(obj, Time, Reward_Object, AllReward_Object, Reward_Info) { + local PassTime = Reward_Info[0]; + local Coin = Reward_Info[1]; + + //绘制背景图 + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X, Y, 0, "安图恩翻牌主界面背景", 230); + //绘制阶段状态 + local Reani = 1; + if(State == 4)Reani = 24; + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + 300, Y + 40, Reani, "安图恩翻牌阶段状态", 250); + //绘制成功标志 + local Rate = sq_GetAccel(400, 100, Time, 500, false); + T_DrawStayAniRate(obj, "common/anton/new/newreward.ani", X + 323, Y + 110, 2, "安图恩翻牌成功标志1", Rate.tofloat() / 100.0); + + //绘制通关信息条划出 + if (Time >= 500) { + local Xpos; + if (Time < 3000) Xpos = sq_GetAccel(675, 0, Time - 500, 300, false); + if (Time >= 3000) Xpos = sq_GetAccel(0, -675, Time - 3000, 300, false); + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + 115 + Xpos, Y + 200, 3, "安图恩翻牌阶段状态", 250); + } + + //绘制时间 + if (Time >= 800) { + local Xpos; + if (Time < 3000) Xpos = sq_GetAccel(675, 0, Time - 800, 300, false); + if (Time >= 3000) Xpos = sq_GetAccel(0, -675, Time - 3000, 300, false); + //计算剩余时间并绘制 + local Hours = (PassTime / 3600000).tostring(); + if (Hours.len() < 2) Hours = "0" + Hours; + if (Hours.len() > 2) Hours = Hours.slice(Hours.len() - 2, Hours.len()); + local minutes = (PassTime / 60000).tostring(); + if (minutes.len() < 2) minutes = "0" + minutes; + if (minutes.len() > 2) minutes = minutes.slice(minutes.len() - 2, minutes.len()); + local seconds = (PassTime / 1000 % 60).tostring(); + if (seconds.len() < 2) seconds = "0" + seconds; + if (seconds.len() > 2) seconds = seconds.slice(seconds.len() - 2, seconds.len()); + + for (local i = 0; i < 2; i++) { + T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + Xpos + 538 - 300 + (i * 18), Y + 51 + 164, Hours.slice(0 + i, 1 + i).tointeger(), "安图恩奖励部分时间时" + i); + T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + Xpos + 600 - 300 + (i * 18), Y + 51 + 164, minutes.slice(0 + i, 1 + i).tointeger(), "安图恩奖励部分时间分" + i); + T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + Xpos + 660 - 300 + (i * 18), Y + 51 + 164, seconds.slice(0 + i, 1 + i).tointeger(), "安图恩奖励部分时间分" + i); + } + T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + Xpos + 284, Y + 51 + 164, 10, "安图恩奖励部分时间时点"); + T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + Xpos + 348, Y + 51 + 164, 10, "安图恩奖励部分时间时点"); + + for (local z = 0; z < Coin.tostring().len(); z++) { + T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + Xpos + 520 + (z * 18), Y + 51 + 164, Coin.tostring().slice(0 + z, 1 + z).tointeger(), "安图恩奖励部分时间复活币" + z); + } + //T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + 348 , Y + 51 + 164, 10, "安图恩奖励部分时间时点"); + } + + local CradTab = Reward_Object; + + //绘制卡牌 + if (Time >= 1300) { + local Alpha; + if (Time < 3000) Alpha = sq_GetAccel(0, 250, Time - 1300, 700, false); + if (Time >= 3000) Alpha = sq_GetAccel(250, 0, Time - 3000, 700, false); + for (local i = 0; i < 4; i++) { + local BackGroundAniIndex = 11; + if (i >= CradTab.len()) { + //绘制卡牌背景图 + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + 94 + (153 * i), Y + 380, BackGroundAniIndex, "安图恩翻牌卡片界面背景", Alpha); + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + 160 + (153 * i), Y + 416, 19, "安图恩翻牌无卡片背景", Alpha); + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + 160 + (153 * i), Y + 416, 20, "安图恩翻牌无卡片背景Eff", Alpha); + continue; + } + if (CradTab[i].SetFlagAniIndex == 1) BackGroundAniIndex = 21; + //绘制卡牌背景图 + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + 94 + (153 * i), Y + 380, BackGroundAniIndex, "安图恩翻牌卡片界面背景", Alpha); + //绘制角色标记 + local SetFlagAniIndex = 9; + SetFlagAniIndex += CradTab[i].SetFlagAniIndex; + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + 97 + (153 * i), Y + 330, SetFlagAniIndex, "安图恩翻牌卡片界面人物框" + SetFlagAniIndex, Alpha); + //绘制角色头像 + Anton_DrawStayAniAlpha(obj, "common/anton/face/" + CradTab[i].PlayerJob + "/" + (CradTab[i].PlayerJobEx % 16) + ".ani", X + 102 + (153 * i), Y + 334, 0, "翻牌安图恩头像编号" + CradTab[i].PlayerJob + CradTab[i].PlayerJobEx, Alpha); + if (Time >= 2000) { + //绘制角色名字 + if (Time < 3000) L_Code_STL(CradTab[i].Name, X + 145 + (153 * i), Y + 342, 0xFFffffff, 1); + //绘制道具边框 + if (Time < 3000) T_DrawStayAni(obj, "common/anton/new/newreward.ani", X + 153 + (153 * i), Y + 412, CradTab[i].ItemGrade + 12, "安图恩翻牌卡片道具边框" + CradTab[i].ItemGrade); + //绘制道具 + if (Time < 3000) L_Sq_DrawItem(X + 156 + (153 * i), Y + 415, CradTab[i].ItemId, CradTab[i].ItemCount, 0, 0, 0); + //绘制道具名字 + if (Time < 3000) L_Code_STL(CradTab[i].ItemName, X + 167 + (153 * i) - BasicsDrawTool.GetOffserFromLen(CradTab[i].ItemName, 1.5), Y + 450, 0xffffffff, 1); + } + } + } + + local AllCradTab = AllReward_Object; + //绘制所有人卡牌 + if (Time >= 3700) { + local Xoffset = -80; + local Yoffset = -200; + local Alpha; + Alpha = sq_GetAccel(0, 250, Time - 3700, 700, false); + for (local i = 0; i < 20; i++) { + local BackGroundAniIndex = 11; + if (i >= AllCradTab.len()) { + //绘制卡牌背景图 + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + Xoffset + 94 + (155 * (i % 5)), Y + Yoffset + 380 + (100 * (i / 5)), BackGroundAniIndex, "安图恩翻牌卡片界面背景", Alpha); + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + Xoffset + 160 + (155 * (i % 5)), Y + Yoffset + 416 + (100 * (i / 5)), 19, "安图恩翻牌无卡片背景", Alpha); + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + Xoffset + 160 + (155 * (i % 5)), Y + Yoffset + 416 + (100 * (i / 5)), 20, "安图恩翻牌无卡片背景Eff", Alpha); + continue; + } + if (AllCradTab[i].SetFlagAniIndex == 1) BackGroundAniIndex = 21; + //绘制卡牌背景图 + Anton_DrawStayAniAlpha(obj, "common/anton/new/newreward.ani", X + Xoffset + 94 + (155 * (i % 5)), Y + Yoffset + 380 + (100 * (i / 5)), BackGroundAniIndex, "安图恩翻牌卡片界面背景", Alpha); + //绘制角色头像 + Anton_DrawStayAniAlpha(obj, "common/anton/face/" + AllCradTab[i].PlayerJob + "/" + (AllCradTab[i].PlayerJobEx % 16) + ".ani", X + Xoffset + 102 + (155 * (i % 5)), Y + Yoffset + 388 + (100 * (i / 5)), 0, "翻牌安图恩头像编号" + AllCradTab[i].PlayerJob + AllCradTab[i].PlayerJobEx, Alpha); + if (Time >= 4400) { + //绘制角色名字 + L_Code_STL(AllCradTab[i].Name, X + Xoffset + 137 + (155 * (i % 5)), Y + Yoffset + 394 + (100 * (i / 5)), 0xFF9bc8e6, 1); + //绘制道具边框 + T_DrawStayAni(obj, "common/anton/new/newreward.ani", X + Xoffset + 153 + (155 * (i % 5)), Y + Yoffset + 417 + (100 * (i / 5)), AllCradTab[i].ItemGrade + 12, "安图恩翻牌卡片道具边框" + AllCradTab[i].ItemGrade); + //绘制道具 + L_Sq_DrawItem(X + Xoffset + 156 + (155 * (i % 5)), Y + Yoffset + 420 + (100 * (i / 5)), AllCradTab[i].ItemId, AllCradTab[i].ItemCount, 0, 0, 0); + //绘制道具名字 + L_Code_STL(AllCradTab[i].ItemName, X + Xoffset + 167 + (155 * (i % 5)) - BasicsDrawTool.GetOffserFromLen(AllCradTab[i].ItemName, 1.5), Y + Yoffset + 455 + (100 * (i / 5)), 0xffffffff, 1); + } + } + } + } + + function Run(obj) { + if (State < 0) return; + + DrawStartAni(obj, State); + + //如果被人已经通关了那么寻找时间返回城镇 + if (ReturnTwonFlag == 1 && sq_GetCurrentModuleType() == 3 && obj.getState() != 0) { + local AntonFlagBackTown = Json_STL("AntonFlagBackTownJson"); + AntonFlagBackTown.Put("op", 1067); + local str = AntonFlagBackTown.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonFlagBackTown.Delete(); + ReturnTwonFlag = 0; + } + + //设置鼠标类型事件 + SetMouseTesk(); + //判断自身地图相关事件 + MapEventTest(obj); + + //绘制展开攻坚信息按钮 + DrawMainButton(obj); + //绘制攻坚剩余时间 + if (PageState == 0 && (State == 0 || State == 3)) + { + DrawStartAni(obj, State); + DrawTime(obj); + } + + //如果是翻牌奖励阶段 没有打开主窗口 + if (State == 1 || State == 4) { + if (!sq_GetPopupWindowMainCotrol(267)) { + L_NewWindows("Lenheart", 267, 0x65535); + PageState = 1; + } + } + } + + + function Draw(obj) { + //如果页面被打开 绘制攻坚队攻坚信息 + if (PageState == 1 && (State == 0 || State == 3)) DrawAntonPartyInfo(obj); + + //绘制攻坚剩余时间 + if (State == 0 || State == 3) DrawTime(obj); + + if (State == 1 || State == 4) DrawReward(obj, Reward_Timer_Object.Get(), Reward_Object, AllReward_Object, Reward_Info); + + DrawStartAni(obj, State); + } +} + +local RootTab = getroottable(); +RootTab.rawdelete("ANTONDUNGEONINFOCONTROL"); + +function AntonDungeonInfoControlFunc(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("ANTONDUNGEONINFOCONTROL") == false) { + local ANTONDUNGEONINFOCONTROLOBJ = AntonDungeonInfoControl_C(); + RootTab.rawset("ANTONDUNGEONINFOCONTROL", ANTONDUNGEONINFOCONTROLOBJ); + } + RootTab["ANTONDUNGEONINFOCONTROL"].Run(obj); +} \ No newline at end of file diff --git a/Plugins/Anton/antontownmainbutton.nut b/Plugins/Anton/antontownmainbutton.nut new file mode 100644 index 0000000..de4a2c0 --- /dev/null +++ b/Plugins/Anton/antontownmainbutton.nut @@ -0,0 +1,108 @@ +/* +文件名:antontownmainbutton.nut +路径:Plugins/Anton/antontownmainbutton.nut +创建日期:2022-09-04 08:54 +文件用途:城镇中打开安图恩攻坚队面板按钮部分 +*/ + +class AntonTeamMainButtonC extends BasicsDrawTool { + ButtonObject = null; + State = 0; + WindowSwitch = false; + + //创建队伍和加入队伍事件 + function SendPackEvent_JoinTeam_and_CreatTeam(Type) { + local JoinTeam_and_CreatTeam = Json_STL("JoinTeam_and_CreatTeam"); + JoinTeam_and_CreatTeam.Put("op", 1025); + local str = JoinTeam_and_CreatTeam.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + JoinTeam_and_CreatTeam.Delete(); + } + + //退出队伍事件 + function SendPackEvent_ExitTeam(Type) { + local ExitTeam = Json_STL("ExitTeam"); + ExitTeam.Put("op", 1029); + local str = ExitTeam.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + ExitTeam.Delete(); + } + + //退出队伍请求 + function PartyKickPlayer(chunk) { + print(chunk); + L_sq_SendPackType(13); + L_sq_SendPack(); + } + + //委任队长事件 + function PartyGiveM(chunk) { + local PartyGiveM = Json_STL("PartyGiveM"); + PartyGiveM.Put("op", 1023); + local str = PartyGiveM.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + PartyGiveM.Delete(); + } + + constructor(obj) { + ButtonObject = ButtonPro(obj, "RankSystemMainSwitchButton", 15, 300, "common/training/main/maintab.ani", 39, 35); + ButtonObject.SetRectEnble(true, "RankSystemMainSwitchButtonr", 15, 300, "common/training/main/maintab.ani", 0); + ButtonObject.SetCustomClickEnble(true, "RankSystemMainSwitchButtonc", 15, 300, "common/training/main/maintab.ani", 0); + + //安图恩创建队伍和加入队伍事件 + SendPackTypeTable.rawset(11, SendPackEvent_JoinTeam_and_CreatTeam); + SendPackTypeTable.rawset(12, SendPackEvent_JoinTeam_and_CreatTeam); + //安图恩退出队伍事件 + SendPackTypeTable.rawset(13, SendPackEvent_ExitTeam); + //委任队长事件 + SendPackTypeTable.rawset(124, PartyGiveM); + //玩家自己退出队伍 + Pack_Control.rawset(1030, PartyKickPlayer); + } + + function Run(obj) { + if (State == 0 && !sq_GetPopupWindowMainCotrol(267)) { + ButtonObject.Show(); + if (ButtonObject.isLBActive()) { + State = 1; + L_NewWindows("Lenheart", 267, 0x65535); + + local GetAntonTeamList = Json_STL("GetAntonTeamList"); + GetAntonTeamList.Put("op", 1007); + GetAntonTeamList.Put("Page", 1); + local str = GetAntonTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetAntonTeamList.Delete(); + } + } else if (State == 1 && !sq_GetPopupWindowMainCotrol(267)) { + local RootTab = getroottable(); + RootTab["ANTONTOWNMAINCONTROLLIST"].NowSelectTeamFunc = null; //把功能选择页关掉 + RootTab["ANTONTOWNMAINCONTROLLIST"].NowSelectTeam = null; //把功能选择页关掉 + State = 0; + WindowSwitch = false; + } else if (State == 1 && sq_GetPopupWindowMainCotrol(267)) { + WindowSwitch = true; + } + } +} + +local RootTab = getroottable(); +RootTab.rawdelete("ANTONTEAMMAINBUTTON"); + +function AntonTownMainButtonControl(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("ANTONTEAMMAINBUTTON") == false) { + local ANTONTEAMMAINBUTTONOBJ = AntonTeamMainButtonC(obj); + RootTab.rawset("ANTONTEAMMAINBUTTON", ANTONTEAMMAINBUTTONOBJ); + } else { + RootTab["ANTONTEAMMAINBUTTON"].Run(obj); + } +} \ No newline at end of file diff --git a/Plugins/Anton/antontownmainparty_info.nut b/Plugins/Anton/antontownmainparty_info.nut new file mode 100644 index 0000000..d81bef7 --- /dev/null +++ b/Plugins/Anton/antontownmainparty_info.nut @@ -0,0 +1,120 @@ +/* +文件名:antontownmainparty_info.nut +路径:Plugins/Anton/antontownmainparty_info.nut +创建日期:2022-09-04 20:09 +文件用途:城镇中打开安图恩攻坚队面板攻坚队信息部分 +*/ + +class AntonTownControlInfo_C extends BasicsDrawTool { + X = 424; + Y = 28; + UserUiMap = null; //小队成员UI Map + UserInfoMap = null; //小队成员Info Map + MySelfMap = null; //自己 + + CaptainControl = false; //攻坚队长主控 + + function RedAntonPlayerInfo(chunk) { + //Sout("收到包: %L", chunk); + local RootTab = getroottable(); + BasicsDrawTool.InitClass("AntonTownUserJson"); //自动判断清空 + local JsonObj = Json_STL("AntonTownUserJsonBuffer"); + RootTab.rawset("AntonTownUserJson", JsonObj); + RootTab["AntonTownUserJson"].Parse(chunk, 0, false); + + //判断是否是攻坚队长主控 + RootTab["ANTONTOWNCONTROLINFO"].CaptainControl = RootTab["AntonTownUserJson"].Get("CaptainBool"); + //清空自己的信息 + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap = {}; + //写入自己的信息 + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("PartyID", RootTab["AntonTownUserJson"].Get("myself->PartyID")); + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("PartyCaptain", RootTab["AntonTownUserJson"].Get("myself->PartyCaptain")); + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("PlayerGrowTypeJob", RootTab["AntonTownUserJson"].Get("myself->PlayerGrowTypeJob")); + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("PlayerSession", RootTab["AntonTownUserJson"].Get("myself->PlayerSession")); + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("PlayerLevel", RootTab["AntonTownUserJson"].Get("myself->PlayerLevel")); + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("PlayerJob", RootTab["AntonTownUserJson"].Get("myself->PlayerJob")); + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("PlayerName", RootTab["AntonTownUserJson"].Get("myself->PlayerName")); + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("CaptainBool", RootTab["AntonTownUserJson"].Get("myself->CaptainBool")); + RootTab["ANTONTOWNCONTROLINFO"].MySelfMap.rawset("isPrepare", RootTab["AntonTownUserJson"].Get("myself->isPrepare")); + + //清空小队成员数组 + RootTab["ANTONTOWNCONTROLINFO"].UserInfoMap = []; + //写入小队成员信息 + for (local i = 0; i < 20; i++) { + local gPartyID = RootTab["AntonTownUserJson"].Get("result->" + i + "->PartyID"); //得到队伍ID + if (gPartyID == true || gPartyID == false) break; //如果读不到说明读完了 直接走 + local gPartyCaptain = RootTab["AntonTownUserJson"].Get("result->" + i + "->PartyCaptain"); //得到是否为小队队长 + local gPlayerGrowTypeJob = RootTab["AntonTownUserJson"].Get("result->" + i + "->PlayerGrowTypeJob"); //得到转职职业(String) + local gPlayerSession = RootTab["AntonTownUserJson"].Get("result->" + i + "->PlayerSession"); //得到世界编号 + local gPlayerLevel = RootTab["AntonTownUserJson"].Get("result->" + i + "->PlayerLevel"); //得到等级 + local gPlayerJob = RootTab["AntonTownUserJson"].Get("result->" + i + "->PlayerJob"); //得到基础职业 + local gPlayerJobEx = RootTab["AntonTownUserJson"].Get("result->" + i + "->PlayerJobEx"); //得到基础职业 + local gPlayerName = RootTab["AntonTownUserJson"].Get("result->" + i + "->PlayerName"); //得到玩家名字 + local gCaptainBool = RootTab["AntonTownUserJson"].Get("result->" + i + "->CaptainBool"); //得到是否为攻坚队队长 + local gMaterial = RootTab["AntonTownUserJson"].Get("result->" + i + "->isPrepare"); //得到是否拥有材料 + local gCID = RootTab["AntonTownUserJson"].Get("result->" + i + "->CID"); //得到是否拥有材料 + + local PlayerTab = { + PartyID = gPartyID, + PartyCaptain = gPartyCaptain, + PlayerGrowTypeJob = gPlayerGrowTypeJob, + PlayerSession = gPlayerSession, + PlayerLevel = gPlayerLevel, + PlayerJob = gPlayerJob, + PlayerJobEx = gPlayerJobEx, + PlayerName = gPlayerName, + CaptainBool = gCaptainBool, + Material = gMaterial, + CID = gCID, + } + RootTab["ANTONTOWNCONTROLINFO"].UserInfoMap.append(PlayerTab); //PlayerInfoTable丢进数组 + } + + } + + constructor() { + UserUiMap = []; //小队成员UI Map + UserInfoMap = []; //小队成员Info Map + MySelfMap = {}; //自己 + + print("AntonTownControl_C ClassObject Succes"); + Pack_Control.rawset(1002, RedAntonPlayerInfo); + Pack_Control.rawset(1012, RedAntonPlayerInfo); + UserUiMap.resize(20); + } + + function DrawPartyInfo(obj) { + for (local i = 0; i < UserInfoMap.len(); ++i) { + if (!UserUiMap[i]) UserUiMap[i] = AntonUserControl_C("AntonUserPlayer" + i, 308 + ((i % 2) * 223), 97 + ((i / 2) * 42), CaptainControl); //如果用户Map没有被实例化则实例化他 + + UserUiMap[i].SetPlayerInfo(UserInfoMap[i]); + + UserUiMap[i].Run(obj); + } + } + + + + function Show(obj) { + //如果有攻坚队的具体信息才绘制 + if (UserInfoMap.len() > 0) { + DrawPartyInfo(obj); + } + } + + function Run(obj) { + Show(obj); + } +} + +local RootTab = getroottable(); +RootTab.rawdelete("ANTONTOWNCONTROLINFO"); + +function AntonTownMainControl_PartyInfo(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("ANTONTOWNCONTROLINFO") == false) { + local ANTONTOWNCONTROLINFOOBJ = AntonTownControlInfo_C(); + RootTab.rawset("ANTONTOWNCONTROLINFO", ANTONTOWNCONTROLINFOOBJ); + } + +} \ No newline at end of file diff --git a/Plugins/Anton/antontownmainparty_list.nut b/Plugins/Anton/antontownmainparty_list.nut new file mode 100644 index 0000000..424e703 --- /dev/null +++ b/Plugins/Anton/antontownmainparty_list.nut @@ -0,0 +1,377 @@ +/* +文件名:antontownmainpartylist.nut +路径:Plugins/Anton/antontownmainpartylist.nut +创建日期:2022-09-04 09:03 +文件用途:城镇中打开安图恩攻坚队面板攻坚队列表部分 +*/ + +class AntonTownMainControl_PartyList_C extends BasicsDrawTool { + X = 37; + Y = 38; + + ListUiMap = null; //小队成员UI Map + ListInfoMap = null; //小队成员Info Map + + ListCount = null; + NowSelectTeam = null; + NowSelectTeamFunc = null; //当前选择队伍功能 + MyTeamId = -1; //我的队伍Id + MyCaptainControl = 0; //我是否为攻坚队长 + + ReloadingButtonObject = null; //刷新按钮 + MyTeamButtonObject = null; //我的队伍按钮 + LeftButtonObject = null; //左按钮 + RightButtonObject = null; //右按钮 + PartyReqButtonObject = null; //申请加入攻坚队伍按钮 + PartyExitButtonObject = null; //退出攻坚队伍按钮 + PartyStartButtonObject = null; //开始攻坚按钮 + Page = 1; + + //获取汉字偏移 + function GetOffserFromLen(char, offset) { + return (char.len() * offset) + } + + function RedAntonListInfo(chunk) { + //Sout("\n\n收到包数据: %L", chunk); + local RootTab = getroottable(); + BasicsDrawTool.InitClass("AntonTownListJson"); //自动判断清空 + local JsonObj = Json_STL("AntonTownListJsonBuffer"); + RootTab.rawset("AntonTownListJson", JsonObj); + RootTab["AntonTownListJson"].Parse(chunk, 0, false); + + //清空自己的信息 + RootTab["ANTONTOWNMAINCONTROLLIST"].ListInfoMap = []; + + //获取自己的攻坚队ID + local gMyTeamId = RootTab["AntonTownListJson"].Get("MyTeamId"); + if (gMyTeamId) RootTab["ANTONTOWNMAINCONTROLLIST"].MyTeamId = gMyTeamId; + + //获取自己是否为攻坚队队长 + local gMyCaptain = RootTab["AntonTownListJson"].Get("MyCaptain"); + if (gMyCaptain) RootTab["ANTONTOWNMAINCONTROLLIST"].MyCaptainControl = gMyCaptain; + + RootTab["ANTONTOWNMAINCONTROLLIST"].ListCount = RootTab["AntonTownListJson"].Get("ListCount").tointeger(); + //写入小队成员信息 + for (local i = 0; i < RootTab["ANTONTOWNMAINCONTROLLIST"].ListCount; i++) { + local gTeamId = RootTab["AntonTownListJson"].Get("result->" + i + "->TeamId"); //得到攻坚队伍ID + if (gTeamId == true || gTeamId == false) break; //如果读不到说明读完了 直接走 + local gTeamName = RootTab["AntonTownListJson"].Get("result->" + i + "->TeamName"); //得到攻坚队名称 + local gState = RootTab["AntonTownListJson"].Get("result->" + i + "->State"); //得到队伍状态 + local gTeamPlayerCount = RootTab["AntonTownListJson"].Get("result->" + i + "->TeamPlayerCount"); //得到队伍人数 + + local ListTab = { + TeamId = gTeamId, + TeamName = gTeamName, + State = gState, + TeamPlayerCount = gTeamPlayerCount, + } + RootTab["ANTONTOWNMAINCONTROLLIST"].ListInfoMap.append(ListTab); //ListTabInfoTable丢进数组 + } + } + + constructor() { + ListUiMap = []; + ListInfoMap = []; + ListUiMap.resize(10); + Pack_Control.rawset(1008, RedAntonListInfo); + Pack_Control.rawset(1010, RedAntonListInfo); + } + + //功能按钮 + function FuncButtonC(obj, YposOffset, AniIndex) { + local FuncThis = null; + if (FuncThis == null) { + FuncThis = AntonButtonPro(obj, "" + MyTeamId + FuncThis + "Func", X + 360, Y - 32 + YposOffset, "common/anton/funcbutton.ani", 100, 21, AniIndex); + FuncThis.SetRectEnble(true, "" + MyTeamId + FuncThis + "Func", X + 360, Y - 32 + YposOffset, "common/anton/funcbutton.ani", AniIndex + 1); + FuncThis.SetCustomClickEnble(true, "" + MyTeamId + FuncThis + "FuncSwitchButtonc", X + 360, Y - 32 + YposOffset, "common/anton/funcbutton.ani", AniIndex + 2); + } + FuncThis.Show(); + return FuncThis; + } + + //绘制背景框 + function DrawMainBackGround(obj) { + //绘制主界面 + { + T_DrawStayAni(obj, "common/anton/new/newbaseui.ani", X, Y, 0, "安图恩队伍列表界面"); + } + } + + //绘制攻坚队伍页面控制 + function DrawPartyListPageConctrl(obj) { + //绘制攻坚队伍数量 + local ListMaxPage = (ListCount / 12).tointeger() + 1; + L_Code_STL(Page.tostring() + " / " + ListMaxPage.tostring(), X + 41, Y + 293, 0xFFFFFFFF, 1); + //如果不止1页 + if (ListMaxPage > 1) { + //左按钮 + { + if (LeftButtonObject == null) { + LeftButtonObject = AntonButtonPro(obj, "AntonPartyListLeftButton", X + 17, Y + 292, "common/anton/new/newbasebutton.ani", 15, 13, 0); + LeftButtonObject.SetRectEnble(true, "AntonPartyListLeftButtonr", X + 17, Y + 292, "common/anton/new/newbasebutton.ani", 1); + LeftButtonObject.SetCustomClickEnble(true, "AntonPartyListLeftButtonc", X + 17, Y + 293, "common/anton/new/newbasebutton.ani", 2); + } + LeftButtonObject.Show(); + if (LeftButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (Page > 1) --Page; + local GetAntonTeamList = Json_STL("GetAntonTeamList"); + GetAntonTeamList.Put("op", 1007); + GetAntonTeamList.Put("Page", Page); + local str = GetAntonTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetAntonTeamList.Delete(); + } + } + + //右按钮 + { + if (RightButtonObject == null) { + RightButtonObject = AntonButtonPro(obj, "AntonPartyListRightButton", X + 75, Y + 292, "common/anton/new/newbasebutton.ani", 15, 13, 3); + RightButtonObject.SetRectEnble(true, "AntonPartyListRightButtonr", X + 75, Y + 292, "common/anton/new/newbasebutton.ani", 4); + RightButtonObject.SetCustomClickEnble(true, "AntonPartyListRightButtonc", X + 75, Y + 293, "common/anton/new/newbasebutton.ani", 5); + } + RightButtonObject.Show(); + if (RightButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (Page < ListMaxPage) ++Page; + local GetAntonTeamList = Json_STL("GetAntonTeamList"); + GetAntonTeamList.Put("op", 1007); + GetAntonTeamList.Put("Page", Page); + local str = GetAntonTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetAntonTeamList.Delete(); + } + } + } + } + + //绘制攻坚队列表信息 + function DrawPartyListInfo(obj) { + //已经开始的 0xFF676665 灰色 + //可以申请的 0xFFddddea 珍珠白 + //可以申请的 0xFF4990aa 定义黄 + + local Min = 0 + (12 * (Page - 1)); + local Max = 12 * Page; + for (local i = Min; i < ListCount % Max; ++i) { + T_DrawStayAni(obj, "common/anton/new/newbaseui.ani", X + 15, Y + 61 + (19 * i), 1, "安图恩队伍列表底框" + i); + + //阶段 + local stage = 5; + if (ListInfoMap[i].State >= 1 && ListInfoMap[i].State <= 3) stage = 6; + if (ListInfoMap[i].State >= 4 && ListInfoMap[i].State <= 5) stage = 7; + if (ListInfoMap[i].State >= 6) stage = 8; + + T_DrawStayAni(obj, "common/anton/new/newbaseui.ani", X + 18, Y + 62 + (19 * i), stage, "安图恩队伍列表底框" + stage); + + local Color = null; + if (ListInfoMap[i].State != 3) { + Color = 0xFF4990aa; + } else { + Color = 0xFF676665; + } + + //绘制攻坚队名称 + local TeamNameStr = ListInfoMap[i].TeamName; + + L_Code_STL(TeamNameStr, X + 60, Y + 64 + (19 * i), Color, 1); + + //绘制攻坚队人数 + local PlayerCountStr = ListInfoMap[i].TeamPlayerCount + "/20"; + L_Code_STL(PlayerCountStr, X + 205, Y + 64 + (19 * i), Color, 1); + + ListUiMap[i] = AntonButtonPro(obj, "AntonPartyListSwitchButton" + TeamNameStr, X + 15, Y + 61 + (19 * i), "common/anton/new/newnull.ani", 255, 15, 0); + ListUiMap[i].SetRectEnble(true, "AntonPartyListSwitchButtonr" + TeamNameStr, X + 15, Y + 61 + (19 * i), "common/anton/new/newbaseui.ani", 3); + ListUiMap[i].Show(); + + if (ListUiMap[i].isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + NowSelectTeam = i; + + local GetAntonTeamInfo = Json_STL("GetAntonTeamInfo"); + GetAntonTeamInfo.Put("op", 1011); + GetAntonTeamInfo.Put("TeamId", ListInfoMap[i].TeamId); + local str = GetAntonTeamInfo.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetAntonTeamInfo.Delete(); + } + + //当前选择队伍不为空 并且等于当前的i + if (NowSelectTeam != null && NowSelectTeam == i) { + local Ani = T_DrawStayAni(obj, "common/anton/new/newbaseui.ani", X + 15, Y + 61 + (19 * i), 2, "安图恩队伍列表界面当前选中"); + } + } + } + + //绘制攻坚队列表功能按钮 + function DrawPartyListFuncButton(obj) { + //刷新攻坚队 + { + if (ReloadingButtonObject == null) { + ReloadingButtonObject = AntonButtonPro(obj, "AntonPartyListReloadingButton", X + 96, Y + 291, "common/anton/new/newbasebutton.ani", 46, 17, 7); + ReloadingButtonObject.SetRectEnble(true, "AntonPartyListReloadingButtonr", X + 96, Y + 291, "common/anton/new/newbasebutton.ani", 8); + ReloadingButtonObject.SetCustomClickEnble(true, "AntonPartyListReloadingButtonc", X + 96, Y + 291, "common/anton/new/newbasebutton.ani", 9); + } + ReloadingButtonObject.Show(); + if (ReloadingButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + local GetAntonTeamList = Json_STL("GetAntonTeamList"); + GetAntonTeamList.Put("op", 1007); + GetAntonTeamList.Put("Page", Page); + local str = GetAntonTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetAntonTeamList.Delete(); + } + } + + //我的攻坚队 + { + if (MyTeamId == -1) { + T_DrawStayAni(obj, "common/anton/new/newbasebutton.ani", X + 96 + 48 + 3, Y + 291, 10, "安图恩队伍列表我的攻坚队不可用"); + } else { + if (MyTeamButtonObject == null) { + MyTeamButtonObject = AntonButtonPro(obj, "AntonPartyListMyTeamButton", X + 96 + 48 + 3, Y + 291, "common/anton/new/newbasebutton.ani", 97, 23, 11); + MyTeamButtonObject.SetRectEnble(true, "AntonPartyListMyTeamButtonr", X + 96 + 48 + 3, Y + 291, "common/anton/new/newbasebutton.ani", 12); + MyTeamButtonObject.SetCustomClickEnble(true, "AntonPartyListMyTeamButtonc", X + 96 + 48 + 3, Y + 291, "common/anton/new/newbasebutton.ani", 13); + } + MyTeamButtonObject.Show(); + if (MyTeamButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + local GetAntonTeamList = Json_STL("GetAntonTeamList"); + GetAntonTeamList.Put("op", 1011); + local str = GetAntonTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetAntonTeamList.Delete(); + NowSelectTeam = -1; + } + } + } + } + + //绘制攻坚队请求按钮 + function DrawPartyReqButton(obj) { + if (MyTeamId == -1) { + //申请加入 + { + if (PartyReqButtonObject == null) { + PartyReqButtonObject = AntonButtonPro(obj, "AntonPartyListReloadingButton", X + 636, Y + 500, "common/anton/new/newbasebutton.ani", 70, 17, 14); + PartyReqButtonObject.SetRectEnble(true, "AntonPartyListReloadingButtonr", X + 636, Y + 500, "common/anton/new/newbasebutton.ani", 15); + PartyReqButtonObject.SetCustomClickEnble(true, "AntonPartyListReloadingButtonc", X + 636, Y + 500, "common/anton/new/newbasebutton.ani", 16); + } + PartyReqButtonObject.Show(); + if (PartyReqButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON4"); + local AntonJoinPartyReq = Json_STL("AntonJoinPartyReq"); + AntonJoinPartyReq.Put("op", 1003); + AntonJoinPartyReq.Put("TeamId", ListInfoMap[NowSelectTeam].TeamId); + local str = AntonJoinPartyReq.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonJoinPartyReq.Delete(); + } + } + } else { + //退出攻坚队 + { + if (PartyExitButtonObject == null) { + PartyExitButtonObject = AntonButtonPro(obj, "AntonPartyListReloadingButton", X + 636, Y + 500, "common/anton/new/newbasebutton.ani", 70, 17, 17); + PartyExitButtonObject.SetRectEnble(true, "AntonPartyListReloadingButtonr", X + 636, Y + 500, "common/anton/new/newbasebutton.ani", 18); + PartyExitButtonObject.SetCustomClickEnble(true, "AntonPartyListReloadingButtonc", X + 636, Y + 500, "common/anton/new/newbasebutton.ani", 19); + } + PartyExitButtonObject.Show(); + if (PartyExitButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON4"); + local AntonExitPartyReq = Json_STL("AntonExitPartyReq"); + AntonExitPartyReq.Put("op", 1005); + local str = AntonExitPartyReq.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonExitPartyReq.Delete(); + NowSelectTeam = null; //关闭队伍详细信息显示 + MyTeamId = -1; //清空自己的队伍信息 + + //清除正在攻坚的信息 + local RootTab = getroottable(); + RootTab.rawdelete("ANTONDUNGEONINFOCONTROL"); + } + } + //开始攻坚 + { + local RootTab = getroottable(); + //如果自己是攻坚队队长 并且 攻坚状态为未开启 + if (MyCaptainControl == 1 && RootTab.rawin("ANTONDUNGEONINFOCONTROL") && (RootTab["ANTONDUNGEONINFOCONTROL"].State == -1 || RootTab["ANTONDUNGEONINFOCONTROL"].State == 2)) { + if (PartyStartButtonObject == null) { + PartyStartButtonObject = AntonButtonPro(obj, "AntonPartyListReloadingButton", X + 536, Y + 500, "common/anton/new/newbasebutton.ani", 70, 17, 29); + PartyStartButtonObject.SetRectEnble(true, "AntonPartyListReloadingButtonr", X + 536, Y + 500, "common/anton/new/newbasebutton.ani", 30); + PartyStartButtonObject.SetCustomClickEnble(true, "AntonPartyListReloadingButtonc", X + 536, Y + 500, "common/anton/new/newbasebutton.ani", 31); + } + PartyStartButtonObject.Show(); + if (PartyStartButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON4"); + local AntonPartyStart = Json_STL("AntonPartyStart"); + local op = 1041; + //默认一阶段 如果是二阶段则发1047包二阶段开始 + if (RootTab["ANTONDUNGEONINFOCONTROL"].State == 2) op = 1047; + AntonPartyStart.Put("op", op); + local str = AntonPartyStart.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonPartyStart.Delete(); + } + } + } + } + } + + function Show(obj) { + //绘制背景框 + DrawMainBackGround(obj); + + //如果没有攻坚队信息 则返回 + if (!ListCount || ListCount <= 0) return; + + //绘制攻坚队伍页面控制 + DrawPartyListPageConctrl(obj); + + //绘制攻坚队列表信息 + DrawPartyListInfo(obj); + + //绘制攻坚队功能按钮 + DrawPartyListFuncButton(obj); + + //绘制攻坚队请求按钮 + DrawPartyReqButton(obj); + } + + function Run(obj) { + //绘制类 + Show(obj); + } + +} + +local RootTab = getroottable(); +RootTab.rawdelete("ANTONTOWNMAINCONTROLLIST"); + +function AntonTownMainControl_PartyList(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("ANTONTOWNMAINCONTROLLIST") == false) { + local ANTONTOWNMAINCONTROLLISTOBJ = AntonTownMainControl_PartyList_C(); + RootTab.rawset("ANTONTOWNMAINCONTROLLIST", ANTONTOWNMAINCONTROLLISTOBJ); + } +} \ No newline at end of file diff --git a/Plugins/Anton/antontownmainparty_req.nut b/Plugins/Anton/antontownmainparty_req.nut new file mode 100644 index 0000000..240a17b --- /dev/null +++ b/Plugins/Anton/antontownmainparty_req.nut @@ -0,0 +1,233 @@ +/* +文件名:antontownmainparty_req.nut +路径:Plugins/Anton/antontownmainparty_req.nut +创建日期:2022-09-04 20:11 +文件用途:城镇中打开安图恩攻坚队面板攻坚队申请部分 +*/ + + +class AntonTownMainControl_PartyReq_C extends BasicsDrawTool { + X = 57; + Y = 385; + ReqList = null; + + Page = 1; + NowSelect = 0; + + + LeftButtonObject = null; //左按钮 + RightButtonObject = null; //右按钮 + + ClossButtonObj = null; + AllowJoinButtonObj = null; + RejectJoinButtonObj = null; + + + function AntonPartyReqPack(chunk) { + //print(chunk); + local RootTab = getroottable(); + BasicsDrawTool.InitClass("AntonPartyReqJson"); //自动判断清空 + local JsonObj = Json_STL("AntonPartyReqJson"); + RootTab.rawset("AntonPartyReqJson", JsonObj); + RootTab["AntonPartyReqJson"].Parse(chunk, 0, false); + + + local TabBuffer = { + UID = RootTab["AntonPartyReqJson"].Get("Charac->UID"), + CID = RootTab["AntonPartyReqJson"].Get("Charac->CID"), + CaptainBool = RootTab["AntonPartyReqJson"].Get("Charac->CaptainBool"), + PartyCaptain = RootTab["AntonPartyReqJson"].Get("Charac->PartyCaptain"), + PlayerSession = RootTab["AntonPartyReqJson"].Get("Charac->PlayerSession"), + PartyID = RootTab["AntonPartyReqJson"].Get("Charac->PartyID"), + PlayerLevel = RootTab["AntonPartyReqJson"].Get("Charac->PlayerLevel"), + PlayerName = RootTab["AntonPartyReqJson"].Get("Charac->PlayerName"), + PlayerJob = RootTab["AntonPartyReqJson"].Get("Charac->PlayerJob"), + PlayerJobEx = RootTab["AntonPartyReqJson"].Get("Charac->PlayerJobEx"), + PlayerGrowTypeJob = RootTab["AntonPartyReqJson"].Get("Charac->PlayerGrowTypeJob"), + isPrepare = RootTab["AntonPartyReqJson"].Get("Charac->isPrepare"), + UiButton = null, + } + + RootTab["ANTONTOWNMAINCONTROLREQ"].ReqList.append(TabBuffer); + } + + constructor() { + ReqList = []; + Pack_Control.rawset(1004, AntonPartyReqPack); + } + + //获取汉字偏移 + function GetOffserFromLen(char, offset) { + return (char.len() * offset) + } + + //绘制申请人具体信息 + function DrawReqPlayerInfo(obj) { + //材料准备情况 + T_DrawStayAni(obj, "common/anton/material.ani", X + 157, Y - 1, ReqList[NowSelect].isPrepare.tointeger(), "安图恩队伍申请材料准备情况" + ReqList[NowSelect].isPrepare); + //头像 + T_DrawStayAni(obj, "common/anton/face/" + ReqList[NowSelect].PlayerJob + "/" + (ReqList[NowSelect].PlayerJobEx % 16) + ".ani", X, Y, 0, "安图恩队伍申请头像编号" + ReqList[NowSelect].PlayerName); + //绘制等级 + L_Code_STL("Lv." + ReqList[NowSelect].PlayerLevel, X + 40, Y + 17, 0xFF29708a, 1); + //绘制名字 + L_Code_STL(ReqList[NowSelect].PlayerName, X + 40, Y - 1, 0xFF29708a, 1); + //绘制职业名 + L_Code_STL(ReqList[NowSelect].PlayerGrowTypeJob, X + 65 + GetOffserFromLen(ReqList[NowSelect].PlayerGrowTypeJob.tostring(), 3), Y + 17, 0xFF29708a, 1); + //绘制信息 + L_Code_STL("", X + 200, Y + 75, 0xFF29708a, 1); + } + + //绘制申请人列表 + function DrawReqPlayerList(obj) { + local Min = 0 + (5 * (Page - 1)); + local Max = 5 * Page; + for (local i = Min; i < ReqList.len() % Max; ++i) { + T_DrawStayAni(obj, "common/anton/new/newbaseui.ani", X - 5, Y + 53 + (19 * i), 1, "安图恩队伍申请列表底框" + i); + //绘制等级 + L_Code_STL("Lv." + ReqList[i].PlayerLevel, X + 3, Y + 56 + (19 * i), 0xFF29708a, 1); + //绘制名字 + L_Code_STL(ReqList[i].PlayerName, X + 57, Y + 56 + (19 * i), 0xFF29708a, 1); + //材料准备情况 + T_DrawStayAni(obj, "common/anton/material.ani", X + 160, Y + 56 + (19 * i), ReqList[i].isPrepare.tointeger(), "安图恩队伍申请材料准备情况" + ReqList[NowSelect].isPrepare); + + ReqList[i].UiButton = AntonButtonPro(obj, "AntonPartyReqListSwitchButton" + ReqList[i].PlayerName, X - 5, Y + 53 + (19 * i), "common/anton/new/newnull.ani", 255, 15, 0); + ReqList[i].UiButton.SetRectEnble(true, "AntonPartyReqListSwitchButtonr" + ReqList[i].PlayerName, X - 5, Y + 53 + (19 * i), "common/anton/new/newbaseui.ani", 3); + ReqList[i].UiButton.Show(); + + if (ReqList[i].UiButton.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + NowSelect = i; + } + } + T_DrawStayAni(obj, "common/anton/new/newbaseui.ani", X - 5, Y + 53 + (19 * NowSelect), 2, "安图恩队伍申请列表界面当前选中"); + } + + //绘制申请人页面控制 + function DrawReqPlayerListPageConctrl(obj) { + //绘制申请人页面数量 + local ListMaxPage = (ReqList.len() / 5).tointeger() + 1; + L_Code_STL(Page.tostring() + " / " + ListMaxPage.tostring(), X + 21, Y + 155, 0xFFFFFFFF, 1); + + //如果申请人列表不止1页 + if (ListMaxPage > 1) { + //左按钮 + { + if (LeftButtonObject == null) { + LeftButtonObject = AntonButtonPro(obj, "AntonPartyReqListLeftButton", X - 3, Y + 154, "common/anton/new/newbasebutton.ani", 15, 13, 0); + LeftButtonObject.SetRectEnble(true, "AntonPartyReqListLeftButtonr", X - 3, Y + 154, "common/anton/new/newbasebutton.ani", 1); + LeftButtonObject.SetCustomClickEnble(true, "AntonPartyReqListLeftButtonc", X - 3, Y + 155, "common/anton/new/newbasebutton.ani", 2); + } + LeftButtonObject.Show(); + if (LeftButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (Page > 1) --Page; + } + } + + //右按钮 + { + if (RightButtonObject == null) { + RightButtonObject = AntonButtonPro(obj, "AntonPartyReqListRightButton", X + 55, Y + 154, "common/anton/new/newbasebutton.ani", 15, 13, 3); + RightButtonObject.SetRectEnble(true, "AntonPartyReqListRightButtonr", X + 55, Y + 154, "common/anton/new/newbasebutton.ani", 4); + RightButtonObject.SetCustomClickEnble(true, "AntonPartyReqListRightButtonc", X + 55, Y + 155, "common/anton/new/newbasebutton.ani", 5); + } + RightButtonObject.Show(); + if (RightButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (Page < ListMaxPage) ++Page; + } + } + } + } + + //绘制申请人控制按钮 + function DrawReqPlayerConctrlButton(obj, Type) { + if (Type == 0) { + T_DrawStayAni(obj, "common/anton/new/newbasebutton.ani", X + 138, Y + 153, 20, "安图恩队伍申请同意不可用"); + T_DrawStayAni(obj, "common/anton/new/newbasebutton.ani", X + 138 + 43, Y + 153, 24, "安图恩队伍申请拒绝不可用"); + } else { + //同意按钮 + { + if (AllowJoinButtonObj == null) { + AllowJoinButtonObj = AntonButtonPro(obj, "AntonAllowJoinButton", X + 138, Y + 153, "common/anton/new/newbasebutton.ani", 40, 17, 21); + AllowJoinButtonObj.SetRectEnble(true, "AntonAllowJoinButtonr", X + 138, Y + 153, "common/anton/new/newbasebutton.ani", 22); + AllowJoinButtonObj.SetCustomClickEnble(true, "AntonAllowJoinButtonc", X + 138, Y + 153, "common/anton/new/newbasebutton.ani", 23); + } + AllowJoinButtonObj.Show(); + if (AllowJoinButtonObj.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + local TabBuffer = { + UID = ReqList[NowSelect].UID, + CID = ReqList[NowSelect].CID, + CaptainBool = ReqList[NowSelect].CaptainBool, + PartyCaptain = ReqList[NowSelect].PartyCaptain, + PlayerSession = ReqList[NowSelect].PlayerSession, + PartyID = ReqList[NowSelect].PartyID, + PlayerLevel = ReqList[NowSelect].PlayerLevel, + PlayerJob = ReqList[NowSelect].PlayerJob, + PlayerJobEx = ReqList[NowSelect].PlayerJobEx, + IsPrepare = ReqList[NowSelect].isPrepare, + } + local TabBufferB = { + Charac = TabBuffer, + op = 1013, + } + local ReqStr = Json.Encode(TabBufferB); + L_sq_SendPackType(130); + L_sq_SendPackWChar(ReqStr); + L_sq_SendPack(); + ReqList.remove(NowSelect); + } + } + + //拒绝按钮 + { + if (RejectJoinButtonObj == null) { + RejectJoinButtonObj = AntonButtonPro(obj, "AntonRejectJoinButton", X + 138 + 43, Y + 153, "common/anton/new/newbasebutton.ani", 40, 17, 25); + RejectJoinButtonObj.SetRectEnble(true, "AntonRejectJoinButtonr", X + 138 + 43, Y + 153, "common/anton/new/newbasebutton.ani", 26); + RejectJoinButtonObj.SetCustomClickEnble(true, "AntonRejectJoinButtonc", X + 138 + 43, Y + 153, "common/anton/new/newbasebutton.ani", 27); + } + RejectJoinButtonObj.Show(); + if (RejectJoinButtonObj.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + ReqList.remove(NowSelect); + } + } + } + } + + function Show(obj) { + //绘制申请人具体信息 + DrawReqPlayerInfo(obj); + + //绘制申请人列表 + DrawReqPlayerList(obj); + + //绘制申请人页面控制 + DrawReqPlayerListPageConctrl(obj); + + //绘制申请人控制按钮 + DrawReqPlayerConctrlButton(obj, 1); + } + + function Run(obj) { + //如果不是自己的界面打开 + local RootTab = getroottable(); + if(RootTab["ANTONTEAMMAINBUTTON"].State == 0)return; + local ArrSize = ReqList.len(); + if (ArrSize > 0) { + Show(obj); + } else DrawReqPlayerConctrlButton(obj, 0); + } +} + +local RootTab = getroottable(); +RootTab.rawdelete("ANTONTOWNMAINCONTROLREQ"); + +function AntonTownMainControl_PartyReq(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("ANTONTOWNMAINCONTROLREQ") == false) { + local ANTONTOWNMAINCONTROLREQOBJ = AntonTownMainControl_PartyReq_C(); + RootTab.rawset("ANTONTOWNMAINCONTROLREQ", ANTONTOWNMAINCONTROLREQOBJ); + } +} diff --git a/Plugins/Anton/antontownmainparty_user.nut b/Plugins/Anton/antontownmainparty_user.nut new file mode 100644 index 0000000..6993c7f --- /dev/null +++ b/Plugins/Anton/antontownmainparty_user.nut @@ -0,0 +1,303 @@ +/* +文件名:antontownmainparty_user.nut +路径:Plugins/Anton/antontownmainparty_user.nut +创建日期:2022-09-04 20:12 +文件用途:城镇中打开安图恩攻坚队面板攻坚队玩家部分 +*/ + +class AntonUserControl_C extends BasicsDrawTool +{ + CaptainControl = null; //攻坚队长主控 + + PartyID = null; //队伍ID + PlayerLevel = null; //玩家等级 + PlayerName = null; //玩家名字 + PlayerJob = null; //玩家基础职业 + PlayerJobEx = null; //玩家转职职业 + PlayerGrowTypeJob = null; //玩家转职职业 + PlayerSession = null; //玩家世界编号 + PartyCaptain = null; //玩家是否小队队长 + CaptainBool = null; //是否攻坚队队长 + Material = null; //是否拥有材料 + CID = null; //玩家CID + + CheakPlayerInfoFunc = null; + + FuncButtonSwitch = false; //功能界面是否打开 + MyName = null; + ButtonObj = null; + X = 0; + Y = 0; + + KickoutPlayerButtonObj = null; //踢出玩家按钮 + CheckPlayerInfoButtonObj = null; //查看信息按钮 + PartyFuncButtonObj = null; //组队按钮 + TradingPlayerButtonObj = null; //交易按钮 + + //获取汉字偏移 + function GetOffserFromLen(char, offset) + { + return (char.len() * offset) + } + + constructor(gName, gX, gY, gCaptainControl) + { + MyName = gName; + X = gX; + Y = gY; + print("AntonUserControl_C ClassObject Succes"); + CaptainControl = gCaptainControl; + } + + //设置Player信息 + function SetPlayerInfo(InfoTable) + { + PartyID = InfoTable.PartyID; //队伍ID + PlayerLevel = InfoTable.PlayerLevel; //玩家等级 + PlayerName = InfoTable.PlayerName; //玩家名字 + PlayerJob = InfoTable.PlayerJob; //玩家基础职业 + PlayerJobEx = InfoTable.PlayerJobEx; //玩家转职职业 + PlayerGrowTypeJob = InfoTable.PlayerGrowTypeJob; //玩家转职职业 + PlayerSession = InfoTable.PlayerSession; //玩家世界编号 + PartyCaptain = InfoTable.PartyCaptain; //玩家是否小队队长 + CaptainBool = InfoTable.CaptainBool; //是否攻坚队队长 + Material = InfoTable.Material; //是否拥有材料 + CID = InfoTable.CID; //玩家CID + } + + function FuncButtonC(obj, YposOffset, AniIndex) + { + local FuncThis = null; + if(FuncThis == null) + { + FuncThis = AntonButtonPro(obj, MyName + FuncThis + "Func", AntonTownControl_C.X + X - 110, AntonTownControl_C.Y + Y - 1 + YposOffset, "common/anton/funcbutton.ani", 100, 21, AniIndex); + FuncThis.SetRectEnble(true, MyName + FuncThis + "Func", AntonTownControl_C.X + X - 110, AntonTownControl_C.Y + Y - 1 + YposOffset, "common/anton/funcbutton.ani", AniIndex + 1); + FuncThis.SetCustomClickEnble(true, FuncThis + "FuncSwitchButtonc", AntonTownControl_C.X + X - 110, AntonTownControl_C.Y + Y - 1 + YposOffset, "common/anton/funcbutton.ani", AniIndex + 2); + } + FuncThis.Show(); + return FuncThis; + } + + //绘制功能按键 + function DrawFucButton(obj) + { + if(FuncButtonSwitch) //功能函数开关 + { + local Ypos = 0; //初始偏移 + + { //邀请组队 + if(PartyID == 0) + { + local CheakPlayer = FuncButtonC(obj, Ypos, 12); + if(CheakPlayer.isLBActive()) + { + L_sq_SendPackType(10); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(0); + L_sq_SendPackDWord(1); + L_sq_SendPackWord(0); + L_sq_SendPack(); + } + Ypos += 21; + } + } + + + { //查看信息 + local CheakPlayer = FuncButtonC(obj, Ypos, 0); + if(CheakPlayer.isLBActive()) + { + L_sq_SendPackType(8); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(3); + L_sq_SendPack(); + } + Ypos += 21; + } + + { //交易 + local TradingPlayer = FuncButtonC(obj, Ypos, 6); + if(TradingPlayer.isLBActive()) + { + L_sq_SendPackType(10); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(1); + L_sq_SendPackDWord(22053); + L_sq_SendPack(); + } + Ypos += 21; + } + + + } + } + + //绘制主Ani + function DrawMainAni(obj) + { + if(ButtonObj == null) + { + ButtonObj = AntonButtonPro(obj, MyName, AntonTownControl_C.X + X, AntonTownControl_C.Y + Y, "common/anton/user.ani", 329, 17, 0); + ButtonObj.SetRectEnble(true, MyName + "SwitchButtonr", AntonTownControl_C.X + X - 8, AntonTownControl_C.Y + Y - 8, "common/anton/user.ani", 2); + } + ButtonObj.Show(); + + //绘制队伍 + T_DrawStayAni(obj, "common/anton/partytype.ani", AntonTownControl_C.X + X + 6, AntonTownControl_C.Y + Y + 2, PartyID + 1, "安图恩队伍编号" + PartyID, 1.0); + //绘制材料准备情况 + T_DrawStayAni(obj, "common/anton/material.ani", AntonTownControl_C.X + X + 272, AntonTownControl_C.Y + Y + 2, Material.tointeger(), "安图恩材料准备情况" + Material, 1.0); + } + + //绘制头像 + function DrawFaceAni(obj) + { + T_DrawStayAni(obj, "common/anton/face/" + PlayerJob + "/" + (PlayerJobEx % 16) + ".ani", X, Y, 0, "安图恩头像编号" + PlayerName); + //如果是攻坚队长主控 + if(CaptainControl && !CaptainBool) + { + KickoutPlayerButtonObj = AntonButtonPro(obj, "AntonPartyKickoutButton" + PlayerName.tostring(), X - 9, Y - 10, "common/anton/new/newnull.ani", 38, 39, 0); + KickoutPlayerButtonObj.SetRectEnble(true, "AntonPartyKickoutButtonr" + PlayerName.tostring(), X - 9, Y - 10, "common/anton/new/newfunc.ani", 0); + KickoutPlayerButtonObj.Show(); + + if(KickoutPlayerButtonObj.isLBActive()) + { + obj.sq_PlaySound("CLICK_BUTTON1"); + local AntonKickoutPartyPlayer = Json_STL("AntonKickoutPartyPlayer"); + AntonKickoutPartyPlayer.Put("op", 1015); + AntonKickoutPartyPlayer.Put("TCID", CID); + local str = AntonKickoutPartyPlayer.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + AntonKickoutPartyPlayer.Delete(); + } + } + } + + //绘制名字 + function DrawPlayerName(obj) + { + L_Code_STL(PlayerName.tostring(), X + 40, Y - 1, 0xFF4990aa, 1); + } + + //绘制等级 + function DrawPlayerLevel(obj) + { + L_Code_STL("Lv." + PlayerLevel, X + 40, Y + 17, 0xFF29708a, 1); + } + + //绘制职业名字 + function DrawPlayerGrowTypeName(obj) + { + L_Code_STL(PlayerGrowTypeJob, X + 65 + GetOffserFromLen(PlayerLevel.tostring(), 3), Y + 17, 0xFF29708a, 1); + } + + //绘制队伍图标 + function DrawPlayerPartyType(obj) + { + if(CaptainBool == true) + { + T_DrawStayAni(obj, "common/anton/partytype.ani", X + 133, Y - 1, 0, "安图恩队伍编号队长"); + } + else T_DrawStayAni(obj, "common/anton/partytype.ani", X + 133, Y - 1, PartyID + 1, "安图恩队伍编号" + PartyID); + } + + //绘制材料准备情况 + function DrawPlayerMaterial(obj) + { + T_DrawStayAni(obj, "common/anton/material.ani", X + 157, Y - 1, Material.tointeger(), "安图恩材料准备情况" + Material.tostring()); + } + + //绘制交互功能按钮 + function DrawPlayerFunc(obj) + { + //绘制查看信息按钮 + { + if(!CheckPlayerInfoButtonObj) + { + CheckPlayerInfoButtonObj = AntonButtonPro(obj, "AntonCheckPlayerInfoButton", X + 153, Y + 12, "common/anton/new/newfunc.ani", 16, 16, 1); + CheckPlayerInfoButtonObj.SetRectEnble(true, "AntonCheckPlayerInfoButtonr", X + 153, Y + 12, "common/anton/new/newfunc.ani", 2); + CheckPlayerInfoButtonObj.SetCustomClickEnble(true, "AntonCheckPlayerInfoButtonr", X + 153, Y + 13, "common/anton/new/newfunc.ani", 2); + } + CheckPlayerInfoButtonObj.Show(); + if(CheckPlayerInfoButtonObj.isLBActive()) + { + obj.sq_PlaySound("CLICK_BUTTON1"); + L_sq_SendPackType(8); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(3); + L_sq_SendPack(); + } + } + + //绘制交易按钮 + { + if(!TradingPlayerButtonObj) + { + TradingPlayerButtonObj = AntonButtonPro(obj, "AntonTradingPlayerButton", X + 171, Y + 12, "common/anton/new/newfunc.ani", 16, 16, 3); + TradingPlayerButtonObj.SetRectEnble(true, "AntonTradingPlayerButtonr", X + 171, Y + 12, "common/anton/new/newfunc.ani", 4); + TradingPlayerButtonObj.SetCustomClickEnble(true, "AntonTradingPlayerButtonr", X + 171, Y + 13, "common/anton/new/newfunc.ani", 4); + } + TradingPlayerButtonObj.Show(); + if(TradingPlayerButtonObj.isLBActive()) + { + obj.sq_PlaySound("CLICK_BUTTON1"); + L_sq_SendPackType(10); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(1); + L_sq_SendPackDWord(22053); + L_sq_SendPack(); + } + } + + //绘制组队按钮 + { + if(!PartyFuncButtonObj) + { + PartyFuncButtonObj = AntonButtonPro(obj, "AntonPartyFuncButton", X + 189, Y + 12, "common/anton/new/newfunc.ani", 16, 16, 5); + PartyFuncButtonObj.SetRectEnble(true, "AntonPartyFuncButtonr", X + 189, Y + 12, "common/anton/new/newfunc.ani", 6); + PartyFuncButtonObj.SetCustomClickEnble(true, "AntonPartyFuncButtonr", X + 189, Y + 13, "common/anton/new/newfunc.ani", 6); + } + PartyFuncButtonObj.Show(); + if(PartyFuncButtonObj.isLBActive()) + { + obj.sq_PlaySound("CLICK_BUTTON1"); + L_sq_SendPackType(10); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(0); + L_sq_SendPackDWord(1); + L_sq_SendPackWord(0); + L_sq_SendPack(); + } + } + } + + function Show(obj) + { + //绘制头像 + DrawFaceAni(obj); + + //绘制名字 + DrawPlayerName(obj); + + //绘制等级 + DrawPlayerLevel(obj); + + //绘制职业名字 + DrawPlayerGrowTypeName(obj); + + //绘制队伍图标 + DrawPlayerPartyType(obj); + + //绘制材料准备情况 + DrawPlayerMaterial(obj); + + //绘制交互功能按钮 + DrawPlayerFunc(obj); + } + + function Run(obj) + { + Show(obj); + } +} \ No newline at end of file diff --git a/Plugins/AradPass/AradPass.nut b/Plugins/AradPass/AradPass.nut new file mode 100644 index 0000000..fd6e01e --- /dev/null +++ b/Plugins/AradPass/AradPass.nut @@ -0,0 +1,969 @@ +/* +文件名:AradPass.nut +路径:Plugins/AradPass/AradPass.nut +创建日期:2023-10-18 08:38 +文件用途: +*/ +class AradPassC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 124; + Y = 34; + + Page = 0; + + Title = null; + QuestTitle = null; + QuestPage = 0; + + BaseInfo = null; + + Mobj = null; + + + + //每日任务数组 + DailyTasks = null; + //重复任务数组 + RepeatingTasks = null; + //赛季任务数组 + SeasonTasks = null; + + //标签提示 + TabSuccessTips = null; + + //等级按钮 + LevelButton = null; + LevelPage = 0; + + //战令等级 + MyPassLevel = 2; + + //ItemInfo + ItemInfoObject = null; + ItemInfoDrawS = null; + + RewardInfoObject = null; + RewardInfoEffTimer = null; + RewardSuccessTips = null; + + function GetBaseInfo() { + local T = { + op = 20059001 + } + SendPack(T); + local T2 = { + op = 20059005 + } + SendPack(T2); + } + + function GetBaseInfoCallBack(Chunk) { + // Sout("收到包 : \n %L", Chunk); + local Jso = Json.Decode(Chunk); + foreach(Value in Jso.itemInfo) { + if (Value.Name2.len() == 0) + Value.Name2 = "Yosin-Team"; + ItemInfoObject[Value.Id] <- Value; + } + } + + function GetBaseInfoCallBack2(Chunk) { + // Sout("收到包 : \n %L", Chunk); + local Jso = Json.Decode(Chunk); + BaseInfo = {}; + BaseInfo = clone(Jso); + + LevelPage = ((BaseInfo.Exp / 1000) + 1) / 10; + } + + + QuestSuccessTips = null; + + function GetPlayerQuestCallBack(Chunk) { + // Sout("收到包 : \n %L", Chunk); + local Jso = Json.Decode(Chunk); + DailyTasks = Jso.task[0]; + RepeatingTasks = Jso.task[1]; + SeasonTasks = Jso.task[2]; + + QuestSuccessTips = [0, 0, 0]; + TabSuccessTips[1] = 0; + + foreach(Pos, Value in Jso.task) { + foreach(QuestObject in Value) { + if (QuestObject.SuccessState == 0) { + if (QuestObject.NowSuccessCount >= QuestObject.MaxSuccessCount) { + QuestSuccessTips[Pos] = 1; + TabSuccessTips[1] = 1; + break; + } + } + } + } + } + + function GetPlayerReward() { + local T = { + op = 20059003 + } + SendPack(T); + } + + function GetPlayerQuest() { + local T = { + op = 20059031 + } + SendPack(T); + } + + function GetPlayerRewardCallBack(Chunk) { + // Sout("收到包 : \n %L", Chunk); + //还原奖励领取提示数组 + RewardSuccessTips = [0, 0, 0, 0, 0]; + TabSuccessTips[0] = 0; + + RewardInfoObject = {}; + local Jso = Json.Decode(Chunk); + foreach(Pos, Value in Jso.reward) { + RewardInfoObject.rawset(Pos, Value); + if ((Pos)<(BaseInfo.Exp / 1000 + 1)) { + //判断是否有未领取的道具绘制感叹号要用 + local Page = (Pos / 10); + if (RewardSuccessTips[Page] == 0) { + if (Value.isOrdinary == 0) { + RewardSuccessTips[Page] = 1; + TabSuccessTips[0] = 1; + } + if (BaseInfo.isVip) { + if (Value.isadditional == 0) { + RewardSuccessTips[Page] = 1; + TabSuccessTips[0] = 1; + } + } + } + } + + } + } + + + //发包成功 + function SendSuccessAradPass(a2, a3, a4) { + local T = { + op = 20059023, + id = a2, + count = a4, + } + SendPack(T); + } + + function RegisterQuestSu() { + L_CompleteTaskTable.rawset("AradPass", SendSuccessAradPass.bindenv(this)); + } + + + + + constructor() { + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + + //注册完成任务回调 + RegisterQuestSu(); + + ItemInfoObject = {}; + + //标签完成提示 + TabSuccessTips = [0, 0, 0]; + + Pack_Control.rawset(20059002, GetBaseInfoCallBack.bindenv(this)); + Pack_Control.rawset(20059006, GetBaseInfoCallBack2.bindenv(this)); + Pack_Control.rawset(20059004, GetPlayerRewardCallBack.bindenv(this)); + Pack_Control.rawset(20059032, GetPlayerQuestCallBack.bindenv(this)); + + GetBaseInfo(); + GetPlayerReward(); + GetPlayerQuest(); + + RewardInfoEffTimer = Clock(); + RewardSuccessTips = [0, 0, 0, 0, 0]; + } + + //绘制等级数字 + function DrawNumber(num, ...) { + num = num.tostring(); + local x = X + 38; + local y = Y + 110; + if (num.len() == 2) x = X + 28; + for (local i = 0; i< num.len(); i++) { + local n = num.slice(i, i + 1); + n = n.tointeger(); + local Img = "interface2/ui/aradpass/chn/aradpassnum.img"; + if (BaseInfo.isVip) Img = "interface2/ui/aradpass/chn/aradpassnumy.img"; + L_sq_DrawImg(Img, n, x + (i * 18), y); + } + + } + + //绘制等级数字 + function DrawSmallNumber(num, bx) { + num = num.tostring(); + local x = X + 38 + bx; + local y = Y + 250; + if (num.len() == 2) x = X + 33 + bx; + for (local i = 0; i< num.len(); i++) { + local n = num.slice(i, i + 1); + n = n.tointeger(); + local Img = "interface2/ui/aradpass/chn/aradpassnum.img"; + if (BaseInfo.isVip) Img = "interface2/ui/aradpass/chn/aradpassnumy.img"; + L_sq_DrawImg(Img, n, x + (i * 9), y, 0, sq_RGBA(255, 255, 255, 255), 0.5, 0.5); + } + } + + //绘制道具带道具信息 + function DrawItemEx(X, Y, Id, Count) { + L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X; + ItemInfoDrawS.Y <- Y; + ItemInfoDrawS.ItemId <- Id; + } + } + + //绘制道具相信信息 + ItemObject = null; + + function DrawItemInfo(obj) { + if (ItemInfoDrawS) { + if (!ItemObject) { + local ItemId = ItemInfoDrawS.ItemId; + if (ItemInfoObject.rawin(ItemId)) { + ItemObject = ItemInfoClass(ItemInfoObject[ItemId]); + } + } + ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); + } else { + ItemObject = null; + } + } + + function DrawRewardItem(obj) { + local Idx = LevelPage * 10; + for (local i = 0; i< 10; i++) { + //奖励下标 + local RealPos = Idx + i; + + if (RealPos in RewardInfoObject) { + + local RewardObject = RewardInfoObject[RealPos]; + + //普通道具 + if ("itemid" in RewardObject) { + //普通底 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 21, X + 11 + 45 + (i * 47), Y + 50 + 162 + 61); + + DrawItemEx(X + 64 + (i * 47), Y + 296, RewardObject.itemid, RewardObject.num); + + //已领取 + if (RewardObject.isOrdinary) { + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 23, X + 11 + 45 + (i * 47), Y + 50 + 162 + 61); + } + //未领取 + else if (!RewardObject.isOrdinary) { + //快达到等级 + if ((RealPos + 1) == MyPassLevel + 1) { + + } + //已达到等级 + else if ((RealPos + 1) <= MyPassLevel) { + local A = 60; + if (RewardInfoEffTimer) { + if (Clock() - RewardInfoEffTimer <= 1000) { + A = sq_GetUniformVelocity(60, 255, Clock() - RewardInfoEffTimer, 1000); + } + if (Clock() - RewardInfoEffTimer <= 2000 && Clock() - RewardInfoEffTimer > 1000) { + A = sq_GetUniformVelocity(255, 60, Clock() - RewardInfoEffTimer - 1000, 1000); + } + if (Clock() - RewardInfoEffTimer > 2000) { + RewardInfoEffTimer = Clock(); + } + } + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 29, X + 7 + 45 + (i * 47), Y + 50 + 162 + 58, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0); + L_sq_ReleaseDrawImgModel(); + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 7 + 45 + (i * 47), Y + 50 + 162 + 58, 44, 74)) { + if (Mobj.LbEvent) { + local T = { + op = 20059007, + Type = 0, + lv = RealPos + 1, + } + SendPack(T); + } + } + } + //未达到等级 + else { + //普通底Eff 未领取 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 33, X + 11 + 45 + (i * 47), Y + 50 + 162 + 61); + } + + } + } + + //是不是VIP + local IsVip = BaseInfo.isVip; + + //进阶道具 + if ("additionalItemId" in RewardObject && "additionalItemId2" in RewardObject) { + //普通底 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 26, X + 11 + 45 + (i * 47), Y + 50 + 162 + 138); + + DrawItemEx(X + 64 + (i * 47), Y + 356, RewardObject.additionalItemId, RewardObject.additionalNum); + DrawItemEx(X + 64 + (i * 47), Y + 390, RewardObject.additionalItemId2, RewardObject.additionalNum2); + + if (RewardObject.isadditional) { + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 28, X + 11 + 45 + (i * 47), Y + 50 + 162 + 138); + } else { + if (!IsVip) { + //普通底 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 32, X + 11 + 45 + (i * 47), Y + 50 + 162 + 138); + } else { + //快达到等级 + if ((RealPos + 1) == MyPassLevel + 1) { + + } + //已达到等级 + else if ((RealPos + 1) <= MyPassLevel) { + local A = 60; + if (RewardInfoEffTimer) { + if (Clock() - RewardInfoEffTimer <= 1000) { + A = sq_GetUniformVelocity(60, 255, Clock() - RewardInfoEffTimer, 1000); + } + if (Clock() - RewardInfoEffTimer <= 2000 && Clock() - RewardInfoEffTimer > 1000) { + A = sq_GetUniformVelocity(255, 60, Clock() - RewardInfoEffTimer - 1000, 1000); + } + if (Clock() - RewardInfoEffTimer > 2000) { + RewardInfoEffTimer = Clock(); + } + } + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 30, X + 7 + 45 + (i * 47), Y + 45 + 162 + 138, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0); + L_sq_ReleaseDrawImgModel(); + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 7 + 45 + (i * 47), Y + 45 + 162 + 138, 44, 74)) { + if (Mobj.LbEvent) { + local T = { + op = 20059007, + Type = 1, + lv = RealPos + 1, + } + SendPack(T); + } + } + } + //未达到等级 + else { + //普通底Eff 未领取 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 33, X + 11 + 45 + (i * 47), Y + 50 + 162 + 138); + } + } + } + + } else { + //普通底 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 25, X + 11 + 45 + (i * 47), Y + 50 + 162 + 138); + + DrawItemEx(X + 64 + (i * 47), Y + 373, RewardObject.additionalItemId, RewardObject.additionalNum); + + + if (RewardObject.isadditional) { + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 27, X + 11 + 45 + (i * 47), Y + 50 + 162 + 138); + } else { + if (!IsVip) { + //普通底 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 31, X + 11 + 45 + (i * 47), Y + 50 + 162 + 138); + } else { + //快达到等级 + if ((RealPos + 1) == MyPassLevel + 1) { + + } + //已达到等级 + else if ((RealPos + 1) <= MyPassLevel) { + local A = 60; + if (RewardInfoEffTimer) { + if (Clock() - RewardInfoEffTimer <= 1000) { + A = sq_GetUniformVelocity(60, 255, Clock() - RewardInfoEffTimer, 1000); + } + if (Clock() - RewardInfoEffTimer <= 2000 && Clock() - RewardInfoEffTimer > 1000) { + A = sq_GetUniformVelocity(255, 60, Clock() - RewardInfoEffTimer - 1000, 1000); + } + if (Clock() - RewardInfoEffTimer > 2000) { + RewardInfoEffTimer = Clock(); + } + } + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 30, X + 7 + 45 + (i * 47), Y + 45 + 162 + 138, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0); + L_sq_ReleaseDrawImgModel(); + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 7 + 45 + (i * 47), Y + 45 + 162 + 138, 44, 74)) { + if (Mobj.LbEvent) { + local T = { + op = 20059007, + Type = 1, + lv = RealPos + 1, + } + SendPack(T); + } + } + } + //未达到等级 + else { + //普通底Eff 未领取 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 33, X + 11 + 45 + (i * 47), Y + 50 + 162 + 138); + } + } + } + + } + } + } + + if (MyPassLevel >= LevelPage * 10) { + + //是不是VIP + local IsVip = BaseInfo.isVip; + + local MyExp; + local Rate; + if (MyPassLevel == LevelPage * 10) { + MyExp = (BaseInfo.Exp + 1000.0) % 10000.0; + Rate = MyExp.tofloat() / 10000.0; + } else if (MyPassLevel<(LevelPage + 1) * 10) { + MyExp = BaseInfo.Exp % 10000.0 + 1000.0; + Rate = MyExp.tofloat() / 10000.0; + } else { + Rate = 100.0; + } + local ImgIndex = 34; + if (IsVip) ImgIndex = 35; + + if (Rate <= 0) Rate = 0.01; + setClip(X + 11 + 45, Y, X + 11 + 45 + (470 * Rate).tointeger(), Y + 264 + 4); //开始裁切 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", ImgIndex, X + 11 + 45, Y + 264); + releaseClip(); //裁切结束 + + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", ImgIndex + 2, X + 11 + 34 + (470 * Rate).tointeger(), Y + 255); + L_sq_ReleaseDrawImgModel(); + + } + } + + + //绘制主界面 + function DrawMain(obj) { + if (!BaseInfo) return; + + //Item信息框一般为211的宽度 + L_sq_DrawWindow(X, Y + 10, 540, 420, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + L_sq_DrawWindow(X + 6, Y + 45, 528, 384, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + + // L_sq_DrawWindow(X + 5, Y + 28, 530, 390, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + //绘制背景框标题栏 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpassmain.img", 0, X + 1, Y); + + //构造标题栏 + if (!Title) { + Title = []; + for (local i = 0; i< 3; i++) { + local Str = "奖励"; + if (i == 1) Str = "任务"; + if (i == 2) Str = "社交"; + local ButtonBuf = LenheartTabbarsText(X, Y, Str); + if (i == 0) ButtonBuf.State = 1; + Title.append(ButtonBuf); + } + } else { + foreach(Pos, Value in Title) { + Value.SyncPos(X + 12 + (Pos * 62), Y + 27); + Value.Show(); + //如果有可领取实践 还要画上感叹号标记 + if (Value.isLBActive()) { + foreach(Pp, Vv in Title) { + if (Pp != Pos) Vv.State = 0; + Page = Pos; + } + } + + //绘制完成事件的感叹号 + if (TabSuccessTips[Pos] == 1) { + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 301, X + 58 + (Pos * 62), Y + 31, 0, sq_RGBA(255, 255, 255, 210), 0.8, 0.8); + } + } + } + + //绘制主题栏 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 0, X + 11, Y + 50); + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass_banner.img", 0, X + 11, Y + 50); + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 3, X + 547 - 252, Y + 207 - 47); + + //绘制等级与经验值 + MyPassLevel = BaseInfo.Exp / 1000 + 1; + DrawNumber(MyPassLevel); + local jystr = (BaseInfo.Exp % 1000) + " / " + 1000; + L_sq_DrawCode(jystr, X + 11 + 50 - LenheartTextClass.GetStringLength(jystr) / 2, Y + 50 + 20 + 80, sq_RGBA(179, 169, 135, 255), 0, 1); + if (BaseInfo.isVip) { + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 6, X + 11 + 22, Y + 50 + 24); + } + + //绘制战令名 + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpassl.img", 0, X + 11 + 91, Y + 50 + 20); + + //绘制时装套装名 + local szstr = BaseInfo.Apn; + L_sq_DrawCode(szstr, X + 500 - LenheartTextClass.GetStringLength(szstr) / 2, Y + 192, sq_RGBA(179, 169, 135, 255), 0, 1); + + //绘制结束时间 + L_sq_DrawCode("距离结束还有" + BaseInfo.EndTime + "天", X + 11 + 91, Y + 50 + 20 + 31, sq_RGBA(134, 120, 79, 255), 0, 1); + + //绘制激活按钮 + if (!(BaseInfo.isVip)) { + local ActivationButton = LenheartButtonText(X + 11 + 91, Y + 50 + 20 + 31 + 20, 22, "激 活"); + ActivationButton.SetFrame(null, 323); + ActivationButton.SetTextOffset(6, 1); + ActivationButton.Show(); + if (ActivationButton.isLBActive()) { + local T = { + op = 20059013 + } + SendPack(T); + } + } + + + //绘制主要奖励框 + for (local i = 0; i< 5; i++) { + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 4, X + 11 + 91 + (36 * i), Y + 31 + 124); + DrawItemEx(X + 11 + 95 + (36 * i), Y + 33 + 124, BaseInfo.showItemIds[i], 1); + } + + //绘制奖励页 + if (Page == 0) { + + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 1, X + 11, Y + 50 + 162); + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 2, X + 11, Y + 50 + 162 + 214); + + L_sq_DrawCode("区", X + 11 + 14, Y + 50 + 162 + 14, sq_RGBA(179, 169, 135, 255), 1, 1); + L_sq_DrawCode("间", X + 11 + 14, Y + 50 + 162 + 14 + 19, sq_RGBA(179, 169, 135, 255), 1, 1); + + L_sq_DrawCode("免", X + 11 + 14, Y + 50 + 162 + 14 + 19 + 47, sq_RGBA(179, 169, 135, 255), 1, 1); + L_sq_DrawCode("费", X + 11 + 14, Y + 50 + 162 + 14 + 19 + 47 + 19, sq_RGBA(179, 169, 135, 255), 1, 1); + + + L_sq_DrawCode("追", X + 11 + 14, Y + 50 + 162 + 14 + 19 + 47 + 19 + 54, sq_RGBA(179, 169, 135, 255), 1, 1); + L_sq_DrawCode("加", X + 11 + 14, Y + 50 + 162 + 14 + 19 + 47 + 19 + 54 + 19, sq_RGBA(179, 169, 135, 255), 1, 1); + + + + + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 19, X + 11, Y + 240); + + + // local SuccessButton = LenheartBaseButtonText(X + 60, Y + 215, 88, 25, "interface2/ui/aradpass/chn/aradpass.img", 15, "1 - 10"); + // local SuccessButton = LenheartTabbarsText(X + 60, Y + 215, "1 - 10", 88, 25); + // SuccessButton.SetFrame("interface2/ui/aradpass/chn/aradpass.img", 15); + // SuccessButton.SetTextOffset(30, 5); + // SuccessButton.Show(); + + + //构造等级按钮 + if (!LevelButton) { + LevelButton = []; + for (local i = 0; i< 5; i++) { + local Str = "1 - 10"; + if (i == 1) Str = "11 - 20"; + if (i == 2) Str = "21 - 30"; + if (i == 3) Str = "31 - 40"; + if (i == 4) Str = "41 - 50"; + local ButtonBuf = LenheartTabbarsText(X + 11 + 50 + (i * 93), Y + 215, Str, 88, 25); + ButtonBuf.SetFrame("interface2/ui/aradpass/chn/aradpass.img", 15); + ButtonBuf.SetTextOffset(50 - LenheartTextClass.GetStringLength(Str) / 2, 6); + if (i == 0) ButtonBuf.State = 1; + LevelButton.append(ButtonBuf); + } + } else { + foreach(Pos, Value in LevelButton) { + Value.SyncPos(X + 11 + 50 + (Pos * 93), Y + 215); + Value.Show(); + if (Pos == LevelPage) Value.State = 1; + else Value.State = 0; + //如果有可领取实践 还要画上感叹号标记 + if (Value.isLBActive()) { + LevelPage = Pos; + } + if (Value.State == 1) { + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 18, X + 11 + 50 + (Pos * 93), Y + 215); + } + + + //绘制是否可领取奖励的感叹号 + if (RewardSuccessTips[Pos] == 1) { + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 301, X + 125 + (Pos * 93), Y + 224, 0, sq_RGBA(255, 255, 255, 210), 0.8, 0.8); + } + } + } + + for (local i = 0; i< 10; i++) { + DrawSmallNumber(i + 1 + (LevelPage * 10), 124 - 91 + (i * 47)); + } + + DrawRewardItem(obj); + + + + + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 504, X + 24, Y + 438, 0, sq_RGBA(255, 255, 255, 250), 0.8, 0.8); + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 504, X + 24, Y + 460, 0, sq_RGBA(255, 255, 255, 250), 0.8, 0.8); + L_sq_DrawCode("获得的物品将发放至物品栏。", X + 44, Y + 438, sq_RGBA(179, 169, 135, 150), 1, 1); + L_sq_DrawCode("未使用的奖励道具将在本季通行券结束时删除。", X + 44, Y + 460, sq_RGBA(179, 169, 135, 150), 1, 1); + + + + + //绘制领取全部奖励按钮 + local ClaimAllButton = LenheartButtonText(X + 460, Y + 440, 22, "全部领取"); + // ClaimAllButton.SetFrame(null, 323); + ClaimAllButton.SetTextOffset(-3, 1); + ClaimAllButton.Show(); + if (ClaimAllButton.isLBActive()) { + local T = { + op = 20059009 + } + SendPack(T); + } + + } + + + + + + + //绘制任务页 + if (Page == 1) { + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 43, X + 11, Y + 50 + 162); + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 38, X + 13, Y + 50 + 184); + + + //构造标题栏 + if (!QuestTitle) { + QuestTitle = []; + for (local i = 0; i< 3; i++) { + local Str = "每日任务"; + if (i == 1) Str = "重复任务"; + if (i == 2) Str = "赛季任务"; + local ButtonBuf = LenheartTabbarsText(X, Y, Str); + if (i == 0) ButtonBuf.State = 1; + ButtonBuf.SetTextOffset(8, 3); + QuestTitle.append(ButtonBuf); + } + } else { + foreach(Pos, Value in QuestTitle) { + Value.SyncPos(X + 12 + (Pos * 62), Y + 213); + Value.Show(); + //如果有可领取实践 还要画上感叹号标记 + if (Value.isLBActive()) { + foreach(Pp, Vv in QuestTitle) { + if (Pp != Pos) Vv.State = 0; + } + QuestPage = Pos; + } + + + if (QuestSuccessTips && QuestSuccessTips.len() == 3) { + //绘制是否可领取奖励的感叹号 + if (QuestSuccessTips[Pos] == 1) { + L_sq_DrawImg("interface/Lenheartwindowcommon.img", 301, X + 64 + (Pos * 62), Y + 216, 0, sq_RGBA(255, 255, 255, 210), 0.8, 0.8); + } + } + } + } + + L_sq_DrawCode("任务内容", X + 120, Y + 7 + 231, sq_RGBA(179, 169, 135, 255), 1, 1); + L_sq_DrawCode("完成次数", X + 288, Y + 7 + 231, sq_RGBA(179, 169, 135, 255), 1, 1); + L_sq_DrawCode("经验值", X + 388, Y + 7 + 231, sq_RGBA(179, 169, 135, 255), 1, 1); + L_sq_DrawCode("状态", X + 492, Y + 7 + 231, sq_RGBA(179, 169, 135, 255), 1, 1); + + local QuestTasks = null; + //每日 + if (QuestPage == 0) { + //每日任务数组 + QuestTasks = DailyTasks; + } + //重复 + else if (QuestPage == 1) { + //重复任务数组 + QuestTasks = RepeatingTasks; + } + //赛季 + else { + //赛季任务数组 + QuestTasks = SeasonTasks; + } + + if (QuestTasks) { + QuestWheelMax = QuestTasks.len(); + local SuccessCount = 0; + local Incomplete = 0; + foreach(Pos, Value in QuestTasks) { + local OffsetPos = Pos - QuestWheelNow - SuccessCount; + if (Pos >= QuestWheelNow && Pos <= QuestWheelNow + 5) { + if (Value.SuccessState == 0) { + Incomplete++; + L_sq_DrawCode(Value.QuestExplain, X + 20, Y + 50 + 162 + 53 + (OffsetPos * 30) + (OffsetPos), sq_RGBA(179, 169, 135, 255), 1, 1); + local SuccessStr = Value.NowSuccessCount + " / " + Value.MaxSuccessCount; + L_sq_DrawCode(SuccessStr, X + 320 - LenheartTextClass.GetStringLength(SuccessStr) / 2, Y + 50 + 162 + 53 + (OffsetPos * 30) + (OffsetPos), sq_RGBA(179, 169, 135, 255), 1, 1); + L_sq_DrawCode(Value.Experience.tostring(), X + 404 - LenheartTextClass.GetStringLength(Value.Experience.tostring()) / 2, Y + 50 + 162 + 53 + (OffsetPos * 30) + (OffsetPos), sq_RGBA(179, 169, 135, 255), 1, 1); + //绘制完成按钮 + local SuccessButton = LenheartButtonText(X + 472, Y + 261 + (OffsetPos * 30) + (OffsetPos), 10, "完成"); + SuccessButton.SetTextOffset(3, 1); + if (Value.NowSuccessCount >= Value.MaxSuccessCount) { + if (SuccessButton.isLBActive()) { + Value.op <- 20059033; + SendPack(Value); + } + } else { + SuccessButton.State = 8; + } + SuccessButton.Show(); + } else { + SuccessCount++; + } + } + } + local SuccessPos = 0; + foreach(Pos, Value in QuestTasks) { + local SuccessOffsetPos = SuccessPos - QuestWheelNow + Incomplete; + if (Value.SuccessState == 1) { + SuccessPos++; + L_sq_DrawCode(Value.QuestExplain, X + 20, Y + 50 + 162 + 53 + (SuccessOffsetPos * 30) + (SuccessOffsetPos), sq_RGBA(179, 169, 135, 150), 1, 1); + local SuccessStr = Value.NowSuccessCount + " / " + Value.MaxSuccessCount; + L_sq_DrawCode(SuccessStr, X + 320 - LenheartTextClass.GetStringLength(SuccessStr) / 2, Y + 50 + 162 + 53 + (SuccessOffsetPos * 30) + (SuccessOffsetPos), sq_RGBA(179, 169, 135, 150), 1, 1); + L_sq_DrawCode(Value.Experience.tostring(), X + 404 - LenheartTextClass.GetStringLength(Value.Experience.tostring()) / 2, Y + 50 + 162 + 53 + (SuccessOffsetPos * 30) + (SuccessOffsetPos), sq_RGBA(179, 169, 135, 150), 1, 1); + //绘制完成按钮 + local SuccessButton = LenheartButtonText(X + 472, Y + 261 + (SuccessOffsetPos * 30) + (SuccessOffsetPos), 10, "已完成"); + SuccessButton.SetTextOffset(-2, 1); + SuccessButton.State = 8; + SuccessButton.Show(); + // L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 41, X + 14, Y + 50 + 160 + 50 + (SuccessOffsetPos * 30) + (SuccessOffsetPos)); + } + } + } + + + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 25, Y + 456, 16, 16)) { + L_sq_DrawImg("interface/lenheartwindowcommon.img", 240, X + 25, Y + 456); + QuestTips = true; + } else { + L_sq_DrawImg("interface/lenheartwindowcommon.img", 239, X + 25, Y + 456); + QuestTips = false; + } + + // 周获取的经验 + local MaxExp = BaseInfo.ExpLimitMax; + local NowExp = BaseInfo.ExpLimit; + L_sq_DrawCode("每周重复任务经验获取上限 " + NowExp + "/" + MaxExp, X + 40 + 7, Y + 7 + 451, sq_RGBA(179, 169, 135, 255), 1, 1); + + + local ReceiveExpButton = LenheartButtonText(X + 464, Y + 7 + 446, 22, "全部领取"); + ReceiveExpButton.SetTextOffset(-2, 1); + ReceiveExpButton.Show(); + if (ReceiveExpButton.isLBActive()) { + local T = { + op = 20059035 + } + SendPack(T); + } + } + + + //绘制助力页 + if (Page == 2) { + L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 42, X + 11, Y + 50 + 162); + + L_sq_DrawCode("助力奖励", X + 11 + 115, Y + 50 + 162 + 7, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("[发起助力]说明", X + 11 + 372, Y + 50 + 162 + 7, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("获得助力 : " + BaseInfo.helpNum + " 次", X + 11 + 96, Y + 50 + 162 + 111, sq_RGBA(124, 110, 82, 255), 1, 0); + + + + //助力按钮 + local UpButton = LenheartButtonText(X + 11 + 115 + 20, Y + 50 + 162 + 7 + 48, 4, "发起助力"); + if (BaseInfo.help == 1) { + UpButton.State = 8; + } + UpButton.SetTextOffset(-12, 1); + UpButton.Show(); + if (UpButton.isLBActive()) { + local T = { + op = 20059011, + Type = 0, + } + SendPack(T); + } + + + { + L_sq_DrawCode("社交功能将于每日凌晨6点重置。", X + 11 + 322, Y + 50 + 162 + 77, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("点击[发起助力]按钮时,立即获得通行", X + 11 + 308, Y + 50 + 162 + 77 + 20, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("券经验值。", X + 11 + 380, Y + 50 + 162 + 77 + 40, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("获得助力次数将根据服务器玩家的发起", X + 11 + 300, Y + 50 + 162 + 77 + 60, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("助力次数而更新。", X + 11 + 364, Y + 50 + 162 + 77 + 80, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("每10秒可以点击刷新按钮更新信息。", X + 11 + 310, Y + 50 + 162 + 77 + 100, sq_RGBA(124, 110, 82, 255), 1, 0); + } + + + + L_sq_DrawCode("5次", X + 11 + 48, Y + 50 + 162 + 148, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("10次", X + 11 + 132, Y + 50 + 162 + 148, sq_RGBA(124, 110, 82, 255), 1, 0); + L_sq_DrawCode("20次", X + 11 + 216, Y + 50 + 162 + 148, sq_RGBA(124, 110, 82, 255), 1, 0); + + + //刷新按钮 + local RefreshButton = LenheartTabbars(X + 11 + 256, Y + 50 + 162 + 108, 19, 19); + RefreshButton.SetFrame(null, 445); + RefreshButton.Show(); + if (RefreshButton.isLBActive()) {} + + local SuccBtnArr = [BaseInfo.help5, BaseInfo.help10, BaseInfo.help20]; + //完成按钮 + foreach(Pos, Kf in SuccBtnArr) { + local ButtonBuf = LenheartButtonText(X + 11 + 27 + (Pos * 85), Y + 50 + 162 + 206, 4, "完成"); + local RealP = Pos; + if (RealP == 0) RealP = 5; + if (RealP == 1) RealP = 10; + if (RealP == 2) RealP = 20; + if (Kf == 1 || RealP > BaseInfo.helpNum) ButtonBuf.State = 8; + // ButtonBuf.SetFrame(null, 323); + ButtonBuf.SetTextOffset(0, 1); + ButtonBuf.Show(); + if (ButtonBuf.isLBActive()) { + local T = { + op = 20059011, + Type = RealP, + } + SendPack(T); + } + } + + + //TODO 临时绘制道具 2022110703 + //绘制道具 + L_Sq_DrawItem(X + 103, Y + 262, 1232, BaseInfo.helpExp, 0, 0, 0); + + + L_Sq_DrawItem(X + 11 + 43, Y + 50 + 162 + 167, 1232, BaseInfo.helpExp5, 0, 0, 0); + L_Sq_DrawItem(X + 11 + 128, Y + 50 + 162 + 167, 1232, BaseInfo.helpExp10, 0, 0, 0); + L_Sq_DrawItem(X + 11 + 213, Y + 50 + 162 + 167, 1232, BaseInfo.helpExp20, 0, 0, 0); + } + } + + QuestTips = false; + QuestWheelNow = 0; + QuestWheelMax = 0; + + //悬浮层 + function DrawSuspensionLayer(obj) { + //任务提示 + if (QuestTips) { + L_sq_DrawWindow(X + 40, Y + 350, 224, 100, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + local QuestTipsStr = "每周可以通过完成重复任务获得的最大经验值。\n达到每周经验获取上限后,无法进行重复任务。\n通过每日任务以及赛季任务获得的经验值,不受每周经验获取上限的限制。\n每周星期四将初始化每周经验获取量。\n每周四凌晨6点初始化重复任务的进度,并删除未领取的重复任务经验值。"; + local QuestTipsArray = L_sq_GetStringDrawArray(QuestTipsStr, 251); + foreach(Pos, va in QuestTipsArray) { + // Sout("文本内容嗯: %L", va); + L_sq_DrawCode(va, X + 40 + 7, Y + 7 + 350 + (Pos * 16), 0xFFFFFFFF, 1, 1); + } + + } + } + + //开启界面回调 + function OpenClassCallBack() { + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + GetBaseInfo(); + GetPlayerReward(); + GetPlayerQuest(); + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + ItemInfoDrawS = null; + DrawMain(obj); + DrawSuspensionLayer(obj); + DrawItemInfo(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = LenheartWindow(X, Y, 558, 470, 15); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (IMouse.IsWheelUp()) { + if (QuestWheelNow > 0) QuestWheelNow--; + if (LevelPage > 0) LevelPage--; + } + if (IMouse.IsWheelDown()) { + if (QuestWheelNow< QuestWheelMax - 6) QuestWheelNow++; + if (LevelPage< 4) LevelPage++; + } + + if (KeyPressNB.isKeyPress(48, "AradPassCloseKey")) { + MainState = false; + } + + } +} + +function AradPass(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("AradPassCObj")) { + local Cobj = AradPassC(); + RootTab.rawset("AradPassCObj", Cobj); + EventIcon("阿拉德探险记", 43, 43, Cobj); + } else { + RootTab["AradPassCObj"].Proc(obj); + RootTab["AradPassCObj"].Draw(obj); + } +} + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("AradPassFunc", AradPass); +} else { + local T = {}; + T.rawset("AradPassFunc", AradPass); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/AvatarShape/Avata b/Plugins/AvatarShape/Avata new file mode 100644 index 0000000..7c35069 --- /dev/null +++ b/Plugins/AvatarShape/Avata @@ -0,0 +1,79 @@ +1* 䠋⽴+U$Muw}oShlcmx(_5 +&"*"} *"$&19鿮暋甮 *"$&hsxgrkyx$Qjyy,?"u +&"*"$&"*kf&*MviamCxbzg'"35蒱喨Ƅ㒹擊䨠 *"$&"*"$"$&"*"$&"*"$h**iqNPNsp"+$$(*]xgvc"=K":+$51䖉⺅ﻤ랸ϸ䎇뒼箎Аƹ銴芃 "*"$&"*"$&"* "*"$&"*"$&"*"$&"]~arg*G$7=*13䎇똼ɥ僧䖉⺅銴芃 "*"$&"*"$&"*"$&"%5yI"$&"*"$&"*"$"$&"*"$&"*"$h**!uFDHuy|*)&($"Wrc~o$K?*3)&19沕ͨ瞮㻴膋阰㮈⼜곹렸䂁 *"$&"*"$&"*" *"$&"*"$&"*"$&"*]xgvc"=&25"35膋钰㇣곹렸䂁 *"$&"*"$&"*"$&"*7-= $&"*"$&"*"$& $&"*"$&" + *"$&"*"$h**Gsu~qmAngmoCppve?"91殱㒦㾊ꁬ弜蓊欞 $&"*"$&"u +&"*"$&"*"$&"gp$>k}VBBqqx,?+*13䎇籰钰㻶⺞렸墆㾷憃 $&"*"$&"*"$&} $&"*"$&"*"$&"*"$h**!Hw~~s|Fwxa{km+$RaNtaU~cyGpg*shl&"Gsu~qmAngmoGpgpizg&"Gsu~qmAngmo.*MuqvywGzkmuy:"Mwrq{MpeePrgoc6$Aw}~s{Ds~xup\cmc+5 +&"*"$&"*"$&"*"$&gf}e&ViNrgyN{ngogmA|k"qb.*MuqvywGzkmuA|kdkpc.*MuqvywGzkmu|:"Mwrq{Mpee{0&Es}xuoPxrq|Xa{g'E "*"$&"*"$&"* "*"$&"*"}  $&"*"$&"gp$>TcmxCppve?"91ʂ㒳䄦蓊欞䙶 *"$&"*"$"$&"*"$&"*"$h**,uGxRce~*)&($"!uFDHuy|*)?"v$>k}KnXgm~,?"$0$'Es}xuoMviamCxbzg'+$51㰂䠖誉戮ム犛$&Ζ䴡䞇밆䙶゗ +&"*"$&"*"$&"u +&"*"$&"*"$&"*"$&19KMuw}o.Qg~Wssuc^aqm">8?= $&"*"$&"*"$&"*"$h**!Hw~~s|Fwxa{km+$RaNtaU~cyGpg*shl&"Rce~DaqgOxidkfo0&Tcmx.*Teavw6$Xgm~Fxc{o0&TcmxHw~~s|Powe?= $&"*"$&"*"$&"*"$cn}o$RaNtaFwxa{kmCn*ydj:"`ogrDo}eGpgpizg&"Rce~z0&Tcmx.*TeavPxrq|Xa{g'E "*"$&"*"$&"* "*"$&"*"} *"$&"*"$h**!uGxRce~*)?"91处䨠檋䄰ブ隂军 $&"*"$&"u +&"*"$&"*"$&"91I[qs}e+*0&&Oydj+*0&&Oydj+* "*"$&"*"id""kw_p`ogr*'"&$"[qb0FdEtg|~)&tc~uxp*~rsg5 +&"*"$&"*opqg*terwx$dcf}eI"$&" + +ano}w&Ctcxgt]javgQknbqq"evcxhq"Pcwe}Nrgy^qsz"u +&"*"35Ш $&"*Yibvb"=&psvpI"$&"91鹚㼦 *"$&Jckk~v*G$|wfv? *"$&19밚鹚㼦 *"$&Vg~pcJ*G$|wfv?  $&"*13n竒榉 $&"*Z$K"|pz= $&"*Dcn"K"nsnfE "*"$51W誉 "*"$o"K"nsnfE "*"$HaW"=&psvpI +&"*"Y[qs}eQy*G$rtso? *"$&FcDu}Oyne&?*pazucE "$&"[qb"K"nsnfE "*"$[aRrsq"K"nsnfE "*"$[aWrsq"K"nsnfE  +&"*"gup}~rse~qr>iR6$}[&"kmkn~l:"aJeib~0&i^kxzgB+$"$&"*"$&19縰 "*"$&"*"[f~j$K"aYibvbE "*"$&"*"35륚Ш $&"*"$&"Boi}j~"=&iBoi}j~E "*"$&"*"35誉騚絜㼤 +&"*"$&"*^irncJ$K"a^irncJ?  $&"*"$&"91\㟚"$&"*"$&Z*G$}Z5 +&"*"$&"*13o竒榉 $&"*"$&"W"=&iWE "$&"*"$&kd",}g~tsuv~cbzg"+.xcqkn>$[quqgYdjce~$)?"[qb"K"kcvqsrvodpc*'e"[qs}eUdhogr$kE "*"$ +&"*"35弜Ƥ䢁̓ "*"$dw|mxq|"PueeWssuc*)&} $&"*"$&"gp$>uaIqK|~exucmxXgm~,_Oywc0AoxnRy},?.*KMuw}o.]g~[Tuu"+0&3&"1:"R6$o.*Yibvb6$^ggilr+'" *"$&"*"$&"*"I[qs}e+5 +&"*"$&"*"$&"WWssuc]{&?*pazucE "*"$&"*"}&gf}e&} $&"*"$&"*"$&kd",oOywcUq"=K"dcpqg*0&&uaIqK|~exucmxXgm~,_Oywc0AoxnRy},?.*KMuw}o.]g~[Tuu"+0&3&"1:":6$6.*:46.*@46+'" *"$&"*"$&"*"$&"*KMuw}o.Xgfoaqg[quqgMviam"+? *"$&"*"$&"*"$&"*[Muw}oW"K"xxwcE "*"$&"*"$&"* "*"$&"*"}  $&"* "$&"91㸚腠堪炿 +&"*"fspm~iup*WstgQknbqq*)&} $&"*"$&"gp$>uaIqK|~exucmxXgm~,_Oywc0AoxnRy},?.*KMuw}o.]g~[Tuu"+0&3&"1:"R6$o.*Yibvb6$Rk~ve^+'"  $&"*"$&"*"$&kd",[qpl.Zd*G=&3'" *"$&"*"$&"*"$&"*kf&*/Wcnry})&OiZtuu*G$_Oywc0AoxnRy},?=*13㐩龎붢榉Ǎ蛸 "*"$&"*"$&"*"$&"gp$>#[aYvq}+$[aWrsq"K"I[qs}eOi[tuu*7$_Oywc0AoxoRy},?+5 + *"$&"*"$&"*"}&gf}e&kd",[qpl.Zd*G=&2'" *"$&"*"$&"*"$&"*Wcnry}$K"|pz= $&"*"$&"*"$&"*"$[aWrsq"K"nsnfE "*"$&"*"$&"*"$&"Pa\&?*xuzn5 +&"*"$&"*"$&"*"$&Di[$K"|pz= $&"*"$&"*"$& $&"*"$&" +&"*"}  $&"*pu|e~ks|"]js*ydj?"u +&"*"$&"*kf&*NoBsi[qhc+*}qeFc{Hqr*\:"W6$mkn~l:"Boi}j~6$6zdpfdhdpf?= "*"$&"*"35弜Ƥ䢁̓ "*"$&"*"PueeWssuc*)I +&"*"$&"*13ﮰ騙啥䕖㌢̓ "*"$&"*"MuxcYi|fyy,?= "*"$ mpgu}"Atc~crQjoreA"czxcpn}$Hc}kgqFc{Rqyv$"$&"QknbqqQb"K"nsnfE$51ᬛ㑭꿣 "*"$[cgxWrc~o$K"dcpqg5"35렸䂁 *"$&Z*G$6= $&"*[$K":E "*"$Qjore[q|}xctGn$K"|pz= $&"*]lgrcWs|u~orQvo~e&?*pazucE "*"$[Vgwex"K"nsnfE "$&"]ovctCsu_pdq$K"|pz= "*"$dw|mxq|"KcvOarc]lgrcKndq"+$"$&"*"$&nymaz"^"=&} $&"*"$&"*"$&qz"=&5?247"$&"*"$& $&"*"$&"fqggn*}xx"K"Jqq|8E|eyne>V'E "*"$&"*"PeuaWcpnRaam^{tc*?=4?= $&"*"$&"Fawwa]onbRomomEbcr>u~t)I"$&"*"$&Ni}qeUcxhVcmu,?= $&"* "$&"dnavgqn&Ic~Atc~crQjore_pdqGgnfDaam"Mlspe+$"$&"*"$&Uyx>$䞶㊺焏弻&^|"%Z$&"G~w|u)I"$&"*"$&nymaz"Pfdg"=&L}qneU^V,(Ctcxgt]javgH}s|Qpl"?= $&"*"$&"Pfdg8Tgt}o,Ajsxo:":6$dcf}e?= "*"$&"*"pueov$Xqy~Xgd*G$}g~tsuv~cbzg"+? *"$&"*"$h**Ruq~^ah0c{p"$Atc~crQjoreAQpl"?+* "*"$&"*"$&"*Tsuv^cbi$Oarc]lgrcMShl0g.QgtorCssKndq*G$|wfv? *"$&"*"$&"*"Ruq~^ah]0CvgvotW~czoGUdh$]$gxfu/L$$9"g"/&$;HXuwp"?= $&"*"$&"*"$&"*"$h**kRqsdu&?K"fgn}o)&doay= $&"*"$&"*"$&"*"$zqmcp&i[csk*G$Hwdpex0Aox>$gxfu/L$$9"g"/&$;HMgqxk"?= $&"*"$&"*"$&"*"$zqmcp&iFka|ds"=&DspfctZkoxbs$'E "*"$&"*"$&"*"$&"fqggn*iKsc|ilsc|"=&Dspfct]woxk~wox"?= $&"*"$&"*"$&"*"$zqmcp&iRks|ip$K"Pfdg8Kcv"$i|hy7>("%"i&-*$-LZgqn}ds$)I"$&"*"$&"*"$&"*"pueov$}Ubcn}{g"=&DspfctQjoxkk0+? *"$&"*"$&"*"$&"*vsacf"kVkd$K"Pfdg8Kcv"$i|hy7>("%"i&-*$-LRgpu(+5 +&"*"$&"*"$&"*"$&nymaz"a[auds"=&Dspfctocydu(+5 +&"*"$&"*"$&"*"$&nymaz"aZig|ba|i*G$Hwdpex0Aox>$gxfu/L$$9"g"/&$;H\cxjugpa$)I"$&"*"$&"*"$&"*"pueov$}Zgo$K"Pfdg8Kcv"$i|hy7>("%"i&-*$-LZgo"?= $&"*"$&"*"$&"*"$zqmcp&i[qnqvctIb"K"Bshdor+* "*"$&"*"35轪儎⭅㦁ç菱婠ⲇ *"$&"*"$VcmucAq|~run+5 +  "*"$&"*"MRk{or&?*^i{g]^P>$Oarc]lgrc^i{g$0&7:24?= "*"$&"*"MRk{or+5 +&"*"}  $&"*13듎秢 *"$&hsxgrkyx$BtoyMgk|*shl'"  "*"$ +&"*"35綂喱័꺍 "*"$dw|mxq|"Svg|Mpgu}MaznPcgy*'"  "*"$ +&"*"35鵚垸㏥㑭 +&"*"fspm~iup*Nrgy"qb+* "*"$&"*"35rknr*]javg[qnqvctIb+5 +&"*"$&"*13䞇긵IB"$&"*"$&kd",Qjore[q|}xctGn)&} $&"*"$&"*"$&19薋啚⼯焿΍ $&"*"$&"*"$&kd",'UbctcOyxwrg]xgvc+$"$&"*"$&"*"$&"*"pueov$Hw~~s|"K"Atc~crQjoreVty*shl&""Gxo~axUbctcC|k":"R6$o.*$guo{qn5dgcnqjcx3hkoxw~g|8a|k06$8:&"2N.*36?= $&"*"$&"*"$&"*"$Hw~~s|0]oxXgm~E|dfo,rtso0&$Oarc]lgrctA|k$0&Z&"Y:"0ms{oyx3hkoxw~g|1bc|}lcpDs~xupUbctcOyxwrgKh?= $&"*"$&"*"$&"*"$&"*"PeuaWcpnRaam"+? *"$&"*"$&"*"$&"*"$&"]javg[qnqvctWrc~o$K"~tuc= $&"*"$&"*"$&"*"$"$&"*"$&"*"$"cvwc"u +&"*"$&"*"$&"*"$&nymaz"Pxrq|"=&Ctcxgt]javgZts>qpl0&$\CvgvotW~czoA|k06$n.*[0&$mqm{q|1bc|}lcp9digp}je|0oxi(.*4<:"@:0&4:+? *"$&"*"$&"*"$&"*Durvyx.Qg~TeavCxbzg"~rsg&""\Ctcxgt]javgCnt06$n.*[0&$mqm{q|1bc|}lcp9digp}je|0oxi(.*41?= $&"*"$&"*"$&"*"$Hw~~s|0]oxAw}~s{EfkgyG|dpc*~tuc.*$NGxo~axUbctcC|kg(.*Z0&[&""aq{ws|1pka|ubon5dgcnqjcx.gpg$0&4@+? *"$&"*"$&"*"$&"*Durvyx.Qjyy,?= "*"$&"*"$&"*"$&"gp$>Ds~xupx<^ssds"!K"^quhw*0&&x<^ssds"!K":+$aq|~i|wcE "*"$&"*"$&"*kf&*t8Mgqxk$'?*Wau|g"&$"t8Mgqxk$'?*2)&eyxxpso? *"$&"*"$&"*"id"".Zkoxbs"/G$Zkoxbs"$0$t0Fka|ds"!K":+$aq|~i|wcE "*"$&"*"$&"*kf&*t8Ksc|ilsc|"!K"Aa|iba|"$0$t0Aa|iba|"/G$6+*ms|vgxuc= $&"*"$&"*"$&kd",t0Rks|ip$'?*Ziupadu&($"vx+5 +&"*"$&"*"$&"*"$&O^kmct<]xgt~*)I"$&"*"$&"*"$&"*"G~gmuTzcwor_pdqXuUcexUbctcK|ps>+5 +&"*"$&"*"$&" +&"*"$&"*  +&"*"}  + dnavgqn&Ctcxgt]javg"qb+* "*"$zqmcp&TyqxRcp"=&ic~ruq~~ahnc*)I"$&"gp$>#`qsrVod.xcqkn>$Oarc]lgrcMShl0+)&} $&"*"$&"fqggn*Mshl*G$Gxo~axUbctcE"+? *"$&"*"$Xqy~Xgdqpl)I"$&"*"$&TyqxRcpe"Gxo~axUbctcEYdj(_" + i + "->Toubu"); + if (gToubu == false) break; + local gMaozi = Buffer.Get("info->" + i + "->Maozi"); + local gLianbu = Buffer.Get("info->" + i + "->Lianbu"); + local gGuanghuan = Buffer.Get("info->" + i + "->Guanghuan"); + local gXiongbu = Buffer.Get("info->" + i + "->Xiongbu"); + local gShangyi = Buffer.Get("info->" + i + "->Shangyi"); + local gPifu = Buffer.Get("info->" + i + "->Pifu"); + local gYaobu = Buffer.Get("info->" + i + "->Yaobu"); + local gXiazhuang = Buffer.Get("info->" + i + "->Xiazhuang"); + local gXie = Buffer.Get("info->" + i + "->Xie"); + local gMonsterId = Buffer.Get("info->" + i + "->MonsterId"); + local Equ = { + Toubu = gToubu, + Maozi = gMaozi, + Lianbu = gLianbu, + Guanghuan = gGuanghuan, + Xiongbu = gXiongbu, + Shangyi = gShangyi, + Pifu = gPifu, + Yaobu = gYaobu, + Xiazhuang = gXiazhuang, + Xie = gXie, + MonsterId = gMonsterId + } + RootTab["AvatarShapeCObj"].SeverEquInfo.append(Equ); + } + + + } + } + + constructor() { + //注册装备信息回调 + Pack_Control.rawset(31002, GetAvatarShapeInfoCallBack); + + GetAvatarShapeInfo(); + + + + MTimer = TimeSTL("AvatarShapeTimer", 5000); + + MTimer.Delete(); + MTimer = TimeSTL("AvatarShapeTimer", 5000); + MTimer.Start(); + } + + //绘制主界面 + function DrawMain(obj) { + + + } + + //开启界面回调 + function OpenClassCallBack() { + + + } + + //绘制入口 + function Draw(obj) { + //print(ShapeMonsterId); + //有变身ID + if (ShapeMonsterId) { + //没有变身的情况下 + if (!ShapeMonsterState) { + local Button = AvatarShapePro(obj, "AvatarShapeAni", X, Y, "common/bianshen/bianshen.ani", 28, 28, 16); + Button.SetRectEnble(true, "AvatarShaperAnir", X, Y, "common/bianshen/bianshen.ani", 17); + Button.SetCustomClickEnble(true, "AvatarShapeAnic", X, Y, "common/bianshen/bianshen.ani", 18); + Button.Show(); + + if (Button.isLBActive()) { + L_sq_SendPackType(214); + L_sq_SendPackByte(2); + L_sq_SendPackWord(ShapeMonsterId); + L_sq_SendPack(); + ShapeMonsterState = true; + } + } else { + local Button = AvatarShapePro(obj, "NAvatarShapeAni", X, Y, "common/bianshen/bianshen.ani", 28, 28, 20); + Button.SetRectEnble(true, "NAvatarShaperAnir", X, Y, "common/bianshen/bianshen.ani", 21); + Button.SetCustomClickEnble(true, "NAvatarShapeAnic", X, Y, "common/bianshen/bianshen.ani", 22); + Button.Show(); + + if (Button.isLBActive()) { + L_sq_SendPackType(215); + L_sq_SendPack(); + ShapeMonsterState = false; + } + } + } + } + + //比对角色与服务器信息是否匹配 + function CheckPlayerInfoToSeverShapeInfo() { + local Toubu = L_sq_GetCharacterAttribute(0x1C, 14); + local Maozi = L_sq_GetCharacterAttribute(0x1C, 13); + local Lianbu = L_sq_GetCharacterAttribute(0x1C, 15); + local Guanghuan = L_sq_GetCharacterAttribute(0x1C, 22); + local Xiongbu = L_sq_GetCharacterAttribute(0x1C, 19); + local Shangyi = L_sq_GetCharacterAttribute(0x1C, 16); + local Pifu = L_sq_GetCharacterAttribute(0x1C, 21); + local Yaobu = L_sq_GetCharacterAttribute(0x1C, 20); + local Xiazhuang = L_sq_GetCharacterAttribute(0x1C, 17); + local Xie = L_sq_GetCharacterAttribute(0x1C, 18); + + foreach(v in SeverEquInfo) { + if (v.Toubu != Toubu && v.Toubu != 0) continue; + if (v.Maozi != Maozi && v.Maozi != 0) continue; + if (v.Lianbu != Lianbu && v.Lianbu != 0) continue; + if (v.Guanghuan != Guanghuan && v.Guanghuan != 0) continue; + if (v.Xiongbu != Xiongbu && v.Xiongbu != 0) continue; + if (v.Shangyi != Shangyi && v.Shangyi != 0) continue; + if (v.Pifu != Pifu && v.Pifu != 0) continue; + if (v.Yaobu != Yaobu && v.Yaobu != 0) continue; + if (v.Xiazhuang != Xiazhuang && v.Xiazhuang != 0) continue; + if (v.Xie != Xie && v.Xie != 0) continue; + ShapeMonsterId = v.MonsterId; + return; + } + ShapeMonsterId = null; + } + + //逻辑入口 + function Proc(obj) { + //每五秒获取一次本地数据信息 + if (MTimer) { + if (MTimer.Get() >= 1000) { + MTimer.Reset(); + MTimer.Start(); + CheckPlayerInfoToSeverShapeInfo(); + } + } + + + } +} + +function AvatarShape(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("AvatarShapeCObj")) { + local Cobj = AvatarShapeC(); + RootTab.rawset("AvatarShapeCObj", Cobj); + } else { + RootTab["AvatarShapeCObj"].Proc(obj); + RootTab["AvatarShapeCObj"].Draw(obj); + } +} \ No newline at end of file diff --git a/Plugins/BuffSwitching/BuffSwitching.nut b/Plugins/BuffSwitching/BuffSwitching.nut new file mode 100644 index 0000000..8b17fce --- /dev/null +++ b/Plugins/BuffSwitching/BuffSwitching.nut @@ -0,0 +1,767 @@ +/* +文件名:BuffSwitching.nut +路径:Plugins/BuffSwitching/BuffSwitching.nut +创建日期:2023-02-01 01:09 +文件用途:buff换装 +*/ + +class Window extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + //Y坐标 + Y = null; + + YMouseSw = true; + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + } + + function Show(obj) { + //sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + + } +} + + +//HudPro按钮类 +class BuffSwitchingButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class BuffSwitchingSkillButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + SkillId = null; //技能ID + + x = null; //X坐标 + y = null; //Y坐标 + + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, skillid, gX, gY) { + obj = gObj; + SkillId = sq_GetSkill(gObj, skillid); + x = gX; + y = gY; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + isLBDown(); + sq_DrawSkillIcon(SkillId, x, y, sq_ALPHA(250)); + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, 26, 26)) return true; + else return false; + } + + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class BuffSwitchingSystem extends BasicsDrawTool { + PageSw = false; + OpenSw = false; + + WindowObj = null; + ExcludeTab = null; + + SkillData = null; + EquData = null; + EquAddress = null; + AvaData = null; + AvaAddress = null; + CreData = null; + + WindowsObj = null; + BaseX = -160; + BaseY = -38; + State = true; + + SkillSelectMain = false; + SelectSkillArr = null; + + Party = 0; + + function Addexclude() { + ExcludeTab = {}; + ExcludeTab.rawset("29201", 1); + ExcludeTab.rawset("29202", 2); + ExcludeTab.rawset("29203", 3); + ExcludeTab.rawset("29204", 4); + ExcludeTab.rawset("29205", 5); + ExcludeTab.rawset("39278", 6); + ExcludeTab.rawset("39400", 7); + ExcludeTab.rawset("40600", 8); + ExcludeTab.rawset("41000", 9); + ExcludeTab.rawset("41800", 10); + ExcludeTab.rawset("42200", 11); + ExcludeTab.rawset("43400", 12); + ExcludeTab.rawset("44600", 13); + ExcludeTab.rawset("45000", 14); + ExcludeTab.rawset("45800", 15); + ExcludeTab.rawset("46200", 16); + ExcludeTab.rawset("47400", 17); + ExcludeTab.rawset("48426", 18); + ExcludeTab.rawset("48600", 19); + ExcludeTab.rawset("49000", 20); + ExcludeTab.rawset("49800", 21); + ExcludeTab.rawset("50200", 22); + ExcludeTab.rawset("51265", 23); + ExcludeTab.rawset("51400", 24); + ExcludeTab.rawset("52600", 25); + ExcludeTab.rawset("53000", 26); + ExcludeTab.rawset("53800", 27); + ExcludeTab.rawset("54200", 28); + ExcludeTab.rawset("55400", 29); + ExcludeTab.rawset("55820", 30); + ExcludeTab.rawset("56600", 31); + ExcludeTab.rawset("57000", 32); + ExcludeTab.rawset("57800", 33); + ExcludeTab.rawset("58200", 34); + ExcludeTab.rawset("1600000", 35); + ExcludeTab.rawset("1610000", 36); + ExcludeTab.rawset("1640000", 37); + ExcludeTab.rawset("1650000", 38); + ExcludeTab.rawset("1670000", 39); + ExcludeTab.rawset("1680000", 40); + ExcludeTab.rawset("1720000", 41); + ExcludeTab.rawset("1730000", 42); + ExcludeTab.rawset("1750000", 43); + ExcludeTab.rawset("1760000", 44); + ExcludeTab.rawset("1770000", 45); + ExcludeTab.rawset("1790000", 46); + ExcludeTab.rawset("1800000", 47); + ExcludeTab.rawset("2090000", 48); + ExcludeTab.rawset("2120000", 49); + ExcludeTab.rawset("2130000", 50); + ExcludeTab.rawset("2140000", 51); + ExcludeTab.rawset("2150000", 52); + ExcludeTab.rawset("2160000", 53); + ExcludeTab.rawset("29000", 54); + ExcludeTab.rawset("31000", 55); + ExcludeTab.rawset("33679", 56); + ExcludeTab.rawset("33900", 57); + ExcludeTab.rawset("35000", 58); + ExcludeTab.rawset("37000", 59); + ExcludeTab.rawset("27118", 60); + ExcludeTab.rawset("27900", 61); + ExcludeTab.rawset("2190000", 62); + ExcludeTab.rawset("2190011", 63); + ExcludeTab.rawset("2190041", 64); + ExcludeTab.rawset("2190051", 65); + ExcludeTab.rawset("2190071", 66); + ExcludeTab.rawset("2190081", 67); + } + + constructor() { + Addexclude(); + EquAddress = [5, 6, 1, 12, 3, 4, 7, 9, 2, 10, 8, 11]; + AvaAddress = [14, 13, 15, 22, 19, 16, 21, 20, 17, 18]; + + //注册换装配置信息回调 + Pack_Control.rawset(20013004, SetMyEquCallBack); + //开始换装回调 + Pack_Control.rawset(20013008, StartSwitchingCallBack); + + ReqMyEqu(); //请求服务端数据 + } + + function SwitchingSendPack(Pos, Id, Type, Space, Index, LocalType) { + L_sq_SendPackType(19); + L_sq_SendPackByte(Space); + L_sq_SendPackWord(Pos); + L_sq_SendPackDWord(Id); + L_sq_SendPackDWord(1); + L_sq_SendPackByte(3); + L_sq_SendPackWord(Type); + local OldId; + if (LocalType == 1) OldId = L_sq_GetCharacterAttribute(0x1C, EquAddress[Index]); + if (LocalType == 0) OldId = L_sq_GetCharacterAttribute(0x1C, AvaAddress[Index]); + if (LocalType == 2) OldId = L_sq_GetCharacterAttribute(0x1C, 24); + if (OldId == null || OldId <= 0 || ExcludeTab.rawin(OldId.tostring())) L_sq_SendPackDWord(0); + else L_sq_SendPackDWord(OldId); + L_sq_SendPackDWord(L_sq_Switching()); + L_sq_SendPackByte(0); + L_sq_SendPackByte(0); + L_sq_SendPack(); + } + + //开始换装回调 + function StartSwitchingCallBack(Chunk) { + local Buffer = Json_STL("StartSwitchingBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("BuffSwitchingObj")) { + for (local i = 0; i < Buffer.Get("Acount"); i++) { + local Pos = Buffer.Get("Apos->" + i); + if (Pos < 0) continue; + local Id = Buffer.Get("Aid->" + i); + local Type = Buffer.Get("AType->" + i); + RootTab["BuffSwitchingObj"].SwitchingSendPack(Pos, Id, Type, 1, i, 0); + } + for (local q = 0; q < Buffer.Get("Ecount"); q++) { + local Pos = Buffer.Get("Epos->" + q); + local Id = Buffer.Get("Eid->" + q); + local Type = Buffer.Get("EType->" + q); + RootTab["BuffSwitchingObj"].SwitchingSendPack(Pos, Id, Type, 0, q, 1); + } + local Crepos = Buffer.Get("Cpos"); + if (Crepos >= 0) { + local Pos = Buffer.Get("Cpos"); + local Id = Buffer.Get("Creid"); + local Type = Buffer.Get("CreType"); + RootTab["BuffSwitchingObj"].SwitchingSendPack(Pos, Id, Type, 7, 0, 2); + } + + } + + L_sq_SendPackType(130); + L_sq_SendPackWChar("{\"op\":20013007}"); + L_sq_SendPack(); + } + + //换装配置信息回调 + function SetMyEquCallBack(Chunk) { + + local Buffer = Json_STL("GetSetMyEquBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("BuffSwitchingObj")) { + local Tobj = RootTab["BuffSwitchingObj"]; + Tobj.EquData = Tobj.StringToArr(Buffer.Get("EquData")); + Tobj.AvaData = Tobj.StringToArr(Buffer.Get("AvaData")); + Tobj.CreData = Buffer.Get("CreData"); + } + + } + + function ReqMyEqu() { + L_sq_SendPackType(130); + L_sq_SendPackWChar("{\"op\":20013003 , \"Party\":" + Party + "}"); + L_sq_SendPack(); + } + + function GetMyEqu() { + EquData = []; + EquData.append(L_sq_GetCharacterAttribute(0x1C, 5)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 6)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 1)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 12)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 3)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 4)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 7)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 9)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 2)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 10)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 8)); + EquData.append(L_sq_GetCharacterAttribute(0x1C, 11)); + + AvaData = []; + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 14)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 13)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 15)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 22)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 19)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 16)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 21)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 20)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 17)); + AvaData.append(L_sq_GetCharacterAttribute(0x1C, 18)); + + CreData = L_sq_GetCharacterAttribute(0x1C, 24); + } + + //数组转字符串 + function ArrToString(ArrObject) { + local str = ""; + //str += "["; + foreach(Value in ArrObject) { + str += Value.tostring(); + str += ","; + } + str = str.slice(0, str.len() - 1); + //str += "\x005d"; + return str; + } + + //字符串转数组 + function StringToArr(Str) { + Str = Str.slice(1, Str.len()); + local Arr = []; + local Bpos = 0; + local Fpos = 0; + while (true) { + Fpos = Str.find(",", Bpos); + if (Fpos == null) break; + if (Bpos != Fpos) { + local buf = Str.slice(Bpos, Fpos); + Arr.append(buf.tointeger()); + } + Bpos = Fpos + 1; + } + Fpos = Str.find("]", Bpos); + local buf = Str.slice(Bpos, Fpos); + Arr.append(buf.tointeger()); + return Arr; + } + + function DrawMain(obj) { + + { //底图层绘制 + //窗口 + T_DrawStayAni(obj, "common/buffswitching/main.ani", BaseX + 222, BaseY + 86, 0, "BuffSwitchingSystemMain"); + //窗口标题 + L_sq_DrawCode("buff换装", BaseX + 376, BaseY + 88, sq_RGBA(230, 200, 155, 250), 0, 0); + + if (!SkillSelectMain) T_DrawStayAni(obj, "common/buffswitching/main.ani", BaseX + 222 + 160, BaseY + 86 + 48, 2, "BuffSwitchingSystemSkillSlot"); + + L_sq_DrawCode("记录", BaseX + 388, BaseY + 107, sq_RGBA(247, 214, 90, 250), 1, 1); + + L_sq_DrawCode("装备", BaseX + 282, BaseY + 221, sq_RGBA(247, 214, 90, 250), 1, 1); + L_sq_DrawCode("装扮", BaseX + 423, BaseY + 221, sq_RGBA(247, 214, 90, 250), 1, 1); + L_sq_DrawCode("宠物", BaseX + 530, BaseY + 221, sq_RGBA(247, 214, 90, 250), 1, 1); + + for (local r = 0; r < 3; r++) { + local PartyButton = BuffSwitchingButtonPro(obj, "BuffSwitchingPartyButton" + r, BaseX + 222 + 10, BaseY + 86 + 42 + (r * 23), "common/buffswitching/party.ani", 24, 14, 0 + (r * 2)); + PartyButton.SetRectEnble(true, "BuffSwitchingPartyButtonr" + r, BaseX + 222 + 10, BaseY + 86 + 42 + (r * 23), "common/buffswitching/party.ani", 1 + (r * 2)); + PartyButton.SetCustomClickEnble(true, "BuffSwitchingPartyButtonc" + r, BaseX + 222 + 10, BaseY + 86 + 43 + (r * 23), "common/buffswitching/party.ani", 1 + (r * 2)); + PartyButton.Show(); + if (PartyButton.isLBActive()) { + Party = r; + EquData = null; + AvaData = null; + CreData = null; + ReqMyEqu(); + } + } + + T_DrawStayAni(obj, "common/buffswitching/main.ani", BaseX + 222 + 40, BaseY + 86 + 44 + (Party * 23), 7, "BuffSwitchingSystemMainSelect"); + + //如果当前没有技能提升数据 + if (EquData == null && AvaData == null && CreData == null) { + local AddButton = BuffSwitchingButtonPro(obj, "BuffSwitchingAddButton", BaseX + 222 + 165, BaseY + 86 + 53, "common/buffswitching/main.ani", 26, 26, 4); + AddButton.SetRectEnble(true, "BuffSwitchingAddButtonr", BaseX + 222 + 165, BaseY + 86 + 53, "common/buffswitching/main.ani", 4); + AddButton.SetCustomClickEnble(true, "BuffSwitchingAddButtonc", BaseX + 222 + 165, BaseY + 86 + 53, "common/buffswitching/main.ani", 4); + //if (!SkillSelectMain) AddButton.Show(); + AddButton.Show(); + + if (AddButton.isLBActive() && !SkillSelectMain) { + // SkillSelectMain = true; + GetMyEqu(); + + local BuffSwitchingPack = Json_STL("BuffSwitchingPack"); + BuffSwitchingPack.Put("op", 20013001); + BuffSwitchingPack.Put("Party", Party); + + foreach(pos, Value in EquData) { + BuffSwitchingPack.Put("EquData" + pos, Value); + } + //BuffSwitchingPack.Put("EquData", ArrToString(EquData)); + foreach(apos, aValue in AvaData) { + BuffSwitchingPack.Put("AvaData" + apos, aValue); + } + //BuffSwitchingPack.Put("AvaData", ArrToString(AvaData)); + BuffSwitchingPack.Put("CreData", CreData); + + local str = BuffSwitchingPack.GetString(); + //print(str); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + BuffSwitchingPack.Delete(); + } + + } else { + local Skill = sq_GetSkill(obj, 174); + sq_DrawSkillIcon(Skill, BaseX + 222 + 164, BaseY + 86 + 51, sq_ALPHA(250)); + // local SkillLevel = sq_GetSkillLevel(obj, SkillData); + // L_sq_DrawCode("Lv." + SkillLevel, BaseX + 222 + 165, BaseY + 86 + 51 + 30, sq_RGBA(230, 200, 155, 250), 1, 1); + L_sq_DrawCode("生效", BaseX + 222 + 167, BaseY + 86 + 51 + 30, sq_RGBA(230, 200, 155, 250), 1, 1); + + { //装备 + + for (local i = 0; i < 12; i++) { + local z = i; + if (i == 9 || i == 10) z = i + 1; + if (i == 11) z = i + 4; + if (EquData[i] != 0) L_Sq_DrawItem(BaseX + 231 + ((z % 4) * 32), BaseY + 240 + ((z / 4) * 32), EquData[i], 1, 0, 0, 0); + } + } + + { //时装 + for (local q = 0; q < 10; q++) { + local z = q + 1; + if (q >= 7) z = q + 2; + if (AvaData[q] != 0) L_Sq_DrawItem(BaseX + 370 + ((z % 4) * 33), BaseY + 240 + ((z / 4) * 33), AvaData[q], 1, 0, 0, 0); + } + } + + { //宠物 + if (CreData != 0) L_Sq_DrawItem(BaseX + 527, BaseY + 250, CreData, 1, 0, 0, 0); + } + + local DeleteButton = BuffSwitchingButtonPro(obj, "BuffSwitchingDeleteButton", BaseX + 222 + 200, BaseY + 86 + 50, "common/buffswitching/main.ani", 26, 26, 8); + DeleteButton.SetRectEnble(true, "BuffSwitchingDeleteButtonr", BaseX + 222 + 200, BaseY + 86 + 50, "common/buffswitching/main.ani", 9); + DeleteButton.SetCustomClickEnble(true, "BuffSwitchingDeleteButtonc", BaseX + 222 + 200, BaseY + 86 + 50, "common/buffswitching/main.ani", 10); + DeleteButton.Show(); + + if (DeleteButton.isLBActive()) { + EquData = null; + AvaData = null; + CreData = null; + } + } + + /* + //选择技能 + if (SkillSelectMain) { + //候选技能表 + if (SelectSkillArr == null) { + SelectSkillArr = []; + local skillmgr = obj.getSkillManager(); + for (local i = 0; i < 255; i++) { + local skl = sq_GetSkill(obj, i); + if (skl) { + local id = skillmgr.getSlotindex(i); + if ((id >= 0 && id <= 6) || (id >= 198 && id <= 203)) { + SelectSkillArr.append(i); + } + } + } + } + + + //返回按钮 + local LeftButton = BuffSwitchingButtonPro(obj, "BuffSwitchingLButton", BaseX + 222 + 165 + 170, BaseY + 86 + 53 + 58, "common/buffswitching/main.ani", 13, 9, 5); + LeftButton.SetRectEnble(true, "BuffSwitchingLButtonr", BaseX + 222 + 165 + 170, BaseY + 86 + 53 + 58, "common/buffswitching/main.ani", 6); + LeftButton.SetCustomClickEnble(true, "BuffSwitchingLButtonc", BaseX + 222 + 165 + 170, BaseY + 86 + 53 + 58, "common/buffswitching/main.ani", 7); + LeftButton.Show(); + + if (LeftButton.isLBActive()) { + SkillSelectMain = false; + SelectSkillArr = null; + } + + //for (local i; i < SelectSkillArr.len(); i++) { + for (local i = 0; i < SelectSkillArr.len(); i++) { + local Id = SelectSkillArr[i]; + local SkillButton = BuffSwitchingSkillButtonPro(obj, Id, BaseX + 222 + 24 + ((i % 6) * 56), BaseY + 86 + 42 + ((i / 6) * 32)); + SkillButton.Show(); + if (SkillButton.isLBActive()) { + SkillData = Id; + GetMyEqu(); + SkillSelectMain = false; + } + } + + + } + */ + } + } + + function Proc(obj) { + //print(sq_GetPopupWindowMainCotrol(267)); + //如果背包打开 绘制系统开启 + + if (State && OpenSw) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + } else { + WindowObj = Window(BaseX, BaseY, 356, 288, 10); + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + } + } + } + + function SyncData(x, y) { + BaseX = x; + BaseY = y; + State = true; + if (WindowObj) { + WindowObj.X = x + 222; + WindowObj.Y = y + 86; + } + + } +} + + +//入口 +function BuffSwitching(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("BuffSwitchingObj")) { + local Cobj = BuffSwitchingSystem(); + RootTab.rawset("BuffSwitchingObj", Cobj); + } else { + RootTab["BuffSwitchingObj"].Proc(obj); + //RootTab["BuffSwitchingObj"].State = false; + } + + local Winddddd = sq_GetPopupWindowMainCotrol(244); + if (!Winddddd) { + RootTab["BuffSwitchingObj"].OpenSw = false; + RootTab["BuffSwitchingObj"].State = false; + RootTab["BuffSwitchingObj"].PageSw = false; + } + + /* + local Winddddd = sq_GetPopupWindowMainCotrol(244); + if(Winddddd) + { + local BaseX = Winddddd.GetXPos(); + local BaseY = Winddddd.GetYPos(); + + + local OpenButton = BuffSwitchingButtonPro(obj, "BuffSwitchingOpenButton", BaseX , BaseY, "common/buffswitching/main.ani", 26, 26, 11); + OpenButton.SetRectEnble(true, "BuffSwitchingOpenButtonr", BaseX, BaseY , "common/buffswitching/main.ani", 12); + OpenButton.SetCustomClickEnble(true, "BuffSwitchingOpenButtonc", BaseX , BaseY, "common/buffswitching/main.ani", 13); + OpenButton.Show(); + + if (OpenButton.isLBActive()) { + //RootTab["BuffSwitchingObj"].OpenSw = !RootTab["BuffSwitchingObj"].OpenSw; + print(1111); + } + } + */ +} + +//call +function Sq_BuffSwitchingCallBack(x, y) { + local RootTab = getroottable(); + if (RootTab.rawin("BuffSwitchingObj") && RootTab["BuffSwitchingObj"].PageSw == true) { + RootTab["BuffSwitchingObj"].SyncData(x - 1430, y - 500); + //RootTab["BuffSwitchingObj"].PageSw = false; + } +} + +function Sq_SwitchingCallBack(x, y) { + /* + local RootTab = getroottable(); + if (RootTab.rawin("BuffSwitchingObj")) { + RootTab["BuffSwitchingObj"].PageSw = true; + } + */ + + + local RootTab = getroottable(); + + if (RootTab.rawin("BuffSwitchingObj") && RootTab["BuffSwitchingObj"].PageSw == true) { + RootTab["BuffSwitchingObj"].SyncData(-200, 0); + //RootTab["BuffSwitchingObj"].PageSw = false; + } + + + local BaseX = x - 600 + 141; + local BaseY = y - 200 - 83; + + local obj = sq_GetMyMasterCharacter(); + if(!obj)return; + local OpenButton = BuffSwitchingButtonPro(obj, "BuffSwitchingOpenButton", BaseX, BaseY, "common/buffswitching/main.ani", 55, 55, 14); + OpenButton.SetRectEnble(true, "BuffSwitchingOpenButtonr", BaseX, BaseY, "common/buffswitching/main.ani", 15); + OpenButton.SetCustomClickEnble(true, "BuffSwitchingOpenButtonc", BaseX, BaseY, "common/buffswitching/main.ani", 16); + OpenButton.Show(); + + if (OpenButton.isLBActive()) { + RootTab["BuffSwitchingObj"].OpenSw = !RootTab["BuffSwitchingObj"].OpenSw; + RootTab["BuffSwitchingObj"].State = !RootTab["BuffSwitchingObj"].State; + RootTab["BuffSwitchingObj"].PageSw = true; + //print(1111); + } +} \ No newline at end of file diff --git a/Plugins/CollectBooks/CollectBooks.nut b/Plugins/CollectBooks/CollectBooks.nut new file mode 100644 index 0000000..831fb9c --- /dev/null +++ b/Plugins/CollectBooks/CollectBooks.nut @@ -0,0 +1,1003 @@ +/* +文件名:CollectBooks.nut +路径:Plugins/CollectBooks/CollectBooks.nut +创建日期:2023-07-22 18:33 +文件用途: +*/ + +//HudPro按钮类 +class CollectBooksPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx, CustomClicky); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) L_sq_DrawImg(RectBaseAnifile, RectFrame, Rectx, Recty); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) L_sq_DrawImg(BaseAnifile, BaseFrame, x, y); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +//TabTextButtonPro按钮类 +class CollectTabTextButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + SwitchState = false; //复选框是否选中 + str = null; + strx = null; + stry = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + BaseAnifileFrame = null; //调用的Ani帧数 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gBaseAnifileFrame, gWidth, gLength, gstr, gstrx, gstry) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + BaseAnifileFrame = gBaseAnifileFrame; + width = gWidth; + length = gLength; + str = gstr; + strx = gstrx; + stry = gstry; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + //++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + //--y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown() && SwitchState == false) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx, CustomClicky); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + } + + if (RectEnble && SwitchState == false) //开启悬停效果时 + { + if ((isInRect()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) L_sq_DrawImg(RectBaseAnifile, RectFrame, Rectx, Recty); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + } + + if (!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) L_sq_DrawImg(BaseAnifile, BaseAnifileFrame, x, y); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(221, 197, 147, 250), 1, 1); + } + + if (SwitchState) { + if (!ButtonDynamic) L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx, CustomClicky); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class CollectBooksWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class CollectBooksLineC extends BasicsDrawTool { + + TabName = [ + "力量 +", + "体力 +", + "智力 +", + "精神 +", + "独立攻击力 +", + "物理攻击力 +", + "魔法攻击力 +", + "物理防御 +", + "魔法防御 +", + "移动速度 +", + "攻击速度 +", + "释放速度 +", + "物理暴击 +", + "魔法暴击 +", + "命中率 +", + "光属性强化 +", + "暗属性强化 +", + "水属性强化 +", + "火属性强化 +", + "全属性强化 +", + "冷却时间 -", + "技能攻击力 + " + ] + + Name = null; + ItemArr = null; + Completion = null; + AttributeArr = null; + WarringMessage = false; + + constructor(gName, gItemArr, gAttributeArr) { + Name = gName; + ItemArr = gItemArr; + AttributeArr = gAttributeArr; + Completion = true; + foreach(v in gItemArr) { + if (!v.IsHave) Completion = false; + } + } + + //高级绘制文字(带换行) + function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc, hl) { + local strarr = []; + if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc); + else { + local Bpos = 0; + while (true) { + local Npos = str.find("\n", Bpos); + if (!Npos) { + local strbuff = str.slice(Bpos, str.len()); + strarr.append(strbuff); + break; + } + local strbuff = str.slice(Bpos, Npos); + strarr.append(strbuff); + Bpos = Npos + 1; + } + for (local z = 0; z < strarr.len(); z++) { + L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc); + } + } + } + + //绘制装备 + function DrawItem(X, Y) { + //12个的时候597 + //单个长36 + local Spacing = (597 - (ItemArr.len() * 36)) / (ItemArr.len() - 1); + for (local i = 0; i < ItemArr.len(); i++) { + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 7, X + 6 + (i * Spacing + (i * 36)), Y + 27); + L_Sq_DrawItem(X + 9 + (i * Spacing + (i * 36)), Y + 30, ItemArr[i].Id, 1, 0, 0, 0); + if (!ItemArr[i].IsHave) { + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 6, X + 9 + (i * Spacing + (i * 36)), Y + 30); + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 6, X + 9 + (i * Spacing + (i * 36)), Y + 30); + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 6, X + 9 + (i * Spacing + (i * 36)), Y + 30); + // L_sq_DrawImg("interface2/yosin/shoujitujian.img", 6, X + 9 + (i * Spacing + (i * 36)), Y + 30); + } + } + } + + //绘制属性信息 + function DrawAttribute(X, Y) { + local JumpRealLine = 0; + local StrColor = sq_RGBA(174, 174, 174, 250); + if (Completion) StrColor = sq_RGBA(255, 177, 0, 250) + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 10, X + 320, Y + 100 + 34); + for (local i = 0; i < AttributeArr.len(); i++) { + //空属性 跳过绘制并且-1行 + if (AttributeArr[i] == 0) { + JumpRealLine++; + continue; + } + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 11, X + 320, Y + 100 + 34 + 11 + ((i - JumpRealLine) * 14)); + L_sq_DrawCode(TabName[i] + " " + AttributeArr[i], X + 330, Y + 100 + 34 + 11 + ((i - JumpRealLine) * 14), StrColor, 1, 1); + } + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 12, X + 320, Y + 100 + 34 + 11 + ((AttributeArr.len() - JumpRealLine) * 14)); + } + + //绘制收集信息 + function DrawCompletionInfo(X, Y) { + if (Completion) L_sq_DrawImg("interface2/yosin/shoujitujian.img", 9, X + 628, Y + 34); + else L_sq_DrawImg("interface2/yosin/shoujitujian.img", 8, X + 628, Y + 34); + } + + + function Show(X, Y) { + //绘制主界面 + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 5, X, Y); + //绘制列数名字 + L_sq_DrawCode(Name, X + 5, Y + 6, sq_RGBA(255, 177, 0, 250), 1, 1); + //绘制装备 + DrawItem(X, Y); + //绘制收集信息 + DrawCompletionInfo(X, Y); + //绘制警告信息 + if (WarringMessage) L_sq_DrawCode("警告! 此操作可能会导致您失去不想失去的装备,确认无误后再次点击镶嵌.", X + 215, Y + 6, sq_RGBA(225, 6, 2 250), 1, 1); + + + //绘制镶嵌按钮 + local Button = CollectBooksPro("收集图鉴镶嵌", X + 620, Y + 2, "interface2/yosin/shoujitujian.img", 56, 23, 13); + Button.SetRectEnble(true, "收集图鉴镶嵌", X + 620, Y + 2, "interface2/yosin/shoujitujian.img", 14); + Button.SetCustomClickEnble(true, "收集图鉴镶嵌", X + 620, Y + 2, "interface2/yosin/shoujitujian.img", 15); + Button.Show(); + local DownOffset = 0; + if (Button.isLBDown()) DownOffset = 1; + L_sq_DrawCode("镶 嵌", X + 631, Y + 7 + DownOffset, sq_RGBA(230, 200, 155, 250), 1, 1); + if (Button.isLBActive()) { + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("CLICK_BUTTON2"); + if (!WarringMessage) WarringMessage = true; + else { + local Arrbuf = []; + local Xbuf = []; + local Ybuf = []; + local Spacing = (597 - (ItemArr.len() * 36)) / (ItemArr.len() - 1); + foreach(pos, v in ItemArr) { + if (!v.IsHave) { + Arrbuf.append(v.Id); + Xbuf.append(X + 9 + (pos * Spacing + (pos * 36))); + Ybuf.append(Y + 30); + } + } + if (Arrbuf.len() > 0) { + local T = { + op = 20026077, + equtab = Arrbuf, + equxtab = Xbuf, + equytab = Ybuf, + Page = getroottable()["CollectBooksCObj"].NowPage, + } + SendPack(T); + } + WarringMessage = false; + } + } + } + + function ShowStr(X, Y) { + //悬停属性信息 + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 628, Y + 34, 77, 21)) { + DrawAttribute(X, Y - 180); + } + } +} + +class CollectBooksC extends BasicsDrawTool { + + + Myop = 20026000; + + + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 34; + Y = 42; + + //他人模式 + OtherState = false; + + BookButton = null; + AbtiButton = null; + BookButtonState = true; + AbtiButtonState = false; + + NowPage = 1; + MaxPage = 1; + + //页面标题 + PageTitle = null; + //收集行对象 + CollectBooksLineBuf = null; + CollectLineObject = null; + CollectLineNameObject = null; + CollectLineAttributeObject = null; + CollectAttributeObject = null; + //附加BUFF判断 + DgnAddBuff = false; + //镶嵌回调动画 + MosaicAnimotionArr = null; + + TabName = [ + "力量 +", + "体力 +", + "智力 +", + "精神 +", + "独立攻击力 +", + "物理攻击力 +", + "魔法攻击力 +", + "物理防御 +", + "魔法防御 +", + "移动速度 +", + "攻击速度 +", + "释放速度 +", + "物理暴击 +", + "魔法暴击 +", + "命中率 +", + "光属性强化 +", + "暗属性强化 +", + "水属性强化 +", + "火属性强化 +", + "全属性强化 +", + "冷却时间 -", + "技能攻击力 + " + ] + + //镶嵌动画回调 + function MosaicAnimotionCallBack(Chunk) { + // Sout("收到的包: %L", Chunk); + local Buffer = Json_STL("CollectBooksCObjGetInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("CollectBooksCObj")) { + local Tobj = RootTab["CollectBooksCObj"]; + Tobj.MosaicAnimotionArr = []; + for (local i = 0; i < 15; i++) { + local X = Buffer.Get("Ani->" + i + "->x") + if (!X) break; + local Y = Buffer.Get("Ani->" + i + "->y") + local T = { + Ax = X, + Ay = Y, + } + Tobj.MosaicAnimotionArr.append(T); + } + } + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("DANJIN_GAMBLE_CLASS_A"); + } + + //获取收集信息回调 + function GetCollectInfoCallBack(Chunk) { + local Buffer = Json_STL("CollectBooksCObjGetInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("CollectBooksCObj")) { + local Tobj = RootTab["CollectBooksCObj"]; + Tobj.PageTitle = { + Name = Buffer.Get("PageTitleName"), + X = Buffer.Get("PageTitleX"), + Y = Buffer.Get("PageTitleY"), + }; + Tobj.CollectLineObject = []; + Tobj.CollectLineNameObject = []; + Tobj.CollectLineAttributeObject = []; + Tobj.CollectBooksLineBuf = [0, 0, 0, 0]; + Tobj.MaxPage = Buffer.Get("MaxPage"); + local Count = Buffer.Get("CollectLineCount"); + for (local i = 0; i < Count; i++) { + local AbArr = []; + for (local q = 0; q < 22; q++) { + local AttributeBuffer = Buffer.Get("CollectLineAttribute->" + i + "->buff->" + q); + AbArr.append(AttributeBuffer); + } + Tobj.CollectLineAttributeObject.append(AbArr); + + local EquArr = []; + for (local w = 0; w < 12; w++) { + local gName = Buffer.Get("CollectLineDrawS->" + i + "->collectLineDrawList->" + w + "->ItemName"); + if (!gName) break; + local gId = Buffer.Get("CollectLineDrawS->" + i + "->collectLineDrawList->" + w + "->ItemId"); + local gIsHave = Buffer.Get("CollectLineDrawS->" + i + "->collectLineDrawList->" + w + "->ItemIsHave"); + local T = { + Name = gName, + Id = gId, + IsHave = gIsHave, + }; + EquArr.append(T); + } + Tobj.CollectLineObject.append(EquArr); + local gLineName = Buffer.Get("CollectLineDrawS->" + i + "->LineName"); + Tobj.CollectLineNameObject.append(gLineName); + } + } + } + + //获取收集信息 + function GetCollectInfo() { + local T = { + op = Myop + 1, + Page = NowPage, + }; + SendPack(T); + } + + //获取他人收集属性信息 + function CheckOtherPlayerCollectBooksInfo(gname) { + local T = { + op = 20026000 + 7, + name = gname + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + //获取他人总属性回调 + function GetOtherPlayerAttributeInfoCallBack(Chunk) { + local Buffer = Json_STL("CollectBooksCObjGetAttributeInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("CollectBooksCObj")) { + local Tobj = RootTab["CollectBooksCObj"]; + Tobj.CollectAttributeObject = []; + for (local i = 0; i < 22; i++) { + Tobj.CollectAttributeObject.append(Buffer.Get("buffs->" + i)); + } + Tobj.BookButtonState = false; + Tobj.AbtiButtonState = true; + Tobj.MainState = true; + Tobj.OtherState = true; + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + } + } + + + //获取总属性回调 + function GetAttributeInfoCallBack(Chunk) { + local Buffer = Json_STL("CollectBooksCObjGetAttributeInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("CollectBooksCObj")) { + local Tobj = RootTab["CollectBooksCObj"]; + Tobj.CollectAttributeObject = []; + for (local i = 0; i < 22; i++) { + Tobj.CollectAttributeObject.append(Buffer.Get("buffs->" + i)); + } + } + } + + //获取总属性 + function GetAttributeInfo() { + local T = { + op = Myop + 5, + }; + SendPack(T); + } + + constructor() { + CollectBooksLineBuf = [0, 0, 0, 0]; + //注册获取收集信息回调 + Pack_Control.rawset(Myop + 2, GetCollectInfoCallBack); + Pack_Control.rawset(Myop + 6, GetAttributeInfoCallBack); + Pack_Control.rawset(Myop + 8, GetOtherPlayerAttributeInfoCallBack); + Pack_Control.rawset(Myop + 104, MosaicAnimotionCallBack); + //获取收集信息 + GetCollectInfo(); + //获取属性信息 + GetAttributeInfo(); + } + + //绘制主界面 + function DrawMain(obj) { + //绘制主界面 + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 0, X, Y); + + BookButton = CollectTabTextButtonPro(obj, "收集图鉴收集", X + 5, Y + 10, "interface2/yosin/shoujitujian.img", 1, 70, 20, "收集概览", 10, 5); + BookButton.SwitchState = BookButtonState; + BookButton.SetRectEnble(true, "a收集图鉴收集", X + 5, Y + 10, "interface2/yosin/shoujitujian.img", 2); + BookButton.SetCustomClickEnble(true, "a收集图鉴收集", X + 5, Y + 9, "interface2/yosin/shoujitujian.img", 3); + + //收集页 + BookButton.Show(); + if (BookButton.isLBActive() && !OtherState) { + obj.sq_PlaySound("CLICK_BUTTON2"); + BookButtonState = true; + AbtiButtonState = false; + } + + AbtiButton = CollectTabTextButtonPro(obj, "收集图鉴属性", X + 75, Y + 10, "interface2/yosin/shoujitujian.img", 1, 70, 20, "属性概览", 10, 5); + AbtiButton.SwitchState = AbtiButtonState; + AbtiButton.SetRectEnble(true, "a收集图鉴属性", X + 75, Y + 10, "interface2/yosin/shoujitujian.img", 2); + AbtiButton.SetCustomClickEnble(true, "a收集图鉴属性", X + 75, Y + 10, "interface2/yosin/shoujitujian.img", 3); + + //收集页 + AbtiButton.Show(); + if (AbtiButton.isLBActive() && !OtherState) { + obj.sq_PlaySound("CLICK_BUTTON2"); + BookButtonState = false; + AbtiButtonState = true; + } + + //绘制分页线 + L_sq_DrawImg("interface2/yosin/shoujitujian.img", 4, X + 3, Y + 30); + + //属性显示页 + if (AbtiButtonState && CollectAttributeObject) { + for (local r = 0; r < 22; r++) { + L_sq_DrawCode(TabName[r] + " " + CollectAttributeObject[r], X + 20 + ((r / 10) * 170), Y + 64 + ((r % 10) * 17), sq_RGBA(255, 255, 255, 250), 1, 1); + } + } + + //收集概览显示页 + if (BookButtonState && PageTitle && CollectLineObject) { + + L_sq_DrawCode(PageTitle.Name, X + PageTitle.X, Y + PageTitle.Y, sq_RGBA(184, 249, 114, 250), 2, 1); + + for (local i = 0; i < CollectLineObject.len(); i++) { + if (CollectBooksLineBuf[i] == 0) + CollectBooksLineBuf[i] = CollectBooksLineC(CollectLineNameObject[i], CollectLineObject[i], CollectLineAttributeObject[i]); + CollectBooksLineBuf[i].Show(X + 14, Y + 60 + (i * 80)); + //L_sq_DrawImg("interface2/yosin/shoujitujian.img", 5, X + 14, Y + 60 + (i * 80)); + } + + local LeftButton = CollectBooksPro("收集图鉴左翻页", X + 310, Y + 370, "interface2/yosin/shoujitujian.img", 23, 23, 16); + LeftButton.SetRectEnble(true, "收集图鉴左翻页", X + 310, Y + 370 - 2, "interface2/yosin/shoujitujian.img", 17); + LeftButton.SetCustomClickEnble(true, "收集图鉴左翻页", X + 310, Y + 370 - 1, "interface2/yosin/shoujitujian.img", 18); + LeftButton.Show(); + if (LeftButton.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (NowPage > 1) + NowPage--; + local T = { + op = Myop + 1, + Page = NowPage, + }; + SendPack(T); + } + + L_sq_DrawCode(NowPage + " / " + MaxPage, X + 350, Y + 374, sq_RGBA(230, 200, 155, 250), 1, 1); + + local RightButton = CollectBooksPro("收集图鉴右翻页", X + 390, Y + 370, "interface2/yosin/shoujitujian.img", 23, 23, 19); + RightButton.SetRectEnble(true, "收集图鉴右翻页", X + 390, Y + 370 - 2, "interface2/yosin/shoujitujian.img", 20); + RightButton.SetCustomClickEnble(true, "收集图鉴右翻页", X + 390, Y + 370 - 1, "interface2/yosin/shoujitujian.img", 21); + RightButton.Show(); + if (RightButton.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (NowPage < MaxPage) + NowPage++; + local T = { + op = Myop + 1, + Page = NowPage, + }; + SendPack(T); + } + + for (local w = 0; w < 4; w++) { + if (CollectBooksLineBuf[w] != 0) CollectBooksLineBuf[w].ShowStr(X + 14, Y + 60 + (w * 80)); + } + + //如果镶嵌动画存在 + if (MosaicAnimotionArr) { + local AnimotionLen = MosaicAnimotionArr.len(); + for (local ai = 0; ai < AnimotionLen; ai++) { + local ani = T_DrawDynamicAni(obj, "common/collectbooks/iconslot_01.ani", MosaicAnimotionArr[ai].Ax, MosaicAnimotionArr[ai].Ay, "CollectBooksAnimotions" + ai); + if (sq_IsEnd(ani)) { + sq_Rewind(ani); + if (ai == AnimotionLen - 1) { + MosaicAnimotionArr = null; + GetCollectInfo(); + } + } + } + } + } + } + + //附加属性 + function AddAb(obj) { + if (sq_GetCurrentModuleType() == 3) { + if (!CollectAttributeObject) return; + + if (DgnAddBuff == false) { + DgnAddBuff = true; + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/collectbooks/collectbooks.nut", true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + + local change_appendage = appendage.sq_getChangeStatus("Yosin_collectbooksDgnBuff"); + if (!change_appendage) { + change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, + 0, + false, 0, 0); + } + if (change_appendage) { + change_appendage.clearParameter(); + //print(WearSlotM.Item.TabName[0]); + + foreach(Key, Value in CollectAttributeObject) { + if (Key == 0) change_appendage.addParameter(0, false, Value.tofloat()); + else if (Key == 1) change_appendage.addParameter(3, false, Value.tofloat()); + else if (Key == 2) change_appendage.addParameter(2, false, Value.tofloat()); + else if (Key == 3) change_appendage.addParameter(1, false, Value.tofloat()); + else if (Key == 4) change_appendage.addParameter(53, false, Value.tofloat()); + else if (Key == 5) change_appendage.addParameter(4, false, Value.tofloat()); + else if (Key == 6) change_appendage.addParameter(31, false, Value.tofloat()); + else if (Key == 7) change_appendage.addParameter(5, false, Value.tofloat()); + else if (Key == 8) change_appendage.addParameter(32, false, Value.tofloat()); + else if (Key == 9) change_appendage.addParameter(11, false, Value.tofloat()); + else if (Key == 10) change_appendage.addParameter(10, false, Value.tofloat()); + else if (Key == 11) change_appendage.addParameter(12, false, Value.tofloat()); + else if (Key == 12) change_appendage.addParameter(15, false, Value.tofloat() / 10.0); + else if (Key == 13) change_appendage.addParameter(16, false, Value.tofloat() / 10.0); + else if (Key == 14) change_appendage.addParameter(33, false, 0 - (Value.tofloat() / 10.0)); + + else if (Key == 15) change_appendage.addParameter(45, false, Value.tofloat()); + else if (Key == 16) change_appendage.addParameter(44, false, Value.tofloat()); + else if (Key == 17) change_appendage.addParameter(43, false, Value.tofloat()); + else if (Key == 18) change_appendage.addParameter(42, false, Value.tofloat()); + else if (Key == 19) change_appendage.addParameter(46, false, Value.tofloat()); + else if (Key == 20) { + local sss = 0 - ((Value.tofloat() / 100.00)); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, false, sss); + } else if (Key == 21) { + if (getroottable().rawin("LenheartCurrentModuleDamageRate")) { + getroottable().rawset("LenheartCurrentModuleDamageRate", getroottable()["LenheartCurrentModuleDamageRate"] + Value); + } else { + getroottable().rawset("LenheartCurrentModuleDamageRate", Value); + } + } + } + } + } + } else { + DgnAddBuff = false; + } + } + + //开启界面回调 + function OpenClassCallBack() { + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("CLICK_BUTTON1"); + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + + //获取收集信息 + GetCollectInfo(); + //获取属性信息 + GetAttributeInfo(); + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = CollectBooksWindow(X, Y, 721, 399, 10); //坐标 大小 标题栏高度 + //WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + AddAb(obj); + if (obj.isDead()) DgnAddBuff = false; + if (KeyPressNB.isKeyPress(48, "CollectBooksCloseKey")) { + MainState = false; + OtherState = false; + } + } +} + +function CollectBooks(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("CollectBooksCObj")) { + local Cobj = CollectBooksC(); + RootTab.rawset("CollectBooksCObj", Cobj); + EventIcon("收集图鉴", 121, 121, Cobj); + PlayerEachIcon("查看收集信息", Cobj.CheckOtherPlayerCollectBooksInfo); + } else { + RootTab["CollectBooksCObj"].Proc(obj); + RootTab["CollectBooksCObj"].Draw(obj); + } +} + + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("CollectBooksFunc", CollectBooks); +} else { + local T = {}; + T.rawset("CollectBooksFunc", CollectBooks); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/CollectBox/CollectBox.nut b/Plugins/CollectBox/CollectBox.nut new file mode 100644 index 0000000..d61570f --- /dev/null +++ b/Plugins/CollectBox/CollectBox.nut @@ -0,0 +1,613 @@ +/* +文件名:CollectBox.nut +路径:Plugins/CollectBox/CollectBox.nut +创建日期:2023-05-12 16:09 +文件用途: +*/ + +//HudPro按钮类 +class CollectBoxPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + + Overturn = false; //翻转 + + + //构造函数 + constructor(gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + local Xr = 1.0 + local Xoffset = 0; + + if (Overturn) { + Xr = -1.0; + Xoffset = width; + } + //L_sq_DrawImg("common/etc/combo.img", 0, 100, 100, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx + Xoffset, CustomClicky, 0, sq_RGBA(255, 255, 255, 250), Xr, 1.0); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) L_sq_DrawImg(RectBaseAnifile, RectFrame, Rectx + Xoffset, Recty, 0, sq_RGBA(255, 255, 255, 250), Xr, 1.0); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) L_sq_DrawImg(BaseAnifile, BaseFrame, x + Xoffset, y, 0, sq_RGBA(255, 255, 255, 250), Xr, 1.0); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class CollectBoxWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class CollectBoxC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + Mobj = null; //鼠标对象 + MainState = false; //主状态 + X = 211; + Y = 106; + + //收集箱类型组 + CollectBoxTypeArr = null; + //收集箱类型展示滚动控件 + Scobj = null; + //收集箱类型 + PageSlot = 0; + + + //总配置信息 + + GlobaInfo = null; + + //道具信息 + ItemInfoArr = null; + //箱子信息 + BoxInfoArr = null; + + //玩家当前箱子信息 + PlayerBoxInfo = null; + + //当前绘制道具信息 + NowDrawItemInfo = null; + NowDrawItemInfoObject = null; + //当前绘制收集箱属性信息 + NowDrawBoxSw = false; + + //当前滚轮值 + NowWheel = 0; + MaxWheel = null; + + //获取基础信息回调包 + function GetBaseInfoCallBack(Chunk) { + // Sout("收到包内容: %L", Chunk); + local Jso = Json.Decode(Chunk); + + + local StrBuf1 = L_sq_GetStringDrawArray(Jso.Message.collecText, 300); + local StrBuf2 = L_sq_GetStringDrawArray(Jso.Message.collecText, 356); + local T = { + ballLst = Jso.Message.ballLst, + collecImgName = Jso.Message.collecImgName, + collecName = Jso.Message.collecName, + collecStatus = Jso.Message.collecStatus, + // collecTextS = StrBuf1[0] + "......", + // collecTextM = StrBuf2, + collecValue = Jso.Message.collecValue, + collecTitle = Jso.Message.collecTitle, + location = Jso.Message.location, + itemlocationoffset = Jso.Message.itemlocationoffset, + collecID = Jso.Message.collecID, + } + BoxInfoArr.append(T); + + foreach(Value in Jso.Message.pvfFileLabels) { + if (Value.Name2.len() == 0) + Value.Name2 = "Yosin-Team"; + if (Value.Explain.len() == 0) + Value.Explain = " " + Jso.Message.collecName + "收集箱,所需宝珠之一。"; + ItemInfoArr.rawset(Value.Id, Value); + } + + MaxWheel.rawset(Jso.Message.collecID, Jso.Message.maxDownPull); + } + + //获取玩家收集箱信息 + function GetPlayerBoxInfo(BoxId) { + local Pack = { + op = 40001001, + CollectionID = BoxId, + } + SendPack(Pack); + } + + //获取玩家收集箱信息回调 + function GetPlayerBoxInfoCallBack(Chunk) { + + // Sout("收到包内容: %L", Chunk); + local Jso = Json.Decode(Chunk); + + local StrBuf1 = L_sq_GetStringDrawArray(Jso.Message, 300); + local StrBuf2 = L_sq_GetStringDrawArray(Jso.Message, 356); + if (BoxInfoArr) { + BoxInfoArr[Jso.CollecID].collecTextS <- StrBuf1[0] + "......"; + BoxInfoArr[Jso.CollecID].collecTextM <- StrBuf2; + } + + PlayerBoxInfo = {}; + foreach(Value in Jso.List) { + PlayerBoxInfo.rawset(Value, true); + } + + local ab = {}; + foreach(pos, value in Jso.attribute) { + ab.rawset(pos, value / 100); + } + + if ("LenheartAttributesTable" in getroottable()) { + local T = getroottable()["LenheartAttributesTable"]; + T.rawset("LenheartCollectBoxAb", ab); + } else { + local T = {}; + T.rawset("LenheartCollectBoxAb", ab); + getroottable().rawset("LenheartAttributesTable", T); + } + } + + MosaicItem = false; + + function GetPlayerItemCountCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + if (Jso.Slot != -1) { + if (!MosaicItem) { + MosaicItem = true; + + } else { + MosaicItem = false; + local T = { + op = 40001003, + CollectionID = 1, + BallID = Jso.itemid, + CollectionID = Jso.Boxid, + } + SendPack(T); + local W = { + op = 2023100806, + itemid = Jso.itemid, + itemcount = 1, + } + SendPack(W); + } + } + } + + //获取基础信息 + function GetBaseInfo() { + local T = { + op = 40001005, + } + SendPack(T); + } + + constructor() { + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + + Pack_Control.rawset(40001006, GetBaseInfoCallBack.bindenv(this)); + + Pack_Control.rawset(40001002, GetPlayerBoxInfoCallBack.bindenv(this)); + + Pack_Control.rawset(40001012, GetPlayerItemCountCallBack.bindenv(this)); + + GetBaseInfo(); + + GlobaInfo = {}; + ItemInfoArr = {}; + BoxInfoArr = []; + MaxWheel = {}; + + GetPlayerBoxInfo(0); + } + + //绘制主界面 + function DrawMain(obj) { + if (!Scobj) return; + //绘制背景框 + L_sq_DrawImg("interface2/collectbox/collectboxbtn.img", 0, X, Y); + //绘制宝珠收集箱类型 + L_sq_DrawImg(BoxInfoArr[PageSlot].collecImgName, 0, X + 7, Y + 26); + //绘制收集箱名称 + L_sq_DrawCode(BoxInfoArr[PageSlot].collecTitle, X + 208 - LenheartTextClass.GetStringLength(BoxInfoArr[PageSlot].collecTitle) / 2, Y + 40, sq_RGBA(255, 177, 0, 250), 0, 1); + + //绘制收集箱信息缩略 + if ("collecTextS" in BoxInfoArr[PageSlot]) L_sq_DrawCode(BoxInfoArr[PageSlot].collecTextS, X + 228 - LenheartTextClass.GetStringLength(BoxInfoArr[PageSlot].collecTextS) / 2, Y + 40 + 20, sq_RGBA(255, 242, 0, 250), 0, 1); + //绘制详细信息书本 + L_sq_DrawImg("interface/windowcommon.img", 262, X + 208 + 132, Y + 35); + NowDrawBoxSw = sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 208 + 132, Y + 35, 22, 22); + + + + local Count = 4; + if (BoxInfoArr.len()< 4) Count = BoxInfoArr.len(); + + for (local i = 0; i< Count; i++) { + local FocusT = Scobj.FocusList[i]; + local Pos = i; + local Vo = FocusT; + // foreach(Pos, Vo in Scobj.FocusList) { + //print(FocusT[Pos]); + local Btn = CollectBoxPro("CollectBoxButton" + FocusT[0], X + 8, Y + 95 + (i * 72), FocusT[0].collecImgName, 102, 70, 1); + Btn.SetRectEnble(true, "CollectBoxButtonr" + FocusT[0], X + 8, Y + 95 + (i * 72), FocusT[0].collecImgName, 2); + Btn.SetCustomClickEnble(true, "CollectBoxButtonc" + FocusT[0], X + 8, Y + 95 + (i * 72), FocusT[0].collecImgName, 3); + Btn.Show(); + if (Btn.isLBActive()) { + PageSlot = FocusT[0].collecID; + GetPlayerBoxInfo(FocusT[0].collecID); + NowWheel = 0; + } + // } + } + + local NowDrawItemSw = false; + foreach(Pos, Value in BoxInfoArr[PageSlot].ballLst) { + setClip(X + 110, Y + 96, X + 256 + 110, Y + 283 + 96); //开始裁切 + //绘制宝珠槽 + L_sq_DrawImg(BoxInfoArr[PageSlot].collecImgName, 5, X + BoxInfoArr[PageSlot].location[(Pos * 2)], Y + BoxInfoArr[PageSlot].location[((Pos * 2) + 1)] + NowWheel); + //绘制宝珠 + L_Sq_DrawItem(X + BoxInfoArr[PageSlot].location[(Pos * 2)] + BoxInfoArr[PageSlot].itemlocationoffset[0], Y + BoxInfoArr[PageSlot].location[((Pos * 2) + 1)] + BoxInfoArr[PageSlot].itemlocationoffset[1] + NowWheel, Value, 1, 0, 0, 0); + + if (PlayerBoxInfo && !PlayerBoxInfo.rawin(Value)) { + L_sq_DrawImg("interface/windowcommon.img", 157, X + BoxInfoArr[PageSlot].location[(Pos * 2)] + BoxInfoArr[PageSlot].itemlocationoffset[0], Y + BoxInfoArr[PageSlot].location[((Pos * 2) + 1)] + BoxInfoArr[PageSlot].itemlocationoffset[1] + NowWheel); + L_sq_DrawImg("interface/windowcommon.img", 157, X + BoxInfoArr[PageSlot].location[(Pos * 2)] + BoxInfoArr[PageSlot].itemlocationoffset[0], Y + BoxInfoArr[PageSlot].location[((Pos * 2) + 1)] + BoxInfoArr[PageSlot].itemlocationoffset[1] + NowWheel); + } + releaseClip(); //裁切结束 + + if (IMouse.GetXPos() >= X + 108 && IMouse.GetXPos() <= X + 108 + 254 && IMouse.GetYPos() >= Y + 90 && IMouse.GetYPos() <= Y + 90 + 285) { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + BoxInfoArr[PageSlot].location[(Pos * 2)] + BoxInfoArr[PageSlot].itemlocationoffset[0], Y + BoxInfoArr[PageSlot].location[((Pos * 2) + 1)] + BoxInfoArr[PageSlot].itemlocationoffset[1] + NowWheel, 24, 24)) { + // ItemDrawState = true; + NowDrawItemInfo = {}; + NowDrawItemInfo.x <- (X + 32 + BoxInfoArr[PageSlot].location[(Pos * 2)]); + NowDrawItemInfo.y <- (Y + 18 + BoxInfoArr[PageSlot].location[((Pos * 2) + 1)] + NowWheel); + NowDrawItemInfo.itemid <- Value; + NowDrawItemSw = true; + if (!PlayerBoxInfo.rawin(Value)) { + if (getroottable()["MouseObject"].LbEvent) { + local T = { + op = 2023100802, + realop = 40001012, + itemid = Value + Boxid = PageSlot, + } + SendPack(T); + } + } + L_sq_WA(0x1b46898, 12); + } else { + + // ItemDrawState = false; + } + } + } + if (!NowDrawItemSw) { + NowDrawItemInfo = null; + NowDrawItemInfoObject = null; + MosaicItem = false; + } + } + + function DrawItemInfo(obj) { + if (NowDrawItemInfo) { + if (!NowDrawItemInfoObject) { + NowDrawItemInfoObject = ItemInfoClass(ItemInfoArr[NowDrawItemInfo.itemid]); + } + NowDrawItemInfoObject.Show(NowDrawItemInfo.x + 20 - (211 / 2), NowDrawItemInfo.y - NowDrawItemInfoObject.PageLength); + } + } + + + function DrawBoxAbInfo(obj) { + if (NowDrawBoxSw) { + L_sq_DrawWindow(X + 208 + 132 - 258, Y + 35, 258, BoxInfoArr[PageSlot].collecTextM.len() * 16, "interface2/popup/popup.img", 134, 6, 12, 6, 13); + foreach(Pos, Value in BoxInfoArr[PageSlot].collecTextM) { + L_sq_DrawCode(Value, X + 208 + 132 - 258 + 7, Y + 35 + (Pos * 16) + 7, sq_RGBA(255, 242, 0, 250), 0, 1); + } + } + if (MosaicItem) { + L_sq_DrawWindow(IMouse.GetXPos() + 20, IMouse.GetYPos() + 20, 219, 16, "interface2/popup/popup.img", 134, 6, 12, 6, 13); + + L_sq_DrawCode("注意:镶嵌不可恢复,确认镶嵌请再次点击。", IMouse.GetXPos() + 20 + 7, IMouse.GetYPos() + 20 + 7, sq_RGBA(255, 242, 0, 250), 0, 1); + } + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + + if (BoxInfoArr.len() > 0) { + if (BoxInfoArr.len()< 4) Scobj = ScrollControl(BoxInfoArr, 1, BoxInfoArr.len()); + else Scobj = ScrollControl(BoxInfoArr, 1, 4); + } + + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + + DrawMain(obj); + DrawItemInfo(obj); + DrawBoxAbInfo(obj); + } else { + WindowObj = LenheartWindow(X, Y, 378, 387, 28); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (MainState) { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y + 90, 105, 285)) { + if (IMouse.IsWheelUp()) { + Scobj.M(); + } + if (IMouse.IsWheelDown()) { + Scobj.A(); + } + } + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 108, Y + 90, 254, 285)) { + if (IMouse.IsWheelUp()) { + if (NowWheel<(0)) NowWheel += 15; + } + if (IMouse.IsWheelDown()) { + if (NowWheel > (MaxWheel[PageSlot])) NowWheel -= 15; + } + } + } + + + if (KeyPressNB.isKeyPress(48, "CollectBoxCloseKey")) { + MainState = false; + MosaicItem = false; + } + } +} + +function CollectBox(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("CollectBoxCObj")) { + local Cobj = CollectBoxC(); + RootTab.rawset("CollectBoxCObj", Cobj); + EventIcon("宝珠收集箱", 119, 119, Cobj); + } else { + RootTab["CollectBoxCObj"].Proc(obj); + RootTab["CollectBoxCObj"].Draw(obj); + } +} + + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("CollectBoxFunc", CollectBox); +} else { + local T = {}; + T.rawset("CollectBoxFunc", CollectBox); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/DamageFont/DamageFont.nut b/Plugins/DamageFont/DamageFont.nut new file mode 100644 index 0000000..9db8660 --- /dev/null +++ b/Plugins/DamageFont/DamageFont.nut @@ -0,0 +1,798 @@ +/* +文件名:DamageFont.nut +路径:Plugins/DamageFont/DamageFont.nut +创建日期:2023-06-25 18:00 +文件用途:伤害字体 +*/ + +//HudPro按钮类 +class DamageFontIMGPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + function T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName) { + L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx, CustomClicky); + } + + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class DamageFontWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class DamageFontObjectC extends BasicsDrawTool { + X = 0; + Y = 0; + IDX = null; + UIdx = null; + Name = null; + ImgPath = null; + MaxNumArr = null; + Mobj = null; //鼠标对象 + ID = null; + + constructor(gIdx, gName, gImgPath, gMaxNumArr, gUIdx, gId) { + this.IDX = gIdx; + this.Name = gName; + this.ImgPath = gImgPath; + this.MaxNumArr = gMaxNumArr; + this.UIdx = gUIdx; + this.ID = gId; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //绘制 + function Show(obj, x, y) { + X = x; + Y = y; + + //绘制底 + L_sq_DrawImg("interface2/skinstorage/slots.img", 0, x, y); + //绘制伤害字体999 + // local Idx = 70; + // if (MaxNumArr.len() >= 3) Idx = 72; + // L_sq_DrawImg(ImgPath, Idx, x + 3, y + 26); + L_Sq_DrawItem(X + 22, Y + 23, ID, 1, 0, 0, 0); + //绘制盖子 + L_sq_DrawImg("interface2/skinstorage/slots.img", 2, x, y); + // + L_sq_DrawCode(Name, X + 84, Y + 23, sq_RGBA(178, 155, 113, 250), 0, 1); + L_sq_DrawCode("Yosin皮肤字体", X + 84, Y + 40, sq_RGBA(255, 177, 0, 250), 0, 1); + L_sq_DrawCode("无限制使用", X + 84, Y + 55, sq_RGBA(255, 85, 0, 250), 0, 1); + + + //绘制选中效果 + if (getroottable()["DamageFontCObj"].FocusPrintIdx == IDX) L_sq_DrawImg("interface2/skinstorage/slots.img", 4, x, y); + //绘制应用中 + if (getroottable()["DamageFontCObj"].NowDamageSkinIndex == IDX) L_sq_DrawImg("interface2/skinstorage/slots.img", 23, x + 290, y + 3); + + + //绘制应用按钮 + local Button = DamageFontIMGPro(obj, "应用", x + 284, y + 26, "interface2/yosin/windowscommon.img", 56, 24, 12); + Button.SetRectEnble(true, "应用", x + 284, y + 26, "interface2/yosin/windowscommon.img", 13); + Button.SetCustomClickEnble(true, "应用", x + 284, y + 26, "interface2/yosin/windowscommon.img", 14); + Button.Show(); + if (Button.isInRect()) L_sq_DrawCode("应用", Button.x + 16, Button.y + 5, sq_RGBA(231, 198, 132, 250), 0, 1); + else L_sq_DrawCode("应用", Button.x + 16, Button.y + 5, sq_RGBA(189, 148, 99, 250), 0, 1); + if (Button.isLBActive()) { + local T = { + op = 20024003, + UseIdx = UIdx, + } + SendPack(T); + getroottable()["DamageFontCObj"].NowDamageSkinIndex = IDX; + getroottable()["DamageFontCObj"].InitDamageFont(IDX); + } + + if (isLBActive()) { + getroottable()["DamageFontCObj"].FocusPrintIdx = IDX; + getroottable()["DamageFontCObj"].InitDamageFont(IDX); + } + } + + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, X, Y, 354, 74)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class DamageFontC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 6; + Y = 6; + + //当前字体皮肤编号 + NowDamageSkinIndex = null; + //字体皮肤数据 + DamageSkinList = null; + //数字伤害类型 + RealType = null; + //滚动列表对象 + Sobj = null; + + //最大伤害数字 + MaxDamageNumber = 999999; + + //显示对象 + FocusPrintIdx = 0; + //Nut白字倍率 + NutWRate = 0; + + //获取字体列表信息 + function GetFontList() { + local T = { + op = 20024001, + } + SendPack(T); + } + + //获取字体列表信息回调 + function GetFontListCallBack(Chunk) { + // Sout("收到包 %L", Chunk); + local Buffer = Json_STL("CheckDamageFontCObjGetBaseInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("DamageFontCObj")) { + local Tobj = RootTab["DamageFontCObj"]; + Tobj.DamageSkinList = null; + Tobj.DamageSkinList = []; + + Tobj.MaxDamageNumber = Buffer.Get("MaxDamageNumber"); + // Tobj.MaxDamageNumber = 9999; + Tobj.NowDamageSkinIndex = Buffer.Get("UseIdx"); + Tobj.FocusPrintIdx = Buffer.Get("UseIdx"); + + for (local i = 0; i< 100; i++) { + local gIdx = Buffer.Get("FontArray->" + i + "->gIdx"); + if (gIdx == false) break; + local cIdx = Buffer.Get("FontArray->" + i + "->cIdx"); + local gName = Buffer.Get("FontArray->" + i + "->gName"); + local gItem = Buffer.Get("FontArray->" + i + "->itemId"); + + local gImgPath = Buffer.Get("FontArray->" + i + "->gImgPath"); + + + local gMaxNumArr = []; + for (local z = 0; z< 100; z++) { + local buf = Buffer.Get("FontArray->" + i + "->gMaxNumArr->" + z); + if (!buf) break; + gMaxNumArr.append(buf); + } + local gKeyMaxNumArr = []; + for (local y = 0; y< 100; y++) { + local buf = Buffer.Get("FontArray->" + i + "->gKeyMaxNumArr->" + y); + if (!buf) break; + gKeyMaxNumArr.append(buf); + } + local T = { + Idx = cIdx, //伤害字体排列编号 + UIdx = gIdx, //伤害字体编号 + Name = gName, //伤害字体名称 + ImgPath = gImgPath, //Img路径 + MaxNumArr = gMaxNumArr, //普通999帧数数组 + KeyMaxNumArr = gKeyMaxNumArr, //暴击999帧数数组 + Item = gItem, //道具ID + } + Tobj.DamageSkinList.append(T); + } + Tobj.InitDamageFont(Tobj.NowDamageSkinIndex); + Tobj.Sobj = ScrollControl(Tobj.DamageSkinList, 5, 1); + } + } + + //初始化伤害字体 + function InitDamageFont(Idx) { + if (Idx == null) { + for (local i = 0; i< 7; i++) { + L_sq_IntiNumberDraw("common/etc/damagefontskin/damagefont00.img", 0 + (i * 10), i); + } + } else { + for (local i = 0; i< 7; i++) { + L_sq_IntiNumberDraw(DamageSkinList[Idx].ImgPath, 0 + (i * 10), i); + } + } + } + + //初始化数字伤害类型 + function InitRealType() { + RealType = [0, 5, 1, 5, 2, 5, 1, 2, 3, 5, 4, 5, 3, 5, 4, 5, 0, 5, 4, 5, 2, 5, 4]; + // //白字 + // RealType.rwaset(0, 0); + // //橙字 + // RealType.rwaset(1, 1); + // //回血 绿字 + // RealType.rwaset(7, 2); + // //回蓝 蓝字 + // RealType.rwaset(8, 3); + // //流血 + // RealType.rwaset(34, 4); + + } + + constructor() { + Pack_Control.rawset(20024002, GetFontListCallBack); + + //初始化伤害类型 + InitRealType(); + + DamageFontArray = {}; + DamageSkinList = []; + + local T = { + Idx = 0, //伤害字体排列编号 + UIdx = 0, //伤害字体编号 + Name = "默认伤害字体", //伤害字体名称 + ImgPath = "common/etc/damagefontskin/damagefont00.img", //Img路径 + MaxNumArr = [73, 72], //普通999帧数数组 + KeyMaxNumArr = [71, 70], //暴击999帧数数组 + Item = 19880400, //道具ID + } + DamageSkinList.append(T); + + //初始化伤害字体 + InitDamageFont(NowDamageSkinIndex); + + //获取字体列表信息 + GetFontList(); + } + + //绘制主界面 + function DrawMain(obj) { + //绘制窗口 + L_sq_DrawImg("interface2/skinstorage/skinstorage.img", 0, X, Y); + //绘制字体排列窗口 + L_sq_DrawImg("interface2/skinstorage/skinstorage.img", 5, X + 421 - 9, Y + 108 - 67); + + //总览 + L_sq_DrawImg("interface2/skinstorage/tab/tab_summary.img", 3, X + 421 - 8, Y + 46 - 8); + //边框 + L_sq_DrawImg("interface2/skinstorage/tab/tab_partyframe.img", 3, X + 487 - 8, Y + 46 - 8); + //伤害字体 + L_sq_DrawImg("interface2/skinstorage/tab/tab_damagefonts.img", 2, X + 533 + 4, Y + 42 - 3); + //觉醒插图 + L_sq_DrawImg("interface2/skinstorage/tab/tab_cutscene.img", 3, X + 609 - 7, Y + 52 - 14); + //表情 + L_sq_DrawImg("interface2/skinstorage/tab/tab_instantemoticon.img", 3, X + 674 - 16, Y + 49 - 11); + //表情 + L_sq_DrawImg("interface2/skinstorage/tab/tab_weaponlook.img", 3, X + 722 - 7, Y + 55 - 17); + + + + if (Sobj) { + foreach(Pos, v in Sobj.FocusList[0]) { + local Dobj = DamageFontObjectC(v.Idx, v.Name, v.ImgPath, v.MaxNumArr, v.UIdx, v.Item); + Dobj.Show(obj, X + 425, Y + 114 + (Pos * 85)); + } + L_sq_DrawCode((Sobj.Controller.Value + 1).tostring(), X + 586, Y + 537, sq_RGBA(150, 255, 30, 250), 0, 1); + L_sq_DrawCode(" / " + (Sobj.Controller.MaxValue + 1).tostring(), X + 586, Y + 537, sq_RGBA(150, 255, 30, 250), 0, 1); + } + + + + local chr = sq_GetCNRDObjectToSQRCharacter(obj); + local charAni = chr.sq_GetStayAni(); + sq_AnimationProc(charAni); + sq_drawCurrentFrame(charAni, X + 210, Y + 364, false); + + local MonsterAni = T_DrawDynamicAni_Fx(obj, "monster/goblin/animation_goblin2/down.ani", X + 360, Y + 364, "伤害字体哥布林倒地"); + local NeArray = TryGetArry(1); + if (sq_GetCurrentTime(MonsterAni) >= 1000 && NeArray.len() == 0) { + local Timer = TimeSTL("演示字体" + FontIdx, 2000); + Timer.Reset(); + Timer.Start(); + local T = { + Idx = "演示字体" + FontIdx, + XPos = X + 166, + YPos = Y + 230, + DamageNum = 999999999, + Type = 5, + TimeObj = Timer, + isKeyHit = false, + } + NeArray.append(T); + DamageFontArray.rawset(1, NeArray); + sq_Rewind(MonsterAni); + } + + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + if (sq_GetMapIndex(sq_GetGlobaludpModuleStage()) >= 0) MainState = false; + //获取字体列表信息 + GetFontList(); + if (DamageSkinList.len() > 0) Sobj = ScrollControl(DamageSkinList, 5, 1); + } + + //绘制入口 + function Draw(obj) { + + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = DamageFontWindow(X, Y, 788, 576, 28); //坐标 大小 标题栏高度 + //WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + + + //绘制字体 + if (sq_GetCurrentModuleType() == 3 || MainState) DrawFont(obj); + //回到城镇清空字体数组 + else { + DamageFontArray = null; + DamageFontArray = {}; + MapBaseXPos = 0; + MapBaseYPos = 0; + } + + } + + //设置NUT白字 + function SetNutRate() { + // local allRate = 1.0; + // for (local i = 1; i < 41; i++) { + // allRate = allRate * (sq_GetIntData(obj, 169, i) / 100).tofloat(); + // } + // for (local w = 1; w < 21; w++) { + // allRate = allRate * (sq_GetIntData(obj, 174, w) / 100).tofloat(); + // } + NutWRate = 1.0; + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "DamageFontCloseKey")) { + MainState = false; + } + if (MainState) { + if (IMouse.IsWheelUp()) { + Sobj.M(); + } + if (IMouse.IsWheelDown()) { + Sobj.A(); + } + } + + //设置地图原点 + SetMapBasePos(obj); + //设置NUT白字 + SetNutRate(); + } + + FontIdx = 0; + MapBaseXPos = 0; + MapBaseYPos = 0; + DamageFontArray = null; + + //设置地图原点 + function SetMapBasePos(obj) { + local objectManager = obj.getObjectManager(); + if (!objectManager) return; + MapBaseXPos = objectManager.getFieldXPos(0, ENUM_DRAWLAYER_NORMAL); + MapBaseYPos = objectManager.getFieldYPos(0, 0, ENUM_DRAWLAYER_NORMAL); + } + + function TryGetArry(Type) { + if (DamageFontArray.rawin(Type)) return DamageFontArray[Type]; + else return []; + } + + + //将伤害字体数据Push进数组 + function PushDamageFontArray(ObjAddress, X, Y, Z, Value, Type) { + local Timer = TimeSTL("DamageFontTimer" + ObjAddress + FontIdx, 2000); + Timer.Reset(); + Timer.Start(); + local gRealType; + if (Type <= 7) gRealType = RealType[Type]; + else gRealType = RealType[((Type - 7) % 16) + 7]; + //暴击 + local KeyHit = false; + if (Type == 17) KeyHit = true; + //是扣血还是回血 + if (Type == 7) { + if (Value< 0) gRealType = 4; + } + if (Type == 4) { + if (Value< 0) gRealType = 0; + } + if (Type == 1 || Type == 17) { + local oldDamageNum = Value; + Value = (Value / NutWRate).tointeger(); + local newDamageNum = oldDamageNum - Value; + local NeArray = TryGetArry(Type); + local Timer = TimeSTL("WDamageFontTimer" + ObjAddress + FontIdx, 2000); + Timer.Reset(); + Timer.Start(); + local T = { + Idx = ObjAddress + FontIdx, + XPos = X, + YPos = Y - Z - (NeArray.len() * 6), + DamageNum = Value, + Type = 0, + TimeObj = Timer, + isKeyHit = KeyHit, + } + NeArray.append(T); + DamageFontArray.rawset(Type, NeArray); + ++FontIdx; + } + local NeArray = TryGetArry(Type); + local T = { + Idx = ObjAddress + FontIdx, + XPos = X, + YPos = Y - Z - (NeArray.len() * 6), + DamageNum = Value, + Type = gRealType, + TimeObj = Timer, + isKeyHit = KeyHit, + } + NeArray.append(T); + DamageFontArray.rawset(Type, NeArray); + ++FontIdx; + } + + function DrawFontImg(X, Y, Type, DamageNum, Time, isKeyHit) { + local rate = sq_GetUniformVelocity(60, 100, Time, 100); + rate = rate.tofloat() / 100.0; + //如果暴击 + if (isKeyHit) { + rate *= 1.3; + Type = 4; + } + //白字 + if (Type == 0) { + rate *= 0.7; + Y += 60; + } + local UpOffset = 0; + //超过0.3秒开始飘 + if (Time >= 600) { + UpOffset = sq_GetUniformVelocity(0, 30, Time - 600, 500); + } + if (DamageNum > MaxDamageNumber) { + if (isKeyHit) { + foreach(imgpos in DamageSkinList[FocusPrintIdx].KeyMaxNumArr) { + L_sq_DrawImg(DamageSkinList[FocusPrintIdx].ImgPath, imgpos, X + ((30 * (MaxDamageNumber.tostring().len())) - ((20 * (MaxDamageNumber.tostring().len())) * rate)), Y + (20 - (20 * rate)) - UpOffset, 0, sq_RGBA(255, 255, 255, 255 - (UpOffset * 8)), rate, rate); + } + } else { + foreach(imgpos in DamageSkinList[FocusPrintIdx].MaxNumArr) { + L_sq_DrawImg(DamageSkinList[FocusPrintIdx].ImgPath, imgpos, X + ((30 * (MaxDamageNumber.tostring().len())) - ((20 * (MaxDamageNumber.tostring().len())) * rate)), Y + (20 - (20 * rate)) - UpOffset, 0, sq_RGBA(255, 255, 255, 255 - (UpOffset * 8)), rate, rate); + } + } + } else { + L_sq_DrawNumber(X + ((30 * (DamageNum.tostring().len())) - ((20 * (DamageNum.tostring().len())) * rate)), Y + (20 - (20 * rate)) - UpOffset, sq_RGBA(255, 255, 255, 255 - (UpOffset * 8)), rate, rate, Type, 18 * rate, 6, sq_Abs(DamageNum)); + } + } + + //伤害字体绘制 + function DrawFont(obj) { + foreach(Type, FontArrayObject in DamageFontArray) { + if (Type == 0) continue; + for (local i = 0; i< FontArrayObject.len(); i++) { + local FontObject = FontArrayObject[i]; + if (FontObject) { + local Timer = FontObject.TimeObj; + if (Timer) { + local Time = Timer.Get(); + if (Time >= 1100) { + FontObject.TimeObj.Delete(); + FontObject.TimeObj = null; + FontArrayObject.remove(i); + continue; + } else { + DrawFontImg(FontObject.XPos - MapBaseXPos, FontObject.YPos - MapBaseYPos, FontObject.Type, FontObject.DamageNum, Time, FontObject.isKeyHit); + //L_sq_DrawCode(FontObject.DamageNum.tostring(), FontObject.XPos - MapBaseXPos, FontObject.YPos - (Time / 100) - MapBaseYPos, sq_RGBA(255, 255, 184, 250), 0, 1); + } + } + } + } + } + //白字 + foreach(Type, FontArrayObject in DamageFontArray) { + if (Type != 0) break; + for (local i = 0; i< FontArrayObject.len(); i++) { + local FontObject = FontArrayObject[i]; + if (FontObject) { + local Timer = FontObject.TimeObj; + if (Timer) { + local Time = Timer.Get(); + if (Time >= 1100) { + FontObject.TimeObj.Delete(); + FontObject.TimeObj = null; + FontArrayObject.remove(i); + continue; + } else { + DrawFontImg(FontObject.XPos - MapBaseXPos, FontObject.YPos - MapBaseYPos, FontObject.Type, FontObject.DamageNum, Time, FontObject.isKeyHit); + //L_sq_DrawCode(FontObject.DamageNum.tostring(), FontObject.XPos - MapBaseXPos, FontObject.YPos - (Time / 100) - MapBaseYPos, sq_RGBA(255, 255, 184, 250), 0, 1); + } + } + } + } + } + } + + function T_DrawDynamicAni_Fx(obj, aniFileName, x, y, aniname) { + local ani = obj.getVar().GetAnimationMap(aniname, aniFileName); + ani.setImageRateFromOriginal(-1.0, 1.0); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, x, y, true); + return ani; + } +} + +function DamageFont(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("DamageFontCObj")) { + local Cobj = DamageFontC(); + RootTab.rawset("DamageFontCObj", Cobj); + EventIcon("皮肤仓库", 70, 70, Cobj); + } else { + RootTab["DamageFontCObj"].Proc(obj); + RootTab["DamageFontCObj"].Draw(obj); + } +} + + +function Sq_PushDamageFontData(ObjAddress, X, Y, Z, Value, Type) { + // Sout("对象地址: %L", ObjAddress); + // Sout("X坐标: %L", X); + // Sout("Y坐标: %L", Y); + // Sout("Z坐标: %L", Z); + // Sout("伤害数值: %L", Value); + // Sout("伤害类型: %L", Type); + + getroottable()["DamageFontCObj"].PushDamageFontArray(ObjAddress, X - 100, Y, Z, Value, Type); +} \ No newline at end of file diff --git a/Plugins/DragonBox/DragonBox.nut b/Plugins/DragonBox/DragonBox.nut new file mode 100644 index 0000000..4c5ecb6 --- /dev/null +++ b/Plugins/DragonBox/DragonBox.nut @@ -0,0 +1,739 @@ +DB <- null +BoxStetu <- 0 //???????? +Box_Redom_Model <- 0 //?????��??? +Box_Open_Stetu <- 0 //????????? + +class DargonBoxButton // obj -- 按钮名称 -- 鼠标对象 -- X坐标 -- Y坐标 -- 宽度 -- 高度 -- Ani调用路径 -- Ani宽度 -- Ani高度 -- AniRGB -- +{ + obj = null; + buttonName = null; + IMouse = null; + x = null; + y = null; + width = null; + length = null; + aniFileName = null; + BoxStetu = null; + + constructor(gObj, gButtonName, gIMouse, gX, gY, gWidth, gLength, ganiFileName) { + obj = gObj; + buttonName = gButtonName; + IMouse = gIMouse; + x = gX; + y = gY; + width = gWidth; + length = gLength; + aniFileName = ganiFileName; + BoxStetu = BoxStetu; + } + + function drawButtonImage() { + if (isDown()) + y++; + + if (isInRect()) { + local buttonAniEff = obj.getVar().GetAnimationMap(buttonName + "rect", aniFileName.tostring() + "_2.ani"); + sq_AnimationProc(buttonAniEff); + sq_drawCurrentFrame(buttonAniEff, x, y, true); + } + if (!isInRect()) { + local buttonAni = obj.getVar().GetAnimationMap(buttonName, aniFileName.tostring() + "_1.ani"); + sq_AnimationProc(buttonAni); + sq_drawCurrentFrame(buttonAni, x, y, true); + } + } + + function isInRect() { + local mouseX = IMouse.GetXPos(); + local mouseY = IMouse.GetYPos(); + if (sq_IsIntersectRect(mouseX, mouseY, 5, 5, x, y, width, length)) + return true; + return false; + } + + function isDown() { + if (isInRect() && IMouse.IsLBDown()) { + obj.getVar(buttonName).setBool(0, true); + return true; + } + return false; + } + + function isActive() { + if (isInRect() && IMouse.IsLBUp() && obj.getVar(buttonName).getBool(0)) { + obj.getVar(buttonName).setBool(0, false); + return true; + } + return false; + } +} + +class DarBox { + DragonboxJson = null; //龙盒Json对象 + op = null; //回调包活动状态 + Rest = 0; //重置值 + Box_Index = null; //盒子的编号 + BoxDoselect = null; //抽奖次数 + + thisname = null; //对象名称 + State = 0; //龙盒状态 + err = 0; //错误信息 + lucky_value = 0; //幸运值 + box_num = 0; //盒子数量 + + GradeAni = null; //开盒子的Ani + BoxEffAni = null; //开盒子的背景Ani + OneBoxAni = null; //单抽 盒子 Ani + OneBoxAniEff = null; //单抽 Eff + OneBoxSound = 0; //单抽盒子音效 + OneBoxEffSound = 0; //单抽盒子音效 + OneSyncPack = 0; //单抽同步状态 + + + TenGradeAni = []; + TenBoxEffAni = []; + TenBoxAniArr = []; //十连抽盒子Ani数组 + TenBoxAniEffArr = []; //十连抽 Eff 数组 + TenBoxSound = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //十连抽盒子音效 + TenBoxEffSound = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //十连抽盒子音效 + TenSyncPack = 0; + + ItemIndexArr = []; //定义物品编号数组 + ItemNumArr = []; //定义物品数量数组 + ItenGradeArr = []; //定义物品品级数组 + ItenName = []; //定义物品名称 + + //构造对象 对象名称 并且获取一次Model + constructor(G_thisname) { + thisname = G_thisname; + DragonboxJson = Json_STL("DragonBox"); //初始化龙盒Json对象 + op = DragonboxJson.Get("op"); + + TenGradeAni.resize(10); //初始化 + TenBoxEffAni.resize(10); //初始化 + TenBoxAniArr.resize(10); //初始化 + TenBoxAniEffArr.resize(10); //初始化 + + ItemIndexArr.resize(10); //初始化 + ItemNumArr.resize(10); //初始化 + ItenGradeArr.resize(10); //初始化 + ItenName.resize(10); //初始化 + } + + //还原对象 + function reset() { + sq_Rewind(OneBoxAni); //还原单抽Ani + sq_Rewind(OneBoxAniEff); //还原单抽Ani + + for (local i = 0; i < 10; ++i) //还原十连抽Ani + { + sq_Rewind(TenBoxAniArr[i]); + sq_Rewind(TenBoxAniEffArr[i]); + + } + + op = null; //龙盒模式 + lucky_value = 0; //幸运值 + box_num = 0; //盒子数量 + + GradeAni = null; //开盒子的Ani + BoxEffAni = null; //开盒子的背景Ani + OneBoxAni = null; //单抽 盒子 Ani + OneBoxAniEff = null; //单抽 Eff + OneSyncPack = 0; //单抽同步状态 + TenGradeAni = []; + TenBoxEffAni = []; + TenBoxAniArr = []; //十连抽盒子Ani数组 + TenBoxAniEffArr = []; //十连抽 Eff 数组 + TenSyncPack = 0; + + ItemIndexArr = []; //定义物品编号数组 + ItemNumArr = []; //定义物品数量数组 + ItenGradeArr = []; //定义物品品级数组 + ItenName = []; //定义物品名称数组 + + TenGradeAni.resize(10); //初始化 + TenBoxEffAni.resize(10); //初始化 + TenBoxAniArr.resize(10); //初始化 + TenBoxAniEffArr.resize(10); //初始化 + + ItemIndexArr.resize(10); //初始化 + ItemNumArr.resize(10); //初始化 + ItenGradeArr.resize(10); //初始化 + ItenName.resize(10); //初始化 + + + BoxStetu = 0; + Box_Redom_Model = 0; //盒子切换模式 + Box_Open_Stetu = 0; //开盒子的状态 + } + //获取 Model 是否开盒子状态 + function GetModel() { + op = DragonboxJson.Get("op"); + err = DragonboxJson.Get("err"); + BoxDoselect = DragonboxJson.Get("doselect"); + } + //初始化 还原 龙盒Model + function Model_Init() { + Rest = 0; //还原重置值 + box_num = DragonboxJson.Get("boxnum"); + lucky_value = DragonboxJson.Get("lucky_value"); + Box_Index = DragonboxJson.Get("itemindex"); + } + //绘制数字 + function DrawNumberAni(obj, xPos, yPos, num, str, Interval, OneDeviation) { + local len = (num.tostring()).len(); + for (local i = 0; i < len; i++) { + local one = 0; + local DrawNum = (num.tostring()).slice(i, i + 1); + if (i != (len - 1)) one += OneDeviation * abs(i - (len - 1)); + local ani = obj.getVar().GetAnimationMap("db" + DrawNum + str, str + DrawNum + ".ani"); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, xPos + (i * Interval) + one, yPos, true); + } + } + + //绘制幸运值 + function DrawLucky(obj, x, y, type) { + switch (type) { + case 0: + local ani = obj.getVar().GetAnimationMap("DrawLucky", "common/dargonbox/animation/db_newani_bd.ani"); + sq_AnimationProc(ani); + sq_DrawSpecificFrame(ani, x, y, false, lucky_value, false, 1.0); + break; + case 1: + DrawAni(obj, "common/dargonbox/animation/gauge_normal.ani", x - 33, y - 42); + break; + } + DrawNumberAni(obj, x + 54, y + 68, lucky_value, "common/dargonbox/lucky/db_bdnum_", 10, -2); + local Offset; + if (lucky_value < 10) Offset = 0; + if (lucky_value >= 10 && lucky_value < 100) Offset = 10; + if (lucky_value == 100) Offset = 20; + DrawAni(obj, "common/dargonbox/lucky/db_bdnum_%.ani", x + 65 + Offset, y + 67); + } + //绘制图像 + function DrawAni(obj, aniFileName, x, y) { + local ani = obj.getVar().GetAnimationMap("aniname" + aniFileName, aniFileName); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, x, y, true); + return ani; + } + //绘制盒子图像 + function DrawBoxAni(obj, aniname, aniFileName, x, y) { + local ani = obj.getVar().GetAnimationMap(aniname, aniFileName); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, x, y, true); + return ani; + } + //绘制动态可选是否循环Ani + function DatgonBoxDrawDynamicAni(obj, aniFileName, x, y, Loop) { + local ani = DrawAni(obj, aniFileName, x, y); + if (sq_IsEnd(ani) && Loop) { + sq_Rewind(ani); + } + return ani; + } + + //绘制打开盖子动画 + function DargonBoxOpenAni(obj, aniFileName, x, y) { + local ani = DrawAni(obj, aniFileName, x, y); + if (sq_GetAnimationFrameIndex(ani) == 1) { + obj.sq_PlaySound("ANCIENTBOX_WHEEL"); + } + if (sq_IsEnd(ani)) { + Box_Redom_Model = 2; //盒子切换模式 变为2 可以抽奖状态 + sq_Rewind(ani); + } + return ani; + } + //绘制关闭盖子动画 + function DargonBoxCloseAni(obj, aniFileName, x, y) { + local ani = DrawAni(obj, aniFileName, x, y); + + if (sq_IsEnd(ani)) { + Box_Redom_Model = 1; //关闭盖子以后吧 模式切换为1 播放打开盖子 + sq_Rewind(ani); + } + return ani; + } + //设置龙盒 切换模式 + function SelectRedomModel() { + if (Box_Redom_Model == 0) + Box_Redom_Model = 1; + else if (Box_Redom_Model == 2) + Box_Redom_Model = 3; + } + + + //判断 并还原单抽Ani + function RewindOpenDargonBox(obj) { + if (OneBoxAni == null || OneBoxAniEff == null) return true; + //如果 Ani播放完了可以重置 或者是 都没有播放也可以重置 + if ((sq_IsEnd(OneBoxAni) && sq_IsEnd(OneBoxAniEff))) { + sq_Rewind(OneBoxAni); + OneBoxSound = 0; //还原音效判断 + sq_Rewind(OneBoxAniEff); + OneBoxEffSound = 0; + } + if ((sq_GetAnimationFrameIndex(OneBoxAni) == -1 && sq_GetAnimationFrameIndex(OneBoxAniEff) == -1)) { + OneSyncPack = 0; + return true; + } else return false; + } + + //判断 并还原十连抽Ani + function RewindTenOpenDargonBox(obj) { + local num = 0; + for (local i = 0; i < 10; ++i) { + if (TenBoxAniArr[i] == null || TenBoxAniEffArr[i] == null) return true; + //如果 Ani播放完了可以重置 或者是 都没有播放也可以重置 + if ((sq_IsEnd(TenBoxAniArr[i]) && sq_IsEnd(TenBoxAniArr[i]))) { + num++; + } + } + if (num != 10) return false; + + for (local i = 0; i < 10; ++i) { + sq_Rewind(TenBoxAniArr[i]); + TenBoxSound[i] = 0; + sq_Rewind(TenBoxAniEffArr[i]); + TenBoxEffSound[i] = 0; + } + TenSyncPack = 0; + return true; + } + + //绘制 单抽 动画 和奖励 + function OneOpenDargonBox(obj, X_Pos, Y_Pos) { + GetModel(); + if (op != 4 || BoxDoselect != 1) return; //不是单抽就返回 + local ItemIndex = DragonboxJson.Get("result->0->item"); + local ItemNum = DragonboxJson.Get("result->0->num"); + local ItemGrade = DragonboxJson.Get("result->0->grade"); + local ItemName = DragonboxJson.Get("result->0->itemname"); + lucky_value = DragonboxJson.Get("lucky_value"); + box_num = DragonboxJson.Get("boxnum"); + switch (OneSyncPack) { + case 0: + OneSyncPack = 1; + return; //返回 下一次进来继续判断 是否已经同步了最新的包 + break; + case 1: + switch (ItemGrade) //判断品级给随机渲染动画 + { + case 0: + GradeAni = "box_b"; + BoxEffAni = "b"; + break; + case 1: + GradeAni = "box_a"; + BoxEffAni = "a"; + break; + case 2: + switch (sq_getRandom(0, 2)) { + case 0: + GradeAni = "box_b_s"; + break; + case 1: + GradeAni = "box_a_s"; + break; + case 2: + GradeAni = "box_s"; + break; + } + BoxEffAni = "s"; + break; + case 3: + switch (sq_getRandom(0, 3)) { + case 0: + GradeAni = "box_b_ss"; + break; + case 1: + GradeAni = "box_a_ss"; + break; + case 2: + GradeAni = "box_s_ss"; + break; + case 3: + GradeAni = "box_ss"; + break; + } + BoxEffAni = "ss"; + break; + default: + break; + } + OneSyncPack = 2; //设定一次渲染值以后就写到2号同步状态 即只绘制 不在 设定 + break; + case 2: //可以开始绘制 + X_Pos += 222; //增加盒子和特效的偏移 + Y_Pos += 42; + OneBoxAni = DrawBoxAni(obj, "OneBoxAni" + GradeAni, "common/dargonbox/animation/" + GradeAni + ".ani", X_Pos + 14, Y_Pos + 35); //盒子Ani + if (sq_GetAnimationFrameIndex(OneBoxAni) == 1 && OneBoxSound == 0) { + local str = GradeAni; + local len = str.len(); + str = str.slice(4, len); + str = "ANCIENTBOX_OPEN_" + str; + obj.sq_PlaySound(str); + OneBoxSound = 1; + } + local Item_Offset_X = 56; //增加物品特效的偏移 + local Item_Offset_Y = 123; + if (sq_GetCurrentTime(OneBoxAni) > (OneBoxAni.getDelaySum(false) * 0.9).tointeger()) //盒子动画在超过百分之90的时候绘制物品特效 + { + DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/item_" + BoxEffAni + "_loop.ani", X_Pos + 14 + Item_Offset_X, Y_Pos + 35 + Item_Offset_Y, true); //LoopEffAni + //DrawBoxAni(obj, "Item" + ItemIndex, "common/dargonbox/item/db_item_" + ItemIndex + ".ani", X_Pos + 25 + Item_Offset_X, Y_Pos + 47 + Item_Offset_Y); //物品Ani + //DrawNumberAni(obj, X_Pos + 30 + Item_Offset_X, Y_Pos + 67 + Item_Offset_Y, ItemNum, "common/dargonbox/num/db_num_", 6, 0); //物品数量 + + L_Sq_DrawItem(X_Pos + 28 + Item_Offset_X, Y_Pos + 47 + Item_Offset_Y + 3, ItemIndex, ItemNum, 0, 0, 0); + local CodeColor; + switch (ItemGrade) { + case 0: + CodeColor = 0xFFEDD568; + break; + case 1: + CodeColor = 0xFFFF6BB3; + break; + case 2: + CodeColor = 0xFFF000FF; + break; + case 3: + CodeColor = 0xFF00B1FF; + break; + } + L_sq_DrawCode(ItemName, X_Pos + 28 + Item_Offset_X + 71, Y_Pos + 47 + Item_Offset_Y + 11, CodeColor, 0, 1); + OneBoxAniEff = DrawBoxAni(obj, "OneBoxAniEff" + BoxEffAni, "common/dargonbox/animation/item_" + BoxEffAni + "_start.ani", X_Pos + 14 + Item_Offset_X, Y_Pos + 35 + Item_Offset_Y); //EffAni + if (sq_GetAnimationFrameIndex(OneBoxAniEff) == 1 && OneBoxEffSound == 0) { + local str = GradeAni; + local len = str.len(); + str = str.slice(4, len); + str = "ANCIENTBOX_RESULT_" + str; + obj.sq_PlaySound(str); + OneBoxEffSound = 1; + } + } + break; + default: + break; + } + } + + //绘制 十连抽 动画 和奖励 + function TenOpenDargonBox(obj, X_Pos, Y_Pos) { + GetModel(); + if (op != 4 || BoxDoselect != 10) return; //不是十连抽就返回 + switch (TenSyncPack) { + case 0: + TenSyncPack = 1; + lucky_value = DragonboxJson.Get("lucky_value"); + box_num = DragonboxJson.Get("boxnum"); + return; //返回 下一次进来继续判断 是否已经同步了最新的包 + break; + case 1: + for (local i = 0; i < 10; ++i) { + ItemIndexArr[i] = DragonboxJson.Get("result->" + i + "->item"); + ItemNumArr[i] = DragonboxJson.Get("result->" + i + "->num"); + ItenGradeArr[i] = DragonboxJson.Get("result->" + i + "->grade"); + ItenName[i] = DragonboxJson.Get("result->" + i + "->itemname"); + switch (ItenGradeArr[i]) { + case 0: + TenGradeAni[i] = "box_b"; + TenBoxEffAni[i] = "b"; + break; + case 1: + TenGradeAni[i] = "box_a"; + TenBoxEffAni[i] = "a"; + break; + case 2: + switch (sq_getRandom(0, 2)) { + case 0: + TenGradeAni[i] = "box_b_s"; + break; + case 1: + TenGradeAni[i] = "box_a_s"; + break; + case 2: + TenGradeAni[i] = "box_s"; + break; + } + TenBoxEffAni[i] = "s"; + break; + case 3: + switch (sq_getRandom(0, 3)) { + case 0: + TenGradeAni[i] = "box_b_ss"; + break; + case 1: + TenGradeAni[i] = "box_a_ss"; + break; + case 2: + TenGradeAni[i] = "box_s_ss"; + break; + case 3: + TenGradeAni[i] = "box_ss"; + break; + } + TenBoxEffAni[i] = "ss"; + break; + default: + break; + } + } + TenSyncPack = 2; //设定一次渲染值以后就写到2号同步状态 即只绘制 不在 设定 + break; + case 2: //可以开始绘制 + //X_Pos += 222; //增加盒子和特效的偏移 + //Y_Pos += 42; + local Item_Offset_X = 10; //增加物品特效的偏移 + local Item_Offset_Y = 110; + for (local i = 0; i < 10; ++i) { + TenBoxAniArr[i] = DrawBoxAni(obj, "TenBoxAni" + TenGradeAni[i], "common/dargonbox/animation/mini_" + TenGradeAni[i] + ".ani", X_Pos - 12 + (150 * (i % 5)), Y_Pos + 70 + (128 * (i / 5))); //盒子Ani + if (sq_GetAnimationFrameIndex(TenBoxAniArr[i]) == 1 && TenBoxSound[i] == 0) { + local str = TenGradeAni[i]; + local len = str.len(); + str = str.slice(4, len); + str = "ANCIENTBOX_OPEN_" + str; + obj.sq_PlaySound(str); + TenBoxSound[i] = 1; + } + if (sq_GetCurrentTime(TenBoxAniArr[i]) > (TenBoxAniArr[i].getDelaySum(false) * 0.9).tointeger()) //盒子动画在超过百分之90的时候绘制物品特效 + { + DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/item_mini_" + TenBoxEffAni[i] + "_loop.ani", X_Pos + 14 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 35 + Item_Offset_Y + (128 * (i / 5)), true); //LoopEffAni + //DrawBoxAni(obj, "Ten" + "Item" + ItemIndexArr[i], "common/dargonbox/item/db_item_" + ItemIndexArr[i] + ".ani", X_Pos + 14 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 35 + Item_Offset_Y + (128 * (i / 5))); //物品Ani + //DrawNumberAni(obj, X_Pos + 19 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 55 + Item_Offset_Y + (128 * (i / 5)), ItemNumArr[i], "common/dargonbox/num/db_num_", 6, 0); //物品数量 + L_Sq_DrawItem(X_Pos + 17 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 38 + Item_Offset_Y + (128 * (i / 5)), ItemIndexArr[i], ItemNumArr[i], 0, 0, 0); + local CodeColor; + switch (ItenGradeArr[i]) { + case 0: + CodeColor = 0xFFEDD568; + break; + case 1: + CodeColor = 0xFFFF6BB3; + break; + case 2: + CodeColor = 0xFFF000FF; + break; + case 3: + CodeColor = 0xFF00B1FF; + break; + } + L_sq_DrawCode(ItenName[i], X_Pos + 17 + Item_Offset_X + (150 * (i % 5)) + 41, 9 + Y_Pos + 38 + Item_Offset_Y + (128 * (i / 5)), CodeColor, 0, 1); + TenBoxAniEffArr[i] = DrawBoxAni(obj, "TenBoxAniEff" + TenBoxEffAni[i], "common/dargonbox/animation/item_mini_" + TenBoxEffAni[i] + "_start.ani", X_Pos + 39 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 40 + Item_Offset_Y + (128 * (i / 5))); //EffAni + if (sq_GetAnimationFrameIndex(TenBoxAniEffArr[i]) == 1 && TenBoxEffSound[i] == 0) { + local str = TenGradeAni[i]; + local len = str.len(); + str = str.slice(4, len); + str = "ANCIENTBOX_RESULT_" + str; + obj.sq_PlaySound(str); + TenBoxEffSound[i] = 1; + } + } + } + break; + } + } + + //运行函数 + function Run(obj) { + local C_Main_X_Pos = 0; //龙盒 基准 X 坐标 + local C_Main_Y_Pos = 0; //龙盒 基准 Y 坐标 + + //未打开龙盒状态 + if (!sq_GetPopupWindowMainCotrol(267)) { //窗口关闭 + if (Rest == 0) //关闭后重置一次 + { + reset(); { //恢复小地图 + local mapbox = sq_GetPopupWindowMainCotrol(176); + if (mapbox) { + mapbox.SetEnable(true); + mapbox.SetVisible(true); + } + } + State = 0; //龙盒状态写入关闭窗口状态 + Rest = 1; + } + //龙盒收包状态处理 + op = DragonboxJson.Get("op"); //得到op + if (op == 2 && State == 0) { + L_NewWindows("Lenheart", 267, 0x65535); //打开龙盒窗口 + State = 1; + Model_Init(); //初始化龙盒幸运值 盒子数量 还原标志状态 + DragonboxJson.Delete(); //销毁当前Json包 + } + } + + //龙盒打开状态 + else if (sq_GetPopupWindowMainCotrol(267) && State == 1) { + { //关闭小地图 + if (sq_IsPopupWindowOpened(176)) { + local mapbox = sq_GetPopupWindowMainCotrol(176); + mapbox.SetEnable(false); + mapbox.SetVisible(false); + } + } { //绘制主窗口 + //判断幸运值 来绘制主窗口 + if (lucky_value < 100) + DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/db_newani_text1.ani", C_Main_X_Pos + 9, C_Main_Y_Pos + 9, true); //Main底 + if (lucky_value == 100) + DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/db_newani_text2.ani", C_Main_X_Pos + 9, C_Main_Y_Pos + 9, true); //Main底 + + DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/db_newani_item.ani", C_Main_X_Pos + 386, C_Main_Y_Pos + 404, true); //Main底 + + if (lucky_value < 100) DrawLucky(obj, C_Main_X_Pos + 359, C_Main_Y_Pos + 377, 0); //幸运值 + else DrawLucky(obj, C_Main_X_Pos + 359, C_Main_Y_Pos + 377, 1); + + DrawNumberAni(obj, C_Main_X_Pos + 388, C_Main_Y_Pos + 422, box_num, "common/dargonbox/num/db_num_", 6, 0); //盒子数量 + + + } + + { //抽奖模式 + //单抽按钮 + local OneButton = DargonBoxButton(obj, "OneButton", IMouse, C_Main_X_Pos + 217, C_Main_Y_Pos + 436, 14, 15, "common/dargonbox/animation/db_newani_sel"); + OneButton.drawButtonImage(); + if (OneButton.isActive()) //单抽按钮按下 + { + local OpenStatu = RewindOpenDargonBox(obj); //还原抽奖Ani状态 返回值 是否已经播放完并且重置了 + if (!OpenStatu) return; //如果未重置 则不允许切换模式 + + if (Box_Redom_Model != 2 && Box_Redom_Model != 0) return; //如果不在 未打开盖子 或者 可抽奖状态 直接返回 + BoxStetu = 0; //Box抽奖模式 单抽 + SelectRedomModel(); //播放切换模式状态 + Box_Open_Stetu = 0; //盒子打开的状态写回0 即未打开 + } + //十连抽按钮 + local TenButton = DargonBoxButton(obj, "TenButton", IMouse, C_Main_X_Pos + 217 + 263, C_Main_Y_Pos + 436, 14, 15, "common/dargonbox/animation/db_newani_sel"); + TenButton.drawButtonImage(); + if (TenButton.isActive()) //十连抽按钮按下 + { + local OpenStatu = RewindOpenDargonBox(obj); //还原抽奖Ani状态 返回值 是否已经播放完并且重置了 + if (!OpenStatu) return; //如果未重置 则不允许切换模式 + + if (Box_Redom_Model != 2 && Box_Redom_Model != 0) return; //如果不在 未打开盖子 或者 可抽奖状态 直接返回 + BoxStetu = 1; //Box抽奖模式 十连抽 + SelectRedomModel(); //播放切换模式状态 + Box_Open_Stetu = 0; //盒子打开的状态写回0 即未打开 + } + //绘制选择好了的圆点 + local Box_Statu_Button_Offset = 0; + if (BoxStetu != 0) Box_Statu_Button_Offset = 263; + DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/db_newani_sel_3.ani", C_Main_X_Pos + 217 + Box_Statu_Button_Offset, C_Main_Y_Pos + 436, true); + } + + //切换选择模式盖子状态 + switch (Box_Redom_Model) { + case 0: //初始进来盖着盖子的状态 + if (Box_Index == 2022110703) { + DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/009.ani", C_Main_X_Pos + 14, 35, true); //Main盖 + L_Sq_DrawItem(215, 144, 2021033111, 1, 0, 0, 0); + L_sq_DrawCode("巅峰的主宰", 185, 184, 0xFFF000FF, 0, 1); + L_sq_DrawCode("稀有光环", 205, 200, 0xFFF000FF, 0, 1); + L_Sq_DrawItem(386, 144, 400990654, 1, 0, 0, 0); + L_sq_DrawCode("特殊宠物", 185 + 198, 184, 0xFFF000FF, 0, 1); + L_sq_DrawCode("<超越时空宠物>", 185 + 176, 200, 0xFFF000FF, 0, 1); + L_Sq_DrawItem(557, 144, 2019188, 1, 0, 0, 0); + L_sq_DrawCode("云中剑风", 185 + 364, 184, 0xFFF000FF, 0, 1); + L_sq_DrawCode("<一期专属称号>", 185 + 344, 200, 0xFFF000FF, 0, 1); + } else if (Box_Index == 2022110702) { + DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/009.ani", C_Main_X_Pos + 14, 35, true); //Main盖 + L_Sq_DrawItem(215, 144, 8386, 1, 0, 0, 0); + L_sq_DrawCode("全职业稀有克隆", 185, 184, 0xFFF000FF, 0, 1); + L_sq_DrawCode("装扮礼盒", 205, 200, 0xFFF000FF, 0, 1); + L_Sq_DrawItem(386, 144, 400990653, 1, 0, 0, 0); + L_sq_DrawCode("特殊宠物", 185 + 198, 184, 0xFFF000FF, 0, 1); + L_sq_DrawCode("<时空系列宠物>", 185 + 176, 200, 0xFFF000FF, 0, 1); + L_Sq_DrawItem(557, 144, 500000016, 1, 0, 0, 0); + L_sq_DrawCode("镜花水月", 185 + 364, 184, 0xFFF000FF, 0, 1); + L_sq_DrawCode("<一期冷却光环>", 185 + 344, 200, 0xFFF000FF, 0, 1); + } + break; + case 1: //单次拉开盖子的状态 + DargonBoxOpenAni(obj, "common/dargonbox/animation/intro.ani", C_Main_X_Pos + 14, 35); //Main盖 + break; + case 2: //可以抽奖的状态 + switch (Box_Open_Stetu) //盒子打开的状态 + { + case 0: //无状态 + break; + case 1: + OneOpenDargonBox(obj, C_Main_X_Pos, C_Main_Y_Pos); //进行抽奖中 + break; + case 2: + TenOpenDargonBox(obj, C_Main_X_Pos, C_Main_Y_Pos); //进行抽奖中 + break; + default: + break; + } + break; + case 3: //先关闭在拉开盖子的状态 + DargonBoxCloseAni(obj, "common/dargonbox/animation/outro.ani", C_Main_X_Pos + 14, 35); //Main盖 + break; + default: + break; + } + + { //抽奖按钮 + local RedomButton = ButtonPro(obj, "RedomButton", C_Main_X_Pos + 342, C_Main_Y_Pos + 510, "common/dargonbox/animation/button.ani", 120, 20); + RedomButton.SetRectEnble(true, "RedomButtonr", C_Main_X_Pos + 342, C_Main_Y_Pos + 510, "common/dargonbox/animation/button.ani", 1); //设置悬停效果 + RedomButton.SetCustomClickEnble(true, "RedomButtonr", C_Main_X_Pos + 342, C_Main_Y_Pos + 510 + 1, "common/dargonbox/animation/button.ani", 1); //设置点击效果 + RedomButton.Show(); + if (RedomButton.isLBActive()) //按下抽奖按钮 + { + switch (Box_Redom_Model) { + case 0: //如果盖子没打开 就打开盖子 + SelectRedomModel(); + break; + case 2: //可抽奖的状态 + switch (BoxStetu) { + case 0: + local OpenStatu = RewindOpenDargonBox(obj); //还原Ani状态 返回值 是否已经播放完并且重置了 + if (OpenStatu == false) break; + DragonboxJson.Delete(); + local One = Json_STL("DraboxOneS"); + One.Put("op", 3); + One.Put("itemindex", Box_Index); + One.Put("doselect", 1); + local str = One.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + One.Delete(); + + Box_Open_Stetu = 1; //开启单抽渲染 + break; + case 1: + local OpenStatu = RewindTenOpenDargonBox(obj); //还原Ani状态 返回值 是否已经播放完并且重置了 + if (OpenStatu == false) break; + DragonboxJson.Delete(); + local Ten = Json_STL("DraboxTenS"); + Ten.Put("op", 3); + Ten.Put("itemindex", Box_Index); + Ten.Put("doselect", 10); + local str = Ten.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + Ten.Delete(); + + Box_Open_Stetu = 2; //开启十连抽渲染 + break; + default: + break; + } + break; + default: //在其他动画中直接返回 + return; + break; + } + } + } + } + } +} + +//初始化龙盒对象 +function DargonBox(obj) { + if (DB == null) DB = DarBox("Init"); + DB.Run(obj); +} \ No newline at end of file diff --git a/Plugins/DungeonRank/DungeonRank.nut b/Plugins/DungeonRank/DungeonRank.nut new file mode 100644 index 0000000..c7c469c --- /dev/null +++ b/Plugins/DungeonRank/DungeonRank.nut @@ -0,0 +1,226 @@ +/* +文件名:DungeonRank.nut +路径:Plugins/DungeonRank/DungeonRank.nut +创建日期:2023-09-18 12:08 +文件用途:副本排行 +*/ +class DungeonRankWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class DungeonRankC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 129; + Y = 20; + + Info = null; + + + function GetDungeonRankInfo() { + local T = { + op = 20054003, + }; + SendPack(T); + } + + function GetDungeonRankInfoCallBack(Chunk) { + local Buffer = Json_STL("GetDungeonRankInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + Info = []; + + for (local i = 0; i< 10; i++) { + local gjob = Buffer.Get("DungeonS->" + i + "->job"); + if (gjob) { + local gdungeonTime = Buffer.Get("DungeonS->" + i + "->dungeonTime"); + local gname = Buffer.Get("DungeonS->" + i + "->name"); + local T = { + Job = gjob, + DungronTime = gdungeonTime, + Name = gname, + }; + Info.append(T); + } + } + /* + local RootTab = getroottable(); + if (RootTab.rawin("CollectBooksCObj")) { + local Tobj = RootTab["CollectBooksCObj"]; + Tobj.CollectAttributeObject = []; + for (local i = 0; i < 22; i++) { + Tobj.CollectAttributeObject.append(Buffer.Get("buffs->" + i)); + } + } + */ + } + + constructor() { + + //注册获取收集信息回调 + Pack_Control.rawset(20054004, GetDungeonRankInfoCallBack.bindenv(this)); + } + + //绘制主界面 + function DrawMain(obj) { + //绘制主界面 + L_sq_DrawImg("dungeon/rankmain.img", 0, X, Y); + + L_sq_DrawCode("排名", X + 24, Y + 297, sq_RGBA(230, 200, 155, 250), 1, 1); + L_sq_DrawCode("玩家角色名", X + 24 + 98, Y + 297, sq_RGBA(230, 200, 155, 250), 1, 1); + L_sq_DrawCode("玩家职业", X + 24 + 98 + 152, Y + 297, sq_RGBA(230, 200, 155, 250), 1, 1); + L_sq_DrawCode("通关时间", X + 24 + 98 + 152 + 155, Y + 297, sq_RGBA(230, 200, 155, 250), 1, 1); + + if (Info) { + foreach(Pos, Value in Info) { + L_sq_DrawCode("" + Pos, X + 32, Y + 316 + (Pos * 17), sq_RGBA(255, 247, 107, 250), 1, 1); + L_sq_DrawCode("" + Value.Name, X + 32 + 98, Y + 316 + (Pos * 17), sq_RGBA(255, 247, 107, 250), 1, 1); + L_sq_DrawCode("" + Value.Job, X + 32 + 98 + 152, Y + 316 + (Pos * 17), sq_RGBA(255, 247, 107, 250), 1, 1); + L_sq_DrawCode("" + Value.DungronTime, X + 32 + 98 + 152 + 120, Y + 316 + (Pos * 17), sq_RGBA(255, 247, 107, 250), 1, 1); + } + + } + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + GetDungeonRankInfo(); + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = DungeonRankWindow(X, Y, 542, 512, 28); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "DungeonRankCloseKey")) { + MainState = false; + } + } +} + +function DungeonRank(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("DungeonRankCObj")) { + local Cobj = DungeonRankC(); + RootTab.rawset("DungeonRankCObj", Cobj); + EventIcon("副本排行", 55, 55, Cobj); + } else { + RootTab["DungeonRankCObj"].Proc(obj); + RootTab["DungeonRankCObj"].Draw(obj); + } +} + + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("DungeonRankFunc", DungeonRank); +} else { + local T = {}; + T.rawset("DungeonRankFunc", DungeonRank); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/Fate_Select/Fate_Select.nut b/Plugins/Fate_Select/Fate_Select.nut new file mode 100644 index 0000000..90d6923 --- /dev/null +++ b/Plugins/Fate_Select/Fate_Select.nut @@ -0,0 +1,1135 @@ +/* +文件名:Fate_Select.nut +路径:Plugins/Fate_Select/Fate_Select.nut +创建日期:2023-06-23 14:51 +文件用途:命运的抉择 +*/ + +//HudPro按钮类 +class Fate_SelectPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class Fate_SelectWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class Fate_Select_SmallPowerCard extends BasicsDrawTool { + X = 0; + Y = 0; + Mobj = null; //鼠标对象 + TState = null; + Img = null; + Idx = null; + Str = null; + Name = null; + + Type = null; + SkillIndex = null; + SkillIdx = null; + SkillValue = null; + + constructor(gImg, gIdx, gStr, gName, gX, gY, gType, gSkillIndex, gSkillIdx, gSkillValue) { + this.Img = gImg; + this.Idx = gIdx; + this.Str = gStr; + this.Name = gName; + + this.Type = gType; + this.SkillIndex = gSkillIndex; + this.SkillIdx = gSkillIdx; + this.SkillValue = gSkillValue; + this.X = gX; + this.Y = gY; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + TState = 0; + } + + function SetPower(obj) { + switch (Type) { + case 0: + AddIntData(obj, SkillIndex, SkillIdx, SkillValue); + break; + case 1: + AddLevelData(obj, SkillIndex, SkillIdx, SkillValue); + break; + case 2: + AddSkillCoolTime(obj, SkillIndex, SkillValue); + break; + case 3: + RecoveryHPMP(obj); + break; + case 4: + AddBaseAb(obj); + break; + } + } + + function AddBaseAb(obj) { + local RootTab = getroottable(); + + RootTab["Fate_SelectCObj"].BasePwoer[SkillIdx] += SkillValue; + RootTab["Fate_SelectCObj"].AddBaseAb(obj); + } + + function RecoveryHPMP(obj) { + switch (SkillIdx) { + case 0: + obj.setHp(obj.getHp() + (obj.getHpMax() * (SkillValue.tofloat() / 100.0)).tointeger(), null, true); + break; + case 1: + obj.sendSetMpPacket(obj.getMp() + (obj.getMpMax() * (SkillValue.tofloat() / 100.0)).tointeger()); + break; + } + } + + function Show(obj) { + local RootTab = getroottable(); + if (isInRect()) { + T_DrawStayAni(obj, "common/dungeon/fate_select/powerframe.ani", X - 21, Y - 26, 0, "powerselect.ani7"); + } + + //绘制基础框 + L_sq_DrawImg("interface2/event/dfo/2021/0323/decisionsuntodestiny/ingameui.img", 6, X - 21, Y - 26); + + //绘制槽图标 + L_sq_DrawImg(Img.tolower(), Idx, X + 57, Y + 49); + + //绘制卡片名字 + L_sq_DrawCode_Ex(Name, X + 64 - (Name.len() * 2), Y + 106, sq_RGBA(247, 214, 90, 250), 2, 1); + + //绘制当卡牌描述 + L_sq_DrawCode_Ex(Str, X + 20, Y + 140, sq_RGBA(150, 255, 30, 250), 0, 1); + + if (TState == 1) { + local ani = T_DrawDynamicAni(obj, "common/dungeon/fate_select/powerselectendframe.ani", X - 41, Y - 26, "fatepowerselectendframe"); + if (sq_IsEnd(ani)) { + sq_Rewind(ani); + TState = 2; + RootTab["Fate_SelectCObj"].SelectTiming = 3; + } + } + + + + + } + + //高级绘制文字(带换行) + function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc) { + local strarr = []; + if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc); + else { + local Bpos = 0; + while (true) { + local Npos = str.find("\n", Bpos); + if (!Npos) { + local strbuff = str.slice(Bpos, str.len()); + strarr.append(strbuff); + break; + } + local strbuff = str.slice(Bpos, Npos); + strarr.append(strbuff); + Bpos = Npos + 1; + } + for (local z = 0; z < strarr.len(); z++) { + L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc); + } + } + + } + + + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, X, Y, 143, 299)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) { + return true; + } else return false; + } +} + + +class Fate_SelectC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 0; + Y = 0; + + //退出副本执行操作判断 + ExitIdx = false; + //副本背景 + DgnBackground = null; + //波数时间配置 + LevelTimeInfo = null; + //BOSS的ID + BOSSId = null; + //当前波数 + NowLevel = 0; + //BOSS战 + BossFight = false; + //杀死BOSS Flag + BossFightKillFlag = false; + //召唤背景 + BackGroundSummon = false; + //时间容器对象 + TimeObj = null; + //绘制对象时间 + DrawTime = null; + //杀怪可获得能力数量 + KillMonsterRewardCount = 15; + //杀怪数量 + KillMonsterCount = 0; + //四维 + BasePwoer = null; + + PowerSelect = null; + SelectTiming = 1; + + //获取基础配置包回调 + function GetBaseInfoCallBack(Chunk) { + local Buffer = Json_STL("CheckFate_SelectCObjGetBaseInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("Fate_SelectCObj")) { + local Tobj = RootTab["Fate_SelectCObj"]; + Tobj.LevelTimeInfo = null; + Tobj.BOSSId = null; + Tobj.LevelTimeInfo = []; + Tobj.BOSSId = {}; + for (local i = 0; i < 50; i++) { + local TimeBuf = Buffer.Get("Time->" + i); + Tobj.LevelTimeInfo.append(TimeBuf * 1000); + local BossId = Buffer.Get("BOSSId->" + i); + Tobj.BOSSId.rawset(BossId, true); + } + Tobj.KillMonsterRewardCount = Buffer.Get("KillMonsterRewardCount"); + } + } + + //获取基础配置包 + function GetBaseInfo() { + local T = { + op = 20023001, + } + SendPack(T); + } + + //进入副本标识包 + function StartDgnIdxPack() { + local T = { + op = 20023009, + } + SendPack(T); + } + + //退出副本标识包 + function EndDgnIdxPack() { + local T = { + op = 20023011, + } + SendPack(T); + } + + //获取小技能卡牌 + function GetSmallPwoerCard(Job, JobGrow) { + local T = { + op = 20023003, + job = Job, + jobGrow = JobGrow, + } + SendPack(T); + } + + //选择小技能卡牌 + function SelectSmallPwoerCard(Job, JobGrow) { + local T = { + op = 20023005, + job = Job, + jobGrow = JobGrow, + } + SendPack(T); + } + + //获取小技能卡牌回调 + function GetSmallPwoerCardCallBack(Chunk) { + local Buffer = Json_STL("CheckFate_SelectCObjGetBaseInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("Fate_SelectCObj")) { + local Tobj = RootTab["Fate_SelectCObj"]; + + for (local i = 0; i < 5; i++) { + local Img = Buffer.Get("SkillPack->" + i + "->Img"); + local Idx = Buffer.Get("SkillPack->" + i + "->Idx"); + local Str = Buffer.Get("SkillPack->" + i + "->Str"); + local Name = Buffer.Get("SkillPack->" + i + "->Name"); + + local Type = Buffer.Get("SkillPack->" + i + "->Type"); + local SkillIndex = Buffer.Get("SkillPack->" + i + "->SkillIndex"); + local SkillIdx = Buffer.Get("SkillPack->" + i + "->SkillIdx"); + local SkillValue = Buffer.Get("SkillPack->" + i + "->SkillValue"); + Tobj.PowerSelect[i] = Fate_Select_SmallPowerCard(Img, Idx, Str, Name, 27 + (i * 150), 160, Type, SkillIndex, SkillIdx, SkillValue); + } + } + } + + constructor() { + //读取基础配置 + GetBaseInfo(); + Pack_Control.rawset(20023002, GetBaseInfoCallBack); + Pack_Control.rawset(20023004, GetSmallPwoerCardCallBack); + //初始化能力包 + PowerSelect = [0, 0, 0, 0, 0]; + BasePwoer = [0, 0, 0, 0]; + + + /*测试类*/ + /*********************************************** + **************** **************** + ************************************************/ + // for (local w = 0; w < 5; w++) { + // PowerSelect[w] = Fate_Select_SmallPowerCard("Character/Swordman/Effect/SkillIcon.img", 8, "测试功能描述", "拔刀斩(范围)", 27 + (w * 150), 160, 0, 0, 0, 0); + // } + // LevelTimeInfo = []; + // for (local i = 0; i < 50; i++) { + // LevelTimeInfo.append(5000); + // } + // BOSSId = {}; + // BOSSId.rawset(59028, true); + // BOSSId.rawset(62681, true); + // BOSSId.rawset(64020, true); + // BOSSId.rawset(62721, true); + // BOSSId.rawset(62780, true); + + for (local i = 0; i < 50; i++) { + local TimeObj = TimeSTL("FateTimeObj" + i, 1100); + TimeObj.Delete(); + } + } + + + function AddBaseAb(obj) { + + if (CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/ap_fateselect.nut")) { + CNSquirrelAppendage.sq_RemoveAppendage(obj, "appendage/ap_fateselect.nut"); + } + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/ap_fateselect.nut", true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + local change_appendage = appendage.sq_getChangeStatus("fateselectbasepower"); + if (!change_appendage) { + change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, + CHANGE_STATUS_TYPE_COOLTIME_DECLINE, + false, 0, 254); + } + if (change_appendage) { + change_appendage.clearParameter(); + change_appendage.addParameter(0, false, BasePwoer[0].tofloat()); //力量 + change_appendage.addParameter(3, false, BasePwoer[2].tofloat()); //体力 + change_appendage.addParameter(2, false, BasePwoer[3].tofloat()); //精神 + change_appendage.addParameter(1, false, BasePwoer[1].tofloat()); //智力 + } + + } + //绘制能力卡牌 + function DrawPwoerCard(obj) { + //当卡牌包存在时绘制 + if (PowerSelect[0] != 0) { + //世界静止 + //PauseWorld(obj, 2, 100); + //绘制标签界面 + T_DrawStayAni(obj, "common/dungeon/fate_select/powerselectmain.ani", 88, 40, 0, "fatepowerselectmain"); + //光 + T_DrawStayAni(obj, "common/dungeon/fate_select/goldselectframe.ani", 0, 0, 1, "powerselectmainlight"); + //绘制能力选择卡牌 + local RootTab = getroottable(); + for (local i = 0; i < 5; i++) { + PowerSelect[i].Show(obj); + //常驻检测 + if ((PowerSelect[i].isLBActive() || KeyPressNB.isKeyPress((32 + i), "Fate_SelectQu" + (32 + i))) && SelectTiming == 1) { + SelectTiming = 2; + PowerSelect[i].TState = 1; + PowerSelect[i].SetPower(obj); + } + } + } + + //当能力选择后销毁卡牌包 + if (SelectTiming == 3) { + PowerSelect = null; + PowerSelect = [0, 0, 0, 0, 0]; + SelectTiming = 1; + //选择小技能卡牌 + SelectSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); + } + } + + //绘制副本背景 + function DrawDgnBackground(obj) { + if (DgnBackground == null) { + CreatFateSelectPassObject(obj, 0); + DgnBackground = 0; + //进入副本标识包 + StartDgnIdxPack(); + //进入副本重置Exit标识 + ExitIdx = true; + + //第一次获取小技能能力 + GetSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); + } + } + + //绘制UI + function DrawFateUI(obj) { + //固定绘制右上角MainUI + { + //绘制UI + T_DrawStayAni(obj, "common/dungeon/fate_select/rightmain.ani", 537, 0, 0, "fate_selectRIGHTmain"); + //绘制波数 + DrawCustomNum(obj, 759 + ((NowLevel.tostring().len() - 1) * 6), 20, NowLevel, "common/dungeon/fate_select/num/", 1, -16); + + //判断是否BOSS战 + if (NowLevel != 0 && (NowLevel % 10) == 9) { + T_DrawStayAni(obj, "common/dungeon/fate_select/new/boss.ani", 539, 2, 0, "fate_selectBoss战"); + } else { + if (!DrawTime) return; + local TimeStr = (DrawTime / 10).tostring(); + if (TimeStr.len() == 3) TimeStr = "0" + TimeStr; + if (TimeStr.len() == 2) TimeStr = "00" + TimeStr; + if (TimeStr.len() == 1) TimeStr = "000" + TimeStr; + //绘制时间 + fateDrawCustomTimeNum(obj, 759 - 48, 22, TimeStr, "common/dungeon/fate_select/num2/", 12, -16); + } + + //绘制杀怪数量 + DrawCustomNum(obj, 759 - 15, 102, (KillMonsterRewardCount - KillMonsterCount), "common/dungeon/fate_select/num2/", -5, -16); + //获取能力发包并且减少一次杀敌数 + if (KillMonsterCount >= KillMonsterRewardCount) { + KillMonsterCount -= KillMonsterRewardCount; + //获取小技能能力 + GetSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); + } + } + + } + + //同步时间 + function SyncTime(obj) { + if (NowLevel < 50) { + local Time = LevelTimeInfo[NowLevel]; + if (TimeObj) { + local Nt = TimeObj.Get(); + //时间到 切波数 + if (Nt == Time) { + TimeObj.Delete(); + TimeObj = null; + + NowLevel++; + } else { + DrawTime = Time - Nt; + } + } else { + //更换地图 + if ((NowLevel % 10) == 9 && NowLevel != 0) { + //开始遭遇BOSS战 + if (!BossFight) { + //出怪 + sq_SendCreatePassiveObjectPacketPos(obj, 101400 + NowLevel, 0, 0, 0, 0); + BossFight = true; + } + //如果杀死BOSS + if (BossFightKillFlag) { + local ani = T_DrawDynamicAni(obj, "common/dungeon/fate_select/cg/124.ani", 400, 300, "命运的抉择过场cg"); + if (sq_GetAnimationFrameIndex(ani) >= 16 && BackGroundSummon == false) //当发光ani黑时 + { + DestroyFateSelectPassObject(obj, (NowLevel / 9) - 1); //销毁上一个图 + CreatFateSelectPassObject(obj, (NowLevel / 9)); //创建下一个图 + BackGroundSummon = true; + local T = { + op = 20023013, + BOSSId = NowLevel, + } + SendPack(T); + } + if (sq_IsEnd(ani)) { + NowLevel++; + BossFightKillFlag = false; + BackGroundSummon = false; + BossFight = false; + sq_Rewind(ani); + } + } + } else { + TimeObj = TimeSTL("FateTimeObj" + NowLevel, Time); + TimeObj.Start(); + local chrobj = sq_CreateCharacter(1, 4); + //出怪 + sq_SendCreatePassiveObjectPacketPos(chrobj, 101400 + NowLevel, 0, 0, 0, 0); + } + } + } + if (NowLevel == 50) { + L_sq_GoTown(); + } + } + + //遍历怪物死亡 + function SyncMonsterDie(obj) { + local objectManager = obj.getObjectManager(); + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < CollisionObjectNumber; i += 1) { + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && object.getTeam() != 0) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local MonDieSoundIndex = activeObj.getCollisionObjectIndex(); + local UUID = sq_GetUniqueId(activeObj); + if (activeObj.isDead()) { + if (!getroottable().rawin("fate_select" + UUID)) { + if (BOSSId.rawin(MonDieSoundIndex)) { + KillMonsterCount += 15; + //BOSS击杀标识 + BossFightKillFlag = true; + } + KillMonsterCount++; + getroottable().rawset("fate_select" + UUID, true); + } + } + } + } + } + + //副本销毁程序 + function DgnExit(obj) { + DgnBackground = null; + KillMonsterCount = 0; + NowLevel = 0; + //退出副本标识包 + EndDgnIdxPack(); + //销毁技能提升 + local RootTab = getroottable(); + if (RootTab.rawin("LenheartSkillManager")) { + RootTab.rawdelete("LenheartSkillManager"); + } + ExitIdx = false; + + BossFight = false; + //杀死BOSS Flag + BossFightKillFlag = false; + //召唤背景 + BackGroundSummon = false; + //时间容器对象 + TimeObj = null; + //绘制对象时间 + DrawTime = null; + + SelectTiming = 1; + + BasePwoer = [0, 0, 0, 0]; + } + //副本逻辑程序 + function DgnProc(obj) { + local stage = sq_GetGlobaludpModuleStage(); + local dungeon = sq_GetDungeonByStage(stage); + local dungeonIndex = sq_GetDuegonIndex(dungeon); + if (dungeonIndex != 23048) { + if (ExitIdx == true) DgnExit(obj); + return; + } else { + if (sq_GetCurrentModuleType() == 3) { + //绘制副本背景 + DrawDgnBackground(obj); + //绘制UI + DrawFateUI(obj); + //同步时间 + SyncTime(obj); + //遍历怪物死亡 + SyncMonsterDie(obj); + //绘制能力卡牌 + DrawPwoerCard(obj); + } + } + } + + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "Fate_SelectCloseKey")) { + MainState = false; + } + DgnProc(obj); + } + + function DrawCustomNum(obj, xPos, yPos, num, str, Interval, OneDeviation) { + local len = (num.tostring()).len(); + for (local i = 0; i < len; i++) { + local one = 0; + local DrawNum = (num.tostring()).slice(i, i + 1); + if (i != (len - 1)) one += OneDeviation * abs(i - (len - 1)); + local ani = obj.getVar().GetAnimationMap(DrawNum + str, str + DrawNum + ".ani"); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, xPos + (i * Interval) + one, yPos, true); + } + } + + function fateDrawCustomTimeNum(obj, xPos, yPos, num, str, Interval, OneDeviation) { + + for (local i = 0; i < 4; i++) { + local Idx = num.slice(0 + i, 1 + i); + local ani = obj.getVar().GetAnimationMap(Idx + str, str + Idx + ".ani"); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, xPos + ((i - 4) * 14) + ((i / 2) * 18) - 10, yPos, true); + } + T_DrawStayAni(obj, "common/dungeon/fate_select/dian.ani", xPos - 146, yPos - 34, 0, "fatedian"); + } + + + function PauseWorld(obj, Type, Time) { + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i += 1) { + local object = objectManager.getCollisionObject(i); + sq_SetPause(object, Type, Time); + } + + } + + function CreatFateSelectPassObject(obj, sc) { + switch (sc) { + case 0: + sq_SendCreatePassiveObjectPacketPos(obj, 102500, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102501, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102502, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102503, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102504, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102505, 0, 0, 0, 0); + + sq_SendCreatePassiveObjectPacketPos(obj, 1012, 0, 391, 340, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 1013, 0, 538, 340, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1234, 193, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1004, 215, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 619, 255, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 607, 583, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 588, 591, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 583, 323, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 280, 202, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1072, 298, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 479, 335, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 356, 360, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 474, 363, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 614, 341, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 565, 344, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 431, 346, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 322, 366, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 494, 374, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 540, 370, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 292, 0, 1, 228, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 292, 0, 6, 435, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 1012, 0, 1031, 468, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 990, 462, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 1067, 453, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1009, 444, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1133, 481, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 943, 482, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1047, 506, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 221, 0, 157, 575, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 282, 457, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 160, 427, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 263, 390, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 375, 427, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 863, 434, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1025, 447, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 905, 492, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 410, 315, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 72, 422, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 103, 584, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 160, 526, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 657, 259, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 571, 597, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 608, 597, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1060, 538, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1113, 444, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1092, 543, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1012, 543, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 148, 512, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 228, 549, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 65, 397, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 175, 439, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 280, 396, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 652, 190, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 217, 164, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 345, 202, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 1014, 199, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 1023, 206, 0); + break; + case 1: + sq_SendCreatePassiveObjectPacketPos(obj, 102515, 0, 0, -40, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102510, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102511, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102513, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102514, 0, 0, 0, 0); + /* + sq_SendCreatePassiveObjectPacketPos(obj, 868, 0, 591, 835, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 502, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 562, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 622, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 802, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 862, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 922, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1102, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1162, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1222, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 869, 0, 1020, 705, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 869, 0, 713, 719, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1540, 240, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1560, 394, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1541, 551, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, -180, 293, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, -7, 360, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 26, 508, 0); + */ + break; + case 2: + sq_SendCreatePassiveObjectPacketPos(obj, 102525, 0, 0, -40, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102520, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102521, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102522, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102523, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102524, 0, 0, 80, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102526, 0, 0, 80, 0); + + /* + sq_SendCreatePassiveObjectPacketPos(obj, 10658, 0, 1699, 146, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10681, 0, 7, 284, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 15096, 0, 1582, 526, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10681, 0, 7, 391, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 15095, 0, 1620, 477, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 15095, 0, 1619, 419, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10671, 0, 7, 186, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10672, 0, -39, 511, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 1540, 351, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10671, 0, 189, 573, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 274, 691, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 222, 659, 0); + */ + break; + case 3: + sq_SendCreatePassiveObjectPacketPos(obj, 102535, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102530, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102531, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102534, 0, 0, 120, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102536, 0, 0, 120, 0); + /* + local YP = 120; + sq_SendCreatePassiveObjectPacketPos(obj, 8959, 0, 266, 151 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -46, 582 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, 3, 130 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -99, 485 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1072, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1039, 144 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 483, 572 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 503, 592 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 411, 568 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 777, 136 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 673, 137 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1574, 265 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1526, 195 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1553, 533 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1538, 516 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1440, 160 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 393, 141 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 139, 154 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 543, 598 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 464, 587 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1511, 211 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1500, 186 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1528, 546 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10152, 0, 985, 137 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 860, 155 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1323, 150 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 491, 138 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 538, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 607, 148 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 638, 160 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1555, 312 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 405, 596 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1126, 157 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1163, 146 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 1239, 126 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1354, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1543, 298 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 907, 138 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1573, 505 + YP, 0); + */ + break; + case 4: + sq_SendCreatePassiveObjectPacketPos(obj, 102545, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102540, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102541, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102542, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102543, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102546, 0, 0, 120, 0); + + /* + sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 0, 260, 100); + sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 640, 260, 100); + sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 1280, 260, 100); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 640, 23, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 1280, 24, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 0, 200, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 640, 200, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 1280, 200, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 291, 165, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 10, 182, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 780, 159, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 1244, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10247, 0, 681, 170, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 918, 169, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10245, 0, 648, 603, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 1066, 165, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10250, 0, 577, 263, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10250, 0, 1251, 264, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 544, 323, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 331, 619, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 1269, 352, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10248, 0, 441, 608, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 213, 385, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 1250, 546, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10247, 0, 953, 615, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 894, 599, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10248, 0, 1155, 164, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 1528, 141, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 1513, 157, 0); + */ + break; + } + + } + + //销毁特效 + function DestroyPassiveObject(obj, Index) { + local ballCount = obj.getMyPassiveObjectCount(Index); + for (local i = 0; i < ballCount; ++i) { + local magicBall = obj.getMyPassiveObject(Index, i) + if (!magicBall) + continue; + sq_SendDestroyPacketPassiveObject(magicBall); + } + } + + function DestroyFateSelectPassObject(obj, sc) { + switch (sc) { + case 0: + DestroyPassiveObject(obj, 102500); + DestroyPassiveObject(obj, 102501); + DestroyPassiveObject(obj, 102502); + DestroyPassiveObject(obj, 102503); + DestroyPassiveObject(obj, 102504); + DestroyPassiveObject(obj, 102505); + + DestroyPassiveObject(obj, 1012); + DestroyPassiveObject(obj, 1013); + DestroyPassiveObject(obj, 261); + DestroyPassiveObject(obj, 248); + DestroyPassiveObject(obj, 247); + DestroyPassiveObject(obj, 3000); + DestroyPassiveObject(obj, 3004); + DestroyPassiveObject(obj, 292); + DestroyPassiveObject(obj, 221); + break; + case 1: + DestroyPassiveObject(obj, 102510); + DestroyPassiveObject(obj, 102511); + DestroyPassiveObject(obj, 102512); + DestroyPassiveObject(obj, 102513); + DestroyPassiveObject(obj, 102514); + DestroyPassiveObject(obj, 102515); + + DestroyPassiveObject(obj, 868); + DestroyPassiveObject(obj, 869); + DestroyPassiveObject(obj, 109006950); + DestroyPassiveObject(obj, 109006947); + break; + case 2: + DestroyPassiveObject(obj, 102520); + DestroyPassiveObject(obj, 102521); + DestroyPassiveObject(obj, 102522); + DestroyPassiveObject(obj, 102523); + DestroyPassiveObject(obj, 102524); + DestroyPassiveObject(obj, 102525); + DestroyPassiveObject(obj, 102526); + + DestroyPassiveObject(obj, 10658); + DestroyPassiveObject(obj, 10681); + DestroyPassiveObject(obj, 15096); + DestroyPassiveObject(obj, 10672); + DestroyPassiveObject(obj, 15095); + DestroyPassiveObject(obj, 10671); + DestroyPassiveObject(obj, 10675); + break; + case 3: + DestroyPassiveObject(obj, 102530); + DestroyPassiveObject(obj, 102531); + DestroyPassiveObject(obj, 102534); + DestroyPassiveObject(obj, 102535); + DestroyPassiveObject(obj, 102536); + + DestroyPassiveObject(obj, 8959); + DestroyPassiveObject(obj, 10232); + DestroyPassiveObject(obj, 8963); + DestroyPassiveObject(obj, 10151); + DestroyPassiveObject(obj, 10150); + DestroyPassiveObject(obj, 10152); + DestroyPassiveObject(obj, 8453); + DestroyPassiveObject(obj, 8960); + DestroyPassiveObject(obj, 109002769); + break; + } + } +} + + + +function Fate_Select(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("Fate_SelectCObj")) { + local Cobj = Fate_SelectC(); + RootTab.rawset("Fate_SelectCObj", Cobj); + } else { + RootTab["Fate_SelectCObj"].Proc(obj); + } +} \ No newline at end of file diff --git a/Plugins/Fate_Select/Fate_Selectold.nut b/Plugins/Fate_Select/Fate_Selectold.nut new file mode 100644 index 0000000..28f178e --- /dev/null +++ b/Plugins/Fate_Select/Fate_Selectold.nut @@ -0,0 +1,1076 @@ +/* +文件名:Fate_Select.nut +路径:Plugins/Fate_Select/Fate_Select.nut +创建日期:2023-06-23 14:51 +文件用途:命运的抉择 +*/ + +//HudPro按钮类 +class Fate_SelectPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class Fate_SelectWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class Fate_Select_SmallPowerCard extends BasicsDrawTool { + X = 0; + Y = 0; + Mobj = null; //鼠标对象 + TState = null; + Img = null; + Idx = null; + Str = null; + Name = null; + + Type = null; + SkillIndex = null; + SkillIdx = null; + SkillValue = null; + + constructor(gImg, gIdx, gStr, gName, gX, gY, gType, gSkillIndex, gSkillIdx, gSkillValue) { + this.Img = gImg; + this.Idx = gIdx; + this.Str = gStr; + this.Name = gName; + + this.Type = gType; + this.SkillIndex = gSkillIndex; + this.SkillIdx = gSkillIdx; + this.SkillValue = gSkillValue; + this.X = gX; + this.Y = gY; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + TState = 0; + } + + function SetPower(obj) { + switch (Type) { + case 0: + AddIntData(obj, SkillIndex, SkillIdx, SkillValue); + break; + case 1: + AddLevelData(obj, SkillIndex, SkillIdx, SkillValue); + break; + case 2: + AddSkillCoolTime(obj, SkillIndex, SkillValue); + break; + } + } + + function Show(obj) { + local RootTab = getroottable(); + if (isInRect()) { + T_DrawStayAni(obj, "common/dungeon/fate_select/powerframe.ani", X - 21, Y - 26, 0, "powerselect.ani7"); + } + + //绘制基础框 + L_sq_DrawImg("interface2/event/dfo/2021/0323/decisionsuntodestiny/ingameui.img", 6, X - 21, Y - 26); + + //绘制槽图标 + L_sq_DrawImg(Img.tolower(), Idx, X + 57, Y + 49); + + //绘制卡片名字 + L_sq_DrawCode_Ex(Name, X + 64 - (Name.len() * 2), Y + 106, sq_RGBA(247, 214, 90, 250), 2, 1); + + //绘制当卡牌描述 + L_sq_DrawCode_Ex(Str, X + 20, Y + 140, sq_RGBA(150, 255, 30, 250), 0, 1); + + if (TState == 1) { + local ani = T_DrawDynamicAni(obj, "common/dungeon/fate_select/powerselectendframe.ani", X - 41, Y - 26, "fatepowerselectendframe"); + if (sq_IsEnd(ani)) { + sq_Rewind(ani); + TState = 2; + RootTab["Fate_SelectCObj"].SelectTiming = 3; + } + } + + + + + } + + //高级绘制文字(带换行) + function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc) { + local strarr = []; + if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc); + else { + local Bpos = 0; + while (true) { + local Npos = str.find("\n", Bpos); + if (!Npos) { + local strbuff = str.slice(Bpos, str.len()); + strarr.append(strbuff); + break; + } + local strbuff = str.slice(Bpos, Npos); + strarr.append(strbuff); + Bpos = Npos + 1; + } + for (local z = 0; z < strarr.len(); z++) { + L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc); + } + } + + } + + + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, X, Y, 143, 299)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) { + return true; + } else return false; + } +} + + +class Fate_SelectC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 0; + Y = 0; + + //退出副本执行操作判断 + ExitIdx = false; + //副本背景 + DgnBackground = null; + //波数时间配置 + LevelTimeInfo = null; + //BOSS的ID + BOSSId = null; + //当前波数 + NowLevel = 0; + //BOSS战 + BossFight = false; + //杀死BOSS Flag + BossFightKillFlag = false; + //召唤背景 + BackGroundSummon = false; + //时间容器对象 + TimeObj = null; + //绘制对象时间 + DrawTime = null; + //杀怪可获得能力数量 + KillMonsterRewardCount = 15; + //杀怪数量 + KillMonsterCount = 0; + + + PowerSelect = null; + SelectTiming = 1; + + //获取基础配置包回调 + function GetBaseInfoCallBack(Chunk) { + local Buffer = Json_STL("CheckFate_SelectCObjGetBaseInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("Fate_SelectCObj")) { + local Tobj = RootTab["Fate_SelectCObj"]; + Tobj.LevelTimeInfo = null; + Tobj.BOSSId = null; + Tobj.LevelTimeInfo = []; + Tobj.BOSSId = {}; + for (local i = 0; i < 50; i++) { + local TimeBuf = Buffer.Get("Time->" + i); + Tobj.LevelTimeInfo.append(TimeBuf * 1000); + local BossId = Buffer.Get("BOSSId->" + i); + Tobj.BOSSId.rawset(BossId, true); + } + Tobj.KillMonsterRewardCount = Buffer.Get("KillMonsterRewardCount"); + } + } + + //获取基础配置包 + function GetBaseInfo() { + local T = { + op = 20023001, + } + SendPack(T); + } + + //进入副本标识包 + function StartDgnIdxPack() { + local T = { + op = 20023009, + } + SendPack(T); + } + + //退出副本标识包 + function EndDgnIdxPack() { + local T = { + op = 20023011, + } + SendPack(T); + } + + //获取小技能卡牌 + function GetSmallPwoerCard(Job, JobGrow) { + local T = { + op = 20023003, + job = Job, + jobGrow = JobGrow, + } + SendPack(T); + } + + //选择小技能卡牌 + function SelectSmallPwoerCard(Job, JobGrow) { + local T = { + op = 20023005, + job = Job, + jobGrow = JobGrow, + } + SendPack(T); + } + + //获取小技能卡牌回调 + function GetSmallPwoerCardCallBack(Chunk) { + local Buffer = Json_STL("CheckFate_SelectCObjGetBaseInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("Fate_SelectCObj")) { + local Tobj = RootTab["Fate_SelectCObj"]; + + for (local i = 0; i < 5; i++) { + local Img = Buffer.Get("SkillPack->" + i + "->Img"); + local Idx = Buffer.Get("SkillPack->" + i + "->Idx"); + local Str = Buffer.Get("SkillPack->" + i + "->Str"); + local Name = Buffer.Get("SkillPack->" + i + "->Name"); + + local Type = Buffer.Get("SkillPack->" + i + "->Type"); + local SkillIndex = Buffer.Get("SkillPack->" + i + "->SkillIndex"); + local SkillIdx = Buffer.Get("SkillPack->" + i + "->SkillIdx"); + local SkillValue = Buffer.Get("SkillPack->" + i + "->SkillValue"); + Tobj.PowerSelect[i] = Fate_Select_SmallPowerCard(Img, Idx, Str, Name, 27 + (i * 150), 160, Type, SkillIndex, SkillIdx, SkillValue); + } + } + } + + constructor() { + //读取基础配置 + GetBaseInfo(); + Pack_Control.rawset(20023002, GetBaseInfoCallBack); + Pack_Control.rawset(20023004, GetSmallPwoerCardCallBack); + //初始化能力包 + PowerSelect = [0, 0, 0, 0, 0]; + + + + /*测试类*/ + /*********************************************** + **************** **************** + ************************************************/ + // for (local w = 0; w < 5; w++) { + // PowerSelect[w] = Fate_Select_SmallPowerCard("Character/Swordman/Effect/SkillIcon.img", 8, "测试功能描述", "拔刀斩(范围)", 27 + (w * 150), 160, 0, 0, 0, 0); + // } + // LevelTimeInfo = []; + // for (local i = 0; i < 50; i++) { + // LevelTimeInfo.append(5000); + // } + // BOSSId = {}; + // BOSSId.rawset(59028, true); + // BOSSId.rawset(62681, true); + // BOSSId.rawset(64020, true); + // BOSSId.rawset(62721, true); + // BOSSId.rawset(62780, true); + + for (local i = 0; i < 50; i++) { + local TimeObj = TimeSTL("FateTimeObj" + i, 1100); + TimeObj.Delete(); + } + } + + + //绘制能力卡牌 + function DrawPwoerCard(obj) { + //当卡牌包存在时绘制 + if (PowerSelect[0] != 0) { + //世界静止 + //PauseWorld(obj, 2, 100); + //绘制标签界面 + T_DrawStayAni(obj, "common/dungeon/fate_select/powerselectmain.ani", 88, 40, 0, "fatepowerselectmain"); + //光 + T_DrawStayAni(obj, "common/dungeon/fate_select/goldselectframe.ani", 0, 0, 1, "powerselectmainlight"); + //绘制能力选择卡牌 + local RootTab = getroottable(); + for (local i = 0; i < 5; i++) { + PowerSelect[i].Show(obj); + //常驻检测 + if (PowerSelect[i].isLBActive() && SelectTiming == 1) { + SelectTiming = 2; + PowerSelect[i].TState = 1; + PowerSelect[i].SetPower(obj); + } + } + } + + //当能力选择后销毁卡牌包 + if (SelectTiming == 3) { + PowerSelect = null; + PowerSelect = [0, 0, 0, 0, 0]; + SelectTiming = 1; + //选择小技能卡牌 + SelectSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); + } + } + + //绘制副本背景 + function DrawDgnBackground(obj) { + if (DgnBackground == null) { + + CreatFateSelectPassObject(obj, 0); + DgnBackground = 0; + //进入副本标识包 + StartDgnIdxPack(); + //进入副本重置Exit标识 + ExitIdx = true; + + //第一次获取小技能能力 + GetSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); + } + } + + //绘制UI + function DrawFateUI(obj) { + //固定绘制右上角MainUI + { + //绘制UI + T_DrawStayAni(obj, "common/dungeon/fate_select/rightmain.ani", 537, 0, 0, "fate_selectRIGHTmain"); + //绘制波数 + DrawCustomNum(obj, 759 + ((NowLevel.tostring().len() - 1) * 6), 20, NowLevel, "common/dungeon/fate_select/num/", 1, -16); + + //判断是否BOSS战 + if (NowLevel != 0 && (NowLevel % 10) == 9) { + T_DrawStayAni(obj, "common/dungeon/fate_select/new/boss.ani", 539, 2, 0, "fate_selectBoss战"); + } else { + if (!DrawTime) return; + local TimeStr = (DrawTime / 10).tostring(); + if (TimeStr.len() == 3) TimeStr = "0" + TimeStr; + if (TimeStr.len() == 2) TimeStr = "00" + TimeStr; + if (TimeStr.len() == 1) TimeStr = "000" + TimeStr; + //绘制时间 + fateDrawCustomTimeNum(obj, 759 - 48, 22, TimeStr, "common/dungeon/fate_select/num2/", 12, -16); + } + + //绘制杀怪数量 + DrawCustomNum(obj, 759 - 15, 102, (KillMonsterRewardCount - KillMonsterCount), "common/dungeon/fate_select/num2/", -5, -16); + //获取能力发包并且减少一次杀敌数 + if (KillMonsterCount >= KillMonsterRewardCount) { + KillMonsterCount -= KillMonsterRewardCount; + //获取小技能能力 + GetSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); + } + } + + } + + //同步时间 + function SyncTime(obj) { + if (NowLevel < 50) { + local Time = LevelTimeInfo[NowLevel]; + if (TimeObj) { + local Nt = TimeObj.Get(); + //时间到 切波数 + if (Nt == Time) { + TimeObj.Delete(); + TimeObj = null; + + NowLevel++; + } else { + DrawTime = Time - Nt; + } + } else { + //更换地图 + if ((NowLevel % 10) == 9 && NowLevel != 0) { + //开始遭遇BOSS战 + if (!BossFight) { + //出怪 + sq_SendCreatePassiveObjectPacketPos(obj, 101400 + NowLevel, 0, 0, 0, 0); + BossFight = true; + } + //如果杀死BOSS + if (BossFightKillFlag) { + local ani = T_DrawDynamicAni(obj, "common/dungeon/fate_select/cg/124.ani", 400, 300, "命运的抉择过场cg"); + if (sq_GetAnimationFrameIndex(ani) >= 16 && BackGroundSummon == false) //当发光ani黑时 + { + DestroyFateSelectPassObject(obj, (NowLevel / 9) - 1); //销毁上一个图 + CreatFateSelectPassObject(obj, (NowLevel / 9)); //创建下一个图 + BackGroundSummon = true; + } + if (sq_IsEnd(ani)) { + NowLevel++; + BossFightKillFlag = false; + BackGroundSummon = false; + BossFight = false; + sq_Rewind(ani); + } + } + } else { + TimeObj = TimeSTL("FateTimeObj" + NowLevel, Time); + TimeObj.Start(); + + //出怪 + sq_SendCreatePassiveObjectPacketPos(obj, 101400 + NowLevel, 0, 0, 0, 0); + } + } + } + if (NowLevel == 50) { + L_sq_GoTown(); + } + } + + //遍历怪物死亡 + function SyncMonsterDie(obj) { + local objectManager = obj.getObjectManager(); + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < CollisionObjectNumber; i += 1) { + local object = objectManager.getCollisionObject(i); + if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && object.getTeam() != 0) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + local MonDieSoundIndex = activeObj.getCollisionObjectIndex(); + local UUID = sq_GetUniqueId(activeObj); + if (activeObj.isDead()) { + if (!getroottable().rawin("fate_select" + UUID)) { + if (BOSSId.rawin(MonDieSoundIndex)) { + KillMonsterCount += 15; + //BOSS击杀标识 + BossFightKillFlag = true; + } + KillMonsterCount++; + getroottable().rawset("fate_select" + UUID, true); + } + } + } + } + } + + //副本销毁程序 + function DgnExit(obj) { + DgnBackground = null; + KillMonsterCount = 0; + NowLevel = 0; + //退出副本标识包 + EndDgnIdxPack(); + //销毁技能提升 + local RootTab = getroottable(); + if (RootTab.rawin("LenheartSkillManager")) { + RootTab.rawdelete("LenheartSkillManager"); + } + ExitIdx = false; + + BossFight = false; + //杀死BOSS Flag + BossFightKillFlag = false; + //召唤背景 + BackGroundSummon = false; + //时间容器对象 + TimeObj = null; + //绘制对象时间 + DrawTime = null; + + SelectTiming = 1; + } + //副本逻辑程序 + function DgnProc(obj) { + local stage = sq_GetGlobaludpModuleStage(); + local dungeon = sq_GetDungeonByStage(stage); + local dungeonIndex = sq_GetDuegonIndex(dungeon); + if (dungeonIndex != 23048) { + if (ExitIdx == true) DgnExit(obj); + return; + } else { + if (sq_GetCurrentModuleType() == 3) { + //绘制副本背景 + DrawDgnBackground(obj); + //绘制UI + DrawFateUI(obj); + //同步时间 + SyncTime(obj); + //遍历怪物死亡 + SyncMonsterDie(obj); + //绘制能力卡牌 + DrawPwoerCard(obj); + } + } + } + + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "Fate_SelectCloseKey")) { + MainState = false; + } + DgnProc(obj); + } + + function DrawCustomNum(obj, xPos, yPos, num, str, Interval, OneDeviation) { + local len = (num.tostring()).len(); + for (local i = 0; i < len; i++) { + local one = 0; + local DrawNum = (num.tostring()).slice(i, i + 1); + if (i != (len - 1)) one += OneDeviation * abs(i - (len - 1)); + local ani = obj.getVar().GetAnimationMap(DrawNum + str, str + DrawNum + ".ani"); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, xPos + (i * Interval) + one, yPos, true); + } + } + + function fateDrawCustomTimeNum(obj, xPos, yPos, num, str, Interval, OneDeviation) { + + for (local i = 0; i < 4; i++) { + local Idx = num.slice(0 + i, 1 + i); + local ani = obj.getVar().GetAnimationMap(Idx + str, str + Idx + ".ani"); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, xPos + ((i - 4) * 14) + ((i / 2) * 18) - 10, yPos, true); + } + T_DrawStayAni(obj, "common/dungeon/fate_select/dian.ani", xPos - 146, yPos - 34, 0, "fatedian"); + } + + + function PauseWorld(obj, Type, Time) { + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i += 1) { + local object = objectManager.getCollisionObject(i); + sq_SetPause(object, Type, Time); + } + + } + + function CreatFateSelectPassObject(obj, sc) { + switch (sc) { + case 0: + sq_SendCreatePassiveObjectPacketPos(obj, 102500, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102501, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102502, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102503, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102504, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102505, 0, 0, 0, 0); + + sq_SendCreatePassiveObjectPacketPos(obj, 1012, 0, 391, 340, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 1013, 0, 538, 340, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1234, 193, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1004, 215, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 619, 255, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 607, 583, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 588, 591, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 583, 323, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 280, 202, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1072, 298, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 479, 335, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 356, 360, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 474, 363, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 614, 341, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 565, 344, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 431, 346, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 322, 366, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 494, 374, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 540, 370, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 292, 0, 1, 228, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 292, 0, 6, 435, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 1012, 0, 1031, 468, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 990, 462, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 1067, 453, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1009, 444, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1133, 481, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 943, 482, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1047, 506, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 221, 0, 157, 575, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 282, 457, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 160, 427, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 263, 390, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 375, 427, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 863, 434, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1025, 447, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 905, 492, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 410, 315, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 72, 422, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 103, 584, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 160, 526, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 657, 259, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 571, 597, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 608, 597, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1060, 538, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1113, 444, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1092, 543, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1012, 543, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 148, 512, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 228, 549, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 65, 397, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 175, 439, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 280, 396, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 652, 190, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 217, 164, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 345, 202, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 1014, 199, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 1023, 206, 0); + break; + case 1: + sq_SendCreatePassiveObjectPacketPos(obj, 102515, 0, 0, -40, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102510, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102511, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102513, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102514, 0, 0, 0, 0); + + sq_SendCreatePassiveObjectPacketPos(obj, 868, 0, 591, 835, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 502, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 562, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 622, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 802, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 862, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 922, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1102, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1162, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1222, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 869, 0, 1020, 705, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 869, 0, 713, 719, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1540, 240, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1560, 394, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1541, 551, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, -180, 293, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, -7, 360, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 26, 508, 0); + break; + case 2: + sq_SendCreatePassiveObjectPacketPos(obj, 102525, 0, 0, -40, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102520, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102521, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102522, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102523, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102524, 0, 0, 80, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102526, 0, 0, 80, 0); + + sq_SendCreatePassiveObjectPacketPos(obj, 10658, 0, 1699, 146, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10681, 0, 7, 284, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 15096, 0, 1582, 526, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10681, 0, 7, 391, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 15095, 0, 1620, 477, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 15095, 0, 1619, 419, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10671, 0, 7, 186, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10672, 0, -39, 511, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 1540, 351, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10671, 0, 189, 573, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 274, 691, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 222, 659, 0); + break; + case 3: + sq_SendCreatePassiveObjectPacketPos(obj, 102535, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102530, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102531, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102534, 0, 0, 120, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102536, 0, 0, 120, 0); + + local YP = 120; + sq_SendCreatePassiveObjectPacketPos(obj, 8959, 0, 266, 151 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -46, 582 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, 3, 130 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -99, 485 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1072, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1039, 144 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 483, 572 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 503, 592 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 411, 568 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 777, 136 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 673, 137 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1574, 265 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1526, 195 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1553, 533 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1538, 516 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1440, 160 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 393, 141 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 139, 154 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 543, 598 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 464, 587 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1511, 211 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1500, 186 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1528, 546 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10152, 0, 985, 137 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 860, 155 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1323, 150 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 491, 138 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 538, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 607, 148 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 638, 160 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1555, 312 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 405, 596 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1126, 157 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1163, 146 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 1239, 126 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1354, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1543, 298 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 907, 138 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1573, 505 + YP, 0); + break; + case 4: + sq_SendCreatePassiveObjectPacketPos(obj, 102545, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102540, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102541, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102542, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102543, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102546, 0, 0, 120, 0); + + + sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 0, 260, 100); + sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 640, 260, 100); + sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 1280, 260, 100); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 640, 23, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 1280, 24, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 0, 200, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 640, 200, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 1280, 200, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 291, 165, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 10, 182, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 780, 159, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 1244, 601, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10247, 0, 681, 170, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 918, 169, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10245, 0, 648, 603, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 1066, 165, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10250, 0, 577, 263, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10250, 0, 1251, 264, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 544, 323, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 331, 619, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 1269, 352, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10248, 0, 441, 608, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 213, 385, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 1250, 546, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10247, 0, 953, 615, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 894, 599, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10248, 0, 1155, 164, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 1528, 141, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 1513, 157, 0); + break; + } + + } + + //销毁特效 + function DestroyPassiveObject(obj, Index) { + local ballCount = obj.getMyPassiveObjectCount(Index); + for (local i = 0; i < ballCount; ++i) { + local magicBall = obj.getMyPassiveObject(Index, i) + if (!magicBall) + continue; + sq_SendDestroyPacketPassiveObject(magicBall); + } + } + + function DestroyFateSelectPassObject(obj, sc) { + switch (sc) { + case 0: + DestroyPassiveObject(obj, 102500); + DestroyPassiveObject(obj, 102501); + DestroyPassiveObject(obj, 102502); + DestroyPassiveObject(obj, 102503); + DestroyPassiveObject(obj, 102504); + DestroyPassiveObject(obj, 102505); + + DestroyPassiveObject(obj, 1012); + DestroyPassiveObject(obj, 1013); + DestroyPassiveObject(obj, 261); + DestroyPassiveObject(obj, 248); + DestroyPassiveObject(obj, 247); + DestroyPassiveObject(obj, 3000); + DestroyPassiveObject(obj, 3004); + DestroyPassiveObject(obj, 292); + DestroyPassiveObject(obj, 221); + break; + case 1: + DestroyPassiveObject(obj, 102510); + DestroyPassiveObject(obj, 102511); + DestroyPassiveObject(obj, 102512); + DestroyPassiveObject(obj, 102513); + DestroyPassiveObject(obj, 102514); + DestroyPassiveObject(obj, 102515); + + DestroyPassiveObject(obj, 868); + DestroyPassiveObject(obj, 869); + DestroyPassiveObject(obj, 109006950); + DestroyPassiveObject(obj, 109006947); + break; + case 2: + DestroyPassiveObject(obj, 102520); + DestroyPassiveObject(obj, 102521); + DestroyPassiveObject(obj, 102522); + DestroyPassiveObject(obj, 102523); + DestroyPassiveObject(obj, 102524); + DestroyPassiveObject(obj, 102525); + DestroyPassiveObject(obj, 102526); + + DestroyPassiveObject(obj, 10658); + DestroyPassiveObject(obj, 10681); + DestroyPassiveObject(obj, 15096); + DestroyPassiveObject(obj, 10672); + DestroyPassiveObject(obj, 15095); + DestroyPassiveObject(obj, 10671); + DestroyPassiveObject(obj, 10675); + break; + case 3: + DestroyPassiveObject(obj, 102530); + DestroyPassiveObject(obj, 102531); + DestroyPassiveObject(obj, 102534); + DestroyPassiveObject(obj, 102535); + DestroyPassiveObject(obj, 102536); + + DestroyPassiveObject(obj, 8959); + DestroyPassiveObject(obj, 10232); + DestroyPassiveObject(obj, 8963); + DestroyPassiveObject(obj, 10151); + DestroyPassiveObject(obj, 10150); + DestroyPassiveObject(obj, 10152); + DestroyPassiveObject(obj, 8453); + DestroyPassiveObject(obj, 8960); + DestroyPassiveObject(obj, 109002769); + break; + } + } +} + + + +function Fate_Select(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("Fate_SelectCObj")) { + local Cobj = Fate_SelectC(); + RootTab.rawset("Fate_SelectCObj", Cobj); + } else { + RootTab["Fate_SelectCObj"].Proc(obj); + } +} \ No newline at end of file diff --git a/Plugins/Fiendwar/Fiendwar.nut b/Plugins/Fiendwar/Fiendwar.nut new file mode 100644 index 0000000..2025816 --- /dev/null +++ b/Plugins/Fiendwar/Fiendwar.nut @@ -0,0 +1,101 @@ +/* +文件名:Fiendwar.nut +路径:Plugins/Fiendwar/Fiendwar.nut +创建日期:2024-03-03 10:38 +文件用途: +*/ + +class FiendwarTotal extends BasicsDrawTool { + //基础配置 + BaseConfig = null; + /* + town_index 城镇编号 + channel_index 频道编号 + */ + + function GetInstance() { + return getroottable()["FiendwarCObj"]; + } + + //请求基础信息配置 + function GetFiendwarBase() { + local T = { + op = 20063501, + } + SendPack(T); + } + + //基础信息配置 + function FiendwarBase(Chunk) { + BaseConfig = Json.Decode(Chunk); + FiendwarChannelTownLogicCallBack(); + } + + //团本专属频道上线城镇移动包 + function FiendwarChannelTownLogicCallBack() { + if (BaseConfig.channel_index.find("20")) { + if (L_sq_GetTownIndex() != BaseConfig.town_index) { + L_sq_MoveTown(BaseConfig.town_index, 0, 474, 249); + } + } + //不在超时空区域 + else { + L_sq_MoveTown(1, 1, 474, 249); + } + } + + constructor() { + //获取基础配置回调包 + Pack_Control.rawset(20063502, FiendwarBase.bindenv(this)); + + //第一次上线要重新请求一下位置信息 + GetFiendwarBase(); + } + + + function Proc(obj) {} +} + +function LenheartFiendwar(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("FiendwarCObj")) { + local Cobj = FiendwarTotal(); + RootTab.rawset("FiendwarCObj", Cobj); + } else { + RootTab["FiendwarCObj"].Proc(obj); + } + + + + //攻坚队列表框 + if (!RootTab.rawin("FiendwarHallCObj")) { + local Cobj = FiendwarHallC(); + RootTab.rawset("FiendwarHallCObj", Cobj); + } else { + RootTab["FiendwarHallCObj"].Proc(obj); + RootTab["FiendwarHallCObj"].Draw(obj); + } + + //创建队伍框 + if (!RootTab.rawin("FiendwarHallCreatePartyCObj")) { + local Cobj = FiendwarHallCreatePartyC(); + RootTab.rawset("FiendwarHallCreatePartyCObj", Cobj); + } else { + RootTab["FiendwarHallCreatePartyCObj"].Proc(obj); + RootTab["FiendwarHallCreatePartyCObj"].Draw(obj); + } +} + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("Fiendwar_LenheartFunc", LenheartFiendwar); +} else { + local T = {}; + T.rawset("Fiendwar_LenheartFunc", LenheartFiendwar); + getroottable().rawset("LenheartFuncTab", T); +} + + + + +dofile("sqr/Plugins/Fiendwar/FiendwarHall.nut"); +dofile("sqr/Plugins/Fiendwar/FiendwarHallCreateParty.nut"); \ No newline at end of file diff --git a/Plugins/Fiendwar/FiendwarHall.nut b/Plugins/Fiendwar/FiendwarHall.nut new file mode 100644 index 0000000..fa09011 --- /dev/null +++ b/Plugins/Fiendwar/FiendwarHall.nut @@ -0,0 +1,380 @@ +/* +文件名:FiendwarHall.nut +路径:Plugins/Fiendwar/FiendwarHall.nut +创建日期:2024-03-11 12:54 +文件用途:超时空之战大厅 +*/ + +class FiendwarHallTeamC extends BasicsDrawTool { + X = 0; + Y = 0; + Width = null; + Height = null; + TeamObj = null; + //选中状态 + SelectState = false; + //攻坚状态 + OffensiveState = 0; + + Mobj = null; //鼠标对象 + + + constructor(gTeamObj) { + TeamObj = gTeamObj; + this.Width = 458; + this.Height = 21; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + function SyncPos(X, Y) { + this.X = X; + this.Y = Y; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 10, Y + 82, Width, Height)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) { + return true; + } else return false; + } + + + function Show() { + //绘制底槽 + L_sq_DrawImg("hud/fiendwarl.img", 4, X + 10, Y + 82); + + //绘制队伍编号 + L_sq_DrawCode(TeamObj.TeamId, X + 32 - LenheartTextClass.GetStringLength(TeamObj.TeamId) / 2, Y + 87, sq_RGBA(134, 120, 79, 255), 0, 1); + //绘制队长头像 + L_sq_DrawImg("interface/lenheartwindowcommon.img", 55, X + 62, Y + 89); + try { + local channel_index = FiendwarTotal.GetInstance().BaseConfig.channel_index; + channel_index = channel_index.slice(channel_index.len() - 2, channel_index.len()); + //绘制频道信息 + L_sq_DrawCode(channel_index, X + 112 - LenheartTextClass.GetStringLength(channel_index) / 2, Y + 87, sq_RGBA(134, 120, 79, 255), 0, 1); + } catch (exception) { + + } + //绘制攻坚队名称 + L_sq_DrawCode(TeamObj.TeamName, X + 140, Y + 87, sq_RGBA(134, 120, 79, 255), 0, 1); + //绘制攻坚队攻坚状态 + L_sq_DrawImg("hud/fiendwarl.img", 6 + TeamObj.State, X + 324, Y + 84); + + local PartyPlayerCountStr = TeamObj.TeamPlayerCount + " / " + 8; + //绘制攻坚队队员数量 + L_sq_DrawCode(PartyPlayerCountStr, X + 444 - LenheartTextClass.GetStringLength(PartyPlayerCountStr) / 2, Y + 87, sq_RGBA(134, 120, 79, 255), 0, 1); + + if (SelectState) { + L_sq_DrawImg("hud/fiendwarl.img", 5, X + 10, Y + 82); + } + + if (isInRect()) { + L_sq_DrawImg("hud/fiendwarl.img", 5, X + 10, Y + 82); + } + + if (isLBActive()) { + //还原其他 选中自己 + foreach(Obj in FiendwarHallC.GetInstance().PartyList) { + Obj.SelectState = false; + } + SelectState = !SelectState; + } + + + } +} + +class FiendwarHallC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = true; //主状态 + X = 320; + Y = 40; + + + PartyList = null; + + function GetInstance() { + return getroottable()["FiendwarHallCObj"]; + } + + function GetAllTeamCallBack(Chunk) { + // Sout("收到包 : \n %L", Chunk); + local Jso = Json.Decode(Chunk); + PartyList = []; + foreach(TeamsSimple in Jso.TeamSimList) { + local T = { + TeamId = TeamsSimple.TeamId.tostring(), + TeamName = TeamsSimple.TeamName, + TeamPlayerCount = TeamsSimple.TeamPlayerCount, + State = TeamsSimple.State + } + local TeamBuf = FiendwarHallTeamC(T); + PartyList.append(TeamBuf); + } + } + + function GetAllTeamCall() { + local Jso = { + op = 20063011 + } + SendPack(Jso); + } + + constructor() { + PartyList = []; + Pack_Control.rawset(20063002, GetAllTeamCallBack.bindenv(this)); + GetAllTeamCall(); + } + + MyChannelBtn = null; + OnlyPreparingBtn = null; + OnlyPreparingFlag = 1; + InputObject = null; + + function DrawMainBackGround(obj) { + //Item信息框一般为211的宽度 + L_sq_DrawWindow(X, Y + 10, 540 * 0.85, 420 * 0.9, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + // L_sq_DrawWindow(X + 6, Y + 56, 528 * 0.85, 384 * 0.85, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawWindow(X + 6, Y + 19, 528 * 0.85, 47, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + //绘制背景框标题栏 + L_sq_DrawImg("hud/fiendwarl.img", 3, X + 1, Y); + + L_sq_DrawCode("寻找攻坚队", X + 217, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1); + + local CloseButton = LenheartBaseButton(X + 457, Y, 11, 12, "interface/lenheartwindowcommon.img", 276); + CloseButton.Show(); + if (CloseButton.isLBActive()) { + MainState = false; + } + + //我的频道 + if (!MyChannelBtn) { + MyChannelBtn = LenheartcommonSwitchButtonText(X + 16, Y + 30, "我的频道"); + MyChannelBtn.State = 1; + MyChannelBtn.ImgIndex = 358; + MyChannelBtn.SetTextPos(12, 2); + MyChannelBtn.Width = 76; + MyChannelBtn.Height = 16; + } + MyChannelBtn.SyncPos(X + 16, Y + 30); + MyChannelBtn.Show(); + + //只查看招募中的攻坚队 + if (!OnlyPreparingBtn) { + OnlyPreparingBtn = LenheartcommonSwitchButtonText(X + 50, Y + 30, "只查看招募中的攻坚队"); + OnlyPreparingBtn.ImgIndex = 358; + OnlyPreparingBtn.SetTextPos(12, 2); + OnlyPreparingBtn.Width = 76; + OnlyPreparingBtn.Height = 16; + } + OnlyPreparingBtn.SyncPos(X + 110, Y + 30); + OnlyPreparingBtn.Show(); + if (OnlyPreparingBtn.isLBActive()) { + switch (OnlyPreparingFlag) { + case 0: + OnlyPreparingFlag = 1; + break; + case 1: + OnlyPreparingFlag = 0; + break; + } + } + OnlyPreparingBtn.State = OnlyPreparingFlag; + + if (!InputObject) InputObject = LenheartBaseInput(X + 260, Y + 31, 80, 20); + else { + InputObject.SyncPos(X + 260, Y + 31); + InputObject.Show(); + } + + + local FindButton = LenheartButtonText(X + 348, Y + 28, 5, "搜索"); + FindButton.SetTextOffset(0, 1); + FindButton.Show(); + if (FindButton.isLBActive()) { + + } + + local ResetButton = LenheartButtonText(X + 408, Y + 28, 5, "重置"); + ResetButton.SetTextOffset(0, 1); + ResetButton.Show(); + if (ResetButton.isLBActive()) { + InputObject.str = ""; + } + + local ModelButton = LenheartButtonText(X + 9, Y + 56, -18, "编号"); + ModelButton.Idx = 163; + ModelButton.DWidth = -8; + ModelButton.SetTextOffset(-9, 1); + ModelButton.Show(); + + local StateButton = LenheartButtonText(X + 51, Y + 56, -18, "状态"); + StateButton.Idx = 163; + StateButton.DWidth = -8; + StateButton.SetTextOffset(-9, 1); + StateButton.Show(); + + local ChannelButton = LenheartButtonText(X + 93, Y + 56, -18, "频道"); + ChannelButton.Idx = 163; + ChannelButton.DWidth = -8; + ChannelButton.SetTextOffset(-9, 1); + ChannelButton.Show(); + + local PartyNameButton = LenheartButtonText(X + 135, Y + 56, 100, "攻坚队名称"); + PartyNameButton.Idx = 163; + PartyNameButton.DWidth = 223; + PartyNameButton.FillWidth = 1; + PartyNameButton.FirstWidth = 21; + PartyNameButton.SetTextOffset(26, 1); + PartyNameButton.Show(); + + local StageButton = LenheartButtonText(X + 289, Y + 56, 52, "阶段"); + StageButton.Idx = 163; + StageButton.DWidth = 140; + StageButton.FillWidth = 1; + StageButton.FirstWidth = 21; + StageButton.SetTextOffset(26, 1); + StageButton.Show(); + + local TeammembersButton = LenheartButtonText(X + 402, Y + 56, 50, "队员数量"); + TeammembersButton.Idx = 163; + TeammembersButton.FillWidth = 1; + TeammembersButton.FirstWidth = 21; + TeammembersButton.DWidth = 47; + TeammembersButton.SetTextOffset(-8, 1); + TeammembersButton.Show(); + + DrawPartyList(obj); + + L_sq_DrawWindow(X + 6, Y + 382, 528 * 0.85, 24, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + local CreateOrMyPartyStr = "创建攻坚队"; + local MyPartyButton = LenheartButtonText(X + 15, Y + 395, 30, CreateOrMyPartyStr); + MyPartyButton.SetTextOffset(-6, 1); + MyPartyButton.Show(); + if (MyPartyButton.isLBActive()) { + FiendwarHallCreatePartyC.GetInstance().MainState = true; + } + + //绘制背景框标题栏 + // L_sq_DrawImg("interface/lenheartwindowcommon.img", 33, X + 150, Y + 395); + + local LeftButton = LenheartBaseButton(X + 160, Y + 400, 15, 15, "interface/lenheartwindowcommon.img", 34); + LeftButton.Show(); + if (LeftButton.isLBActive()) { + + } + + local PageStr = Page + 1 + " / " + ((PartyList.len() / PageMaxCount) + 1); + //绘制当前页数 + L_sq_DrawCode(PageStr, X + 166 + LenheartTextClass.GetStringLength(PageStr) / 2, Y + 402, sq_RGBA(134, 120, 79, 255), 0, 1); + + local RightButton = LenheartBaseButton(X + 220, Y + 400, 15, 15, "interface/lenheartwindowcommon.img", 38); + RightButton.Show(); + if (RightButton.isLBActive()) { + + } + + local FQButton = LenheartButtonText(X + 300, Y + 394, 20, "进入待机"); + FQButton.SetTextOffset(-5, 2); + FQButton.State = 8; + FQButton.Show(); + + + local RefreshButton = LenheartBaseButton(X + 410, Y + 395, 25, 25, "interface/lenheartwindowcommon.img", 366); + RefreshButton.Show(); + if (RefreshButton.isLBActive()) { + GetAllTeamCall(); + } + + local SettingButton = LenheartBaseButton(X + 440, Y + 394, 15, 15, "interface/lenheartwindowcommon.img", 362); + SettingButton.State = 8; + SettingButton.Show(); + + } + + Page = 0; + PageMaxCount = 13; + //绘制队伍信息 + function DrawPartyList(obj) { + if (PartyList.len() <= 0) return; + foreach(Index, TeamObj in PartyList.slice((((Page) * PageMaxCount) > 0) ? ((Page) * PageMaxCount) : 0, ((Page + 1) * PageMaxCount) > PartyList.len() ? PartyList.len() : ((Page + 1) * PageMaxCount))) { + TeamObj.SyncPos(X, Y + 2 + (Index % PageMaxCount) * 23); + TeamObj.Show(); + } + } + + //绘制主界面 + function DrawMain(obj) { + DrawMainBackGround(obj); + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + } + + MainButton = null; + //绘制入口 + function Draw(obj) { + //在甲板 + if (FiendwarTotal.GetInstance().BaseConfig && FiendwarTotal.GetInstance().BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == FiendwarTotal.GetInstance().BaseConfig.town_index && L_sq_GetRegionIndex() == 1) { + if (!MainButton) { + MainButton = LenheartBaseButton(0, 350, 100, 179, "hud/fiendwarl.img", 0); + } else { + MainButton.Show(); + if (MainButton.isLBActive()) { + MainState = !MainState; + } + } + } + + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = LenheartWindow(X, Y, 476, 432, 10); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "FiendwarHallCloseKey")) { + MainState = false; + } + } +} \ No newline at end of file diff --git a/Plugins/Fiendwar/FiendwarHallCreateParty.nut b/Plugins/Fiendwar/FiendwarHallCreateParty.nut new file mode 100644 index 0000000..c347a89 --- /dev/null +++ b/Plugins/Fiendwar/FiendwarHallCreateParty.nut @@ -0,0 +1,101 @@ +/* +文件名:FiendwarHallCreateParty.nut +路径:Plugins/Fiendwar/FiendwarHallCreateParty.nut +创建日期:2024-03-18 13:20 +文件用途: +*/ + +class FiendwarHallCreatePartyC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = true; //主状态 + X = 290; + Y = 220; + + constructor() {} + + function GetInstance() { + return getroottable()["FiendwarHallCreatePartyCObj"]; + } + + + + InputObject = null; + //绘制主界面 + function DrawMain(obj) { + + L_sq_DrawWindow(X, Y + 10, 260, 120, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2); + L_sq_DrawWindow(X, Y + 10, 260, 120, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2); + L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 0, X + 11, Y + 21); + + L_sq_DrawImg("hud/fiendwarl.img", 9, X - 2, Y + 2); + L_sq_DrawCode("创建攻坚队", X + 112, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1); + + L_sq_DrawImg("hud/fiendwarl.img", 10, X + 72, Y + 44); + + if (!InputObject) InputObject = LenheartBaseInput(X + 62, Y + 68, 152, 20); + else { + InputObject.SyncPos(X + 62, Y + 68); + InputObject.Show(); + } + + local OkButton = LenheartButtonText(X + 78, Y + 124, 5, "确定"); + OkButton.SetTextOffset(0, 1); + OkButton.Show(); + if (OkButton.isLBActive()) { + if (InputObject.str.len() > 0) { + local T = { + op = 20063001, + teamsName = InputObject.str, + items = [L_sq_GetCharacterAttribute(0x1c, 14), L_sq_GetCharacterAttribute(0x1c, 13)], + } + BasicsDrawTool.SendPackEx(T); + MainState = false; + } + } + + local CloseButton = LenheartButtonText(X + 144, Y + 124, 5, "取消"); + CloseButton.SetTextOffset(0, 1); + CloseButton.Show(); + if (CloseButton.isLBActive()) { + MainState = false; + } + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = LenheartWindow(X, Y, 800, 600, 28); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "FiendwarHallCreatePartyCloseKey")) { + MainState = false; + } + } +} \ No newline at end of file diff --git a/Plugins/HorseGuessing/HorseGuessing.nut b/Plugins/HorseGuessing/HorseGuessing.nut new file mode 100644 index 0000000..a6b389b --- /dev/null +++ b/Plugins/HorseGuessing/HorseGuessing.nut @@ -0,0 +1,1415 @@ +/* +文件名:HorseGuessing.nut +路径:Plugins/HorseGuessing/HorseGuessing.nut +创建日期:2023-10-02 14:19 +文件用途: +*/ + +//TabTextButtonPro按钮类 +class HorseGuessingTabTextButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + SwitchState = false; //复选框是否选中 + str = null; + strx = null; + stry = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + BaseAnifileFrame = null; //调用的Ani帧数 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + + ex = 0; + ey = 0; + + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gBaseAnifileFrame, gWidth, gLength, gstr, gstrx, gstry) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + BaseAnifileFrame = gBaseAnifileFrame; + width = gWidth; + length = gLength; + str = gstr; + strx = gstrx; + stry = gstry; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + //++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + //--y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown() && SwitchState == false) //按下左键并且按钮处于弹起状态 + { + // T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx + ex, CustomClicky + ey); + } + } + + if (RectEnble && SwitchState == false) //开启悬停效果时 + { + if ((isInRect()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + // T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + L_sq_DrawImg(RectBaseAnifile, RectFrame, Rectx + ex, Recty + ey); + } + } + + if (!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + // T_DrawStayAni(obj, BaseAnifile, x, y, BaseAnifileFrame, ButtonName); + L_sq_DrawImg(BaseAnifile, BaseAnifileFrame, x + ex, y + ey); + } + + if (SwitchState) { + // T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx + ex, CustomClicky + ey); + } + + + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x + ex, y + ey, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +//HudPro按钮类 +class HorseGuessingPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + + Overturn = false; //翻转 + + + //构造函数 + constructor(gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + local Xr = 1.0 + local Xoffset = 0; + + if (Overturn) { + Xr = -1.0; + Xoffset = width; + } + //L_sq_DrawImg("common/etc/combo.img", 0, 100, 100, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx + Xoffset, CustomClicky, 0, sq_RGBA(255, 255, 255, 250), Xr, 1.0); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) L_sq_DrawImg(RectBaseAnifile, RectFrame, Rectx + Xoffset, Recty, 0, sq_RGBA(255, 255, 255, 250), Xr, 1.0); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) L_sq_DrawImg(BaseAnifile, BaseFrame, x + Xoffset, y, 0, sq_RGBA(255, 255, 255, 250), Xr, 1.0); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class HorseGuessingWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + L_sq_WA(0x1b46898, 1); + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + L_sq_WA(0x1b46898, 0); + } + } + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class HorseGuessingC extends BasicsDrawTool { + + Mobj = null; //鼠标对象 + + CompetitionState = null; //比赛状态 + CompetitionStartAnimotion = null; + NotiState = false; //公告状态 + NotiStr = null; //公告内容 + NotiTime = null; //公告时间 + + ResidueCoin = 10000; + + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 13; + Y = 10; + + //当前选择骑手资料 + NowSelectRider = 0; + //投注道具 + ItemId = null; + ItemInfo = null; + ItemObject = null; + ItemDrawState = false; + //骑手名称 + RiderName = [ + "伊撒尔", + "理查德", + "席恩", + "吉尔特", + "爱德华", + "罗兰", + "莱奥", + "贝奥武夫", + ]; + //InfoType + InfoType = 1; + //InfoTabButton + InfoTabButton1 = null; + InfoTabButton2 = null; + InfoTabButton3 = null; + //InfoContestLog + InfoContestLog = null; + + + Rider8T = null; + Rider4T = null; + Rider2T = null; + Rider1T = null; + + RiderInfo = null; + + RankInfo = null; + + + //获取基础配置包 + function GetBaseInfo() { + local T = { + op = 20055079 + }; + SendPack(T); + } + + //获取基础道具信息 + function GetItemInfo() { + local T = { + realop = 20055200, + op = 2023100901, + ItemId = this.ItemId + }; + SendPack(T); + } + + //获取基础道具信息包回调 + function GetItemInfoCallBack(Chunk) { + // Sout("收到包内容: %L", Chunk); + local Jso = Json.Decode(Chunk); + + ItemInfo = Jso.item; + } + + //获取基础配置包回调 + function GetBaseInfoCallBack(Chunk) { + // Sout("收到包内容: %L", Chunk); + local Jso = Json.Decode(Chunk); + ItemId = Jso.itemId; + ItemInfo = Jso.itemInfo[0]; + ItemInfo.Name2 = "Yosin-Team"; + + for (local i = 0; i< Jso.nameS.len(); i++) { + local NameBuf = Jso.nameS[i]; + if (i == 0) { + RiderName = []; + } + RiderName.append(NameBuf); + } + } + + //获取信息包 + function GetInfo() { + local T = { + op = 20055001 + }; + SendPack(T); + } + + //获取信息包回调 + function GetInfoCallBack(Chunk) { + // Sout("收到包内容: %L", Chunk); + + local Jso = Json.Decode(Chunk); + if (Jso.Rank.len() == 0) return; + + ResidueCoin = Jso.ResidueCoin; + //同步状态 + CompetitionState = Jso.state; + //获取8位 + for (local i = 0; i< Jso.Rank.Top8.len(); i++) { + //获取赔率 + local gOdds = Jso.Rank.Top8[i].SOdds; + local gcodeItem = Jso.codeItem[i]; + + if (i == 0) { + if (Rider8T == null); + Rider8T = []; + } + + local T; + if (i< Rider8T.len()) { + T = Rider8T[i]; + T.Odds <- gOdds; + T.CodeItem <- gcodeItem; + } else { + T = { + Odds = gOdds, + CodeItem = gcodeItem, + }; + Rider8T.append(T); + } + } + + //获取4位 + for (local i = 0; i< Jso.Rank.Top4.len(); i++) { + //获取骑手信息 + local gCode = Jso.Rank.Top4[i].code; + + if (i == 0) { + if (Rider4T == null); + Rider4T = []; + } + + local T; + if (i< Rider4T.len()) { + T = Rider4T[i]; + T.Code <- gCode; + } else { + T = { + Code = gCode, + }; + Rider4T.append(T); + } + } + + //获取2位 + for (local i = 0; i< Jso.Rank.Top2.len(); i++) { + //获取骑手信息 + local gCode = Jso.Rank.Top2[i].code; + if (i == 0) { + if (Rider2T == null); + Rider2T = []; + } + + local T; + if (i< Rider2T.len()) { + T = Rider2T[i]; + T.Code <- gCode; + } else { + T = { + Code = gCode, + }; + Rider2T.append(T); + } + } + + //获取1位 + for (local i = 0; i< Jso.Rank.Top1.len(); i++) { + //获取骑手信息 + local gCode = Jso.Rank.Top1[i].code; + + if (i == 0) { + if (Rider1T == null); + Rider1T = []; + } + + local T; + if (i< Rider1T.len()) { + T = Rider1T[i]; + T.Code <- gCode; + } else { + T = { + Code = gCode, + }; + Rider1T.append(T); + } + } + } + + //获取选手具体信息 + function GetRiderInfo() { + local T = { + op = 20055003, + code = NowSelectRider, + } + SendPack(T); + } + + //获取选手具体信息回调包 + function GetRiderInfoCallBack(Chunk) { + // Sout("收到包内容: %L", Chunk); + + local Jso = Json.Decode(Chunk); + + RiderInfo = []; + for (local i = 0; i< Jso.outcome.len(); i++) { + RiderInfo.append(Jso.outcome[i]); + } + } + + //获取过往战绩 + function GetPastInfo() { + local T = { + op = 20055009, + } + SendPack(T); + } + + //获取过往战绩回调包 + function GetPastInfoCallBack(Chunk) { + // Sout("收到包内容: %L", Chunk); + + local Jso = Json.Decode(Chunk); + + InfoContestLog = []; + for (local i = 0; i< Jso.knights.len(); i++) { + local gPeriods = Jso.knights[i].Periods; + if (gPeriods == false) break; + local gWinner = Jso.knights[i].code; + local gRate = Jso.knights[i].SOdds; + local T = { + Periods = gPeriods, + Winner = gWinner, + Rate = gRate + } + InfoContestLog.append(T); + } + } + + //战斗开始包 + function FightStartCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + CompetitionState = Jso.state; + } + + + //战斗状态包 + function RefreshFightStateCallback(Chunk) { + + local Jso = Json.Decode(Chunk); + if (!MainState) return; + + CompetitionState = Jso.state; + + if (Rider8T) { + //获取8位 + for (local i = 0; i< Jso.Rank.Top8.len(); i++) { + //获取编号 + local gHp = Jso.Rank.Top8[i].hp; + local T = Rider8T[i]; + T.rawset("hp", gHp); + } + } + + + if (Rider4T) { + //获取4位 + for (local i = 0; i< Jso.Rank.Top4.len(); i++) { + //获取编号 + local gHp = Jso.Rank.Top4[i].hp; + local T = Rider4T[i]; + T.rawset("hp", gHp); + } + } + + + if (Rider2T) { + //获取2位 + for (local i = 0; i< Jso.Rank.Top2.len(); i++) { + //获取编号 + local gHp = Jso.Rank.Top2[i].hp; + local T = Rider2T[i]; + T.rawset("hp", gHp); + } + } + } + + + //玩家获取包刷新回调 + function UserRefreshCallBack(Chunk) { + GetInfo(); + } + + //获胜者公告包 + function WinnerRefreshCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + + NotiState = true; //公告状态 + NotiStr = Jso.Str; //公告内容 + NotiTime = Clock(); + } + + //排行榜信息包 + function WinnerRankCallBack(Chunk) { + + local Jso = Json.Decode(Chunk); + RankInfo = Jso.RankInfo; + } + + HookInputState = false; + InputValue = null; + //Hook输入 + function HookInput(Code) { + if (Code >= 96 && Code <= 105) { + Code -= 96; + } else if (Code >= 48 && Code <= 57) { + Code -= 48; + } else return; + + if (InputValue == null) InputValue = Code.tostring(); + else InputValue += Code.tostring(); + if (InputValue.tointeger() > ResidueCoin) InputValue = ResidueCoin.tostring(); + } + + constructor() { + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + + //获取信息包回调 + // Pack_Control.rawset(20055080, GetItemInfoCallBack.bindenv(this)); + + Pack_Control.rawset(20055002, GetInfoCallBack.bindenv(this)); + + Pack_Control.rawset(20055004, GetRiderInfoCallBack.bindenv(this)); + + Pack_Control.rawset(20055010, GetPastInfoCallBack.bindenv(this)); + + Pack_Control.rawset(20055012, RefreshFightStateCallback.bindenv(this)); + + Pack_Control.rawset(20055080, GetBaseInfoCallBack.bindenv(this)); + + Pack_Control.rawset(20055020, FightStartCallBack.bindenv(this)); + + Pack_Control.rawset(20055066, UserRefreshCallBack.bindenv(this)); + + Pack_Control.rawset(20055078, WinnerRefreshCallBack.bindenv(this)); + + Pack_Control.rawset(20055088, WinnerRankCallBack.bindenv(this)); + } + + + function DrawInfo(obj) { + + if (!InfoTabButton1) { + InfoTabButton1 = HorseGuessingTabTextButtonPro(obj, "骑士马战指引Tab", 5, 24, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 27, 63, 19, "", 8, 5); + InfoTabButton1.SwitchState = true; + InfoTabButton1.SetRectEnble(true, "a骑士马战指引Tab", 5, 24 + 1, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 30); + InfoTabButton1.SetCustomClickEnble(true, "a骑士马战指引Tab", 5, 24, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 30); + } + InfoTabButton1.ex = X; + InfoTabButton1.ey = Y; + InfoTabButton1.Show(); + if (!InfoTabButton2) { + InfoTabButton2 = HorseGuessingTabTextButtonPro(obj, "骑士马战骑士资料Tab", 5 + 63, 24, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 28, 63, 19, "", 8, 5); + InfoTabButton2.SwitchState = false; + InfoTabButton2.SetRectEnble(true, "a骑士马战骑士资料Tab", 5 + 63, 24 + 1, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 31); + InfoTabButton2.SetCustomClickEnble(true, "a骑士马战骑士资料Tab", 5 + 63, 24, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 31); + } + InfoTabButton2.ex = X; + InfoTabButton2.ey = Y; + InfoTabButton2.Show(); + if (!InfoTabButton3) { + InfoTabButton3 = HorseGuessingTabTextButtonPro(obj, "骑士马战过往战绩Tab", 5 + 63 + 63, 24, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 29, 63, 19, "", 8, 5); + InfoTabButton3.SwitchState = false; + InfoTabButton3.SetRectEnble(true, "a骑士马战过往战绩Tab", 5 + 63 + 63, 24 + 1, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 32); + InfoTabButton3.SetCustomClickEnble(true, "a骑士马战过往战绩Tab", 5 + 63 + 63, 24, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 32); + } + InfoTabButton3.ex = X; + InfoTabButton3.ey = Y; + InfoTabButton3.Show(); + + if (InfoTabButton1.isLBActive()) { + InfoTabButton1.SwitchState = true; + InfoTabButton2.SwitchState = false; + InfoTabButton3.SwitchState = false; + InfoType = 0; + } + if (InfoTabButton2.isLBActive()) { + InfoTabButton1.SwitchState = false; + InfoTabButton2.SwitchState = true; + InfoTabButton3.SwitchState = false; + InfoType = 1; + } + if (InfoTabButton3.isLBActive()) { + InfoTabButton1.SwitchState = false; + InfoTabButton2.SwitchState = false; + InfoTabButton3.SwitchState = true; + InfoType = 2; + } + + + //指引页 + if (InfoType == 0) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 0, X + 10, Y + 36 + 18); + } + + //骑士资料页 + if (InfoType == 1) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 1, X + 10, Y + 36 + 18); + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 50, X + 17, Y + 48 + 18); + + //DrawRiderInfo + T_DrawDynamicAni(obj, "common/horseguessing/knight" + NowSelectRider + ".ani", X + 12, Y + 166 + 18, "HorseGuessingRiderAnimotion" + NowSelectRider); + T_DrawDynamicAni(obj, "common/horseguessing/knightinfoeffect.ani", X + 9, Y + 45, "HorseGuessingRiderAnimotionEff"); + + L_sq_DrawCode(RiderName[NowSelectRider], X + 12 + 80 + 14, Y + 166 + 18 + 146 + 7, sq_RGBA(255, 255, 255, 250), 0, 1); + + + //DrawItem + if (ItemId && ItemInfo) { + L_Sq_DrawItem(X + 84, Y + 374, ItemId, 1, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 84, Y + 374, 24, 24)) { + ItemDrawState = true; + } else { + ItemDrawState = false; + } + } + // ItemId + + + + + + //DrawInvestButton + local Button = HorseGuessingPro("骑士马战投出支援按钮", X + 54, Y + 477 + 18, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 129, 33, 22); + Button.SetRectEnble(true, "骑士马战投出支援按钮", X + 54, Y + 477 + 18, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 23); + Button.SetCustomClickEnble(true, "骑士马战投出支援按钮", X + 54, Y + 477 + 18, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 24); + Button.Show(); + if (Button.isLBActive()) { + if (InputValue) { + local T = { + op = 20055005, + code = NowSelectRider, + num = InputValue.tointeger(), + } + SendPack(T); + } + + ErasesInputHook("HorseGuessingInput"); + HookInputState = false; + InputValue = null; + } + + //骑手胜率信息 + if (RiderInfo && RiderInfo.len() >= 5) { + + L_sq_DrawCode("获胜 : " + RiderInfo[2] + "次", X + 25 + 5, Y + 56 + 17, sq_RGBA(255, 255, 255, 250), 0, 1); + L_sq_DrawCode(RiderInfo[0] + "胜" + RiderInfo[1] + "败", X + 25 + 5, Y + 56 + 17 + 19, sq_RGBA(255, 255, 255, 250), 0, 1); + local WinRate = 0; + if (RiderInfo[0] + RiderInfo[1] != 0) + WinRate = ((RiderInfo[0].tofloat() / (RiderInfo[0] + RiderInfo[1]).tofloat()) * 100.0).tointeger(); + L_sq_DrawCode("胜率 : " + WinRate + "%", X + 25 + 5, Y + 56 + 17 + 19 + 15, sq_RGBA(255, 255, 255, 250), 0, 1); + + if (RiderInfo[3] != 0 && RiderInfo[4] != 0) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", RiderInfo[3], X + 25 + 5 + 152, Y + 62); + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", RiderInfo[4], X + 25 + 5 + 152, Y + 62 + 36); + } + } + + + //DrawInput 95 421 158 434 + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, X + 84, Y + 412, 70, 14)) { + if (Mobj.Lb == 1) { + RegisterInputHook("HorseGuessingInput", HookInput.bindenv(this)); + HookInputState = true; + } + } else { + if (Mobj.Lb == 1 && !Button.isInRect()) { + ErasesInputHook("HorseGuessingInput"); + HookInputState = false; + InputValue = null; + } + } + if (HookInputState) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 34, X + 45, Y + 390 + 18); + } + if (InputValue) { + L_sq_DrawCode(InputValue, X + 45 + 42, Y + 390 + 18 + 3, sq_RGBA(255, 255, 255, 250), 0, 1); + } + if (ResidueCoin != null) { + L_sq_DrawCode(ResidueCoin.tostring(), X + 45 + 42 + 52, Y + 390 + 18 + 3 + 18 + 11, sq_RGBA(255, 255, 255, 250), 0, 1); + } + } + + //往期战绩 + if (InfoType == 2) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 26, X + 10, Y + 36 + 18); + if (InfoContestLog) { + foreach(Pos, Value in InfoContestLog) { + L_sq_DrawCode((format("%03d", Value.Periods)).tostring(), X + 10 + 6, Y + 36 + 18 + 26 + (Pos * 20), sq_RGBA(255, 255, 255, 250), 0, 1); + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 38 + Value.Winner, X + 10 + 32, Y + 36 + 18 + 24 + (Pos * 20)); + L_sq_DrawCode(RiderName[Value.Winner], X + 10 + 32 + 28, Y + 36 + 18 + 26 + (Pos * 20), sq_RGBA(255, 255, 255, 250), 0, 1); + + L_sq_DrawCode((format("%.2f", Value.Rate.tofloat())).tostring(), X + 10 + 32 + 28 + 100, Y + 36 + 18 + 26 + (Pos * 20), sq_RGBA(255, 255, 255, 250), 0, 1); + } + } + + local Button = HorseGuessingPro("骑士马战买手战绩", X + 54 + 126 + 10, Y + 477 + 18 + 10, "interface/windowcommon.img", 23, 22, 268); + Button.SetRectEnble(true, "骑士马战买手战绩", X + 54 + 126 + 10, Y + 477 + 18 + 10, "interface/windowcommon.img", 269); + Button.SetCustomClickEnble(true, "骑士马战买手战绩", X + 54 + 126 + 10, Y + 477 + 18 + 10, "interface/windowcommon.img", 270); + Button.Show(); + if (Button.isInRect()) { + PlayerRankButtonInfo = true; + } else { + PlayerRankButtonInfo = false; + } + if (Button.isLBActive()) { + PlayerRankMainState = !PlayerRankMainState; + local T = { + op = 20055087, + type = 0, + } + SendPack(T); + } + } + } + + PlayerRankMainState = false; + PlayerRankButtonInfo = false; + + function DrawRider(obj) { + //BackGround + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 0, X + 227, Y + 26); + + //DrawRiderButton + for (local i = 0; i< 8; i++) { + local Button = HorseGuessingPro("HorseGuessingRider" + i, X + 269 + ((i / 2) * 121) + ((i % 2) * 59), Y + 398, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_cha_btn.img", 36, 42, 0 + (i * 4)); + Button.SetRectEnble(true, "HorseGuessingRider" + i, X + 269 + ((i / 2) * 121) + ((i % 2) * 59), Y + 398, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_cha_btn.img", 1 + (i * 4)); + Button.SetCustomClickEnble(true, "HorseGuessingRider" + i, X + 269 + ((i / 2) * 121) + ((i % 2) * 59), Y + 398, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_cha_btn.img", 2 + (i * 4)); + if (i != 0 && (i == 1 || i % 2 != 0)) Button.Overturn = true; + Button.Show(); + if (Button.isLBActive()) { + NowSelectRider = i; + InfoTabButton1.SwitchState = false; + InfoTabButton2.SwitchState = true; + InfoTabButton3.SwitchState = false; + InfoType = 1; + + //获取选手具体信息 + GetRiderInfo(); + } + + local PathBuf = "right"; + local PathXbuf = -1; + if (i % 2 == 0) { + PathBuf = "left"; + PathXbuf = 0; + } + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_horse_" + PathBuf + "_effect.img", i * 2, X + 258 + ((i / 2) * 121) + ((i % 2) * 59) + PathXbuf, Y + 337); + + + + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 11 + i, X + 263 + ((i / 2) * 121) + ((i % 2) * 59), Y + 441); + + //如果有赔率信息 + if (Rider8T && Rider8T.len() > 0) { + local ValueBuf = Rider8T[i].Odds.tofloat(); + if (ValueBuf > 10) { + L_sq_DrawCode((format("%.1f", ValueBuf)).tostring(), X + 278 + ((i / 2) * 121) + ((i % 2) * 59), Y + 441 + 8, sq_RGBA(255, 255, 255, 250), 0, 1); + } else { + L_sq_DrawCode((format("%.2f", ValueBuf)).tostring(), X + 278 + ((i / 2) * 121) + ((i % 2) * 59), Y + 441 + 8, sq_RGBA(255, 255, 255, 250), 0, 1); + } + + local ValueBuf2 = Rider8T[i].CodeItem.tofloat(); + L_sq_DrawCode(ValueBuf2.tostring(), X + 273 + ((i / 2) * 121) + ((i % 2) * 59), Y + 441 + 8 + 14, sq_RGBA(229, 192, 123, 250), 0, 1); + + if (CompetitionState< 10) { + if (CompetitionState == 1) L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 2, X + 270 + ((i / 2) * 121) + ((i % 2) * 59), Y + 441 + 8 + 14 - 69); + //如果存在生命值绘制生命值 + if ("hp" in Rider8T[i]) { + setClip(X + 270 + ((i / 2) * 121) + ((i % 2) * 59), Y + 441 + 8 + 14 - 69, X + 270 + ((i / 2) * 121) + ((i % 2) * 59) + (34.0 * (Rider8T[i].hp.tofloat() / 100.0)).tointeger(), 2); //开始裁切 + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 2, X + 270 + ((i / 2) * 121) + ((i % 2) * 59), Y + 441 + 8 + 14 - 69); + releaseClip(); //裁切结束 + } + } else { + local fr = 6; + if (Rider4T && Rider4T.len() > 0) { + foreach(Pos, Value in Rider4T) { + if (i == Value.Code) { + fr = 5; + } + } + } + //绘制胜负 + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", fr, X + 269 + ((i / 2) * 121) + ((i % 2) * 59), Y + 398); + } + } + + } + + + + if ((CompetitionState != 8 && CompetitionState != 18 && CompetitionState != 28 && CompetitionState != 38) && CompetitionStartAnimotion) + sq_Rewind(CompetitionStartAnimotion); + //第一轮正在打 + if (CompetitionState< 10 && CompetitionState > 0) { + if (CompetitionState != 8) { + for (local i = 0; i< 4; i++) { + T_DrawDynamicAni(obj, "common/horseguessing/battle.ani", X + 9 + 287 - 14 + (i * 122), Y + 45 + 237 + 64, "HorseGuessingCompetitionState10"); + } + } else { + CompetitionStartAnimotion = T_DrawDynamicAni(obj, "common/horseguessing/countdown.ani", X + 9 + 287 - 14 + 202, Y + 45 + 237 + 64 - 144, "HorseGuessingCompetitionState8"); + } + } + + //第二轮后的情况 + if (CompetitionState >= 10) { + //4强信息包 + if (Rider4T && Rider4T.len() > 0) { + foreach(Pos, Value in Rider4T) { + local Xf = 1.0; + local Xoffset = 0; + if (Pos != 0 && (Pos == 1 || Pos % 2 != 0)) { + Xf = -1.0; + Xoffset = 36; + + } else { + + } + + if (Value.Code != 0 && (Value.Code == 1 || Value.Code % 2 != 0)) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 23, X + 28 + 296 - 9 + ((Pos / 2) * 242) + ((Pos % 2) * 122), Y + 238 - 12 + 107); + } else { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 20, X + 297 - 9 + ((Pos / 2) * 242) + ((Pos % 2) * 122), Y + 238 - 12 + 107); + } + + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_cha_btn.img", Value.Code * 4, X + 298 + ((Pos / 2) * 242) + ((Pos % 2) * 122) + Xoffset, Y + 287, 0, sq_RGBA(255, 255, 255, 250), Xf, 1.0); + + + + + + local PathBuf = "right"; + local PathXbuf = -1; + if (Pos % 2 == 0) { + PathBuf = "left"; + PathXbuf = 0; + } + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_horse_" + PathBuf + "_effect.img", Value.Code * 2, X + 296 - 9 + ((Pos / 2) * 242) + ((Pos % 2) * 122) + PathXbuf, Y + 238 - 12); + + if (CompetitionState< 20) { + if (CompetitionState == 11) L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 2, X + 308 - 9 + ((Pos / 2) * 242) + ((Pos % 2) * 122), Y + 238 - 12 + 57); + //如果存在生命值绘制生命值 + if ("hp" in Rider4T[Pos]) { + setClip(X + 308 - 9 + ((Pos / 2) * 242) + ((Pos % 2) * 122), Y + 238 - 12 + 57, X + 308 - 9 + ((Pos / 2) * 242) + ((Pos % 2) * 122) + (34.0 * (Rider4T[Pos].hp.tofloat() / 100.0)).tointeger(), 2); //开始裁切 + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 2, X + 308 - 9 + ((Pos / 2) * 242) + ((Pos % 2) * 122), Y + 238 - 12 + 57); + releaseClip(); //裁切结束 + } + } else { + local fr = 6; + if (Rider2T && Rider2T.len() > 0) { + foreach(Pos, TValue in Rider2T) { + if (Value.Code == TValue.Code) { + fr = 5; + } + } + } + //绘制胜负 + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", fr, X + 298 + ((Pos / 2) * 242) + ((Pos % 2) * 122), Y + 287); + } + } + } + } + + //第二轮正在打 + if (CompetitionState< 20 && CompetitionState > 10) { + if (CompetitionState != 18) { + for (local i = 0; i< 2; i++) { + T_DrawDynamicAni(obj, "common/horseguessing/semifinalbattle.ani", X + 9 + 349 - 14 + (i * 244), Y + 45 + 237 + 64 - 90, "HorseGuessingCompetitionState21"); + } + } else { + CompetitionStartAnimotion = T_DrawDynamicAni(obj, "common/horseguessing/countdown.ani", X + 9 + 287 - 14 + 202, Y + 45 + 237 + 64 - 144, "HorseGuessingCompetitionState8"); + } + } + + + + + //第三轮后的情况 + if (CompetitionState >= 20) { + //4强信息包 + if (Rider2T && Rider2T.len() > 0) { + foreach(Pos, Value in Rider2T) { + local Xf = 1.0; + local Xoffset = 0; + if (Pos != 0 && (Pos == 1 || Pos % 2 != 0)) { + Xf = -1.0; + Xoffset = 36; + } + + + if ((Value.Code / 2) != 0 && ((Value.Code / 2) == 1 || (Value.Code / 2) % 2 != 0)) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 24, X + 28 + 296 + 60 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244), Y + 115 + 107); + } else { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 21, X - 32 + 297 + 60 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244), Y + 115 + 107); + } + + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_cha_btn.img", Value.Code * 4, X + 358 + ((Pos / 2) * 484) + ((Pos % 2) * 244) + Xoffset, Y + 176, 0, sq_RGBA(255, 255, 255, 250), Xf, 1.0); + + + local PathBuf = "right"; + local PathXbuf = -1; + if (Pos % 2 == 0) { + PathBuf = "left"; + PathXbuf = 0; + } + + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_horse_" + PathBuf + "_effect.img", Value.Code * 2, X + 296 + 60 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244) + PathXbuf, Y + 115); + + if (CompetitionState< 30) { + if (CompetitionState == 21) L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 2, X + 60 + 308 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244), Y + 238 - 12 + 57 - 111); + //如果存在生命值绘制生命值 + if ("hp" in Rider2T[Pos]) { + setClip(X + 60 + 308 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244), Y + 238 - 12 + 57 - 111, X + 60 + 308 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244) + (34.0 * (Rider2T[Pos].hp.tofloat() / 100.0)).tointeger(), 2); //开始裁切 + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 2, X + 60 + 308 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244), Y + 238 - 12 + 57 - 111); + releaseClip(); //裁切结束 + } + } else { + local fr = 6; + if (Rider1T && Rider1T.len() > 0) { + foreach(Pos, TValue in Rider1T) { + if (Value.Code == TValue.Code) { + fr = 5; + } + } + } + //绘制胜负 + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", fr, X + 358 + ((Pos / 2) * 484) + ((Pos % 2) * 244), Y + 176); + } + } + } + } + + //第三轮正在打 + if (CompetitionState< 30 && CompetitionState > 20) { + if (CompetitionState != 28) { + T_DrawDynamicAni(obj, "common/horseguessing/finalbattle.ani", X + 9 + 469 - 14, Y + 45 + 237 + 64 - 90 - 80, "HorseGuessingCompetitionState30"); + } else { + CompetitionStartAnimotion = T_DrawDynamicAni(obj, "common/horseguessing/countdown.ani", X + 9 + 287 - 14 + 202, Y + 45 + 237 + 64 - 144, "HorseGuessingCompetitionState8"); + } + } + + // CompetitionState = 30; + //第四轮后的情况 + if (CompetitionState >= 30) { + //4强信息包 + if (Rider1T && Rider1T.len() > 0) { + foreach(Pos, Value in Rider1T) { + local Xf = 1.0; + local Xoffset = 0; + if (Pos != 0 && (Pos == 1 || Pos % 2 != 0)) { + Xf = -1.0; + Xoffset = 36; + } + + if ((Value.Code / 4) != 0 && ((Value.Code / 4) == 1 || (Value.Code / 4) % 2 != 0)) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 25, X + 185 + 296 + 60 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244), Y + 115 + 107 - 104); + } else { + + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 22, X - 32 + 62 + 296 + 60 - 9 + ((Pos / 2) * 484) + ((Pos % 2) * 244), Y + 115 + 107 - 104); + } + + T_DrawDynamicAni(obj, "common/horseguessing/winnereffect_back.ani", X + 481 + ((Pos / 2) * 968) + ((Pos % 2) * 488) + Xoffset, Y + 88, "HorseGuessingWinnerBack"); + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_cha_btn.img", Value.Code * 4, X + 481 + ((Pos / 2) * 968) + ((Pos % 2) * 488) + Xoffset, Y + 88, 0, sq_RGBA(255, 255, 255, 250), Xf, 1.0); + T_DrawDynamicAni(obj, "common/horseguessing/winnereffect_front.ani", X + 481 + ((Pos / 2) * 968) + ((Pos % 2) * 488) + Xoffset, Y + 88, "HorseGuessingWinnerFront"); + + } + } + } + } + + //绘制悬浮窗图层 + function DrawSuspendedLayer(obj) { + if (ItemDrawState) { + if (!ItemObject) { + ItemObject = ItemInfoClass(ItemInfo); + } + ItemObject.Show(X + 84 - (211 / 2), Y + 374 - ItemObject.PageLength); + } + + if (PlayerRankButtonInfo) { + //Item信息框一般为211的宽度 + L_sq_DrawWindow(X + 54 + 126 + 10 - 33, Y + 477 + 18 + 10 - 50 + 18, 110, 20, "interface2/popup/popup.img", 134, 6, 12, 6, 13); + L_sq_DrawCode("点击查看买手排行榜", X + 54 + 126 + 10 - 33 + 5, Y + 477 + 18 + 10 - 50 + 18 + 7, sq_RGBA(255, 255, 255, 250), 0, 1); + } + } + + + DRBTN = null; + SRBTN = null; + ABTN = null; + + //绘制排行榜 + function DrawRank(obj) { + + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 0, X + 227, Y + 26); + + L_sq_DrawWindow(X + 228, Y + 27, 530, 460, "interface2/popup/popup.img", 134, 6, 12, 6, 13); + + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 35, X + 227, Y + 26); + + L_sq_DrawCode("马战排行榜", X + 227 + 236, Y + 32, sq_RGBA(255, 198, 0, 250), 0, 1); + + L_sq_DrawCode("排名", X + 227 + 23, Y + 35 + 288, sq_RGBA(255, 198, 0, 250), 0, 1); + + L_sq_DrawCode("角色名", X + 227 + 23 + 106, Y + 35 + 288, sq_RGBA(255, 198, 0, 250), 0, 1); + + L_sq_DrawCode("获胜货币", X + 227 + 23 + 106 + 146, Y + 35 + 288, sq_RGBA(255, 198, 0, 250), 0, 1); + + L_sq_DrawCode("命中战绩", X + 227 + 23 + 106 + 146 + 158, Y + 35 + 288, sq_RGBA(255, 198, 0, 250), 0, 1); + + + if (!DRBTN) { + DRBTN = LenheartcommonSwitchButtonText(X + 227 + 23, Y + 35 + 288 + 192, "今日战况"); + DRBTN.State = 1; + } + DRBTN.SyncPos(X + 227 + 23, Y + 35 + 288 + 192); + DRBTN.Show(); + if (DRBTN.isLBActive()) { + SRBTN.State = 0; + ABTN.State = 0; + local T = { + op = 20055087, + type = 0, + } + SendPack(T); + } + + if (!SRBTN) SRBTN = LenheartcommonSwitchButtonText(X + 227 + 23 + 216, Y + 35 + 288 + 192, "三日战况"); + SRBTN.SyncPos(X + 227 + 23 + 216, Y + 35 + 288 + 192); + SRBTN.Show(); + if (SRBTN.isLBActive()) { + DRBTN.State = 0; + ABTN.State = 0; + local T = { + op = 20055087, + type = 1, + } + SendPack(T); + } + + + if (!ABTN) ABTN = LenheartcommonSwitchButtonText(X + 227 + 23 + 216 + 216, Y + 35 + 288 + 192, "全部战况"); + ABTN.SyncPos(X + 227 + 23 + 216 + 216, Y + 35 + 288 + 192); + ABTN.Show(); + if (ABTN.isLBActive()) { + DRBTN.State = 0; + SRBTN.State = 0; + local T = { + op = 20055087, + type = 2, + } + SendPack(T); + } + + //如果有排行榜信息 + if (RankInfo) { + foreach(Pos, Value in RankInfo) { + L_sq_DrawCode((Pos + 1).tostring(), X + 227 + 23 + 15 - LenheartTextClass.GetStringLength((Pos + 1).tostring()) / 2, Y + 35 + 288 + 20 + (Pos * 16), sq_RGBA(255, 198, 0, 250), 0, 1); + L_sq_DrawCode(Value.name, X + 227 + 148 - LenheartTextClass.GetStringLength(Value.name) / 2, Y + 35 + 288 + 20 + (Pos * 16), sq_RGBA(104, 237, 161, 250), 0, 1); + L_sq_DrawCode(Value.win.tostring(), X + 227 + 172 + 128 - LenheartTextClass.GetStringLength(Value.win.tostring()) / 2, Y + 35 + 288 + 20 + (Pos * 16), sq_RGBA(217, 193, 144, 250), 0, 1); + foreach(_i, ok in Value.victoryFieldInt) { + L_sq_DrawImg("interface/lenheartwindowcommon.img", 50 + ok, X + 227 + 182 + 211 + (_i * 16), Y + 35 + 288 + 20 + (Pos * 16)); + } + } + + } + } + + //绘制主界面 + function DrawMain(obj) { + //绘制窗口 + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 33, X, Y); + + + //绘制详情页 + DrawInfo(obj); + + //绘制骑手页 + if (!PlayerRankMainState) DrawRider(obj); + else DrawRank(obj); + + //绘制悬浮窗图层 + DrawSuspendedLayer(obj); + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + //获取基础信息 + GetBaseInfo(); + //获取信息 + GetInfo(); + //获取选手具体信息 + GetRiderInfo(); + //获取过往战绩 + GetPastInfo(); + } + + //绘制公告 + function DrawNoti(obj) { + //NotiStr + if (NotiState) { + // print(Clock() - NotiTime); + local A = 0; + if (Clock() - NotiTime< 2000) { + A = sq_GetUniformVelocity(0, 250, Clock() - NotiTime, 2000); + } + if (Clock() - NotiTime >= 2000 && Clock() - NotiTime< 3000) A = 250; + if (Clock() - NotiTime >= 3000) { + A = sq_GetUniformVelocity(250, 0, Clock() - NotiTime, 6000); + } + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 26, 74, 160, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0); + L_sq_DrawCode(NotiStr, 74 + 270, 160 + 44, sq_RGBA(255, 255, 255, A), 2, 1); + if (Clock() - NotiTime >= 6000) { + NotiState = false; + } + // NotiTime + } + } + + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = HorseGuessingWindow(X, Y, 800, 600, 28); //坐标 大小 标题栏高度 + //WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + + DrawNoti(obj); + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "HorseGuessingCloseKey")) { + MainState = false; + + ErasesInputHook("HorseGuessingInput"); + HookInputState = false; + InputValue = null; + } + } +} + + +function HorseGuessing(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("HorseGuessingCObj")) { + local Cobj = HorseGuessingC(); + RootTab.rawset("HorseGuessingCObj", Cobj); + EventIcon("骑士马战", 106, 106, Cobj); + } else { + RootTab["HorseGuessingCObj"].Proc(obj); + RootTab["HorseGuessingCObj"].Draw(obj); + } +} + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("HorseGuessingFunc", HorseGuessing); +} else { + local T = {}; + T.rawset("HorseGuessingFunc", HorseGuessing); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/LaunchAnnouncement/LaunchAnnouncement.nut b/Plugins/LaunchAnnouncement/LaunchAnnouncement.nut new file mode 100644 index 0000000..0ffce65 --- /dev/null +++ b/Plugins/LaunchAnnouncement/LaunchAnnouncement.nut @@ -0,0 +1,171 @@ +/* +文件名:LaunchAnnouncement.nut +路径:Plugins/LaunchAnnouncement/LaunchAnnouncement.nut +创建日期:2023-08-21 12:52 +文件用途:上线公告 +*/ + +class LaunchAnnouncementC extends BasicsDrawTool { + + //公告组 + NotiArr = null; + Timer = null; + + //收到信息包 + function LaunchAnnouncementCallBack(Chunk) { + + local Buffer = Json_STL("CheckLaunchAnnouncementCallBack"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("Lenheart_LaunchAnnouncementCObj")) { + local Tobj = RootTab["Lenheart_LaunchAnnouncementCObj"]; + + local ArrBuf = Tobj.NotiArr; + local T = { + NotiStrR = Buffer.Get("NotiStrR"), + NotiStrG = Buffer.Get("NotiStrG"), + NotiStrB = Buffer.Get("NotiStrB"), + NotiStrA = Buffer.Get("NotiStrA"), + NotiStrXpos = Buffer.Get("NotiStrXpos"), + NotiStrYpos = Buffer.Get("NotiStrYpos"), + //对应的话语 + NotiStr = Buffer.Get("NotiStr"), + //对应话语渐入时间 + NotiStrUpTime = Buffer.Get("NotiStrUpTime"), + //对应话语显示时间 + NotiStrPrintTime = Buffer.Get("NotiStrPrintTime"), + //对应话语渐出时间 + NotiStrDownTime = Buffer.Get("NotiStrDownTime"), + //对应出现的Img路径 + ImgPath = Buffer.Get("ImgPath"), + //对应出现的Img帧数 + ImgFrame = Buffer.Get("ImgFrame"), + ImgXpos = Buffer.Get("ImgXpos"), + ImgYpos = Buffer.Get("ImgYpos"), + //对应出现的Img渐入时间 + ImgUpTime = Buffer.Get("ImgUpTime"), + //对应出现的Img渐出时间 + ImgDownTime = Buffer.Get("ImgDownTime"), + } + ArrBuf.append(T); + Tobj.NotiArr = ArrBuf; + } + + } + + function SendUp() { + local T = { + op = 20053001, + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + constructor() { + Timer = TimeSTL("LaunchAnnouncementCTimer" + Clock(), 60000); + + NotiArr = []; + + SendUp(); + Pack_Control.rawset(20053002, LaunchAnnouncementCallBack); + /* + Timer = TimeSTL("LaunchAnnouncementCTimer" + Clock(), 60000); + local T = { + NotiStrR = 230, + NotiStrG = 200, + NotiStrB = 155, + NotiStrA = 250, + NotiStrXpos = 300, + NotiStrYpos = 305, + //对应的话语 + NotiStr = "这是一段测试文本", + //对应话语渐入时间 + NotiStrUpTime = 320, + //对应话语显示时间 + NotiStrPrintTime = 1000, + //对应话语渐出时间 + NotiStrDownTime = 1000, + //对应出现的Img路径 + ImgPath = "common/announcement/leveche_cutscene.ani", + //对应出现的Img帧数 + ImgFrame = 99999999, + ImgXpos = 0, + ImgYpos = 200, + //对应出现的Img渐入时间 + ImgUpTime = 0, + //对应出现的Img渐出时间 + ImgDownTime = 0, + } + NotiArr.append(T); + */ + } + + + function Proc(obj) { + + } + + function Draw(obj) { + + if (NotiArr.len() > 0) { + local T = NotiArr[0]; + + if (Timer.Get() == false || Timer.Get() == 60000) { + Timer.Start(); + } + if (Timer.Get() != false && Timer.Get() > 0) { + + local Ani = null; + if (T.ImgFrame == 99999999) { + Ani = T_DrawDynamicAni(obj, T.ImgPath, T.ImgXpos, T.ImgYpos, T.ImgPath); + } + + if (Timer.Get() > (T.NotiStrPrintTime + T.NotiStrUpTime + T.NotiStrDownTime)) { + Timer.Reset(); + if (Ani) sq_Rewind(Ani); + NotiArr.remove(0); + return; + } + + + local AlaphValue; + //如果时间小于 文字渐入时间 + if (Timer.Get() <= T.NotiStrUpTime) { + AlaphValue = sq_GetUniformVelocity(0, T.NotiStrA, Timer.Get(), T.NotiStrUpTime); + } + if (Timer.Get() > T.NotiStrUpTime && Timer.Get() <= (T.NotiStrPrintTime + T.NotiStrUpTime)) { + AlaphValue = T.NotiStrA; + } + if (Timer.Get() > (T.NotiStrPrintTime + T.NotiStrUpTime) && Timer.Get() <= (T.NotiStrPrintTime + T.NotiStrUpTime + T.NotiStrDownTime)) { + AlaphValue = sq_GetUniformVelocity(T.NotiStrA, 0, Timer.Get(), (T.NotiStrPrintTime + T.NotiStrUpTime + T.NotiStrDownTime)); + } + + L_sq_DrawCode(T.NotiStr, T.NotiStrXpos, T.NotiStrYpos, sq_RGBA(T.NotiStrR, T.NotiStrG, T.NotiStrB, AlaphValue), 1, 1); + } + + + } + } +} + +function Lenheart_LaunchAnnouncement(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("Lenheart_LaunchAnnouncementCObj")) { + local Cobj = LaunchAnnouncementC(); + RootTab.rawset("Lenheart_LaunchAnnouncementCObj", Cobj); + } else { + RootTab["Lenheart_LaunchAnnouncementCObj"].Proc(obj); + RootTab["Lenheart_LaunchAnnouncementCObj"].Draw(obj); + } +} + + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("Lenheart_LaunchAnnouncementFunc", Lenheart_LaunchAnnouncement); +} else { + local T = {}; + T.rawset("Lenheart_LaunchAnnouncementFunc", Lenheart_LaunchAnnouncement); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/Luke/luke.nut b/Plugins/Luke/luke.nut new file mode 100644 index 0000000..1d8c078 --- /dev/null +++ b/Plugins/Luke/luke.nut @@ -0,0 +1,387 @@ +/* +文件名:luke.nut +路径:Plugins/Luke/luke.nut +创建日期:2023-03-30 13:40 +文件用途:卢克主文件 +*/ +//HudPro按钮类 +class LukeButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + Index = 0; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gIndex) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + Index = gIndex; + } + //绘制按钮 + function Show() { + isLBDown(); + isRBDown(); + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, Index, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && IMouse.GetLButton() == 1) { + obj.getVar(ButtonName).setBool(0, true); + return true; + } else return false; + } + //右键按下状态 + function isRBDown() { + if (isInRect() && IMouse.GetRButton() == 2) { + obj.getVar(ButtonName).setBool(1, true); + return true; + } else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() { + if (isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() { + if (isInRect() && IMouse.isButtonUpEvent() && obj.getVar(ButtonName).getBool(0) == true) { + obj.getVar(ButtonName).setBool(0, false); + return true; + } else return false; + } + //右键单击状态 + function isRBActive() { + if (isInRect() && IMouse.isButtonUpEvent() && obj.getVar(ButtonName).getBool(1) == true) { + obj.getVar(ButtonName).setBool(1, false); + return true; + } else return false; + } + //别处点击 + function isNotLBActive() { + + if (!isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } + //别处右键点击 + function isNotRBActive() { + if (!isInRect() && IMouse.GetRButton() == 2) return true; + else return false; + } +} + + + +//Switch按钮类 +class LukeSwitchButtonPro extends SwitchButtonPro { + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + SwitchState = false; //复选框是否选中 + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + BaseAnifileFrame = null; //调用的Ani帧数 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gBaseAnifileFrame, gWidth, gLength) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + BaseAnifileFrame = gBaseAnifileFrame; + width = gWidth; + length = gLength; + } + + //绘制按钮 + function Show() { + + + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + + if (!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseAnifileFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + + if (!isInRect() && SwitchState) { + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && IMouse.GetLButton() == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() { + if (isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() { + if (isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } + +} + + + + + + + + +function Luke(obj) { + + //如果不在安图恩区域则不执行 + if (L_sq_GetTownIndex() != 19 || L_sq_GetRegionIndex() < 2) return; + + //检查自己是否断线重连 + if (!getroottable().rawin("LukeDConnect")) { + local LukeDConnect = Json_STL("LukeDConnect"); + LukeDConnect.Put("op", 25600175); + local str = LukeDConnect.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeDConnect.Delete(); + getroottable().rawset("LukeDConnect", true); + } + + //卢克攻坚队逻辑 + LukeParty(obj); + //卢克城镇攻坚队界面 攻坚队队伍信息部分 + LukeTownMainControl_PartyInfo(obj); + + //卢克攻坚副本信息 + LukeDungeonInfoControlFunc(obj); + + + //安图恩城镇攻坚队界面 攻坚队队伍申请部分 + LukeTownMainControl_PartyReq(obj); +} + +function DrawLukeParty(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("LukePartyObj") && RootTab.rawin("LUKEDUNGEONINFOCONTROL") && RootTab["LUKEDUNGEONINFOCONTROL"].PageState != 1) { + RootTab["LukePartyObj"].Draw(obj); + + } + if (RootTab.rawin("LukeTOWNCONTROLINFO") && RootTab["LukePartyObj"].NowSelectTeam != null && RootTab["LukePartyObj"].State == 1) { + RootTab["LukeTOWNCONTROLINFO"].Run(obj); + } + + if (RootTab.rawin("LUKEDUNGEONINFOCONTROL") == false) {} else { + RootTab["LUKEDUNGEONINFOCONTROL"].Draw(obj); + } + + if (RootTab.rawin("LUKETOWNMAINCONTROLREQ") == false) {} else { + RootTab["LUKETOWNMAINCONTROLREQ"].Run(obj); + } + //如果安图恩主界面开启就绘制申请队伍人信息 +} \ No newline at end of file diff --git a/Plugins/Luke/lukedungeoninfo.nut b/Plugins/Luke/lukedungeoninfo.nut new file mode 100644 index 0000000..afcd2ed --- /dev/null +++ b/Plugins/Luke/lukedungeoninfo.nut @@ -0,0 +1,2138 @@ +/* +文件名:antondungeoninfo.nut +路径:Plugins/Luke/antondungeoninfo.nut +创建日期:2022-09-13 15:21 +文件用途:卢克攻坚中 信息 +*/ +class LukeDungeonInfoControl_C extends BasicsDrawTool { + X = 0; + Y = 0; + State = -1; //卢克攻坚状态 + + FHMAX = null; //最大复活币 + FHNOW = null; //当前复活币 + + PageState = 0; //攻坚信息面板展开状态 + PageCardState = false; //攻坚信息面板查看卡牌状态 + MouseTask = 0; //鼠标类型事件 + + OpenMainButtonObject = null; //展开攻坚信息按钮 + FightMaxTime = null; //剩余时间最大值 + FightTimer = null; //剩余时间计时器 + + PartyMove_SelectDungeon_Button = null; //小队移动选择地下城按钮 + PartyMove_ReturnTown_Button = null; //PartyMove_ReturnTown_Button + + ReturnTwonFlag = 0; //返回城镇的flag + + DrawStartAniMark = false; //开始攻坚动画Mark + + MapTimer = null; //地图时间容器 + MapVar = null; //地图暂存器 + + //1阶段对象 + DanShengObject = null; //诞生圣所对象 + DanShengBuffObject = null; //诞生圣所BUFF对象 + ManYanObject = null; //蔓延圣所对象 + ManYanBuffObject = null; //蔓延圣所BUFF对象 + YanMieObject = null; //湮灭圣所对象 + YanMieBuffObject = null; //湮灭圣所BUFF对象 + + + + JianPaoObject = null; //舰炮防御战对象 + JianPaoTimer = null; //舰炮时间容器对象 + ZhenChan_A_Object = null; //震颤A对象 + ZhenChan_A_Timer = null; //震颤A时间容器对象 + ZhenChan_B_Object = null; //震颤B对象 + ZhenChan_B_Timer = null; //震颤B时间容器对象 + QingTian_A_Object = null; //擎天A对象 + QingTian_B_Object = null; //擎天B对象 + + + //2阶段对象 + + GuangJitanRuKouObject = null; //光祭坛入口对象 + AnJitanRuKouObject = null; //光祭坛入口对象 + + GuangJitanObject = null; //光祭坛对象 + AnJitanObject = null; //暗祭坛对象 + + LiLiangObject = null; //力量祭坛对象 + ZhiHuiObject = null; //智慧祭坛对象 + + + NengYuanKongZhiObject = null; //能源控制对象 + NengYuanKongZhiTimerObject = null; //能源控制时间对象 + + GuangShengDianObject = null; //光圣殿对象 + AnShengDianObject = null; //暗圣殿对象 + + JiXieWangZuoGuangObject = null; //光卢克 + JiXieWangZuoAnObject = null; //暗卢克 + + NengYuanChuCangObject = null; //能源储藏对象 + NengYuanChuCangTimerObject = null; //能源储藏时间对象 + + + NengLiangObject = null; //能源阻截站对象 + HuoShanObject = null; //黑色火山对象 + FuHua1_Object = null; //孵化1对象 + FuHua1_Timer = null; //孵化1时间容器对象 + FuHua2_Object = null; //孵化2对象 + FuHua2_Timer = null; //孵化2时间容器对象 + FuHua3_Object = null; //孵化3对象 + FuHua3_Timer = null; //孵化3时间容器对象 + FuHua4_Object = null; //孵化4对象 + FuHua4_Timer = null; //孵化4时间容器对象 + XinZang_Object = null; //心脏对象 + + MapIndexTable = null; //判断孵化进入的操作表 + MapMoveMark = false; //副本中移动的标志 + HuoShanMonserTable = null; //火山怪物投放表 + + Reward_Object = null; //奖励包 + AllReward_Object = null; //全体奖励包 + Reward_Timer_Object = null; //奖励包时间对象 + Reward_Info = null; //通过时间和复活币使用量 + + //卢克攻坚信息包 + function ReadLukeDungeonInfoPack(chunk) { + //Sout("\n\n收到卢克攻坚信息包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("LukeDungeonInfoJson"); //自动判断清空 + local JsonObj = Json_STL("LukeDungeonInfoJson"); + RootTab.rawset("LukeDungeonInfoJson", JsonObj); + RootTab["LukeDungeonInfoJson"].Parse(chunk, 0, false); + + + //告诉副本类开始计时 + if (RootTab.rawin("LUKEDUNGEONINFOCONTROL")) { + local Cobj = RootTab["LUKEDUNGEONINFOCONTROL"]; + Cobj.FightMaxTime = JsonObj.Get("JiShiQi->GongJian_End_ShiJian"); + if (Cobj.FightTimer) { + Cobj.FightTimer.Delete(); + } + + //时间倒计时开始 + Cobj.FightTimer = TimeSTL("FightTimer", Cobj.FightMaxTime); + Cobj.FightTimer.Reset(); + Cobj.FightTimer.Start(); + + //同步攻坚状态 + Cobj.State = JsonObj.Get("Party_State") - 1; + + Cobj.FHMAX = JsonObj.Get("ZuiDaFuFuoBi"); //最大复活币 + Cobj.FHNOW = JsonObj.Get("DangQianFuFuoBi"); //当前复活币 + + //一阶段收包机制 + if (Cobj.State == 0) { + + //诞生圣所收包 + { + Cobj.DanShengObject = null; + Cobj.DanShengBuffObject = null; + Cobj.DanShengBuffObject = []; + if (JsonObj.Get("DanSheng_State") != false) { + for (local e = 0; e < 2; e++) { + Cobj.DanShengBuffObject.append(JsonObj.Get("DanSheng_Buff->" + e)); + } + //得到副本剩余生命 + local gClearNumber = 3 - JsonObj.Get("DanSheng_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("DanSheng_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("DanSheng_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("DanSheng_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("DanSheng_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("DanSheng_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.DanShengObject = { + Name = "dansheng", + NameImg = 0, + X = 100, + Y = 250, + BloodType = 3, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 1, + }; + } else { + Cobj.DanShengObject = { + Name = "dansheng", + NameImg = 0, + X = 100, + Y = 250, + ClearNumber = 0, + }; + } + } + } + + //蔓延圣所收包 + { + Cobj.ManYanObject = null; + Cobj.ManYanBuffObject = null; + Cobj.ManYanBuffObject = []; + if (JsonObj.Get("ManYan_State") != false) { + for (local e = 0; e < 2; e++) { + Cobj.ManYanBuffObject.append(JsonObj.Get("ManYan_Buff->" + e)); + } + //得到副本剩余生命 + local gClearNumber = 3 - JsonObj.Get("ManYan_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("ManYan_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("ManYan_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("ManYan_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("ManYan_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("ManYan_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.ManYanObject = { + Name = "dansheng", + NameImg = 2, + X = 490, + Y = 120, + BloodType = 3, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 3, + }; + } else { + Cobj.ManYanObject = { + Name = "dansheng", + NameImg = 2, + X = 490, + Y = 120, + ClearNumber = 0, + }; + } + } + } + + //湮灭圣所收包 + { + Cobj.YanMieObject = null; + Cobj.YanMieBuffObject = null; + Cobj.YanMieBuffObject = []; + if (JsonObj.Get("YanMie_State") != false) { + for (local e = 0; e < 2; e++) { + Cobj.YanMieBuffObject.append(JsonObj.Get("YanMie_Buff->" + e)); + } + //得到副本剩余生命 + local gClearNumber = 3 - JsonObj.Get("YanMie_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("YanMie_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("YanMie_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("YanMie_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("YanMie_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("YanMie_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.YanMieObject = { + Name = "dansheng", + NameImg = 1, + X = 490, + Y = 380, + BloodType = 3, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 2, + }; + } else { + Cobj.YanMieObject = { + Name = "dansheng", + NameImg = 1, + X = 490, + Y = 380, + ClearNumber = 0, + }; + } + } + } + /* + //诞生圣所收包 + { + Cobj.DanShengObject = null; + if (JsonObj.Get("DanSheng_State") != false) { + //得到副本剩余生命 + local gClearNumber = 4 - JsonObj.Get("DanSheng_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("DanSheng_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("DanSheng_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("DanSheng_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("DanSheng_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("DanSheng_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.DanShengObject = { + Name = "dansheng", + NameImg = 0, + X = 78, + Y = 330, + BloodType = 4, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 0, + }; + } else { + Cobj.DanShengObject = { + Name = "dansheng", + X = 78, + Y = 330, + ClearNumber = 0, + }; + } + } + } + + //舰炮防御战收包 + { + Cobj.JianPaoObject = null; + if (JsonObj.Get("JianPao_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("JianPao_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("JianPao_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("JianPao_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("JianPao_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("JianPao_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("JianPao_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果舰炮时间容器存在则先删除他 + if (Cobj.JianPaoTimer) Cobj.JianPaoTimer.Delete(); + Cobj.JianPaoTimer = null; + Cobj.JianPaoTimer = TimeSTL("JianPaoTimer", JsonObj.Get("JiShiQi->JianPao_BaoZhaShiJian")); + Cobj.JianPaoTimer.Start(); + Cobj.JianPaoObject = { + Name = "jianpao", + NameImg = 1, + X = 334, + Y = 200, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 3, + Reload = 1, + Timer = Cobj.JianPaoTimer, + TimeMax = JsonObj.Get("JiShiQi->JianPaoBaoZha_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->JianPao_BaoZhaShiJian"), + }; + } else { + //如果舰炮时间容器存在则先删除他 + if (Cobj.JianPaoTimer) Cobj.JianPaoTimer.Delete(); + Cobj.JianPaoTimer = null; + Cobj.JianPaoTimer = TimeSTL("JianPaoTimer", JsonObj.Get("JiShiQi->JianPao_FuHuoShiJian")); + Cobj.JianPaoTimer.Start(); + Cobj.JianPaoObject = { + Name = "jianpao", + X = 334, + Y = 200, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.JianPaoTimer, + TimeMax = JsonObj.Get("JiShiQi->JianPaoFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->JianPao_FuHuoShiJian"), + }; + } + } + } + + //震颤A收包 + { + Cobj.ZhenChan_A_Object = null; + if (JsonObj.Get("ZhenChan_A_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("ZhenChan_A_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("ZhenChan_A_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("ZhenChan_A_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("ZhenChan_A_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("ZhenChan_A_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("ZhenChan_A_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果震颤A时间容器存在则先删除他 + if (Cobj.ZhenChan_A_Timer) Cobj.ZhenChan_A_Timer.Delete(); + Cobj.ZhenChan_A_Timer = null; + Cobj.ZhenChan_A_Timer = TimeSTL("ZhenChan_A_Timer", JsonObj.Get("JiShiQi->ZhenChan_A_BaoZhaShiJian")); + Cobj.ZhenChan_A_Timer.Start(); + Cobj.ZhenChan_A_Object = { + Name = "zhenchan_A", + NameImg = 4, + X = 234, + Y = 330, + BloodType = 1, + ClearNumber = gClearNumber, + Reload = 1, + Party = gParty, + DungeonUID = 1, + Timer = Cobj.ZhenChan_A_Timer, + TimeMax = JsonObj.Get("JiShiQi->ZhenChanBaoZha_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->ZhenChan_A_BaoZhaShiJian"), + }; + } else { + //如果震颤A时间容器存在则先删除他 + if (Cobj.ZhenChan_A_Timer) Cobj.ZhenChan_A_Timer.Delete(); + Cobj.ZhenChan_A_Timer = null; + Cobj.ZhenChan_A_Timer = TimeSTL("ZhenChan_A_Timer", JsonObj.Get("JiShiQi->ZhenChan_A_FuHuoShiJian")); + Cobj.ZhenChan_A_Timer.Start(); + Cobj.ZhenChan_A_Object = { + Name = "zhenchan_a", + X = 234, + Y = 330, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.ZhenChan_A_Timer, + TimeMax = JsonObj.Get("JiShiQi->ZhenChanFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->ZhenChan_A_FuHuoShiJian"), + }; + } + } + } + + //震颤B收包 + { + Cobj.ZhenChan_B_Object = null; + if (JsonObj.Get("ZhenChan_B_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("ZhenChan_B_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("ZhenChan_B_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("ZhenChan_B_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("ZhenChan_B_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("ZhenChan_B_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("ZhenChan_B_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + //如果震颤B时间容器存在则先删除他 + if (Cobj.ZhenChan_B_Timer) Cobj.ZhenChan_B_Timer.Delete(); + Cobj.ZhenChan_B_Timer = null; + Cobj.ZhenChan_B_Timer = TimeSTL("ZhenChan_B_Timer", JsonObj.Get("JiShiQi->ZhenChan_B_BaoZhaShiJian")); + Cobj.ZhenChan_B_Timer.Start(); + Cobj.ZhenChan_B_Object = { + Name = "zhenchan_B", + NameImg = 5, + X = 450, + Y = 330, + BloodType = 1, + ClearNumber = gClearNumber, + Reload = 1, + Party = gParty, + DungeonUID = 11, + Timer = Cobj.ZhenChan_B_Timer, + TimeMax = JsonObj.Get("JiShiQi->ZhenChanBaoZha_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->ZhenChan_B_BaoZhaShiJian"), + }; + } else { + //如果震颤B时间容器存在则先删除他 + if (Cobj.ZhenChan_B_Timer) Cobj.ZhenChan_B_Timer.Delete(); + Cobj.ZhenChan_B_Timer = null; + Cobj.ZhenChan_B_Timer = TimeSTL("ZhenChan_B_Timer", JsonObj.Get("JiShiQi->ZhenChan_B_FuHuoShiJian")); + Cobj.ZhenChan_B_Timer.Start(); + Cobj.ZhenChan_B_Object = { + Name = "zhenchan_B", + X = 450, + Y = 330, + ClearNumber = 0, + Reload = 1, + Timer = Cobj.ZhenChan_B_Timer, + TimeMax = JsonObj.Get("JiShiQi->ZhenChanFuHuo_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->ZhenChan_B_FuHuoShiJian"), + }; + } + } + } + + //擎天A收包 + { + Cobj.QingTian_A_Object = null; + if (JsonObj.Get("QingTian_A_State") != false) { + //得到副本剩余生命 + local gClearNumber = 2 - JsonObj.Get("QingTian_A_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("QingTian_A_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("QingTian_A_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("QingTian_A_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("QingTian_A_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("QingTian_A_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.QingTian_A_Object = { + Name = "qingtian_A", + NameImg = 2, + X = 224, + Y = 430, + BloodType = 2, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 2, + }; + } else { + Cobj.QingTian_A_Object = { + Name = "qingtian_a", + X = 224, + Y = 430, + ClearNumber = 0, + }; + } + } + } + + //擎天B收包 + { + Cobj.QingTian_B_Object = null; + if (JsonObj.Get("QingTian_B_State") != false) { + //得到副本剩余生命 + local gClearNumber = 2 - JsonObj.Get("QingTian_B_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("QingTian_B_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("QingTian_B_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("QingTian_B_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("QingTian_B_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("QingTian_B_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.QingTian_B_Object = { + Name = "qingtian_B", + NameImg = 3, + X = 470, + Y = 430, + BloodType = 2, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 21, + }; + } else { + Cobj.QingTian_B_Object = { + Name = "qingtian_b", + X = 470, + Y = 430, + ClearNumber = 0, + }; + } + } + } + */ + } + + //二阶段收包机制 + if (Cobj.State == 3) { + { + Cobj.DanShengObject = null; //诞生圣所对象 + Cobj.DanShengBuffObject = null; //诞生圣所BUFF对象 + Cobj.ManYanObject = null; //蔓延圣所对象 + Cobj.ManYanBuffObject = null; //蔓延圣所BUFF对象 + Cobj.YanMieObject = null; //湮灭圣所对象 + Cobj.YanMieBuffObject = null; //湮灭圣所BUFF对象 + + Cobj.GuangJitanRuKouObject = null; //光祭坛入口对象 + Cobj.AnJitanRuKouObject = null; //光祭坛入口对象 + + Cobj.GuangJitanObject = null; //光祭坛对象 + Cobj.AnJitanObject = null; //暗祭坛对象 + + Cobj.LiLiangObject = null; //力量祭坛对象 + Cobj.ZhiHuiObject = null; //智慧祭坛对象 + + + Cobj.NengYuanKongZhiObject = null; //能源控制对象 + + Cobj.GuangShengDianObject = null; //光圣殿对象 + Cobj.AnShengDianObject = null; //暗圣殿对象 + + Cobj.JiXieWangZuoGuangObject = null; //光卢克 + Cobj.JiXieWangZuoAnObject = null; //暗卢克 + + Cobj.NengYuanChuCangObject = null; //能源储藏对象 + } + + + + //光祭坛入口收包 + { + Cobj.GuangJitanRuKouObject = null; + if (JsonObj.Get("GuangJitanRuKou_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("GuangJitanRuKou_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("GuangJitanRuKou_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("GuangJitanRuKou_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("GuangJitanRuKou_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("GuangJitanRuKou_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("GuangJitanRuKou_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.GuangJitanRuKouObject = { + Name = "GuangJitanRuKou", + NameImg = 9, + X = 170, + Y = 160, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 4, + Xian = 101, + XianX = 230, + XianY = 180, + }; + } else { + Cobj.GuangJitanRuKouObject = { + Name = "GuangJitanRuKou", + NameImg = 9, + X = 170, + Y = 160, + ClearNumber = 0, + }; + } + } + } + + //暗祭坛入口收包 + { + Cobj.AnJitanRuKouObject = null; + if (JsonObj.Get("AnJitanRuKou_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("AnJitanRuKou_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("AnJitanRuKou_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("AnJitanRuKou_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("AnJitanRuKou_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("AnJitanRuKou_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("AnJitanRuKou_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.AnJitanRuKouObject = { + Name = "AnJitanRuKou", + NameImg = 10, + X = 170, + Y = 340, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 9, + Xian = 102, + XianX = 230, + XianY = 355, + }; + } else { + Cobj.AnJitanRuKouObject = { + Name = "AnJitanRuKou", + NameImg = 10, + X = 170, + Y = 340, + ClearNumber = 0, + }; + } + } + } + + + //光祭坛收包 + { + Cobj.GuangJitanObject = null; + if (JsonObj.Get("GuangJitan_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("GuangJitan_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("GuangJitan_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("GuangJitan_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("GuangJitan_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("GuangJitan_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("GuangJitan_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.GuangJitanObject = { + Name = "GuangJitan", + NameImg = 3, + X = 310, + Y = 190, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 5, + Xian = 103, + XianX = 370, + XianY = 210, + }; + } else { + Cobj.GuangJitanObject = { + Name = "GuangJitan", + NameImg = 3, + X = 310, + Y = 190, + ClearNumber = 0, + Xian = 103, + XianX = 370, + XianY = 210, + }; + } + } + } + + //暗祭坛收包 + { + Cobj.AnJitanObject = null; + if (JsonObj.Get("AnJitan_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("AnJitan_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("AnJitan_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("AnJitan_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("AnJitan_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("AnJitan_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("AnJitan_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.AnJitanObject = { + Name = "AnJitan", + NameImg = 4, + X = 310, + Y = 310, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 10, + Xian = 104, + XianX = 370, + XianY = 340, + }; + } else { + Cobj.AnJitanObject = { + Name = "AnJitan", + NameImg = 4, + X = 310, + Y = 310, + ClearNumber = 0, + Xian = 104, + XianX = 370, + XianY = 340, + }; + } + } + } + + + //力量祭坛收包 + { + Cobj.LiLiangObject = null; + if (JsonObj.Get("LiLiang_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("LiLiang_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("LiLiang_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("LiLiang_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("LiLiang_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("LiLiang_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("LiLiang_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.LiLiangObject = { + Name = "LiLiang", + NameImg = 5, + X = 460, + Y = 190, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 6, + }; + } else { + Cobj.LiLiangObject = { + Name = "LiLiang", + NameImg = 5, + X = 460, + Y = 190, + ClearNumber = 0, + }; + } + } + } + + //智慧祭坛收包 + { + Cobj.ZhiHuiObject = null; + if (JsonObj.Get("ZhiHui_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("ZhiHui_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("ZhiHui_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("ZhiHui_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("ZhiHui_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("ZhiHui_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("ZhiHui_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.ZhiHuiObject = { + Name = "ZhiHui", + NameImg = 6, + X = 460, + Y = 310, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 11, + }; + } else { + Cobj.ZhiHuiObject = { + Name = "ZhiHui", + NameImg = 6, + X = 460, + Y = 310, + ClearNumber = 0, + }; + } + } + } + + + //能源控制室收包 + { + Cobj.NengYuanKongZhiObject = null; + if (JsonObj.Get("NengYuanKongZhi_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("NengYuanKongZhi_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("NengYuanKongZhi_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("NengYuanKongZhi_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("NengYuanKongZhi_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("NengYuanKongZhi_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("NengYuanKongZhi_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.NengYuanKongZhiObject = { + Name = "NengYuanKongZhi", + NameImg = 18, + X = 385, + Y = 250, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 14, + }; + } else { + if (Cobj.NengYuanKongZhiTimerObject) Cobj.NengYuanKongZhiTimerObject.Delete(); + Cobj.NengYuanKongZhiTimerObject = null; + Cobj.NengYuanKongZhiTimerObject = TimeSTL("NengYuanKongZhiTimerObject", JsonObj.Get("JiShiQi->NengYuanKongZhi_FuHuoShiJian")); + Cobj.NengYuanKongZhiTimerObject.Start(); + Cobj.NengYuanKongZhiObject = { + Name = "NengYuanKongZhi", + NameImg = 19, + X = 385, + Y = 250, + ClearNumber = 0, + Timer = Cobj.NengYuanKongZhiTimerObject, + TimeMax = JsonObj.Get("JiShiQi->NengYuanKongZhi_Zong"), + TimeOffset = JsonObj.Get("JiShiQi->NengYuanKongZhi_FuHuoShiJian"), + }; + } + } + } + + //光圣殿收包 + { + Cobj.GuangShengDianObject = null; + if (JsonObj.Get("GuangShengDian_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("GuangShengDian_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("GuangShengDian_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("GuangShengDian_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("GuangShengDian_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("GuangShengDian_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("GuangShengDian_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.GuangShengDianObject = { + Name = "GuangShengDian", + NameImg = 12, + X = 510, + Y = 100, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 7, + }; + } else { + Cobj.GuangShengDianObject = { + Name = "GuangShengDian", + NameImg = 12, + X = 510, + Y = 100, + ClearNumber = 0, + }; + } + } + } + + + //暗圣殿收包 + { + Cobj.AnShengDianObject = null; + if (JsonObj.Get("AnShengDian_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("AnShengDian_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("AnShengDian_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("AnShengDian_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("AnShengDian_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("AnShengDian_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("AnShengDian_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.AnShengDianObject = { + Name = "AnShengDian", + NameImg = 14, + X = 510, + Y = 395, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 12, + }; + } else { + Cobj.AnShengDianObject = { + Name = "AnShengDian", + NameImg = 14, + X = 510, + Y = 395, + ClearNumber = 0, + }; + } + } + } + + + //光卢克收包 + { + Cobj.JiXieWangZuoGuangObject = null; + if (JsonObj.Get("JiXieWangZuoGuang_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("JiXieWangZuoGuang_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("JiXieWangZuoGuang_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("JiXieWangZuoGuang_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("JiXieWangZuoGuang_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("JiXieWangZuoGuang_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("JiXieWangZuoGuang_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.JiXieWangZuoGuangObject = { + Name = "JiXieWangZuoGuang", + NameImg = 16, + NameImg2 = 13, + X = 530, + Y = 210, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 8, + }; + } else { + Cobj.JiXieWangZuoGuangObject = { + Name = "JiXieWangZuoGuang", + NameImg = 16, + NameImg2 = 13, + X = 530, + Y = 210, + ClearNumber = 0, + }; + } + } + } + + //暗卢克收包 + { + Cobj.JiXieWangZuoAnObject = null; + if (JsonObj.Get("JiXieWangZuoAn_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("JiXieWangZuoAn_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("JiXieWangZuoAn_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("JiXieWangZuoAn_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("JiXieWangZuoAn_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("JiXieWangZuoAn_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("JiXieWangZuoAn_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + Cobj.JiXieWangZuoAnObject = { + Name = "JiXieWangZuoAn", + NameImg = 16, + NameImg2 = 15, + X = 530, + Y = 280, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 13, + }; + } else { + Cobj.JiXieWangZuoAnObject = { + Name = "JiXieWangZuoAn", + NameImg = 16, + NameImg2 = 15, + X = 530, + Y = 280, + ClearNumber = 0, + }; + } + } + } + + + //能源储藏收包 + { + Cobj.NengYuanChuCangObject = null; + if (JsonObj.Get("NengYuanChuCang_State") != false) { + //得到副本剩余生命 + local gClearNumber = 1 - JsonObj.Get("NengYuanChuCang_State"); + //如果副本还没有死亡 + if (gClearNumber != 0) { + local gParty = []; + local Size = JsonObj.Get("NengYuanChuCang_Party->size"); + for (local i = 0; i < Size; i++) { + local PartyInfo = []; + PartyInfo.append(JsonObj.Get("NengYuanChuCang_Party->TeamInfoVos->" + i + "->PartyID")); + PartyInfo.append(JsonObj.Get("NengYuanChuCang_Party->TeamInfoVos->" + i + "->PlayerJob")); + PartyInfo.append(JsonObj.Get("NengYuanChuCang_Party->TeamInfoVos->" + i + "->PlayerJobEx")); + PartyInfo.append(JsonObj.Get("NengYuanChuCang_Party->TeamInfoVos->" + i + "->size")); + gParty.append(PartyInfo); + } + if (Cobj.NengYuanChuCangTimerObject) Cobj.NengYuanChuCangTimerObject.Delete(); + Cobj.NengYuanChuCangTimerObject = null; + Cobj.NengYuanChuCangTimerObject = TimeSTL("NengYuanChuCangTimerObject", JsonObj.Get("JiShiQi->NengYuanChuCang_BaoZhaShiJian")); + Cobj.NengYuanChuCangTimerObject.Start(); + Cobj.NengYuanChuCangObject = { + Name = "NengYuanChuCang", + NameImg = 17, + X = 630, + Y = 260, + BloodType = 1, + ClearNumber = gClearNumber, + Party = gParty, + DungeonUID = 15, + Timer = Cobj.NengYuanChuCangTimerObject, + TimeMax = JsonObj.Get("JiShiQi->NengYuanChuCang_BaoZhaZong"), + TimeOffset = JsonObj.Get("JiShiQi->NengYuanChuCang_BaoZhaShiJian"), + }; + } else { + if (Cobj.NengYuanChuCangTimerObject) Cobj.NengYuanChuCangTimerObject.Delete(); + Cobj.NengYuanChuCangTimerObject = null; + Cobj.NengYuanChuCangTimerObject = TimeSTL("NengYuanChuCangTimerObject", JsonObj.Get("JiShiQi->NengYuanChuCang_FuHuoShiJian")); + Cobj.NengYuanChuCangTimerObject.Start(); + Cobj.NengYuanChuCangObject = { + Name = "NengYuanChuCang", + NameImg = 19, + X = 630, + Y = 260, + ClearNumber = 0, + Timer = Cobj.NengYuanChuCangTimerObject, + TimeMax = JsonObj.Get("JiShiQi->NengYuanChuCang_FuHuoZong"), + TimeOffset = JsonObj.Get("JiShiQi->NengYuanChuCang_FuHuoShiJian"), + }; + } + } + } + + + } + } + } + + //收取奖励包 + function ReadReward(chunk) { + //Sout("\n\n收到奖励包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("ReadRewardJson"); //自动判断清空 + local JsonObj = Json_STL("ReadRewardJsonBuffer"); + RootTab.rawset("ReadRewardJson", JsonObj); + RootTab["ReadRewardJson"].Parse(chunk, 0, false); + + if (RootTab.rawin("LUKEDUNGEONINFOCONTROL")) { + local Cobj = RootTab["LUKEDUNGEONINFOCONTROL"]; + Cobj.Reward_Object = null; + local ArrBuffer = []; + for (local i = 0; i < 4; i++) { + if (JsonObj.Get("Items->" + i + "->IsGolden") == false) continue; + local TabBuffer = { + SetFlagAniIndex = JsonObj.Get("Items->" + i + "->IsGolden"), + PlayerJob = JsonObj.Get("Items->" + i + "->PlayerJob"), + PlayerJobEx = JsonObj.Get("Items->" + i + "->PlayerJobEx"), + Name = JsonObj.Get("Items->" + i + "->Name"), + ItemGrade = JsonObj.Get("Items->" + i + "->Grade"), + ItemId = JsonObj.Get("Items->" + i + "->Item"), + ItemCount = JsonObj.Get("Items->" + i + "->Num"), + ItemName = JsonObj.Get("Items->" + i + "->ItemName"), + ItemColor = JsonObj.Get("Items->" + i + "->ItemColour"), + } + ArrBuffer.append(TabBuffer); + } + Cobj.Reward_Object = ArrBuffer; + Cobj.State = JsonObj.Get("State"); + + local AllArrBuffer = []; + for (local i = 0; i < 20; i++) { + if (JsonObj.Get("Items2->" + i + "->IsGolden") == false) continue; + local TabBuffer = { + SetFlagAniIndex = JsonObj.Get("Items2->" + i + "->IsGolden"), + PlayerJob = JsonObj.Get("Items2->" + i + "->PlayerJob"), + PlayerJobEx = JsonObj.Get("Items2->" + i + "->PlayerJobEx"), + Name = JsonObj.Get("Items2->" + i + "->Name"), + ItemGrade = JsonObj.Get("Items2->" + i + "->Grade"), + ItemId = JsonObj.Get("Items2->" + i + "->Item"), + ItemCount = JsonObj.Get("Items2->" + i + "->Num"), + ItemName = JsonObj.Get("Items2->" + i + "->ItemName"), + ItemColor = JsonObj.Get("Items2->" + i + "->ItemColour"), + } + AllArrBuffer.append(TabBuffer); + } + Cobj.AllReward_Object = AllArrBuffer; + + Cobj.Reward_Timer_Object = TimeSTL("Luke_Reward_Timer_Object", 10000); + Cobj.Reward_Timer_Object.Delete(); + Cobj.Reward_Timer_Object = null; + Cobj.Reward_Timer_Object = TimeSTL("Luke_Reward_Timer_Object", 10000); + Cobj.Reward_Timer_Object.Start(); + Cobj.Reward_Info = [ + JsonObj.Get("SuccessTime"), + JsonObj.Get("DeathNum"), + ]; + } + } + + //攻坚开始传送玩家进区域 1阶段开始 + function StartMovePlayer(chunk) { + //Sout("\n\n收到攻坚开始传送玩家进区域包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("MovePlayerJson"); //自动判断清空 + local JsonObj = Json_STL("MovePlayerJsonBuffer"); + RootTab.rawset("MovePlayerJson", JsonObj); + RootTab["MovePlayerJson"].Parse(chunk, 0, false); + + + local TownIndex = RootTab["MovePlayerJson"].Get("TownIndex"); + local ReIndex = RootTab["MovePlayerJson"].Get("ReIndex"); + + L_sq_MoveTown(TownIndex, ReIndex, 200, 200); + + //告诉副本类开始攻坚一阶段了 + if (RootTab.rawin("LUKEDUNGEONINFOCONTROL")) { + RootTab["LUKEDUNGEONINFOCONTROL"].State = 0; + RootTab["LUKEDUNGEONINFOCONTROL"].DrawStartAniMark = true; + } + } + + //攻坚二阶段开始事件 + function StartTwoR(chunk) { + //Sout("\n\n收到攻坚2阶段开始包 :\n %L", chunk) + local RootTab = getroottable(); + if (RootTab.rawin("LUKEDUNGEONINFOCONTROL")) { + RootTab["LUKEDUNGEONINFOCONTROL"].DrawStartAniMark = true; + } + } + + //退出攻坚队传送玩家进区域 + function ExitMovePlayer(chunk) { + //Sout("\n\n收到退出攻坚队传送玩家进区域包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("MovePlayerJson"); //自动判断清空 + local JsonObj = Json_STL("MovePlayerJsonBuffer"); + RootTab.rawset("MovePlayerJson", JsonObj); + RootTab["MovePlayerJson"].Parse(chunk, 0, false); + + + local TownIndex = RootTab["MovePlayerJson"].Get("TownIndex"); + local ReIndex = RootTab["MovePlayerJson"].Get("ReIndex"); + + L_sq_MoveTown(TownIndex, ReIndex, 1036, 335); + } + + //队长进入副本事件 + function PartyMSelectDungeon(chunk) { + //Sout("\n\n收到队长进入副本事件包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("PartyMSelectDungeonJson"); //自动判断清空 + local JsonObj = Json_STL("PartyMSelectDungeonJsonBuffer"); + RootTab.rawset("PartyMSelectDungeonJson", JsonObj); + RootTab["PartyMSelectDungeonJson"].Parse(chunk, 0, false); + + local DungeonTID = RootTab["PartyMSelectDungeonJson"].Get("DungeonTID"); + L_sq_GoDungeon(DungeonTID); + } + + //队长返回城镇事件 + function PartyMReturnTown(chunk) { + //Sout("\n\n收到队长返回城镇事件包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("PartyMReturnTownJson"); //自动判断清空 + local JsonObj = Json_STL("PartyMReturnTownJsonBuffer"); + RootTab.rawset("PartyMReturnTownJson", JsonObj); + RootTab["PartyMReturnTownJson"].Parse(chunk, 0, false); + + if (RootTab.rawin("LUKEDUNGEONINFOCONTROL")) { + local Cobj = RootTab["LUKEDUNGEONINFOCONTROL"]; + if (sq_GetCurrentModuleType() == 3) { + local LukeBackTown = Json_STL("LukeBackTown"); + LukeBackTown.Put("op", 25600159); + local str = LukeBackTown.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeBackTown.Delete(); + } else { + Cobj.ReturnTwonFlag = 1; + } + } + } + + //火山怪物投放包 + function HuoShanMonsterEvent(chunk) { + //Sout("\n\n收到火山投放怪物事件包 :\n %L", chunk) + local RootTab = getroottable(); + BasicsDrawTool.InitClass("PartyMReturnTownJson"); //自动判断清空 + local JsonObj = Json_STL("PartyMReturnTownJsonBuffer"); + RootTab.rawset("PartyMReturnTownJson", JsonObj); + RootTab["PartyMReturnTownJson"].Parse(chunk, 0, false); + local Cobj = RootTab["LUKEDUNGEONINFOCONTROL"]; + if (sq_GetCurrentModuleType() == 3) { + local obj = sq_GetMyMasterCharacter(); + obj = sq_ObjectToSQRCharacter(obj); + //print(Cobj.HuoShanMonserTable[JsonObj.Get("FuHuaId")]); + obj.sq_SendCreatePassiveObjectPacket(Cobj.HuoShanMonserTable[JsonObj.Get("FuHuaId")], 0, 120, 1, 0); + } + } + + //查询是否回城包 + function CheckPlayerGoTwonEvent(chunk) { + if (sq_GetCurrentModuleType() == 1) { + local LukePlayerGoTwonPack = Json_STL("LukePlayerGoTwonPack"); + LukePlayerGoTwonPack.Put("op", 25600185); + local str = LukePlayerGoTwonPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukePlayerGoTwonPack.Delete(); + } + } + + //设置死亡包 + function SetPlayerDeadPack(chunk) { + local obj = sq_GetMyMasterCharacter(); + obj = sq_ObjectToSQRCharacter(obj); + obj.setHp(0, null, true); + } + + function LukeRaid_getMonsterObject(obj, idNeed) { + + if (!obj) + return null; + + local objectManager = obj.getObjectManager(); + + if (objectManager == null) + return null; + + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i += 1) { + local object = objectManager.getCollisionObject(i); + + if (object && object.isObjectType(OBJECTTYPE_MONSTER)) { + local object2 = sq_GetCNRDObjectToCollisionObject(object); + local id = object2.getCollisionObjectIndex(object2); + if (id == idNeed) { + return object2; + } + + + } + + } + + return null; + + } + + + function getLukeRaid_QuattuorManusMK2ChangeLayer(obj) { + local mob = LukeRaid_getMonsterObject(obj, 560650); + if (mob) + sq_ChangeDrawLayer(mob, ENUM_DRAWLAYER_MIDDLEBACK); + // + } + + constructor() { + //读取卢克攻坚信息包 + Pack_Control.rawset(25600152, ReadLukeDungeonInfoPack); + //攻坚开始传送玩家事件 + Pack_Control.rawset(25600144, StartMovePlayer); + //攻坚二阶段开始事件 + Pack_Control.rawset(25600146, StartTwoR); + //退出攻坚队传送玩家事件 + Pack_Control.rawset(25600138, ExitMovePlayer); + //队长进入副本事件 + Pack_Control.rawset(25600154, PartyMSelectDungeon); + //队长返回城镇事件 + Pack_Control.rawset(25600156, PartyMReturnTown); + //收取奖励包 + Pack_Control.rawset(25600172, ReadReward); + //收取火山怪物投放包 + Pack_Control.rawset(25600182, HuoShanMonsterEvent); + //查询是否回城包 + Pack_Control.rawset(25600184, CheckPlayerGoTwonEvent); + //设置玩家死亡包 + Pack_Control.rawset(25600164, SetPlayerDeadPack); + //初始化判断孵化进入操作表 + MapIndexTable = {}; + MapIndexTable.rawset(33100, 1); + MapIndexTable.rawset(33103, 2); + MapIndexTable.rawset(33119, 3); + MapIndexTable.rawset(33116, 4); + //火山怪物投放表 + HuoShanMonserTable = {}; + HuoShanMonserTable.rawset(1, 202210052); + HuoShanMonserTable.rawset(2, 202210053); + HuoShanMonserTable.rawset(3, 202210054); + HuoShanMonserTable.rawset(4, 202210055); + } + + //绘制攻坚剩余时间 + function DrawTime(obj) { + + //如果还没收到配置包的时候直接返回 + if (!FightMaxTime) return; + + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", X + 528, Y + 23, 1, "卢克剩余攻坚时间主界面"); + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", X + 566, Y + 25, 2, "卢克剩余攻坚时间文字"); + + //计算剩余时间并绘制 + local Time = (FightMaxTime - FightTimer.Get()); + local Hours = (Time / 3600000).tostring(); + if (Hours.len() < 2) Hours = "0" + Hours; + if (Hours.len() > 2) Hours = Hours.slice(Hours.len() - 2, Hours.len()); + local minutes = (Time / 60000).tostring(); + if (minutes.len() < 2) minutes = "0" + minutes; + if (minutes.len() > 2) minutes = minutes.slice(minutes.len() - 2, minutes.len()); + local seconds = (Time / 1000 % 60).tostring(); + if (seconds.len() < 2) seconds = "0" + seconds; + if (seconds.len() > 2) seconds = seconds.slice(seconds.len() - 2, seconds.len()); + + for (local i = 0; i < 2; i++) { + T_DrawStayAni(obj, "common/anton/new/newopendungeonnum.ani", X + 538 + (i * 18), Y + 51, Hours.slice(0 + i, 1 + i).tointeger(), "卢克剩余攻坚时间时" + i); + T_DrawStayAni(obj, "common/anton/new/newopendungeonnum.ani", X + 584 + (i * 18), Y + 51, minutes.slice(0 + i, 1 + i).tointeger(), "卢克剩余攻坚时间分" + i); + T_DrawStayAni(obj, "common/anton/new/newopendungeonnum.ani", X + 628 + (i * 18), Y + 51, seconds.slice(0 + i, 1 + i).tointeger(), "卢克剩余攻坚时间分" + i); + } + + //Sout("时: %L 分: %L 秒: %L",Hours,minutes,seconds); + } + + + //绘制展开攻坚信息按钮 + function DrawMainButton(obj) { + //如果展开按钮不存在 + if (!OpenMainButtonObject) { + OpenMainButtonObject = LukeButtonPro(obj, "LukeDungeonOpenMainButtonObject", 690, 35, "common/anton/new/newopendungeoninfobutton.ani", 103, 22, 0); + OpenMainButtonObject.SetRectEnble(true, "LukeDungeonOpenMainButtonObjectr", 690, 35, "common/anton/new/newopendungeoninfobutton.ani", 1); + OpenMainButtonObject.SetCustomClickEnble(true, "LukeDungeonOpenMainButtonObjectc", 690, 35, "common/anton/new/newopendungeoninfobutton.ani", 2); + } + //未点击 窗口也未打开 + if (!sq_GetPopupWindowMainCotrol(267)) { + OpenMainButtonObject.Show(); + if (OpenMainButtonObject.isLBActive()) { + PageState = 1; + L_NewWindows("Lenheart", 267, 0x65535); + + + //local RootTab = getroottable(); + //RootTab["LUKETOWNMAINCONTROLLIST"].NowSelectTeamFunc = null; //把功能选择页关掉 + //RootTab["LUKETOWNMAINCONTROLLIST"].NowSelectTeam = null; //把功能选择页关掉 + //RootTab["LUKETEAMMAINBUTTON"].State = 0; + //RootTab["LUKETEAMMAINBUTTON"].WindowSwitch = false; + + } + } + if (PageState == 1 && !sq_GetPopupWindowMainCotrol(267)) { + PageState = 0; + } + } + + + //绘制副本对象 + function DrawDungeonObjInfo(obj, DgnObj) { + //如果副本已经死亡 + if (DgnObj.ClearNumber == 0) { + //2阶段副本绘制线 + if (DgnObj.rawin("Xian")) { + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/luke_game_navigation.ani", DgnObj.XianX, DgnObj.XianY, DgnObj.Xian, "卢克攻坚战况副本血槽线a" + DgnObj.Name + DgnObj.Xian); + } + //绘制副本血槽背景 + local Bkani = 6; + if (DgnObj.rawin("Reload")) Bkani = 15; + if (DgnObj.rawin("Ani")) Bkani = DgnObj.Ani; + /* + if (DgnObj.rawin("GanRan")) { + Bkani = 18; + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 1, DgnObj.Y + 1, 19, "卢克攻坚战况副本血槽背景感染外框"); + } + */ + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X, DgnObj.Y, Bkani, "D卢克攻坚战况副本血槽背景" + DgnObj.Name); + //绘制复活副本血槽名称背景 + //T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 42, DgnObj.Y - 16, 5, "D卢克攻坚战况副本血槽名称背景" + DgnObj.Name); + //绘制副本血槽名称 + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/dungeon_name/luke_dungeon_name.ani", DgnObj.X - 17, DgnObj.Y + 72, DgnObj.NameImg, "卢克攻坚战况副本血槽名称a" + DgnObj.Name); + if (DgnObj.rawin("NameImg2")) { + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/dungeon_name/luke_dungeon_name.ani", DgnObj.X - 17, DgnObj.Y + 95, DgnObj.NameImg2, "卢克攻坚战况副本血槽名称c" + DgnObj.NameImg2); + } + //绘制复活副本血槽名称 + //T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 42, DgnObj.Y - 16, 7, "D卢克攻坚战况副本血槽名称" + DgnObj.Name); + //判断是否需要绘制复活时间 + if (DgnObj.rawin("Timer")) { + local TimeMax = (DgnObj.TimeMax / 1000); + local Time = ((DgnObj.Timer.Get() + (DgnObj.TimeMax - DgnObj.TimeOffset)) / 1000); + local TimeStr = (TimeMax - Time).tostring(); + L_Code_STL(TimeStr, DgnObj.X + 34 - (TimeStr.len() * 2), DgnObj.Y + 28, 0xffffffff, 1); + //绘制复活时间进度条 + local TimeHun = ((Time.tofloat() / TimeMax.tofloat()) * 100.0).tointeger(); + T_DrawStayAni(obj, "common/anton/new/newantonloading2.ani", DgnObj.X, DgnObj.Y, TimeHun, "卢克攻坚战况副本复活时间进度条" + TimeHun); + } + } + //如果还没死亡 + else { + //2阶段副本绘制线 + if (DgnObj.rawin("Xian")) { + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/luke_game_navigation.ani", DgnObj.XianX, DgnObj.XianY, DgnObj.Xian, "卢克攻坚战况副本血槽线a" + DgnObj.Name + DgnObj.Xian); + } + //绘制副本血槽背景 + local Bkani = 4; + if (DgnObj.rawin("Reload")) Bkani = 15; + if (DgnObj.rawin("Ani")) Bkani = DgnObj.Ani; + //绘制感染 + if (DgnObj.rawin("GanRan")) { + Bkani = 18; + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 1, DgnObj.Y + 1, 19, "卢克攻坚战况副本血槽背景感染外框"); + } + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X, DgnObj.Y, Bkani, "卢克攻坚战况副本血槽背景" + DgnObj.Name); + //绘制副本血槽名称背景 + //T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X + 42, DgnObj.Y - 16, 5, "卢克攻坚战况副本血槽名称背景" + DgnObj.Name); + //绘制副本血槽名称 + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/dungeon_name/luke_dungeon_name.ani", DgnObj.X - 17, DgnObj.Y + 72, DgnObj.NameImg, "卢克攻坚战况副本血槽名称a" + DgnObj.Name); + if (DgnObj.rawin("NameImg2")) { + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/dungeon_name/luke_dungeon_name.ani", DgnObj.X - 17, DgnObj.Y + 95, DgnObj.NameImg2, "卢克攻坚战况副本血槽名称c" + DgnObj.NameImg2); + } + //绘制副本血量 + //火山单独绘制 + if (DgnObj.BloodType == 99) { + local NengLiangstr = DgnObj.NengLiang.tostring(); + if (NengLiangstr.len() == 1) NengLiangstr = "00" + NengLiangstr; + if (NengLiangstr.len() == 2) NengLiangstr = "0" + NengLiangstr; + for (local i = 0; i < 3; i++) { + local index = NengLiangstr.slice(0 + i, 1 + i).tointeger(); + T_DrawStayAni(obj, "common/anton/new/newnum.ani", DgnObj.X + 23 + (i * 8), DgnObj.Y + 40, index "卢克剩余火山能量" + i + index); + } + local NengLiang = abs(DgnObj.NengLiang - 100) + T_DrawStayAni(obj, "common/anton/new/newantonloading3.ani", DgnObj.X, DgnObj.Y, NengLiang, "卢克攻坚战况副本火山血" + NengLiang); + } + //别的副本绘制 马勒戈壁写烦起来了 瞎比乱写了 架构去他妈 + else { + T_DrawStayAni(obj, "common/anton/new/newopendungeonblood/" + DgnObj.BloodType + "_" + DgnObj.ClearNumber + ".ani", DgnObj.X, DgnObj.Y, 0, "卢克攻坚战况副本血" + DgnObj.BloodType + "_" + DgnObj.ClearNumber); + } + //判断是否需要绘制爆炸时间 + if (DgnObj.rawin("Timer")) { + local TimeMax = (DgnObj.TimeMax / 1000); + local Time = ((DgnObj.Timer.Get() + (DgnObj.TimeMax - DgnObj.TimeOffset)) / 1000); + local TimeStr = (TimeMax - Time).tostring(); + L_Code_STL(TimeStr, DgnObj.X + 34 - (TimeStr.len() * 2), DgnObj.Y + 28, 0xffffffff, 1); + //绘制爆炸时间进度条 + local TimeHun = ((Time.tofloat() / TimeMax.tofloat()) * 100.0).tointeger(); + T_DrawStayAni(obj, "common/anton/new/newantonloading2.ani", DgnObj.X, DgnObj.Y, TimeHun, "卢克攻坚战况副本爆炸时间进度条c" + TimeHun); + } + + + //绘制队伍 + for (local i = 0; i < DgnObj.Party.len(); i++) { + //绘制底框 + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X - 66, DgnObj.Y - 20 + (i * 22), 8 + i, "卢克攻坚战况队伍底框" + i); + //绘制队伍编号 注意:因为这个傻逼图TM的不对称 要单独 判断位置 + local Offset = 0; + if (i == 1 || i == 2) Offset = 1; + if (i == 3) Offset = 6; + if (i == 4) Offset = 7; + T_DrawStayAni(obj, "common/anton/new/newopendungeonpartymark.ani", DgnObj.X - 63, DgnObj.Y - 17 + (i * 22) + Offset, DgnObj.Party[i][0], "卢克攻坚战况队伍编号" + DgnObj.Party[0]); + //绘制队伍人数 + for (local z = 0; z < DgnObj.Party[i][3] - 1; z++) { + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", DgnObj.X - 27 + (z * 7), DgnObj.Y - 14 + (i * 22) + Offset, 13, "卢克攻坚战况队伍人数"); + } + //绘制队长头像TM的这个傻逼东西又偏了 在+1 + if (Offset == 6 || Offset == 7) ++Offset; + T_DrawStayAniRate(obj, "common/anton/face/" + DgnObj.Party[i][1] + "/" + (DgnObj.Party[i][2] % 16) + ".ani", DgnObj.X - 44, DgnObj.Y - 16 + (i * 22) + Offset, 0, "缩小卢克头像编号" + DgnObj.Party[i][1] + DgnObj.Party[i][2], 0.50); + } + } + if (MouseTask == 1 && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, DgnObj.X, DgnObj.Y, 71, 71) && IMouse.isButtonUpEvent()) { + if (!DgnObj.rawin("DungeonUID")) return; + obj.sq_PlaySound("CLICK_BUTTON1"); + local LukeSelectDungeon = Json_STL("LukeSelectDungeon"); + LukeSelectDungeon.Put("op", 25600151); + LukeSelectDungeon.Put("DungeonUID", DgnObj.DungeonUID); + local str = LukeSelectDungeon.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeSelectDungeon.Delete(); + MouseTask = 2; + } + } + + //绘制小队移动类 + function DrawPartyMoveClss(obj) { + local ThisX = X + 540; + local ThisY = Y + 508; + T_DrawStayAni(obj, "common/anton/new/newopendungeoninfo.ani", ThisX, ThisY, 14, "卢克攻坚战况主界面小队移动背景"); + + //如果 小队移动选择地下城按钮 未初始化时 初始化 + if (PartyMove_SelectDungeon_Button == null) { + PartyMove_SelectDungeon_Button = LukeButtonPro(obj, "LukePartyMove_SelectDungeon_Button", ThisX + 7, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 95, 29, 6); + PartyMove_SelectDungeon_Button.SetRectEnble(true, "LukePartyMove_SelectDungeon_Buttonr", ThisX + 7, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 7); + PartyMove_SelectDungeon_Button.SetCustomClickEnble(true, "LukePartyMove_SelectDungeon_Buttonc", ThisX + 7, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 8); + } + PartyMove_SelectDungeon_Button.Show(); + if (PartyMove_SelectDungeon_Button.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + MouseTask = 1; + } + //如果 小队移动返回城镇按钮 未初始化时 初始化 + if (PartyMove_ReturnTown_Button == null) { + PartyMove_ReturnTown_Button = LukeButtonPro(obj, "LukePartyMove_ReturnTown_Button", ThisX + 108, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 95, 29, 9); + PartyMove_ReturnTown_Button.SetRectEnble(true, "LukePartyPartyMove_ReturnTown_Buttonr", ThisX + 108, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 10); + PartyMove_ReturnTown_Button.SetCustomClickEnble(true, "LukePartyPartyMove_ReturnTown_Buttonc", ThisX + 108, ThisY + 30, "common/anton/new/newopendungeoninfobutton.ani", 11); + } + PartyMove_ReturnTown_Button.Show(); + if (PartyMove_ReturnTown_Button.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + //不在城镇里点击返回城镇按钮才会发包 + if (sq_GetCurrentModuleType() != 1) { + local TryLukeBackTown = Json_STL("TryLukeBackTown"); + TryLukeBackTown.Put("op", 25600153); + local str = TryLukeBackTown.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + TryLukeBackTown.Delete(); + } + } + } + + //绘制开始攻坚动画 + function DrawStartAni(obj, Type) { + if (Type == 0) Type = 1; + else if (Type == 3) Type = 2; + if (DrawStartAniMark == true) { + local anieff = BasicsDrawTool.T_DrawDynamicAni(obj, "common/luke/new/starteff.ani", 250, 210, "l开始攻坚标题背景eff"); + local ani1 = BasicsDrawTool.T_DrawDynamicAni(obj, "common/luke/new/start" + Type + ".ani", 250, 210 + 26, "l开始攻坚标题背景1"); + if (sq_GetAnimationFrameIndex(ani1) >= 28) { + sq_Rewind(anieff); + sq_Rewind(ani1); + DrawStartAniMark = false; + } + } + } + + //绘制卢克信息卡牌 + function DrawLukeInfoCard(obj) { + //绘制卡牌信息背景 + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/luke_cardsystem.ani", X, Y, 0, "卢克攻坚战况主界面卡牌信息背景"); + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/luke_cardsystem.ani", X, Y, 1, "卢克攻坚战况主界面卡牌信息背景a"); + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/luke_cardsystem.ani", X, Y, 2, "卢克攻坚战况主界面卡牌信息背景b"); + + + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/luke_cardsystem.ani", X + 80, Y + 150, 3, "卢克攻坚战况主界面卡牌信息背景c"); + for (local i = 0; i < 2; i++) { + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/card_buff_icon.ani", X + 90 + (i * 25), Y + 186, DanShengBuffObject[i], "卢克攻坚战况主界面卡牌信息背景cb" + i); + } + + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 86, Y + 240, 2, "卢克攻坚战况主界面卡牌信息背景c1", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 110, Y + 240, 3, "卢克攻坚战况主界面卡牌信息背景c2", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 134, Y + 240, 10, "卢克攻坚战况主界面卡牌信息背景c3", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 158, Y + 240, 16, "卢克攻坚战况主界面卡牌信息背景c4", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 182, Y + 240, 21, "卢克攻坚战况主界面卡牌信息背景c5", 0.5); + + + + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/luke_cardsystem.ani", X + 370, Y + 80, 4, "卢克攻坚战况主界面卡牌信息背景d"); + for (local e = 0; e < 2; e++) { + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/card_buff_icon.ani", X + 380 + (e * 25), Y + 116, YanMieBuffObject[e], "卢克攻坚战况主界面卡牌信息背景db" + e); + } + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 480, Y + 80 + 40, 4, "卢克攻坚战况主界面卡牌信息背景d1", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 504, Y + 80 + 40, 7, "卢克攻坚战况主界面卡牌信息背景d2", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 528, Y + 80 + 40, 8, "卢克攻坚战况主界面卡牌信息背景d3", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 552, Y + 80 + 40, 14, "卢克攻坚战况主界面卡牌信息背景d4", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 576, Y + 80 + 40, 17, "卢克攻坚战况主界面卡牌信息背景d5", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 600, Y + 80 + 40, 21, "卢克攻坚战况主界面卡牌信息背景d6", 0.5); + + + + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/luke_cardsystem.ani", X + 370, Y + 340, 5, "卢克攻坚战况主界面卡牌信息背景e"); + for (local r = 0; r < 2; r++) { + T_DrawStayAni(obj, "common/luke/raid/luke/luke_card_system/card_buff_icon.ani", X + 380 + (r * 25), Y + 120 + 260, ManYanBuffObject[r], "卢克攻坚战况主界面卡牌信息背景db" + r); + } + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 480, Y + 340 + 40, 0, "卢克攻坚战况主界面卡牌信息背景e1", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 504, Y + 340 + 40, 4, "卢克攻坚战况主界面卡牌信息背景e2", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 528, Y + 340 + 40, 12, "卢克攻坚战况主界面卡牌信息背景e3", 0.5); + T_DrawStayAniRate(obj, "common/luke/raid/luke/luke_card_system/tarotcard.ani", X + 552, Y + 340 + 40, 17, "卢克攻坚战况主界面卡牌信息背景e4", 0.5); + + } + + + //绘制攻坚队攻坚信息 + function DrawLukePartyInfo(obj) { + local backgroundType = 0; + if (State >= 3) backgroundType = 1; + //绘制主界面背景 + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/luke_game_navigation.ani", X, Y, 2, "卢克攻坚战况主界面背景a"); + //绘制主界面背景乌龟 + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/luke_state_full/luke_state_full.ani", X, Y, backgroundType, "卢克攻坚战况主界面背景乌龟e" + State); + //绘制主界面小队移动类 + DrawPartyMoveClss(obj); + + + + //1阶段 + if (State == 0) { + //诞生圣所对象绘制 + if (DanShengObject) DrawDungeonObjInfo(obj, DanShengObject); + //蔓延圣所对象绘制 + if (ManYanObject) DrawDungeonObjInfo(obj, ManYanObject); + //湮灭圣所对象绘制 + if (YanMieObject) DrawDungeonObjInfo(obj, YanMieObject); + + //震颤A对象绘制 + if (ZhenChan_A_Object) DrawDungeonObjInfo(obj, ZhenChan_A_Object); + //震颤B对象绘制 + if (ZhenChan_B_Object) DrawDungeonObjInfo(obj, ZhenChan_B_Object); + //擎天A对象绘制 + if (QingTian_A_Object) DrawDungeonObjInfo(obj, QingTian_A_Object); + //擎天B对象绘制 + if (QingTian_B_Object) DrawDungeonObjInfo(obj, QingTian_B_Object); + //舰炮防御战对象绘制 + if (JianPaoObject) DrawDungeonObjInfo(obj, JianPaoObject); + } + + + + //2阶段 + if (State == 3) { + if (GuangJitanRuKouObject) DrawDungeonObjInfo(obj, GuangJitanRuKouObject); //光祭坛入口对象 + if (AnJitanRuKouObject) DrawDungeonObjInfo(obj, AnJitanRuKouObject); //光祭坛入口对象 + + if (GuangJitanObject) DrawDungeonObjInfo(obj, GuangJitanObject); //光祭坛对象 + if (AnJitanObject) DrawDungeonObjInfo(obj, AnJitanObject); //暗祭坛对象 + + if (LiLiangObject) DrawDungeonObjInfo(obj, LiLiangObject); //力量祭坛对象 + if (ZhiHuiObject) DrawDungeonObjInfo(obj, ZhiHuiObject); //智慧祭坛对象 + + + if (NengYuanKongZhiObject) DrawDungeonObjInfo(obj, NengYuanKongZhiObject); //能源控制对象 + + if (GuangShengDianObject) DrawDungeonObjInfo(obj, GuangShengDianObject); //光圣殿对象 + if (AnShengDianObject) DrawDungeonObjInfo(obj, AnShengDianObject); //暗圣殿对象 + + if (JiXieWangZuoGuangObject) DrawDungeonObjInfo(obj, JiXieWangZuoGuangObject); //光卢克 + if (JiXieWangZuoAnObject) DrawDungeonObjInfo(obj, JiXieWangZuoAnObject); //暗卢克 + + if (NengYuanChuCangObject) DrawDungeonObjInfo(obj, NengYuanChuCangObject); //能源储藏对象 + } + + + //绘制主界面复活币剩余 + T_DrawStayAni(obj, "common/luke/raid/luke/luke_game_navigation/luke_game_navigation.ani", X + 45, Y + 510, 93, "卢克攻坚战况主界面复活币剩余"); + + + //绘制主界面复活币剩余 + local CoinCount = (FHMAX - FHNOW).tostring(); + for (local i = 0; i < 2; i++) { + if (CoinCount.len() >= (i + 1)) T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + 45 + 75 + (i * 18), Y + 537, CoinCount.slice(0 + i, 1 + i).tointeger(), "卢克剩余复活币" + i); + } + } + + //设置鼠标事件类型 + function SetMouseTesk() { + //有活动设置 + if (MouseTask == 1) IMouse.SetMouseTask(47); + //点击就还原 + if (IMouse.GetRButton() == 2 && MouseTask == 1) MouseTask = 2; + //还原以后在解锁 + if (MouseTask == 2) { + IMouse.SetMouseTask(0); + MouseTask = 0; + } + } + + //判断是否可重合 + function PosEvent(Pos, MPos) { + local Offset = abs(Pos - MPos); + if (Offset < 10) return true; + else return false; + } + //判断自身地图相关事件 + function MapEventTest(obj) { + if (sq_GetCurrentModuleType() != 3) return; + local stage = sq_GetGlobaludpModuleStage(); + local MapIndex = sq_GetMapIndex(stage); + if (MapIndexTable.rawin(MapIndex)) { + local X = obj.getXPos(); + local Y = obj.getYPos(); + local Mark = false; + if (MapIndex == 33103 && PosEvent(X, 737) && PosEvent(Y, 354)) Mark = true; + if (MapIndex == 33100 && PosEvent(X, 369) && PosEvent(Y, 387)) Mark = true; + if (MapIndex == 33116 && PosEvent(X, 365) && PosEvent(Y, 374)) Mark = true; + if (MapIndex == 33119 && PosEvent(X, 838) && PosEvent(Y, 424)) Mark = true; + + if (Mark == true && MapMoveMark == false) { + local LukeFHMoveDungeon = Json_STL("LukeFHMoveDungeon"); + LukeFHMoveDungeon.Put("op", 25600157); + LukeFHMoveDungeon.Put("DungeonUID", MapIndexTable[MapIndex]); + local str = LukeFHMoveDungeon.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeFHMoveDungeon.Delete(); + MapMoveMark = true; + } else if (Mark == false) MapMoveMark = false; + } else { + MapMoveMark = false; + } + } + + //绘制透明度静态图片 + function Luke_DrawStayAniAlpha(obj, aniFileName, x, y, index, aniname, Alpha) { + local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName); + sq_DrawSpecificFrameEffect_SIMPLE(SelectAni, x, y, index, sq_RGB(255, 255, 255), sq_ALPHA(Alpha), false); + return SelectAni; + } + + //绘制透明度静态图片 + function Luke_DrawStayAniAlphaRate(obj, aniFileName, x, y, index, aniname, Alpha, rate) { + local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName); + SelectAni.setImageRateFromOriginal(rate, rate); + sq_DrawSpecificFrameEffect_SIMPLE(SelectAni, x, y, index, sq_RGB(255, 255, 255), sq_ALPHA(Alpha), false); + return SelectAni; + } + + + //绘制翻牌奖励 + function DrawReward(obj, Time, Reward_Object, AllReward_Object, Reward_Info) { + local PassTime = Reward_Info[0]; + local Coin = Reward_Info[1]; + + //绘制背景图 + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X, Y, 10, "卢克翻牌主界面背景", 230); + + + //绘制阶段状态 + local Reani = 1; + if (State == 4) Reani = 7; + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 300, Y + 40, 0, "a卢克翻牌阶段状态", 250); + //绘制成功标志 + local Rate = sq_GetAccel(400, 100, Time, 500, false); + T_DrawStayAniRate(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 300, Y + 40, Reani, "a卢克翻牌成功标志1", Rate.tofloat() / 100.0); + + //绘制通关信息条划出 + if (Time >= 500) { + local Xpos; + if (Time < 3000) Xpos = sq_GetAccel(675, 0, Time - 500, 300, false); + if (Time >= 3000) Xpos = sq_GetAccel(0, -675, Time - 3000, 300, false); + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 115 + Xpos, Y + 200, 11, "a卢克翻牌阶段状态", 250); + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 115 + Xpos, Y + 200, 12, "a卢克翻牌阶段状态1", 250); + } + + //绘制时间 + if (Time >= 800) { + local Xpos; + if (Time < 3000) Xpos = sq_GetAccel(675, 0, Time - 800, 300, false); + if (Time >= 3000) Xpos = sq_GetAccel(0, -675, Time - 3000, 300, false); + //计算剩余时间并绘制 + local Hours = (PassTime / 3600000).tostring(); + if (Hours.len() < 2) Hours = "0" + Hours; + if (Hours.len() > 2) Hours = Hours.slice(Hours.len() - 2, Hours.len()); + local minutes = (PassTime / 60000).tostring(); + if (minutes.len() < 2) minutes = "0" + minutes; + if (minutes.len() > 2) minutes = minutes.slice(minutes.len() - 2, minutes.len()); + local seconds = (PassTime / 1000 % 60).tostring(); + if (seconds.len() < 2) seconds = "0" + seconds; + if (seconds.len() > 2) seconds = seconds.slice(seconds.len() - 2, seconds.len()); + + for (local i = 0; i < 2; i++) { + T_DrawStayAni(obj, "common/luke/new/newtime.ani", X + Xpos + 538 - 300 + (i * 15), Y + 59 + 164, Hours.slice(0 + i, 1 + i).tointeger(), "卢克奖励部分时间时" + i); + T_DrawStayAni(obj, "common/luke/new/newtime.ani", X + Xpos + 588 - 300 + (i * 15), Y + 59 + 164, minutes.slice(0 + i, 1 + i).tointeger(), "卢克奖励部分时间分" + i); + T_DrawStayAni(obj, "common/luke/new/newtime.ani", X + Xpos + 638 - 300 + (i * 15), Y + 59 + 164, seconds.slice(0 + i, 1 + i).tointeger(), "卢克奖励部分时间分" + i); + } + T_DrawStayAni(obj, "common/luke/new/newtime.ani", X + Xpos + 270, Y + 57 + 164, 10, "卢克奖励部分时间时分"); + T_DrawStayAni(obj, "common/luke/new/newtime.ani", X + Xpos + 320, Y + 57 + 164, 11, "卢克奖励部分时间时秒"); + + for (local z = 0; z < Coin.tostring().len(); z++) { + T_DrawStayAni(obj, "common/luke/new/newtime.ani", X + Xpos + 520 + (z * 15), Y + 59 + 164, Coin.tostring().slice(0 + z, 1 + z).tointeger(), "卢克奖励部分时间复活币" + z); + } + //T_DrawStayAni(obj, "common/anton/new/newtime.ani", X + 348 , Y + 51 + 164, 10, "卢克奖励部分时间时点"); + } + + local CradTab = Reward_Object; + + //绘制卡牌 + if (Time >= 1300) { + local Alpha; + if (Time < 3000) Alpha = sq_GetAccel(0, 250, Time - 1300, 700, false); + if (Time >= 3000) Alpha = sq_GetAccel(250, 0, Time - 3000, 700, false); + for (local i = 0; i < 4; i++) { + local BackGroundAniIndex = 20; + if (i >= CradTab.len()) { + //绘制卡牌背景图 + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 94 + (153 * i), Y + 300, BackGroundAniIndex, "a卢克翻牌卡片界面背景", Alpha); + //Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 160 + (153 * i), Y + 416, 19, "卢克翻牌无卡片背景", Alpha); + //Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 160 + (153 * i), Y + 416, 20, "卢克翻牌无卡片背景Eff", Alpha); + continue; + } + if (CradTab[i].SetFlagAniIndex == 1) BackGroundAniIndex = 22; + //绘制卡牌背景图 + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 94 + (153 * i), Y + 300, BackGroundAniIndex, "a卢克翻牌卡片界面背景1", Alpha); + //绘制自己的卡牌选择光效 + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 94 + (153 * i) - 19, Y + 300 - 18, 21, "a卢克翻牌卡片界面背景", Alpha); + //绘制角色标记 + local SetFlagAniIndex = 9; + SetFlagAniIndex += CradTab[i].SetFlagAniIndex; + //Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + 97 + (153 * i), Y + 330, SetFlagAniIndex, "a卢克翻牌卡片界面人物框" + SetFlagAniIndex, Alpha); + + if (Time >= 2000) { + local mat = 3000; + //绘制角色头像 + Luke_DrawStayAniAlphaRate(obj, "common/anton/face/" + CradTab[i].PlayerJob + "/" + (CradTab[i].PlayerJobEx % 16) + ".ani", X + 102 + (153 * i) + 22, Y + 334 - 14, 0, "翻牌卢克头像编号" + CradTab[i].PlayerJob + CradTab[i].PlayerJobEx, Alpha, 0.70); + //绘制角色名字 + if (Time < mat) L_Code_STL(CradTab[i].Name, X + 145 + (153 * i) + 8, Y + 324, 0xFFffffff, 1); + + local sssq = 8; + local sssw = 50; + //绘制道具边框 + if (Time < mat) T_DrawStayAni(obj, "common/anton/new/newreward.ani", X + 153 + (153 * i) + sssq, Y + 412 - sssw, CradTab[i].ItemGrade + 12, "卢克翻牌卡片道具边框" + CradTab[i].ItemGrade); + //绘制道具 + if (Time < mat) L_Sq_DrawItem(X + 156 + (153 * i) + sssq, Y + 415 - sssw, CradTab[i].ItemId, CradTab[i].ItemCount, 0, 0, 0); + //绘制道具名字 + if (Time < mat) L_Code_STL(CradTab[i].ItemName, X + 167 + (153 * i) - BasicsDrawTool.GetOffserFromLen(CradTab[i].ItemName, 1.5) + sssq, Y + 450 - sssw, 0xffffffff, 1); + } + } + } + //直接跳过一阶段的全体翻牌 + if (State == 1 && Time >= 3100) State = 2; + + if (State == 4) { + local AllCradTab = AllReward_Object; + //绘制所有人卡牌 + if (Time >= 3700) { + local Xoffset = -80; + local Yoffset = -200; + local Alpha; + Alpha = sq_GetAccel(0, 250, Time - 3700, 700, false); + + for (local i = 0; i < 8; i++) { + + local BackGroundAniIndex = 20; + if (i >= AllCradTab.len()) { + + //绘制卡牌背景图 + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + Xoffset + 118 + (180 * (i % 4)), Y + Yoffset - 30 + 392 + (190 * (i / 4)), 15, "卢克翻牌卡片界面背景acaww", Alpha); + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + Xoffset + 130 + (180 * (i % 4)), Y + Yoffset - 30 + 420 + (190 * (i / 4)), BackGroundAniIndex, "卢克翻牌卡片界面背景aca", Alpha); + continue; + } + + if (AllCradTab[i].SetFlagAniIndex == 1) BackGroundAniIndex = 22; + //绘制卡牌背景图 + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + Xoffset + 118 + (180 * (i % 4)), Y + Yoffset - 30 + 392 + (190 * (i / 4)), 15, "卢克翻牌卡片界面背景acaww" + 15, Alpha); + Luke_DrawStayAniAlpha(obj, "common/luke/raid/luke/reward/luke_reward_new.ani", X + Xoffset + 130 + (180 * (i % 4)), Y + Yoffset - 30 + 420 + (190 * (i / 4)), BackGroundAniIndex, "卢克翻牌卡片界面背景aca" + BackGroundAniIndex, Alpha); + + + //绘制角色头像 + Luke_DrawStayAniAlphaRate(obj, "common/anton/face/" + AllCradTab[i].PlayerJob + "/" + (AllCradTab[i].PlayerJobEx % 16) + ".ani", X + Xoffset + 102 + (180 * (i % 4)) + 22 + 37, Y + Yoffset - 30 + 388 + (190 * (i / 4)) - 14 + 67, 0, "翻牌卢克头像编号" + AllCradTab[i].PlayerJob + AllCradTab[i].PlayerJobEx, Alpha, 0.70); + + + if (Time >= 4400) { + //绘制角色名字 + L_Code_STL(AllCradTab[i].Name, X + Xoffset + 137 + (180 * (i % 4)) + 50, Y + Yoffset - 30 + 394 + (190 * (i / 4)) + 50, 0xFF9bc8e6, 1); + //绘制道具边框 + T_DrawStayAni(obj, "common/anton/new/newreward.ani", X + Xoffset + 153 + (180 * (i % 4)) + 43, Y + Yoffset - 30 + 417 + (190 * (i / 4)) + 68, AllCradTab[i].ItemGrade + 12, "卢克翻牌卡片道具边框" + AllCradTab[i].ItemGrade); + //绘制道具 + L_Sq_DrawItem(X + Xoffset + 156 + (180 * (i % 4)) + 43, Y + Yoffset - 30 + 420 + (190 * (i / 4)) + 68, AllCradTab[i].ItemId, AllCradTab[i].ItemCount, 0, 0, 0); + //绘制道具名字 + L_Code_STL(AllCradTab[i].ItemName, X + Xoffset + 167 + (180 * (i % 4)) - BasicsDrawTool.GetOffserFromLen(AllCradTab[i].ItemName, 1.5) + 43, Y + Yoffset - 30 + 455 + (190 * (i / 4)) + 68, 0xffffffff, 1); + + } + + + } + } + } + } + + //获取BUFF对应的OBJ编号 + function GETBUFFOBJINDEX(num) { + switch (num) { + case 0: + return 537170; + case 1: + return 537190; + case 2: + return 537210; + case 4: + return 537270; + case 6: + return 537300; + case 8: + return 537240; + case 10: + return 537330; + case 11: + return 537360; + case 12: + return 537370; + } + } + + + //卢克BUFF obj 机制 + function MachineLukeBuffPassObject(obj) { + obj = sq_GetCNRDObjectToSQRCharacter(obj); + local stage = sq_GetGlobaludpModuleStage(); + local dungeon = sq_GetDungeonByStage(stage); + local dungeonIndex = sq_GetDuegonIndex(dungeon); + local MapIndex = sq_GetMapIndex(stage); + if (MapIndex != -1) { + if (!MapVar || MapVar != MapIndex) { + //同步地图暂存器 + MapVar = MapIndex; + //诞生之圣所 + if (dungeonIndex == 15154 || dungeonIndex == 15155 || dungeonIndex == 15156) { + local objindex = GETBUFFOBJINDEX(DanShengBuffObject[0]); + obj.sq_SendCreatePassiveObjectPacket(objindex, 0, 120, 1, 0); + } + //湮灭之圣所 + if (dungeonIndex == 15157 || dungeonIndex == 15158 || dungeonIndex == 15159) { + local objindex = GETBUFFOBJINDEX(YanMieBuffObject[0]); + obj.sq_SendCreatePassiveObjectPacket(objindex, 0, 120, 1, 0); + } + //蔓延之圣所 + if (dungeonIndex == 15160 || dungeonIndex == 15161 || dungeonIndex == 15162) { + local objindex = GETBUFFOBJINDEX(ManYanBuffObject[0]); + obj.sq_SendCreatePassiveObjectPacket(objindex, 0, 120, 1, 0); + } + } + } + + //如果时间容器不存在就启动时间容器 + if (MapTimer == null) { + MapTimer = TimeSTL("LukeMapTimer", 500); + MapTimer.Reset(); + MapTimer.Start(); + } else { + + + local T = MapTimer.Get(); + if (T >= 500) { + MapTimer.Reset(); + MapTimer.Start(); + + //如果在四个祭坛中 + if (dungeonIndex == 15057 || dungeonIndex == 15058 || dungeonIndex == 15059 || dungeonIndex == 15060) { + if (NengYuanKongZhiObject && NengYuanKongZhiObject.rawin("ClearNumber") && NengYuanKongZhiObject.ClearNumber != 0) { + obj.sq_SendCreatePassiveObjectPacket(202303008, 0, 120, 1, 0); + } + } + //如果是在光暗卢克中 + if (dungeonIndex == 15057 || dungeonIndex == 15058) { + if (NengYuanChuCangObject && NengYuanChuCangObject.rawin("ClearNumber") && NengYuanChuCangObject.ClearNumber != 0) { + obj.sq_SendCreatePassiveObjectPacket(202303008, 0, 120, 1, 0); + } + } + + getLukeRaid_QuattuorManusMK2ChangeLayer(obj); + + //遍历对象管理器并执行操作 + local objectManager = obj.getObjectManager(); + if (!objectManager) return; + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < CollisionObjectNumber; i += 1) { + local object = objectManager.getCollisionObject(i); + local ObjectIndex = object.getCollisionObjectIndex(); + if (ObjectIndex == 202303004) { + local LukeBrokePwoerPack = Json_STL("LukeBrokePwoerPack"); + LukeBrokePwoerPack.Put("op", 25600181); + local str = LukeBrokePwoerPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeBrokePwoerPack.Delete(); + } + } + } + } + } + + function Run(obj) { + if (State < 0) return; + + //卢克BUFFObj 机制 + MachineLukeBuffPassObject(obj); + + DrawStartAni(obj, State); + + //如果被人已经通关了那么寻找时间返回城镇 + if (ReturnTwonFlag == 1 && sq_GetCurrentModuleType() == 3 && obj.getState() != 0) { + local LukeFlagBackTown = Json_STL("LukeFlagBackTownJson"); + LukeFlagBackTown.Put("op", 25600167); + local str = LukeFlagBackTown.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeFlagBackTown.Delete(); + ReturnTwonFlag = 0; + } + + //设置鼠标类型事件 + SetMouseTesk(); + //判断自身地图相关事件 + MapEventTest(obj); + + //绘制展开攻坚信息按钮 + DrawMainButton(obj); + //绘制攻坚剩余时间 + if (PageState == 0 && (State == 0 || State == 3)) { + DrawStartAni(obj, State); + DrawTime(obj); + } + + //如果是翻牌奖励阶段 没有打开主窗口 + if (State == 1 || State == 4) { + if (!sq_GetPopupWindowMainCotrol(267)) { + L_NewWindows("Lenheart", 267, 0x65535); + PageState = 1; + } + } + + if (State == 0) { + local CheckLukeCardPower_Button = LukeButtonPro(obj, "aLukeCheckLukeCardPower_Button", 690, 60, "common/luke/raid/luke/luke_game_navigation/luke_game_navigation.ani", 103, 22, 86); + CheckLukeCardPower_Button.SetRectEnble(true, "aLukeCheckLukeCardPower_Buttonr", 690, 60, "common/luke/raid/luke/luke_game_navigation/luke_game_navigation.ani", 87); + CheckLukeCardPower_Button.SetCustomClickEnble(true, "aLukeCheckLukeCardPower_Buttonc", 690, 60, "common/luke/raid/luke/luke_game_navigation/luke_game_navigation.ani", 88); + CheckLukeCardPower_Button.Show(); + if (CheckLukeCardPower_Button.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + L_NewWindows("Lenheart", 267, 0x65535); + PageCardState = true; + } + if (!sq_GetPopupWindowMainCotrol(267)) PageCardState = false; + } + } + + + function Draw(obj) { + + //如果页面被打开 绘制攻坚队攻坚信息 + if (PageState == 1 && (State == 0 || State == 3)) DrawLukePartyInfo(obj); + + //绘制攻坚剩余时间 + if (State == 0 || State == 3) DrawTime(obj); + + if (State == 1 || State == 4) DrawReward(obj, Reward_Timer_Object.Get(), Reward_Object, AllReward_Object, Reward_Info); + + DrawStartAni(obj, State); + + //查看卡牌 + if (PageCardState) { + DrawLukeInfoCard(obj); + return; + } + } +} + + +function LukeDungeonInfoControlFunc(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("LUKEDUNGEONINFOCONTROL") == false) { + local LUKEDUNGEONINFOCONTROLOBJ = LukeDungeonInfoControl_C(); + RootTab.rawset("LUKEDUNGEONINFOCONTROL", LUKEDUNGEONINFOCONTROLOBJ); + } + RootTab["LUKEDUNGEONINFOCONTROL"].Run(obj); +} \ No newline at end of file diff --git a/Plugins/Luke/lukeparty.nut b/Plugins/Luke/lukeparty.nut new file mode 100644 index 0000000..51c7047 --- /dev/null +++ b/Plugins/Luke/lukeparty.nut @@ -0,0 +1,1087 @@ +/* +文件名:lukeparty.nut +路径:Plugins/Luke/lukeparty.nut +创建日期:2023-03-30 13:55 +文件用途:卢克攻坚队伍逻辑 +*/ + + +class LukeTownMainControl_PartyReq_C extends BasicsDrawTool { + X = 57; + Y = 385; + ReqList = null; + + Page = 1; + NowSelect = 0; + + + LeftButtonObject = null; //左按钮 + RightButtonObject = null; //右按钮 + + ClossButtonObj = null; + AllowJoinButtonObj = null; + RejectJoinButtonObj = null; + + function Encode(Table) { + local Size = Table.len(); + local Pos = 0; + local Str = "{"; + foreach(Key, Value in Table) { + ++Pos; + Str += "\""; + Str += Key.tostring(); + Str += "\""; + Str += ":"; + Str += Value; + if (Pos != Size) Str += ","; + } + Str += "}"; + return Str; + } + + function LukePartyReqPack(chunk) { + //print(chunk); + local RootTab = getroottable(); + BasicsDrawTool.InitClass("LukePartyReqJson"); //自动判断清空 + local JsonObj = Json_STL("LukePartyReqJson"); + RootTab.rawset("LukePartyReqJson", JsonObj); + RootTab["LukePartyReqJson"].Parse(chunk, 0, false); + + + local TabBuffer = { + UID = RootTab["LukePartyReqJson"].Get("Charac->UID"), + CID = RootTab["LukePartyReqJson"].Get("Charac->CID"), + CaptainBool = RootTab["LukePartyReqJson"].Get("Charac->CaptainBool"), + PartyCaptain = RootTab["LukePartyReqJson"].Get("Charac->PartyCaptain"), + PlayerSession = RootTab["LukePartyReqJson"].Get("Charac->PlayerSession"), + PartyID = RootTab["LukePartyReqJson"].Get("Charac->PartyID"), + PlayerLevel = RootTab["LukePartyReqJson"].Get("Charac->PlayerLevel"), + PlayerName = RootTab["LukePartyReqJson"].Get("Charac->PlayerName"), + PlayerJob = RootTab["LukePartyReqJson"].Get("Charac->PlayerJob"), + PlayerJobEx = RootTab["LukePartyReqJson"].Get("Charac->PlayerJobEx"), + PlayerGrowTypeJob = RootTab["LukePartyReqJson"].Get("Charac->PlayerGrowTypeJob"), + isPrepare = RootTab["LukePartyReqJson"].Get("Charac->isPrepare"), + UiButton = null, + } + + RootTab["LUKETOWNMAINCONTROLREQ"].ReqList.append(TabBuffer); + } + + constructor() { + ReqList = []; + Pack_Control.rawset(25600104, LukePartyReqPack); + } + + //获取汉字偏移 + function GetOffserFromLen(char, offset) { + return (char.len() * offset) + } + + //绘制申请人具体信息 + function DrawReqPlayerInfo(obj) { + //材料准备情况 + T_DrawStayAni(obj, "common/anton/material.ani", X + 157, Y - 1, ReqList[NowSelect].isPrepare.tointeger(), "安图恩队伍申请材料准备情况" + ReqList[NowSelect].isPrepare); + //头像 + T_DrawStayAni(obj, "common/anton/face/" + ReqList[NowSelect].PlayerJob + "/" + (ReqList[NowSelect].PlayerJobEx % 16) + ".ani", X, Y, 0, "安图恩队伍申请头像编号" + ReqList[NowSelect].PlayerName); + //绘制等级 + L_Code_STL("Lv." + ReqList[NowSelect].PlayerLevel, X + 40, Y + 17, 0xFF29708a, 1); + //绘制名字 + L_Code_STL(ReqList[NowSelect].PlayerName, X + 40, Y - 1, 0xFF29708a, 1); + //绘制职业名 + L_Code_STL(ReqList[NowSelect].PlayerGrowTypeJob, X + 65 + GetOffserFromLen(ReqList[NowSelect].PlayerGrowTypeJob.tostring(), 3), Y + 17, 0xFF29708a, 1); + //绘制信息 + L_Code_STL("", X + 200, Y + 75, 0xFF29708a, 1); + } + + //绘制申请人列表 + function DrawReqPlayerList(obj) { + local Min = 0 + (5 * (Page - 1)); + local Max = 5 * Page; + for (local i = Min; i < ReqList.len() % Max; ++i) { + T_DrawStayAni(obj, "common/anton/new/newbaseui.ani", X - 5, Y + 53 + (19 * i), 1, "安图恩队伍申请列表底框" + i); + //绘制等级 + L_Code_STL("Lv." + ReqList[i].PlayerLevel, X + 3, Y + 56 + (19 * i), 0xFF29708a, 1); + //绘制名字 + L_Code_STL(ReqList[i].PlayerName, X + 57, Y + 56 + (19 * i), 0xFF29708a, 1); + //材料准备情况 + T_DrawStayAni(obj, "common/anton/material.ani", X + 160, Y + 56 + (19 * i), ReqList[i].isPrepare.tointeger(), "安图恩队伍申请材料准备情况" + ReqList[NowSelect].isPrepare); + + ReqList[i].UiButton = LukeButtonPro(obj, "LukePartyReqListSwitchButton" + ReqList[i].PlayerName, X - 5, Y + 53 + (19 * i), "common/anton/new/newnull.ani", 255, 15, 0); + ReqList[i].UiButton.SetRectEnble(true, "LukePartyReqListSwitchButtonr" + ReqList[i].PlayerName, X - 5, Y + 53 + (19 * i), "common/anton/new/newbaseui.ani", 3); + ReqList[i].UiButton.Show(); + + if (ReqList[i].UiButton.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + NowSelect = i; + } + } + T_DrawStayAni(obj, "common/anton/new/newbaseui.ani", X - 5, Y + 53 + (19 * NowSelect), 2, "安图恩队伍申请列表界面当前选中"); + } + + //绘制申请人页面控制 + function DrawReqPlayerListPageConctrl(obj) { + //绘制申请人页面数量 + local ListMaxPage = (ReqList.len() / 5).tointeger() + 1; + L_Code_STL(Page.tostring() + " / " + ListMaxPage.tostring(), X + 21, Y + 155, 0xFFFFFFFF, 1); + + //如果申请人列表不止1页 + if (ListMaxPage > 1) { + //左按钮 + { + if (LeftButtonObject == null) { + LeftButtonObject = LukeButtonPro(obj, "LukePartyReqListLeftButton", X - 3, Y + 154, "common/anton/new/newbasebutton.ani", 15, 13, 0); + LeftButtonObject.SetRectEnble(true, "LukePartyReqListLeftButtonr", X - 3, Y + 154, "common/anton/new/newbasebutton.ani", 1); + LeftButtonObject.SetCustomClickEnble(true, "LukePartyReqListLeftButtonc", X - 3, Y + 155, "common/anton/new/newbasebutton.ani", 2); + } + LeftButtonObject.Show(); + if (LeftButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (Page > 1) --Page; + } + } + + //右按钮 + { + if (RightButtonObject == null) { + RightButtonObject = LukeButtonPro(obj, "LukePartyReqListRightButton", X + 55, Y + 154, "common/anton/new/newbasebutton.ani", 15, 13, 3); + RightButtonObject.SetRectEnble(true, "LukePartyReqListRightButtonr", X + 55, Y + 154, "common/anton/new/newbasebutton.ani", 4); + RightButtonObject.SetCustomClickEnble(true, "LukePartyReqListRightButtonc", X + 55, Y + 155, "common/anton/new/newbasebutton.ani", 5); + } + RightButtonObject.Show(); + if (RightButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (Page < ListMaxPage) ++Page; + } + } + } + } + + //绘制申请人控制按钮 + function DrawReqPlayerConctrlButton(obj, Type) { + if (Type == 0) { + T_DrawStayAni(obj, "common/anton/new/newbasebutton.ani", X + 138, Y + 153, 20, "安图恩队伍申请同意不可用"); + T_DrawStayAni(obj, "common/anton/new/newbasebutton.ani", X + 138 + 43, Y + 153, 24, "安图恩队伍申请拒绝不可用"); + } else { + //同意按钮 + { + if (AllowJoinButtonObj == null) { + AllowJoinButtonObj = LukeButtonPro(obj, "LukeAllowJoinButton", X + 138, Y + 153, "common/anton/new/newbasebutton.ani", 40, 17, 21); + AllowJoinButtonObj.SetRectEnble(true, "LukeAllowJoinButtonr", X + 138, Y + 153, "common/anton/new/newbasebutton.ani", 22); + AllowJoinButtonObj.SetCustomClickEnble(true, "LukeAllowJoinButtonc", X + 138, Y + 153, "common/anton/new/newbasebutton.ani", 23); + } + AllowJoinButtonObj.Show(); + if (AllowJoinButtonObj.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + local TabBuffer = { + UID = ReqList[NowSelect].UID, + CID = ReqList[NowSelect].CID, + CaptainBool = ReqList[NowSelect].CaptainBool, + PartyCaptain = ReqList[NowSelect].PartyCaptain, + PlayerSession = ReqList[NowSelect].PlayerSession, + PartyID = ReqList[NowSelect].PartyID, + PlayerLevel = ReqList[NowSelect].PlayerLevel, + PlayerJob = ReqList[NowSelect].PlayerJob, + PlayerJobEx = ReqList[NowSelect].PlayerJobEx, + IsPrepare = ReqList[NowSelect].isPrepare, + } + + // local LukeJoinPack = Json_STL("LukeJoinPack"); + // local eqstr = Json_STL.Encode(TabBuffer); + // local pstr = "{" + eqstr.slice(1, eqstr.len() - 1) + "}"; + // print(pstr); + // LukeJoinPack.Put("Charac", pstr); + + // LukeJoinPack.Put("op", 25600113); + // local str = LukeJoinPack.GetString(); + // L_sq_SendPackType(130); + // L_sq_SendPackWChar(str); + // L_sq_SendPack(); + // LukeJoinPack.Delete(); + + local TabBufferB = { + Charac = Encode(TabBuffer), + op = 25600113, + } + local ReqStr = Encode(TabBufferB); + print(ReqStr); + + L_sq_SendPackType(130); + L_sq_SendPackWChar(ReqStr); + L_sq_SendPack(); + + ReqList.remove(NowSelect); + } + } + + //拒绝按钮 + { + if (RejectJoinButtonObj == null) { + RejectJoinButtonObj = LukeButtonPro(obj, "LukeRejectJoinButton", X + 138 + 43, Y + 153, "common/anton/new/newbasebutton.ani", 40, 17, 25); + RejectJoinButtonObj.SetRectEnble(true, "LukeRejectJoinButtonr", X + 138 + 43, Y + 153, "common/anton/new/newbasebutton.ani", 26); + RejectJoinButtonObj.SetCustomClickEnble(true, "LukeRejectJoinButtonc", X + 138 + 43, Y + 153, "common/anton/new/newbasebutton.ani", 27); + } + RejectJoinButtonObj.Show(); + if (RejectJoinButtonObj.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + ReqList.remove(NowSelect); + } + } + } + } + + function Show(obj) { + //绘制申请人具体信息 + DrawReqPlayerInfo(obj); + + //绘制申请人列表 + DrawReqPlayerList(obj); + + //绘制申请人页面控制 + DrawReqPlayerListPageConctrl(obj); + + //绘制申请人控制按钮 + DrawReqPlayerConctrlButton(obj, 1); + } + + function Run(obj) { + //如果不是自己的界面打开 + local RootTab = getroottable(); + if(RootTab["LukePartyObj"].State == 0)return; + local ArrSize = ReqList.len(); + if (ArrSize > 0) { + Show(obj); + } else DrawReqPlayerConctrlButton(obj, 0); + } +} + + +function LukeTownMainControl_PartyReq(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("LUKETOWNMAINCONTROLREQ") == false) { + local LUKETOWNMAINCONTROLREQOBJ = LukeTownMainControl_PartyReq_C(); + RootTab.rawset("LUKETOWNMAINCONTROLREQ", LUKETOWNMAINCONTROLREQOBJ); + } +} + + + +class LukeUserControl_C extends BasicsDrawTool { + CaptainControl = null; //攻坚队长主控 + + PartyID = null; //队伍ID + PlayerLevel = null; //玩家等级 + PlayerName = null; //玩家名字 + PlayerJob = null; //玩家基础职业 + PlayerJobEx = null; //玩家转职职业 + PlayerGrowTypeJob = null; //玩家转职职业 + PlayerSession = null; //玩家世界编号 + PartyCaptain = null; //玩家是否小队队长 + CaptainBool = null; //是否攻坚队队长 + Material = null; //是否拥有材料 + CID = null; //玩家CID + + CheakPlayerInfoFunc = null; + + FuncButtonSwitch = false; //功能界面是否打开 + MyName = null; + ButtonObj = null; + X = 0; + Y = 0; + + KickoutPlayerButtonObj = null; //踢出玩家按钮 + CheckPlayerInfoButtonObj = null; //查看信息按钮 + PartyFuncButtonObj = null; //组队按钮 + TradingPlayerButtonObj = null; //交易按钮 + + //获取汉字偏移 + function GetOffserFromLen(char, offset) { + return (char.len() * offset) + } + + constructor(gName, gX, gY, gCaptainControl) { + MyName = gName; + X = gX; + Y = gY; + //print("LukeUserControl_C ClassObject Succes"); + CaptainControl = gCaptainControl; + } + + //设置Player信息 + function SetPlayerInfo(InfoTable) { + PartyID = InfoTable.PartyID; //队伍ID + PlayerLevel = InfoTable.PlayerLevel; //玩家等级 + PlayerName = InfoTable.PlayerName; //玩家名字 + PlayerJob = InfoTable.PlayerJob; //玩家基础职业 + PlayerJobEx = InfoTable.PlayerJobEx; //玩家转职职业 + PlayerGrowTypeJob = InfoTable.PlayerGrowTypeJob; //玩家转职职业 + PlayerSession = InfoTable.PlayerSession; //玩家世界编号 + PartyCaptain = InfoTable.PartyCaptain; //玩家是否小队队长 + CaptainBool = InfoTable.CaptainBool; //是否攻坚队队长 + Material = InfoTable.Material; //是否拥有材料 + CID = InfoTable.CID; //玩家CID + } + + function FuncButtonC(obj, YposOffset, AniIndex) { + local FuncThis = null; + if (FuncThis == null) { + FuncThis = LukeButtonPro(obj, MyName + FuncThis + "Func", LukeTownControl_C.X + X - 110, LukeTownControl_C.Y + Y - 1 + YposOffset, "common/anton/funcbutton.ani", 100, 21, AniIndex); + FuncThis.SetRectEnble(true, MyName + FuncThis + "Func", LukeTownControl_C.X + X - 110, LukeTownControl_C.Y + Y - 1 + YposOffset, "common/anton/funcbutton.ani", AniIndex + 1); + FuncThis.SetCustomClickEnble(true, FuncThis + "FuncSwitchButtonc", LukeTownControl_C.X + X - 110, LukeTownControl_C.Y + Y - 1 + YposOffset, "common/anton/funcbutton.ani", AniIndex + 2); + } + FuncThis.Show(); + return FuncThis; + } + + //绘制功能按键 + function DrawFucButton(obj) { + if (FuncButtonSwitch) //功能函数开关 + { + local Ypos = 0; //初始偏移 + + { //邀请组队 + if (PartyID == 0) { + local CheakPlayer = FuncButtonC(obj, Ypos, 12); + if (CheakPlayer.isLBActive()) { + L_sq_SendPackType(10); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(0); + L_sq_SendPackDWord(1); + L_sq_SendPackWord(0); + L_sq_SendPack(); + } + Ypos += 21; + } + } + + + { //查看信息 + local CheakPlayer = FuncButtonC(obj, Ypos, 0); + if (CheakPlayer.isLBActive()) { + L_sq_SendPackType(8); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(3); + L_sq_SendPack(); + } + Ypos += 21; + } + + { //交易 + local TradingPlayer = FuncButtonC(obj, Ypos, 6); + if (TradingPlayer.isLBActive()) { + L_sq_SendPackType(10); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(1); + L_sq_SendPackDWord(22053); + L_sq_SendPack(); + } + Ypos += 21; + } + + + } + } + + //绘制主Ani + function DrawMainAni(obj) { + if (ButtonObj == null) { + ButtonObj = LukeButtonPro(obj, MyName, LukeTownControl_C.X + X, LukeTownControl_C.Y + Y, "common/anton/user.ani", 329, 17, 0); + ButtonObj.SetRectEnble(true, MyName + "SwitchButtonr", LukeTownControl_C.X + X - 8, LukeTownControl_C.Y + Y - 8, "common/anton/user.ani", 2); + } + ButtonObj.Show(); + + //绘制队伍 + T_DrawStayAni(obj, "common/anton/partytype.ani", LukeTownControl_C.X + X + 6, LukeTownControl_C.Y + Y + 2, PartyID + 1, "安图恩队伍编号" + PartyID, 1.0); + //绘制材料准备情况 + T_DrawStayAni(obj, "common/anton/material.ani", LukeTownControl_C.X + X + 272, LukeTownControl_C.Y + Y + 2, Material.tointeger(), "安图恩材料准备情况" + Material, 1.0); + } + + //绘制头像 + function DrawFaceAni(obj) { + T_DrawStayAni(obj, "common/anton/face/" + PlayerJob + "/" + (PlayerJobEx % 16) + ".ani", X, Y, 0, "安图恩头像编号" + PlayerName); + //如果是攻坚队长主控 + if (CaptainControl && !CaptainBool) { + KickoutPlayerButtonObj = LukeButtonPro(obj, "LukePartyKickoutButton" + PlayerName.tostring(), X - 9, Y - 10, "common/anton/new/newnull.ani", 38, 39, 0); + KickoutPlayerButtonObj.SetRectEnble(true, "LukePartyKickoutButtonr" + PlayerName.tostring(), X - 9, Y - 10, "common/anton/new/newfunc.ani", 0); + KickoutPlayerButtonObj.Show(); + + if (KickoutPlayerButtonObj.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + local LukeKickoutPartyPlayer = Json_STL("LukeKickoutPartyPlayer"); + LukeKickoutPartyPlayer.Put("op", 25600115); + LukeKickoutPartyPlayer.Put("TCID", CID); + local str = LukeKickoutPartyPlayer.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeKickoutPartyPlayer.Delete(); + } + } + } + + //绘制名字 + function DrawPlayerName(obj) { + L_Code_STL(PlayerName.tostring(), X + 40, Y - 1, 0xFF4990aa, 1); + } + + //绘制等级 + function DrawPlayerLevel(obj) { + L_Code_STL("Lv." + PlayerLevel, X + 40, Y + 17, 0xFF29708a, 1); + } + + //绘制职业名字 + function DrawPlayerGrowTypeName(obj) { + L_Code_STL(PlayerGrowTypeJob, X + 65 + GetOffserFromLen(PlayerLevel.tostring(), 3), Y + 17, 0xFF29708a, 1); + } + + //绘制队伍图标 + function DrawPlayerPartyType(obj) { + if (CaptainBool == true) { + T_DrawStayAni(obj, "common/anton/partytype.ani", X + 133, Y - 1, 0, "安图恩队伍编号队长"); + } else T_DrawStayAni(obj, "common/anton/partytype.ani", X + 133, Y - 1, PartyID + 1, "安图恩队伍编号" + PartyID); + } + + //绘制材料准备情况 + function DrawPlayerMaterial(obj) { + T_DrawStayAni(obj, "common/anton/material.ani", X + 157, Y - 1, Material.tointeger(), "安图恩材料准备情况" + Material.tostring()); + } + + //绘制交互功能按钮 + function DrawPlayerFunc(obj) { + //绘制查看信息按钮 + { + if (!CheckPlayerInfoButtonObj) { + CheckPlayerInfoButtonObj = LukeButtonPro(obj, "LukeCheckPlayerInfoButton", X + 153, Y + 12, "common/anton/new/newfunc.ani", 16, 16, 1); + CheckPlayerInfoButtonObj.SetRectEnble(true, "LukeCheckPlayerInfoButtonr", X + 153, Y + 12, "common/anton/new/newfunc.ani", 2); + CheckPlayerInfoButtonObj.SetCustomClickEnble(true, "LukeCheckPlayerInfoButtonr", X + 153, Y + 13, "common/anton/new/newfunc.ani", 2); + } + CheckPlayerInfoButtonObj.Show(); + if (CheckPlayerInfoButtonObj.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + L_sq_SendPackType(8); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(3); + L_sq_SendPack(); + } + } + + //绘制交易按钮 + { + if (!TradingPlayerButtonObj) { + TradingPlayerButtonObj = LukeButtonPro(obj, "LukeTradingPlayerButton", X + 171, Y + 12, "common/anton/new/newfunc.ani", 16, 16, 3); + TradingPlayerButtonObj.SetRectEnble(true, "LukeTradingPlayerButtonr", X + 171, Y + 12, "common/anton/new/newfunc.ani", 4); + TradingPlayerButtonObj.SetCustomClickEnble(true, "LukeTradingPlayerButtonr", X + 171, Y + 13, "common/anton/new/newfunc.ani", 4); + } + TradingPlayerButtonObj.Show(); + if (TradingPlayerButtonObj.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + L_sq_SendPackType(10); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(1); + L_sq_SendPackDWord(22053); + L_sq_SendPack(); + } + } + + //绘制组队按钮 + { + if (!PartyFuncButtonObj) { + PartyFuncButtonObj = LukeButtonPro(obj, "LukePartyFuncButton", X + 189, Y + 12, "common/anton/new/newfunc.ani", 16, 16, 5); + PartyFuncButtonObj.SetRectEnble(true, "LukePartyFuncButtonr", X + 189, Y + 12, "common/anton/new/newfunc.ani", 6); + PartyFuncButtonObj.SetCustomClickEnble(true, "LukePartyFuncButtonr", X + 189, Y + 13, "common/anton/new/newfunc.ani", 6); + } + PartyFuncButtonObj.Show(); + if (PartyFuncButtonObj.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + L_sq_SendPackType(10); + L_sq_SendPackWord(PlayerSession); + L_sq_SendPackByte(0); + L_sq_SendPackDWord(1); + L_sq_SendPackWord(0); + L_sq_SendPack(); + } + } + } + + function Show(obj) { + //绘制头像 + DrawFaceAni(obj); + + //绘制名字 + DrawPlayerName(obj); + + //绘制等级 + DrawPlayerLevel(obj); + + //绘制职业名字 + DrawPlayerGrowTypeName(obj); + + //绘制队伍图标 + DrawPlayerPartyType(obj); + + //绘制材料准备情况 + DrawPlayerMaterial(obj); + + //绘制交互功能按钮 + DrawPlayerFunc(obj); + } + + function Run(obj) { + Show(obj); + } +} + + +class LukeTownControlInfo_C extends BasicsDrawTool { + X = 424; + Y = 28; + UserUiMap = null; //小队成员UI Map + UserInfoMap = null; //小队成员Info Map + MySelfMap = null; //自己 + + CaptainControl = false; //攻坚队长主控 + + function RedLukePlayerInfo(chunk) { + //Sout("收到包: %L", chunk); + local RootTab = getroottable(); + BasicsDrawTool.InitClass("LukeTownUserJson"); //自动判断清空 + local JsonObj = Json_STL("LukeTownUserJsonBuffer"); + RootTab.rawset("LukeTownUserJson", JsonObj); + RootTab["LukeTownUserJson"].Parse(chunk, 0, false); + + //判断是否是攻坚队长主控 + RootTab["LukeTOWNCONTROLINFO"].CaptainControl = RootTab["LukeTownUserJson"].Get("CaptainBool"); + //清空自己的信息 + RootTab["LukeTOWNCONTROLINFO"].MySelfMap = {}; + //写入自己的信息 + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("PartyID", RootTab["LukeTownUserJson"].Get("myself->PartyID")); + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("PartyCaptain", RootTab["LukeTownUserJson"].Get("myself->PartyCaptain")); + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("PlayerGrowTypeJob", RootTab["LukeTownUserJson"].Get("myself->PlayerGrowTypeJob")); + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("PlayerSession", RootTab["LukeTownUserJson"].Get("myself->PlayerSession")); + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("PlayerLevel", RootTab["LukeTownUserJson"].Get("myself->PlayerLevel")); + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("PlayerJob", RootTab["LukeTownUserJson"].Get("myself->PlayerJob")); + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("PlayerName", RootTab["LukeTownUserJson"].Get("myself->PlayerName")); + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("CaptainBool", RootTab["LukeTownUserJson"].Get("myself->CaptainBool")); + RootTab["LukeTOWNCONTROLINFO"].MySelfMap.rawset("isPrepare", RootTab["LukeTownUserJson"].Get("myself->isPrepare")); + + //清空小队成员数组 + RootTab["LukeTOWNCONTROLINFO"].UserInfoMap = []; + //写入小队成员信息 + for (local i = 0; i < 20; i++) { + local gPartyID = RootTab["LukeTownUserJson"].Get("result->" + i + "->PartyID"); //得到队伍ID + if (gPartyID == true || gPartyID == false) break; //如果读不到说明读完了 直接走 + local gPartyCaptain = RootTab["LukeTownUserJson"].Get("result->" + i + "->PartyCaptain"); //得到是否为小队队长 + local gPlayerGrowTypeJob = RootTab["LukeTownUserJson"].Get("result->" + i + "->PlayerGrowTypeJob"); //得到转职职业(String) + local gPlayerSession = RootTab["LukeTownUserJson"].Get("result->" + i + "->PlayerSession"); //得到世界编号 + local gPlayerLevel = RootTab["LukeTownUserJson"].Get("result->" + i + "->PlayerLevel"); //得到等级 + local gPlayerJob = RootTab["LukeTownUserJson"].Get("result->" + i + "->PlayerJob"); //得到基础职业 + local gPlayerJobEx = RootTab["LukeTownUserJson"].Get("result->" + i + "->PlayerJobEx"); //得到基础职业 + local gPlayerName = RootTab["LukeTownUserJson"].Get("result->" + i + "->PlayerName"); //得到玩家名字 + local gCaptainBool = RootTab["LukeTownUserJson"].Get("result->" + i + "->CaptainBool"); //得到是否为攻坚队队长 + local gMaterial = RootTab["LukeTownUserJson"].Get("result->" + i + "->isPrepare"); //得到是否拥有材料 + local gCID = RootTab["LukeTownUserJson"].Get("result->" + i + "->CID"); //得到是否拥有材料 + + local PlayerTab = { + PartyID = gPartyID, + PartyCaptain = gPartyCaptain, + PlayerGrowTypeJob = gPlayerGrowTypeJob, + PlayerSession = gPlayerSession, + PlayerLevel = gPlayerLevel, + PlayerJob = gPlayerJob, + PlayerJobEx = gPlayerJobEx, + PlayerName = gPlayerName, + CaptainBool = gCaptainBool, + Material = gMaterial, + CID = gCID, + } + RootTab["LukeTOWNCONTROLINFO"].UserInfoMap.append(PlayerTab); //PlayerInfoTable丢进数组 + } + + } + + constructor() { + UserUiMap = []; //小队成员UI Map + UserInfoMap = []; //小队成员Info Map + MySelfMap = {}; //自己 + + //print("LukeTownControl_C ClassObject Succes"); + Pack_Control.rawset(25600102, RedLukePlayerInfo); + Pack_Control.rawset(25600112, RedLukePlayerInfo); + UserUiMap.resize(20); + } + + function DrawPartyInfo(obj) { + for (local i = 0; i < UserInfoMap.len(); ++i) { + if (!UserUiMap[i]) UserUiMap[i] = LukeUserControl_C("LukeUserPlayer" + i, 308 + ((i % 2) * 223), 97 + ((i / 2) * 42), CaptainControl); //如果用户Map没有被实例化则实例化他 + + UserUiMap[i].SetPlayerInfo(UserInfoMap[i]); + + UserUiMap[i].Run(obj); + } + } + + + + function Show(obj) { + //如果有攻坚队的具体信息才绘制 + if (UserInfoMap.len() > 0) { + DrawPartyInfo(obj); + } + } + + function Run(obj) { + Show(obj); + } +} + + + +function LukeTownMainControl_PartyInfo(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("LukeTOWNCONTROLINFO") == false) { + local LukeTOWNCONTROLINFOOBJ = LukeTownControlInfo_C(); + RootTab.rawset("LukeTOWNCONTROLINFO", LukeTOWNCONTROLINFOOBJ); + } + +} + +class LukePartyC extends BasicsDrawTool { + + X = 37; + Y = 38; + + State = 0; //攻坚队对象状态 0未打开 1打开界面 + + + ListUiMap = null; //小队成员UI Map + ListInfoMap = null; //小队成员Info Map + + ListCount = null; + NowSelectTeam = null; + NowSelectTeamFunc = null; //当前选择队伍功能 + MyTeamId = -1; //我的队伍Id + MyCaptainControl = 0; //我是否为攻坚队长 + + ReloadingButtonObject = null; //刷新按钮 + MyTeamButtonObject = null; //我的队伍按钮 + LeftButtonObject = null; //左按钮 + RightButtonObject = null; //右按钮 + PartyReqButtonObject = null; //申请加入攻坚队伍按钮 + PartyExitButtonObject = null; //退出攻坚队伍按钮 + PartyStartButtonObject = null; //开始攻坚按钮 + Page = 1; + + + //创建队伍和加入队伍事件 + function SendPackEvent_JoinTeam_and_CreatTeam(Type) { + local JoinTeam_and_CreatTeam = Json_STL("JoinTeam_and_CreatTeam"); + JoinTeam_and_CreatTeam.Put("op", 25600125); + local str = JoinTeam_and_CreatTeam.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + JoinTeam_and_CreatTeam.Delete(); + } + + //退出队伍事件 + function SendPackEvent_ExitTeam(Type) { + local ExitTeam = Json_STL("ExitTeam"); + ExitTeam.Put("op", 25600129); + local str = ExitTeam.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + ExitTeam.Delete(); + } + + //退出队伍请求 + function PartyKickPlayer(chunk) { + print(chunk); + L_sq_SendPackType(13); + L_sq_SendPack(); + } + + //委任队长事件 + function PartyGiveM(chunk) { + local PartyGiveM = Json_STL("PartyGiveM"); + PartyGiveM.Put("op", 25600123); + local str = PartyGiveM.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + PartyGiveM.Delete(); + } + + constructor() { + + ListUiMap = []; + ListInfoMap = []; + ListUiMap.resize(10); + + Pack_Control.rawset(25600108, RedLukeListInfo); + Pack_Control.rawset(25600110, RedLukeListInfo); + + //安图恩创建队伍和加入队伍事件 + SendPackTypeTable.rawset(11, SendPackEvent_JoinTeam_and_CreatTeam); + SendPackTypeTable.rawset(12, SendPackEvent_JoinTeam_and_CreatTeam); + //安图恩退出队伍事件 + SendPackTypeTable.rawset(13, SendPackEvent_ExitTeam); + //委任队长事件 + SendPackTypeTable.rawset(124, PartyGiveM); + //玩家自己退出队伍 + Pack_Control.rawset(1030, PartyKickPlayer); + } + + + //收包区 + function RedLukeListInfo(chunk) { + //Sout("\n\n收到包数据: %L", chunk); + local RootTab = getroottable(); + BasicsDrawTool.InitClass("LukeTownListJson"); //自动判断清空 + local JsonObj = Json_STL("LukeTownListJsonBuffer"); + RootTab.rawset("LukeTownListJson", JsonObj); + RootTab["LukeTownListJson"].Parse(chunk, 0, false); + + //清空自己的信息 + RootTab["LukePartyObj"].ListInfoMap = []; + + //获取自己的攻坚队ID + local gMyTeamId = RootTab["LukeTownListJson"].Get("MyTeamId"); + if (gMyTeamId) RootTab["LukePartyObj"].MyTeamId = gMyTeamId; + + //获取自己是否为攻坚队队长 + local gMyCaptain = RootTab["LukeTownListJson"].Get("MyCaptain"); + if (gMyCaptain) RootTab["LukePartyObj"].MyCaptainControl = gMyCaptain; + + RootTab["LukePartyObj"].ListCount = RootTab["LukeTownListJson"].Get("ListCount").tointeger(); + //写入小队成员信息 + for (local i = 0; i < RootTab["LukePartyObj"].ListCount; i++) { + local gTeamId = RootTab["LukeTownListJson"].Get("result->" + i + "->TeamId"); //得到攻坚队伍ID + if (gTeamId == true || gTeamId == false) break; //如果读不到说明读完了 直接走 + local gTeamName = RootTab["LukeTownListJson"].Get("result->" + i + "->TeamName"); //得到攻坚队名称 + local gState = RootTab["LukeTownListJson"].Get("result->" + i + "->State"); //得到队伍状态 + local gTeamPlayerCount = RootTab["LukeTownListJson"].Get("result->" + i + "->TeamPlayerCount"); //得到队伍人数 + + local ListTab = { + TeamId = gTeamId, + TeamName = gTeamName, + State = gState, + TeamPlayerCount = gTeamPlayerCount, + } + RootTab["LukePartyObj"].ListInfoMap.append(ListTab); //ListTabInfoTable丢进数组 + } + } + + //收包区 + + + //发包区 + //获取卢克攻坚队列表信息 //TODO op未更改 + function GetLukeTeamList() { + local GetLukeTeamList = Json_STL("GetLukeTeamList"); + GetLukeTeamList.Put("op", 25600107); + GetLukeTeamList.Put("Page", 1); + local str = GetLukeTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetLukeTeamList.Delete(); + } + + //发包区 + + + + function DrawMain(obj) { + //绘制主界面 + { + T_DrawStayAni(obj, "common/Anton/new/newbaseui.ani", X, Y, 0, "安图恩队伍列表界面"); + } + } + + //绘制攻坚队伍页面控制 + function DrawPartyListPageConctrl(obj) { + if (!ListCount) return; + //绘制攻坚队伍数量 + local ListMaxPage = (ListCount / 12).tointeger() + 1; + L_Code_STL(Page.tostring() + " / " + ListMaxPage.tostring(), X + 41, Y + 293, 0xFFFFFFFF, 1); + //如果不止1页 + if (ListMaxPage > 1) { + //左按钮 + { + if (LeftButtonObject == null) { + LeftButtonObject = LukeButtonPro(obj, "LukePartyListLeftButton", X + 17, Y + 292, "common/Anton/new/newbasebutton.ani", 15, 13, 0); + LeftButtonObject.SetRectEnble(true, "LukePartyListLeftButtonr", X + 17, Y + 292, "common/Anton/new/newbasebutton.ani", 1); + LeftButtonObject.SetCustomClickEnble(true, "LukePartyListLeftButtonc", X + 17, Y + 293, "common/Anton/new/newbasebutton.ani", 2); + } + LeftButtonObject.Show(); + if (LeftButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (Page > 1) --Page; + local GetLukeTeamList = Json_STL("GetLukeTeamList"); + GetLukeTeamList.Put("op", 1007); + GetLukeTeamList.Put("Page", Page); + local str = GetLukeTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetLukeTeamList.Delete(); + } + } + + //右按钮 + { + if (RightButtonObject == null) { + RightButtonObject = LukeButtonPro(obj, "LukePartyListRightButton", X + 75, Y + 292, "common/Anton/new/newbasebutton.ani", 15, 13, 3); + RightButtonObject.SetRectEnble(true, "LukePartyListRightButtonr", X + 75, Y + 292, "common/Anton/new/newbasebutton.ani", 4); + RightButtonObject.SetCustomClickEnble(true, "LukePartyListRightButtonc", X + 75, Y + 293, "common/Anton/new/newbasebutton.ani", 5); + } + RightButtonObject.Show(); + if (RightButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + if (Page < ListMaxPage) ++Page; + local GetLukeTeamList = Json_STL("GetLukeTeamList"); + GetLukeTeamList.Put("op", 1007); + GetLukeTeamList.Put("Page", Page); + local str = GetLukeTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetLukeTeamList.Delete(); + } + } + } + } + + //绘制攻坚队列表信息 + function DrawPartyListInfo(obj) { + //已经开始的 0xFF676665 灰色 + //可以申请的 0xFFddddea 珍珠白 + //可以申请的 0xFF4990aa 定义黄 + if (!ListCount) return; + local Min = 0 + (12 * (Page - 1)); + local Max = 12 * Page; + for (local i = Min; i < ListCount % Max; ++i) { + T_DrawStayAni(obj, "common/Anton/new/newbaseui.ani", X + 15, Y + 61 + (19 * i), 1, "安图恩队伍列表底框" + i); + + //阶段 + local stage = 5; + if (ListInfoMap[i].State >= 1 && ListInfoMap[i].State <= 3) stage = 6; + if (ListInfoMap[i].State >= 4 && ListInfoMap[i].State <= 5) stage = 7; + if (ListInfoMap[i].State >= 6) stage = 8; + + T_DrawStayAni(obj, "common/Anton/new/newbaseui.ani", X + 18, Y + 62 + (19 * i), stage, "安图恩队伍列表底框" + stage); + + local Color = null; + if (ListInfoMap[i].State != 3) { + Color = 0xFF4990aa; + } else { + Color = 0xFF676665; + } + + //绘制攻坚队名称 + local TeamNameStr = ListInfoMap[i].TeamName; + + L_Code_STL(TeamNameStr, X + 60, Y + 64 + (19 * i), Color, 1); + + //绘制攻坚队人数 + local PlayerCountStr = ListInfoMap[i].TeamPlayerCount + "/20"; + L_Code_STL(PlayerCountStr, X + 205, Y + 64 + (19 * i), Color, 1); + + ListUiMap[i] = LukeButtonPro(obj, "LukePartyListSwitchButton" + TeamNameStr, X + 15, Y + 61 + (19 * i), "common/Anton/new/newnull.ani", 255, 15, 0); + ListUiMap[i].SetRectEnble(true, "LukePartyListSwitchButtonr" + TeamNameStr, X + 15, Y + 61 + (19 * i), "common/Anton/new/newbaseui.ani", 3); + ListUiMap[i].Show(); + + if (ListUiMap[i].isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + NowSelectTeam = i; + + local GetLukeTeamInfo = Json_STL("GetLukeTeamInfo"); + GetLukeTeamInfo.Put("op", 25600111); + GetLukeTeamInfo.Put("TeamId", ListInfoMap[i].TeamId); + local str = GetLukeTeamInfo.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetLukeTeamInfo.Delete(); + } + + //当前选择队伍不为空 并且等于当前的i + if (NowSelectTeam != null && NowSelectTeam == i) { + local Ani = T_DrawStayAni(obj, "common/Anton/new/newbaseui.ani", X + 15, Y + 61 + (19 * i), 2, "安图恩队伍列表界面当前选中"); + } + } + } + + //绘制攻坚队列表功能按钮 + function DrawPartyListFuncButton(obj) { + //刷新攻坚队 + { + if (ReloadingButtonObject == null) { + ReloadingButtonObject = LukeButtonPro(obj, "LukePartyListReloadingButton", X + 96, Y + 291, "common/Anton/new/newbasebutton.ani", 46, 17, 7); + ReloadingButtonObject.SetRectEnble(true, "LukePartyListReloadingButtonr", X + 96, Y + 291, "common/Anton/new/newbasebutton.ani", 8); + ReloadingButtonObject.SetCustomClickEnble(true, "LukePartyListReloadingButtonc", X + 96, Y + 291, "common/Anton/new/newbasebutton.ani", 9); + } + ReloadingButtonObject.Show(); + if (ReloadingButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + local GetLukeTeamList = Json_STL("GetLukeTeamList"); + GetLukeTeamList.Put("op", 25600107); + GetLukeTeamList.Put("Page", Page); + local str = GetLukeTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetLukeTeamList.Delete(); + } + } + + //我的攻坚队 + { + if (MyTeamId == -1) { + T_DrawStayAni(obj, "common/Anton/new/newbasebutton.ani", X + 96 + 48 + 3, Y + 291, 10, "安图恩队伍列表我的攻坚队不可用"); + } else { + if (MyTeamButtonObject == null) { + MyTeamButtonObject = LukeButtonPro(obj, "LukePartyListMyTeamButton", X + 96 + 48 + 3, Y + 291, "common/Anton/new/newbasebutton.ani", 97, 23, 11); + MyTeamButtonObject.SetRectEnble(true, "LukePartyListMyTeamButtonr", X + 96 + 48 + 3, Y + 291, "common/Anton/new/newbasebutton.ani", 12); + MyTeamButtonObject.SetCustomClickEnble(true, "LukePartyListMyTeamButtonc", X + 96 + 48 + 3, Y + 291, "common/Anton/new/newbasebutton.ani", 13); + } + MyTeamButtonObject.Show(); + if (MyTeamButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON1"); + local GetLukeTeamList = Json_STL("GetLukeTeamList"); + GetLukeTeamList.Put("op", 1011); + local str = GetLukeTeamList.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetLukeTeamList.Delete(); + NowSelectTeam = -1; + } + } + } + } + + //绘制攻坚队请求按钮 + function DrawPartyReqButton(obj) { + if (MyTeamId == -1) { + //申请加入 + { + if (PartyReqButtonObject == null) { + PartyReqButtonObject = LukeButtonPro(obj, "LukePartyListReloadingButton", X + 636, Y + 500, "common/Anton/new/newbasebutton.ani", 70, 17, 14); + PartyReqButtonObject.SetRectEnble(true, "LukePartyListReloadingButtonr", X + 636, Y + 500, "common/Anton/new/newbasebutton.ani", 15); + PartyReqButtonObject.SetCustomClickEnble(true, "LukePartyListReloadingButtonc", X + 636, Y + 500, "common/Anton/new/newbasebutton.ani", 16); + } + PartyReqButtonObject.Show(); + if (PartyReqButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON4"); + local LukeJoinPartyReq = Json_STL("LukeJoinPartyReq"); + LukeJoinPartyReq.Put("op", 25600103); + LukeJoinPartyReq.Put("TeamId", ListInfoMap[NowSelectTeam].TeamId); + local str = LukeJoinPartyReq.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeJoinPartyReq.Delete(); + } + } + } else { + //退出攻坚队 + { + if (PartyExitButtonObject == null) { + PartyExitButtonObject = LukeButtonPro(obj, "LukePartyListReloadingButton", X + 636, Y + 500, "common/Anton/new/newbasebutton.ani", 70, 17, 17); + PartyExitButtonObject.SetRectEnble(true, "LukePartyListReloadingButtonr", X + 636, Y + 500, "common/Anton/new/newbasebutton.ani", 18); + PartyExitButtonObject.SetCustomClickEnble(true, "LukePartyListReloadingButtonc", X + 636, Y + 500, "common/Anton/new/newbasebutton.ani", 19); + } + PartyExitButtonObject.Show(); + if (PartyExitButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON4"); + local LukeExitPartyReq = Json_STL("LukeExitPartyReq"); + LukeExitPartyReq.Put("op", 25600105); + local str = LukeExitPartyReq.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukeExitPartyReq.Delete(); + NowSelectTeam = null; //关闭队伍详细信息显示 + MyTeamId = -1; //清空自己的队伍信息 + + //清除正在攻坚的信息 + local RootTab = getroottable(); + RootTab.rawdelete("LUKEDUNGEONINFOCONTROL"); + } + } + //开始攻坚 + { + local RootTab = getroottable(); + //如果自己是攻坚队队长 并且 攻坚状态为未开启 + if (MyCaptainControl == 1 && RootTab.rawin("LUKEDUNGEONINFOCONTROL") && (RootTab["LUKEDUNGEONINFOCONTROL"].State == -1 || RootTab["LUKEDUNGEONINFOCONTROL"].State == 2)) { + if (PartyStartButtonObject == null) { + PartyStartButtonObject = LukeButtonPro(obj, "LukePartyListReloadingButton", X + 536, Y + 500, "common/Anton/new/newbasebutton.ani", 70, 17, 29); + PartyStartButtonObject.SetRectEnble(true, "LukePartyListReloadingButtonr", X + 536, Y + 500, "common/Anton/new/newbasebutton.ani", 30); + PartyStartButtonObject.SetCustomClickEnble(true, "LukePartyListReloadingButtonc", X + 536, Y + 500, "common/Anton/new/newbasebutton.ani", 31); + } + PartyStartButtonObject.Show(); + if (PartyStartButtonObject.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON4"); + local LukePartyStart = Json_STL("LukePartyStart"); + local op = 25600141; + //默认一阶段 如果是二阶段则发1047包二阶段开始 + if (RootTab["LUKEDUNGEONINFOCONTROL"].State == 2) op = 25600147; + LukePartyStart.Put("op", op); + local str = LukePartyStart.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + LukePartyStart.Delete(); + } + } + } + } + } + + + function Draw(obj) { + if (State == 1) { + //绘制主界面 + DrawMain(obj); + //绘制攻坚队伍页面控制 + DrawPartyListPageConctrl(obj); + //绘制攻坚队列表信息 + DrawPartyListInfo(obj); + //绘制攻坚队列表功能按钮 + DrawPartyListFuncButton(obj); + //绘制攻坚队请求按钮 + DrawPartyReqButton(obj); + } + } + + function Run(obj) { + + if (State == 0) { + local ButtonObject = ButtonPro(obj, "RankSystemMainSwitchButton", 15, 300, "common/training/main/maintab.ani", 39, 35); + ButtonObject.SetRectEnble(true, "RankSystemMainSwitchButtonr", 15, 300, "common/training/main/maintab.ani", 0); + ButtonObject.SetCustomClickEnble(true, "RankSystemMainSwitchButtonc", 15, 300, "common/training/main/maintab.ani", 0); + ButtonObject.Show(); + //按下打开按钮 + if (ButtonObject.isLBActive()) { + State = 1; + L_NewWindows("Lenheart", 267, 0x65535); + GetLukeTeamList(); + } + } else if (State == 1) { + if (!sq_GetPopupWindowMainCotrol(267)) { + State = 0; + } + } + } +} + +function LukeParty(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("LukePartyObj") == false) { + local Buffer = LukePartyC(); + RootTab.rawset("LukePartyObj", Buffer); + } else { + RootTab["LukePartyObj"].Run(obj); + } +} \ No newline at end of file diff --git a/Plugins/MarrySystem/MarrySystem.nut b/Plugins/MarrySystem/MarrySystem.nut new file mode 100644 index 0000000..45820f7 --- /dev/null +++ b/Plugins/MarrySystem/MarrySystem.nut @@ -0,0 +1,512 @@ +/* +文件名:MarrySystem.nut +路径:Plugins/MarrySystem/MarrySystem.nut +创建日期:2023-06-16 10:29 +文件用途: +*/ + +class MarrySystemWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + + + +class MarrySystemC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 235; + Y = 52; + + Avatar = null; + LevelInfo = null; + NameInfo = null; + + TabName = [ + "力量 +", + "体力 +", + "智力 +", + "精神 +", + "独立攻击力 +", + "物理攻击力 +", + "魔法攻击力 +", + "物理防御 +", + "魔法防御 +", + "移动速度 +", + "攻击速度 +", + "释放速度 +", + "物理暴击 +", + "魔法暴击 +", + "命中率 +", + "光属性强化 +", + "暗属性强化 +", + "水属性强化 +", + "火属性强化 +", + "全属性强化 +" + ] + PrintAbTab = null; + AbTab = null; + + DgnAddBuff = false; + + + + function PleaseMarryMe(gname) { + local T = { + op = 20019101, + name = gname + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + function PleaseDivorceMe(gname) { + local T = { + op = 20019103, + name = gname + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + function CheckOtherPlayerMarryInfo(gname) { + local T = { + op = 20019011, + name = gname + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + function CheckPlayerMarryInfo() { + local T = { + op = 20019009 + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + function CheckPlayerMarryInfoCallBack(Chunk) { + local Buffer = Json_STL("CheckPlayerMarryInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("MarrySystemCObj")) { + local Tobj = RootTab["MarrySystemCObj"]; + + + Tobj.Avatar = { + Player1 = Buffer.Get("job"), + Player2 = Buffer.Get("partnerJob"), + } + + Tobj.LevelInfo = { + level = Buffer.Get("lv"), + nexp = Buffer.Get("experience"), + mexp = Buffer.Get("experienceMax"), + } + + Tobj.NameInfo = { + Player1 = Buffer.Get("name"), + Player2 = Buffer.Get("partnerName"), + } + + Tobj.PrintAbTab = null; + Tobj.PrintAbTab = []; + Tobj.AbTab = null; + Tobj.AbTab = []; + for (local i = 0; i < 20; i++) { + local buf = Buffer.Get("attribute->" + i); + if (!buf && i == 0) break; + Tobj.PrintAbTab.append(buf); + Tobj.AbTab.append(buf); + } + + local EventTab = null; + if (RootTab.rawin("YosinPlayerEachSystem")) { + EventTab = RootTab["YosinPlayerEachSystem"]; + local pos1 = null; + local pos2 = null; + foreach(pos, value in EventTab) { + if (value.Name == "邀请结婚") { + pos1 = pos; + } + if (value.Name == "我要离婚") { + pos2 = pos; + } + } + if (pos1) EventTab.remove(pos1); + if (pos2) EventTab.remove(pos2); + if (Tobj.PrintAbTab == null) PlayerEachIcon("邀请结婚", Tobj.PleaseMarryMe); + else PlayerEachIcon("我要离婚", Tobj.PleaseDivorceMe); + } + if (EventTab) { + RootTab.rawdelete("YosinPlayerEachSystem"); + RootTab.rawset("YosinPlayerEachSystem", EventTab); + } + } + } + + function CheckOtherPlayerMarryInfoCallBack(Chunk) { + local Buffer = Json_STL("CheckOtherPlayerMarryInfoCallBackBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("MarrySystemCObj")) { + local Tobj = RootTab["MarrySystemCObj"]; + Tobj.MainState = true; + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + // BandObject.OpenClassCallBack(); + + Tobj.Avatar = null; + if (Buffer.Get("job")) { + Tobj.Avatar = { + Player1 = Buffer.Get("job"), + Player2 = Buffer.Get("partnerJob"), + } + } + + Tobj.LevelInfo = null; + if (Buffer.Get("lv")) { + Tobj.LevelInfo = { + level = Buffer.Get("lv"), + nexp = Buffer.Get("experience"), + mexp = Buffer.Get("experienceMax"), + } + } + + Tobj.NameInfo = null; + if (Buffer.Get("name")) { + Tobj.NameInfo = { + Player1 = Buffer.Get("name"), + Player2 = Buffer.Get("partnerName"), + } + } + + + Tobj.PrintAbTab = null; + Tobj.PrintAbTab = []; + for (local i = 0; i < 20; i++) { + local buf = Buffer.Get("attribute->" + i); + if (!buf && i == 0) break; + Tobj.PrintAbTab.append(buf); + } + } + } + + function DivorceCallBack(Chunk) { + local RootTab = getroottable(); + if (RootTab.rawin("MarrySystemCObj")) { + RootTab.rawdelete("MarrySystemCObj"); + } + } + + constructor() { + + + Pack_Control.rawset(20019010, CheckPlayerMarryInfoCallBack); + Pack_Control.rawset(20019012, CheckOtherPlayerMarryInfoCallBack); + Pack_Control.rawset(20019106, DivorceCallBack); + + + CheckPlayerMarryInfo(); + } + + function T_DrawDynamicAni(obj, aniFileName, x, y, aniname) { + local ani = obj.getVar().GetAnimationMap(aniname, aniFileName); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, x, y, true); + return ani; + } + + function T_DrawDynamicAni_Fx(obj, aniFileName, x, y, aniname) { + local ani = obj.getVar().GetAnimationMap(aniname, aniFileName); + ani.setImageRateFromOriginal(-1.0, 1.0); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, x, y, true); + return ani; + } + + //绘制等级相关信息 + function DrawLevelInfo(obj) { + if (Avatar && LevelInfo) { + local PosArr = [ + [40, 75], + [40, 75], + [54, 24], + [60, 86], + [40, 45], + [50, 50], + [50, 50], + [50, 45], + [55, 70], + [40, 75], + [60, 86], + ]; + //绘制职业 + // for (local i = 0; i < 10; i++) { + // local SSS = Avatar.Player1 + i; + // T_DrawDynamicAni(obj, "common/marrysystem/avatar/" + SSS + ".ani", X + PosArr[SSS][0], Y + PosArr[SSS][1], "MarrySystem_player" + SSS); + // } + T_DrawDynamicAni(obj, "common/marrysystem/avatar/" + Avatar.Player1 + ".ani", X + PosArr[Avatar.Player1][0], Y + PosArr[Avatar.Player1][1], "MarrySystem_player1" + Avatar.Player1); + T_DrawDynamicAni_Fx(obj, "common/marrysystem/avatar/" + Avatar.Player2 + ".ani", X + 215 + PosArr[Avatar.Player2][0], Y + PosArr[Avatar.Player2][1], "MarrySystem_player2" + Avatar.Player2); + + //婚姻名字 + L_sq_DrawCode(NameInfo.Player1, X + 68, Y + 190, sq_RGBA(230, 200, 155, 250), 1, 1); + L_sq_DrawCode(NameInfo.Player2, X + 68 + 158, Y + 190, sq_RGBA(230, 200, 155, 250), 1, 1); + + //婚戒等级 + T_DrawStayAni(obj, "common/marrysystem/coupleinfopopupui.ani", X + 14, Y + 221, 1 + LevelInfo.level, "MarrySystem_LEVEL_c"); + + //婚姻等级 + L_sq_DrawCode("Lv . " + LevelInfo.level, X + 80, Y + 236, sq_RGBA(230, 200, 155, 250), 1, 1); + + //婚姻经验 + L_sq_DrawCode(LevelInfo.nexp + " / " + LevelInfo.mexp, X + 208, Y + 220, sq_RGBA(230, 200, 155, 250), 1, 1); + //进度条 + T_DrawStayAni(obj, "common/marrysystem/main.ani", X + 144, Y + 228, 1, "MarrySystem_Now_Main"); + setClip(X + 144, Y + 228, X + 144 + ((LevelInfo.nexp.tofloat() / LevelInfo.mexp.tofloat()) * 174.0).tointeger(), Y + 228 + 23); //开始裁切 + T_DrawStayAni(obj, "common/marrysystem/main.ani", X + 144, Y + 228, 2, "MarrySystem_Max_Main"); + releaseClip(); //裁切结束 + } + } + + //附加属性 + function AddAb(obj) { + if (sq_GetCurrentModuleType() == 3) { + if (!AbTab) return; + + if (DgnAddBuff == false) { + DgnAddBuff = true; + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/marry/marry.nut", true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + + local change_appendage = appendage.sq_getChangeStatus("Yosin_MarryDgnBuff"); + if (!change_appendage) { + change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, + CHANGE_STATUS_TYPE_COOLTIME_DECLINE, + false, 0, 114515); + } + if (change_appendage) { + change_appendage.clearParameter(); + //print(WearSlotM.Item.TabName[0]); + + foreach(Key, Value in AbTab) { + if (Key == 0) change_appendage.addParameter(0, false, Value.tofloat()); + else if (Key == 1) change_appendage.addParameter(3, false, Value.tofloat()); + else if (Key == 2) change_appendage.addParameter(2, false, Value.tofloat()); + else if (Key == 3) change_appendage.addParameter(1, false, Value.tofloat()); + else if (Key == 4) change_appendage.addParameter(53, false, Value.tofloat()); + else if (Key == 5) change_appendage.addParameter(4, false, Value.tofloat()); + else if (Key == 6) change_appendage.addParameter(31, false, Value.tofloat()); + else if (Key == 7) change_appendage.addParameter(5, false, Value.tofloat()); + else if (Key == 8) change_appendage.addParameter(32, false, Value.tofloat()); + else if (Key == 9) change_appendage.addParameter(11, false, Value.tofloat()); + else if (Key == 10) change_appendage.addParameter(10, false, Value.tofloat()); + else if (Key == 11) change_appendage.addParameter(12, false, Value.tofloat()); + else if (Key == 12) change_appendage.addParameter(15, false, Value.tofloat() / 10.0); + else if (Key == 13) change_appendage.addParameter(16, false, Value.tofloat() / 10.0); + else if (Key == 14) change_appendage.addParameter(33, false, 0 - (Value.tofloat() / 10.0)); + + else if (Key == 15) change_appendage.addParameter(45, false, Value.tofloat()); + else if (Key == 16) change_appendage.addParameter(44, false, Value.tofloat()); + else if (Key == 17) change_appendage.addParameter(43, false, Value.tofloat()); + else if (Key == 18) change_appendage.addParameter(42, false, Value.tofloat()); + else if (Key == 19) change_appendage.addParameter(46, false, Value.tofloat()); + } + } + } + } else { + DgnAddBuff = false; + } + } + + //绘制属性 + function DrawAttribute(obj) { + if (PrintAbTab) { + for (local i = 0; i < 20; i++) { + L_sq_DrawCode(TabName[i] + " " + PrintAbTab[i], X + 20 + ((i / 10) * 170), Y + 264 + ((i % 10) * 17), sq_RGBA(255, 255, 255, 250), 1, 1); + } + } + } + + //绘制主界面 + function DrawMain(obj) { + //窗口 + T_DrawStayAni(obj, "common/marrysystem/main.ani", X, Y, 0, "MarrySystemMain"); + + //绘制等级相关信息 + if (LevelInfo) DrawLevelInfo(obj); + //绘制属性相关信息 + DrawAttribute(obj); + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + CheckPlayerMarryInfo(); + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = MarrySystemWindow(X, Y, 329, 404, 28); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + //附加属性 + AddAb(obj); + if (KeyPressNB.isKeyPress(48, "MarrySystemCloseKey")) { + MainState = false; + } + + if(obj.isDead()){ + DgnAddBuff = false; + } + } +} + + +function MarrySystem(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("MarrySystemCObj")) { + local Cobj = MarrySystemC(); + RootTab.rawset("MarrySystemCObj", Cobj); + EventIcon("婚姻殿堂", 31, 31, Cobj); + PlayerEachIcon("查看婚姻信息", Cobj.CheckOtherPlayerMarryInfo); + // PlayerEachIcon("我要离婚", PleaseDivorceMe); + if (RootTab.rawin("YosinPlayerEachSystem")) { + local EventTab = RootTab["YosinPlayerEachSystem"]; + local pos1 = null; + local pos2 = null; + foreach(pos, value in EventTab) { + if (value.Name == "邀请结婚") { + pos1 = pos; + } + if (value.Name == "我要离婚") { + pos2 = pos; + } + } + if (pos1) EventTab.remove(pos1); + if (pos2) EventTab.remove(pos2); + if (Cobj.PrintAbTab == null) PlayerEachIcon("邀请结婚", Cobj.PleaseMarryMe); + else PlayerEachIcon("我要离婚", Cobj.PleaseDivorceMe); + } + } else { + RootTab["MarrySystemCObj"].Proc(obj); + RootTab["MarrySystemCObj"].Draw(obj); + } +} \ No newline at end of file diff --git a/Plugins/Medal/Medal.nut b/Plugins/Medal/Medal.nut new file mode 100644 index 0000000..28f1bca --- /dev/null +++ b/Plugins/Medal/Medal.nut @@ -0,0 +1,1253 @@ +/* +文件名:Medal.nut +路径:Plugins/Medal/Medal.nut +创建日期:2022-12-18 05:53 +文件用途:勋章系统文件 +*/ + +//TabTextButtonPro按钮类 +class TabTextButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + SwitchState = false; //复选框是否选中 + str = null; + strx = null; + stry = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + BaseAnifileFrame = null; //调用的Ani帧数 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gBaseAnifileFrame, gWidth, gLength, gstr, gstrx, gstry) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + BaseAnifileFrame = gBaseAnifileFrame; + width = gWidth; + length = gLength; + str = gstr; + strx = gstrx; + stry = gstry; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + //++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + //--y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown() && SwitchState == false) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + } + + if (RectEnble && SwitchState == false) //开启悬停效果时 + { + if ((isInRect()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + } + + if (!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseAnifileFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(221, 197, 147, 250), 1, 1); + } + + if (SwitchState) { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + + + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && IMouse.GetLButton() == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() { + if (isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() { + if (isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } +} + +//HudPro按钮类 +class MedalButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && IMouse.GetLButton() == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() { + if (isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() { + if (isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } +} + + +class MedalItem extends BasicsDrawTool { + X = null; + Y = null; + ItemId = null; + Attribute = null; + MCount = 0; + Rarity = null; + TabName = ["名称: ", + "强化等级: ", + "力量 +", + "体力 +", + "智力 +", + "精神 +", + "独立攻击力 +", + "物理攻击力 +", + "魔法攻击力 +", + "物理防御 +", + "魔法防御 +", + "移动速度 +", + "攻击速度 +", + "释放速度 +", + "物理暴击 +", + "魔法暴击 +", + "命中率 +", + "光属性强化 +", + "暗属性强化 +", + "水属性强化 +", + "火属性强化 +", + "全属性强化 +" + ] + + constructor(Id, attribute, rarity) { + ItemId = Id; + Attribute = attribute; + Rarity = rarity; + } + + + + //绘制悬停 + function DrawHover(obj) { + local dx; + local dy; + local line = Attribute.len() - 3; //减去名字 强化之类的偏移 + + //悬停界面总高度计算 + { + local X1 = 0; //防御力线偏移 + local X2 = 0; //四维和三攻线偏移 + local X3 = 0; //三速线偏移 + local X4 = 0; //属强线偏移 + local X5 = 0; //全属强线偏移 + MCount = 0; + for (local y = 0; y < Attribute.len(); y++) { + local gType = Attribute[y][0]; + //防御力 + if (gType == 9 || gType == 10) X1 = 1; + //四维和三攻 + if (gType >= 2 && gType <= 8) X2 = 1; + //三速 + if (gType >= 11 && gType <= 16) X3 = 1; + //属强 + if (gType >= 17 && gType <= 20) X4 = 1; + //全属强 + if (gType == 21) X5 = 1; + //守护珠数量 + if (gType >= 22 && gType <= 25) MCount++; + } + line = line + X1 + X2 + X3 + X4 + X5 + 1 - MCount; //总共需要的长度 + } + + //界面是否靠近边界偏移计算 + { + if ((800 - X) >= 216) dx = X; + else dx = X - (216 - (800 - X)); + local needY = 19 + (line * 14) + 19; + if ((600 - Y) >= needY) dy = Y; + else dy = Y - (needY - (600 - Y)); + dx -= 25; + dy -= 25; + } + + //主界面绘制 + { + //绘制顶 + T_DrawStayAni(obj, "common/medal/main.ani", dx, dy, 25, "MedalItemInfoMainTop"); + + //绘制线 + T_DrawStayAni(obj, "common/medal/main.ani", dx, dy + 19, 26, "MedalItemInfoMainXian"); + + //绘制中 + for (local i = 0; i < line; i++) { + T_DrawStayAni(obj, "common/medal/main.ani", dx, dy + 19 + 14 + (i * 14), 27, "MedalItemInfoMainZhong"); + } + //绘制底 + T_DrawStayAni(obj, "common/medal/main.ani", dx, dy + 19 + 14 + (line * 14), 28, "MedalItemInfoMainDi"); + + if (MCount > 0) L_sq_DrawCode("[ 已镶嵌守护珠: " + MCount + " ]", dx + 6, dy + 19 + 16 + (line * 14), sq_RGBA(255, 177, 0, 250), 1, 1); + } + + //获取颜色 + local Colorobj = getroottable()["MedalObj"].ColorArr[Rarity]; + local RGBADATA = sq_RGBA(Colorobj[0], Colorobj[1], Colorobj[2], Colorobj[3]); + + //绘制名字 + L_sq_DrawCode(Attribute[0][1], dx + 6, dy + 6, RGBADATA, 1, 1); + + + + + //绘制强化等级 + if (Attribute[1][1] != 0) L_sq_DrawCode("强化等级: " + Attribute[1][1], dx + 140, dy + 6, sq_RGBA(255, 177, 0, 250), 1, 1); + + //线的数量 + local XianCount = 0; + + local FYS = false; //防御属性是否绘制判断 + local SWS = false; //四维属性是否绘制判断 + local SGS = false; //三攻属性是否绘制判断 + local SSS = false; //三速属性是否绘制判断 + local SQS = false; //属强属性是否绘制判断 + + local cx = dx + 6; //起始点偏移(要从名字下面的线开始绘制) + local cy = dy + 20; //起始点偏移(要从名字下面的线开始绘制) + + local o = 2; //属性剔除前2无用属性 + local RGBA; //根据不同的属性绘制不同颜色字体 + + //防御属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于防御属性就终止 + if (gType != 9 && gType != 10) break; + + RGBA = sq_RGBA(119, 110, 95, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + ((o - 1) * 15), RGBA, 1, 1); + FYS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + //绘制线 + if (FYS) { + T_DrawStayAni(obj, "common/medal/main.ani", dx, cy + ((o - 1) * 15) + (XianCount * 14), 29, "MedalItemInfoMainXianT"); + XianCount++; + } + + //四维属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于四维属性就终止 + if (gType < 2 || gType > 5) break; + + RGBA = sq_RGBA(141, 140, 109, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + SWS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + //三攻属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于三攻属性就终止 + if (gType < 6 || gType > 8) break; + + RGBA = sq_RGBA(255, 255, 216, 200); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + SGS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + if ((SGS || SWS) && (o < Attribute.len())) { + //绘制线 + T_DrawStayAni(obj, "common/medal/main.ani", dx, cy + (XianCount * 14) + ((o - 1) * 15), 29, "MedalItemInfoMainXianT"); + XianCount++; + } + + //三速属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于三速属性就终止 + if (gType < 11 || gType > 16) break; + + RGBA = sq_RGBA(166, 215, 136, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1].tofloat() / 10.0; + L_sq_DrawCode(gTabName + gValue.tostring() + "%", cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + SSS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + if (SSS) { + //绘制线 + T_DrawStayAni(obj, "common/medal/main.ani", dx, cy + (XianCount * 14) + ((o - 1) * 15), 29, "MedalItemInfoMainXianT"); + XianCount++; + } + + //属强属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于属强属性就终止 + if (gType < 17 || gType > 20) break; + + RGBA = sq_RGBA(240, 230, 135, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + SQS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + if (SQS) XianCount++; + + //全属强属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于全属强属性就终止 + if (gType != 21) break; + + RGBA = sq_RGBA(255, 177, 0, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + if (o == (Attribute.len() - 1 - MCount)) return; + } + + + } + + function Run(x, y) { + X = x; + Y = y; + L_Sq_DrawItem(x, y, ItemId, 1, 0, 0, 0); + } +} + +class MedalSlot extends BasicsDrawTool { + + Type = null; + X = null; + Y = null; + Item = null; + ItemM = null; + Select = false; + SlotName = null; + + Tobj = null; + + constructor(type) { + Type = type; + local RootTab = getroottable(); + Tobj = RootTab["MedalObj"]; + } + + function IsHover() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 28, 28)) { + //因为拖拽的时候会有两个重叠 所以要判断不是当前拿着的物品 + if (Tobj.MoveModel != SlotName) Tobj.HoverModel = SlotName; + return true; + } else return false; + } + + + //左键按下状态 + function isLBDown(obj) { + if (IsHover() && IMouse.GetLButton() == 1) { + obj.getVar(SlotName + "L").setBool(1, true); + return true; + } else return false; + } + + //左键弹起状态 + function isLBUp(obj) { + if (IMouse.GetLButton() == 0) { + obj.getVar(SlotName + "L").setBool(1, false); + return true; + } else return false; + } + + //右键按下状态 + function isRBDown(obj) { + if (IsHover() && IMouse.GetRButton() == 2) { + obj.getVar(SlotName + "R").setBool(1, true); + return true; + } else return false; + } + + //右键单击状态 + function isRBActive(obj) { + if (IsHover() && IMouse.isButtonUpEvent() && obj.getVar(SlotName + "R").getBool(1) == true) { + obj.getVar(SlotName + "R").setBool(1, false); + return true; + } else return false; + } + + function DrawHover(obj) { + + //绘制悬停槽蓝光 + T_DrawStayAni(obj, "common/medal/main.ani", X, Y, Type, "MedalSlotHover" + Type); + } + + //第一图层 + function Show(obj, x, y, slot) { + + SlotName = slot; + + if (Tobj.MoveModel != SlotName) { + X = x; + Y = y; + } else { + X = IMouse.GetXPos() - 14; + Y = IMouse.GetYPos() - 14; + } + + + //如果有勋章对象则执行 + if (Item && Tobj.MoveModel != SlotName) Item.Run(X, Y); + //如果有守护珠对象则执行 + if (ItemM && Tobj.MoveModel != SlotName) ItemM.Run(X, Y); + + + if (Type == 23) { + + if (Item) { + T_DrawStayAni(obj, "common/medal/main.ani", Tobj.X + 69 + (((slot - 88) % 2) * 78), Tobj.Y + 96 + (((slot - 88) / 2) * 90), 21, "MedalSystemMainSlot3"); + } else { + + T_DrawStayAni(obj, "common/medal/main.ani", Tobj.X + 69 + (((slot - 88) % 2) * 78), Tobj.Y + 96 + (((slot - 88) / 2) * 90), 20, "MedalSystemMainSlot2"); + } + } + + //如果悬停 + if (IsHover()) { + //绘制背景蓝光 移动时绘制蓝光要在图标底下 + if (Tobj.MoveModel != SlotName) DrawHover(obj); + + + isRBDown(obj); + //如果右键穿戴 + if (Item && isRBActive(obj)) { + local UseMedalPack = Json_STL("UseMedalPack"); + UseMedalPack.Put("op", 20009003); + UseMedalPack.Put("sel_type", Tobj.State); + + UseMedalPack.Put("old_slot", slot); + + if (Tobj.State == 24) { + if (slot != 88) UseMedalPack.Put("new_slot", 88); + if (slot == 88) UseMedalPack.Put("new_slot", 999999); + } else UseMedalPack.Put("new_slot", 888888); + + UseMedalPack.Put("page", Tobj.NowPage); + UseMedalPack.Put("type", Tobj.State); + local str = UseMedalPack.GetString(); + + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + UseMedalPack.Delete(); + } + } + + //如果左键按下 写入可移动状态 + if (Item && isLBDown(obj) && Tobj.MoveModel == null && slot < 88) { + Tobj.MoveModel = SlotName; + } + + //如果左键弹起 写入静止状态 + if (isLBUp(obj) && Tobj.MoveModel != null) { + local MoveMedalPack = Json_STL("MoveMedalPack"); + MoveMedalPack.Put("op", 20009003); + MoveMedalPack.Put("sel_type", Tobj.State); + + MoveMedalPack.Put("old_slot", Tobj.MoveModel.tointeger()); + MoveMedalPack.Put("new_slot", Tobj.HoverModel.tointeger()); + MoveMedalPack.Put("page", Tobj.NowPage); + local str = MoveMedalPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + MoveMedalPack.Delete(); + + Tobj.MoveModel = null; + } + } + + //第二图层 + function ItemShow(obj) { + if (IsHover() && Tobj.MoveModel == null) { + if (Item) Item.DrawHover(obj); + } + } + + //第三图层 拖动物品时的最高图层绘制 + function ItemMoveShow(obj) { + if (Item && Tobj.MoveModel == SlotName) Item.Run(X, Y); + } +} + +class MedalSystem extends BasicsDrawTool { + //界面坐标 + X = null; + Y = null; + + + State = 24; + CheckGetMyMedalInfo = false; + MedalButton = null; + MedalButtonSwitch = true; + BeadButton = null; + BeadButtonSwitch = false; + + //最大页数 Json获取 + MaxPage = 5; + //当前页数 Json获取 + NowPage = 1; + //颜色 + ColorArr = null; + + WearSlotM = null; + WearSlotB = null; + SlotArr = null; + + MoveModel = null; + HoverModel = null; + + //副本附加状态 + DgnAddBuff = false; + + constructor(obj) { + + //注册配置类信息回调 + Pack_Control.rawset(20009998, SetBaseInfoCallBack); + //请求配置信息 + GetBaseInfo(); + //注册获取背包信息回调 + Pack_Control.rawset(20009002, GetMyMedalInfoCallBack); + + //注册穿戴勋章回调 + Pack_Control.rawset(20009012, GetMyWearMedalCallBack); + //初始请求背包信息 + F_GetMyMedalInfo(24, 1); + } + + //请求配置信息 + function GetBaseInfo() { + local GetBaseInfoPack = Json_STL("GetBaseInfoPack"); + GetBaseInfoPack.Put("op", 20009997); + local str = GetBaseInfoPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetBaseInfoPack.Delete(); + } + + //配置类信息回调 + function SetBaseInfoCallBack(Chunk) { + print(Chunk); + + local Buffer = Json_STL("GetMyMedalInfoBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("MedalObj")) { + local Tobj = RootTab["MedalObj"]; + Tobj.MaxPage = Buffer.Get("slotpage"); + Tobj.ColorArr = []; + for (local i = 0; i < 8; i++) { + local arrbuffer = [] + arrbuffer.append(Buffer.Get("color" + i + "->0")); + arrbuffer.append(Buffer.Get("color" + i + "->1")); + arrbuffer.append(Buffer.Get("color" + i + "->2")); + arrbuffer.append(250); + Tobj.ColorArr.append(arrbuffer); + } + } + } + + //穿戴信息回调 + function GetMyWearMedalCallBack(Chunk) { + //收到打开包 + + local Buffer = Json_STL("GetMyMedalInfoBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + + if (RootTab.rawin("MedalObj")) { + local Tobj = RootTab["MedalObj"]; + + //清空勋章对象 + Tobj.WearSlotM.Item = null; + //清空守护珠对象组 + for (local w = 0; w < 4; w++) { + Tobj.WearSlotB[w].Item = null; + } + + local dataarr = []; + local dataarrsize = Buffer.Get("data->" + 0 + "->dataarrsize"); + if (dataarrsize) { + for (local z = 0; z < dataarrsize; z++) { + local arrbuufer = []; + local a = Buffer.Get("data->" + 0 + "->stk_ab->" + z + "->0"); + local b = Buffer.Get("data->" + 0 + "->stk_ab->" + z + "->1"); + + //这里是守护珠 + if (a >= 22 && a <= 25) { + //如果有守护珠 实例化守护珠对象组 + //if(Tobj.WearSlotB.Item == null)Tobj.WearSlotB.Item = []; + local str = b; + b = Json_STL("GetMyMedalInfoBufferB"); + b.Parse(str, 0, false); + local bSlotPos = b.Get("slot"); + local bdataarrsize = b.Get("dataarrsize"); + local bdataarr = []; + for (local j = 0; j < bdataarrsize; j++) { + local barrbuufer = []; + local c = b.Get("stk_ab->" + j + "->0"); + local d = b.Get("stk_ab->" + j + "->1"); + barrbuufer.append(c); + barrbuufer.append(d); + bdataarr.append(barrbuufer); + } + local brarity = b.Get("rarity"); + Tobj.WearSlotB[bSlotPos].Item = MedalItem(b.Get("stk_id"), bdataarr, brarity); + + } + + arrbuufer.append(a); + arrbuufer.append(b); + dataarr.append(arrbuufer); + } + local rarity = Buffer.Get("data->" + 0 + "->rarity"); + Tobj.WearSlotM.Item = MedalItem(Buffer.Get("data->" + 0 + "->stk_id"), dataarr, rarity); + } + } + } + + //获取背包信息回调 + function GetMyMedalInfoCallBack(Chunk) { + //收到打开包 + + local Buffer = Json_STL("GetMyMedalInfoBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + + if (RootTab.rawin("MedalObj")) { + local Tobj = RootTab["MedalObj"]; + + { //同步页面(勋章或守护珠) + local SelType = Buffer.Get("sel_type"); + Tobj.State = SelType; + if (SelType == 24) { + Tobj.MedalButtonSwitch = true; + Tobj.BeadButtonSwitch = false; + } else if (SelType == 23) { + Tobj.MedalButtonSwitch = false; + Tobj.BeadButtonSwitch = true; + } + } + + //Tobj.SlotArr = []; + local Count = Buffer.Get("count"); + + for (local z = 0; z < 24; z++) { + Tobj.SlotArr[z].Item = null; + } + for (local i = 0; i < Count; i++) { + local SlotPos = Buffer.Get("data->" + i + "->slot"); + local dataarrsize = Buffer.Get("data->" + i + "->dataarrsize"); + local dataarr = []; + for (local z = 0; z < dataarrsize; z++) { + local arrbuufer = []; + local a = Buffer.Get("data->" + i + "->stk_ab->" + z + "->0"); + local b = Buffer.Get("data->" + i + "->stk_ab->" + z + "->1"); + + + arrbuufer.append(a); + arrbuufer.append(b); + dataarr.append(arrbuufer); + } + local rarity = Buffer.Get("data->" + i + "->rarity"); + Tobj.SlotArr[SlotPos].Item = MedalItem(Buffer.Get("data->" + i + "->stk_id"), dataarr, rarity); + } + + } + } + + //判断打开背包 + function CheckOpenInv() { + if (sq_GetPopupWindowMainCotrol(74) && CheckGetMyMedalInfo == false) { + GetMyMedalInfo(State, NowPage); + CheckGetMyMedalInfo = true; + } else if (!sq_GetPopupWindowMainCotrol(74)) { + CheckGetMyMedalInfo = false; + } + } + + //获取背包信息 + function GetMyMedalInfo(Type, Page) { + local GetMyMedalInfoPack = Json_STL("GetMyMedalInfoPack"); + GetMyMedalInfoPack.Put("op", 20009001); + GetMyMedalInfoPack.Put("sel_type", Type); + GetMyMedalInfoPack.Put("page", Page); + GetMyMedalInfoPack.Put("wear", false); + local str = GetMyMedalInfoPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetMyMedalInfoPack.Delete(); + } + + //首次获取背包信息 + function F_GetMyMedalInfo(Type, Page) { + local GetMyMedalInfoPack = Json_STL("GetMyMedalInfoPack"); + GetMyMedalInfoPack.Put("op", 20009001); + GetMyMedalInfoPack.Put("sel_type", Type); + GetMyMedalInfoPack.Put("page", Page); + GetMyMedalInfoPack.Put("wear", true); + local str = GetMyMedalInfoPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetMyMedalInfoPack.Delete(); + } + + //绘制主界面 + function DrawMain(obj) { + + { //底图层绘制 + //窗口 + T_DrawStayAni(obj, "common/medal/main.ani", X + 2, Y + 18, 0, "MedalSystemMain"); + //勋章槽贴图 + T_DrawStayAni(obj, "common/medal/main.ani", X + 105, Y + 138, 18, "MedalSystemMainSlot1"); + //守护珠槽贴图 TODO 安装守护珠以后槽会缩小 贴图21 + + for (local u = 0; u < 4; u++) { + T_DrawStayAni(obj, "common/medal/main.ani", X + 68 + 7 + ((u % 2) * 78), Y + 95 + 7 + ((u / 2) * 90), 22, "MedalSystemMainSlot21"); + } + } + + + { //勋章和守护珠切换按钮 + MedalButton = TabTextButtonPro(obj, "小勋章Tab", X + 5, Y + 253, "common/medal/main.ani", 4, 38, 21, "勋章", 8, 5); + MedalButton.SwitchState = MedalButtonSwitch; + MedalButton.SetRectEnble(true, "a勋章Tab", X + 5, Y + 253, "common/medal/main.ani", 5); + MedalButton.SetCustomClickEnble(true, "a勋章Tab", X + 5, Y + 253, "common/medal/main.ani", 6); + + //勋章 + MedalButton.Show(); + if (MedalButton.isLBActive()) { + //MedalButton.SwitchState = true; + MedalButtonSwitch = true; + //BeadButton.SwitchState = false; + BeadButtonSwitch = false; + State = 24; + //清空槽对象 + SlotArr = []; + SlotArr = null; + //还原页码 + NowPage = 1; + GetMyMedalInfo(State, NowPage); + } + + BeadButton = TabTextButtonPro(obj, "小珠子Tab", X + 5 + 39, Y + 253, "common/medal/main.ani", 7, 38, 21, "守护珠", 8, 5); + BeadButton.SwitchState = BeadButtonSwitch; + BeadButton.SetRectEnble(true, "a勋章Tab", X + 5 + 39, Y + 253, "common/medal/main.ani", 8); + BeadButton.SetCustomClickEnble(true, "a勋章Tab", X + 5 + 39, Y + 253, "common/medal/main.ani", 9); + //守护珠 + BeadButton.Show(); + if (BeadButton.isLBActive()) { + MedalButton.SwitchState = false; + MedalButtonSwitch = false; + BeadButton.SwitchState = true; + BeadButtonSwitch = true; + State = 23; + //清空槽对象 + SlotArr = []; + SlotArr = null; + //还原页码 + NowPage = 1; + GetMyMedalInfo(State, NowPage); + } + } + + + { //翻页 + local LeftButton = MedalButtonPro(obj, "MedalLeftButton", X + 150 + 39, Y + 260, "common/medal/main.ani", 13, 9, 14); + LeftButton.SetRectEnble(true, "MedalLeftButtonr", X + 150 + 39, Y + 260, "common/medal/main.ani", 16); + LeftButton.SetCustomClickEnble(true, "MedalLeftButtonc", X + 150 + 39, Y + 260, "common/medal/main.ani", 15); + LeftButton.Show(); + + if (LeftButton.isLBActive()) { + //页码减少 + if (NowPage > 1) NowPage--; + //清空槽对象 + SlotArr = []; + SlotArr = null; + GetMyMedalInfo(State, NowPage); + } + + local RightButton = MedalButtonPro(obj, "MedalRightButton", X + 200 + 39, Y + 260, "common/medal/main.ani", 13, 9, 10); + RightButton.SetRectEnble(true, "MedalRightButtonr", X + 200 + 39, Y + 260, "common/medal/main.ani", 11); + RightButton.SetCustomClickEnble(true, "MedalRightButtonc", X + 200 + 39, Y + 260, "common/medal/main.ani", 12); + RightButton.Show(); + + if (RightButton.isLBActive()) { + //页码增加 + if (NowPage < MaxPage) NowPage++; + //清空槽对象 + SlotArr = []; + SlotArr = null; + GetMyMedalInfo(State, NowPage); + } + + L_sq_DrawCode(NowPage + "/" + MaxPage, X + 175 + 39, Y + 258, sq_RGBA(230, 200, 155, 250), 1, 1); + } + + { //佩戴槽 + { //勋章 + if (WearSlotM == null) WearSlotM = MedalSlot(24); + } + + { //守护珠 + if (WearSlotB == null) { + WearSlotB = []; + WearSlotB.resize(4); + for (local i = 0; i < 4; i++) { + WearSlotB[i] = MedalSlot(23); + } + } + } + + } + + { //背包槽 + if (SlotArr == null) { + SlotArr = []; + SlotArr.resize(24); + for (local i = 0; i < 24; i++) { + SlotArr[i] = MedalSlot(24); + } + } + } + + //绘制 + { + //第一图层 + WearSlotM.Show(obj, X + 114, Y + 147, 88); + for (local i = 0; i < 4; i++) { + WearSlotB[i].Show(obj, X + 76 + ((i % 2) * 78), Y + 103 + ((i / 2) * 90), i + 88); + } + for (local k = 0; k < 24; k++) { + SlotArr[k].Show(obj, X + 9 + ((k % 8) * 30), Y + 275 + ((k / 8) * 30), k); + } + for (local p = 0; p < 24; p++) { + SlotArr[p].Show(obj, X + 9 + ((p % 8) * 30), Y + 275 + ((p / 8) * 30), p); + } + + //第二图层 + WearSlotM.ItemShow(obj); + for (local u = 0; u < 4; u++) { + WearSlotB[u].ItemShow(obj); + } + for (local z = 0; z < 24; z++) { + SlotArr[z].ItemShow(obj); + } + + + + WearSlotM.ItemMoveShow(obj); + for (local g = 0; g < 4; g++) { + WearSlotB[g].ItemMoveShow(obj); + } + for (local z = 0; z < 24; z++) { + SlotArr[z].ItemMoveShow(obj); + } + } + + // print("Fist: " + MoveModel); + // print("Next: " + HoverModel); + } + + //实例化槽对象 + function NewSlotObject() { + //勋章佩戴槽 + if (WearSlotM == null) WearSlotM = MedalSlot(24); + //守护珠佩戴槽 + if (WearSlotB == null) { + WearSlotB = []; + WearSlotB.resize(4); + for (local i = 0; i < 4; i++) { + WearSlotB[i] = MedalSlot(23); + } + } + //背包槽 + if (SlotArr == null) { + SlotArr = []; + SlotArr.resize(24); + for (local i = 0; i < 24; i++) { + SlotArr[i] = MedalSlot(24); + } + } + } + + + //界面开启后的回调 + function Run(obj, x, y) { + X = x; + Y = y; + + //绘制界面 + DrawMain(obj); + } + + //常驻回调 + function Proc() { + //检测打开背包 + CheckOpenInv(); + //实例化槽对象 + NewSlotObject(); + } + + //设置表 + function CalculationAttribute(TabBuffer, Str, Rate) { + if (TabBuffer.rawin(Str)) TabBuffer.rawset(Str, TabBuffer[Str] + Rate); + else TabBuffer.rawset(Str, Rate) + } + + //读取属性 + function ReadCalAttribute(M_Tab, S_Tab) { + for (local i = 0; i < S_Tab.Item.Attribute.len(); i++) { + local Type = S_Tab.Item.Attribute[i][0]; + if (Type == 2) CalculationAttribute(M_Tab, "力量", S_Tab.Item.Attribute[i][1]); + else if (Type == 3) CalculationAttribute(M_Tab, "体力", S_Tab.Item.Attribute[i][1]); + else if (Type == 4) CalculationAttribute(M_Tab, "智力", S_Tab.Item.Attribute[i][1]); + else if (Type == 5) CalculationAttribute(M_Tab, "精神", S_Tab.Item.Attribute[i][1]); + else if (Type == 6) CalculationAttribute(M_Tab, "独立攻击力", S_Tab.Item.Attribute[i][1]); + else if (Type == 7) CalculationAttribute(M_Tab, "物理攻击力", S_Tab.Item.Attribute[i][1]); + else if (Type == 8) CalculationAttribute(M_Tab, "魔法攻击力", S_Tab.Item.Attribute[i][1]); + else if (Type == 9) CalculationAttribute(M_Tab, "物理防御", S_Tab.Item.Attribute[i][1]); + else if (Type == 10) CalculationAttribute(M_Tab, "魔法防御", S_Tab.Item.Attribute[i][1]); + else if (Type == 11) CalculationAttribute(M_Tab, "移动速度", S_Tab.Item.Attribute[i][1]); + else if (Type == 12) CalculationAttribute(M_Tab, "攻击速度", S_Tab.Item.Attribute[i][1]); + else if (Type == 13) CalculationAttribute(M_Tab, "释放速度", S_Tab.Item.Attribute[i][1]); + else if (Type == 14) CalculationAttribute(M_Tab, "物理暴击", S_Tab.Item.Attribute[i][1]); + else if (Type == 15) CalculationAttribute(M_Tab, "魔法暴击", S_Tab.Item.Attribute[i][1]); + else if (Type == 16) CalculationAttribute(M_Tab, "命中率", S_Tab.Item.Attribute[i][1]); + else if (Type == 17) CalculationAttribute(M_Tab, "光属性强化", S_Tab.Item.Attribute[i][1]); + else if (Type == 18) CalculationAttribute(M_Tab, "暗属性强化", S_Tab.Item.Attribute[i][1]); + else if (Type == 19) CalculationAttribute(M_Tab, "冰属性强化", S_Tab.Item.Attribute[i][1]); + else if (Type == 20) CalculationAttribute(M_Tab, "火属性强化", S_Tab.Item.Attribute[i][1]); + else if (Type == 21) CalculationAttribute(M_Tab, "全属性强化", S_Tab.Item.Attribute[i][1]); + } + } + + //副本系统 + function DgnSystem(obj) { + + + // local str = Json_STL.Encode(AddAttributeArr); + // Sout("查询当前身穿的属性:\n %L", str); + + if (sq_GetCurrentModuleType() == 3) { + + //如果没带勋章就直接走 + if (WearSlotM.Item == null) return; + + local AddAttributeArr = {}; + ReadCalAttribute(AddAttributeArr, WearSlotM); + for (local i = 0; i < 4; i++) { + if (WearSlotB[i].Item != null) ReadCalAttribute(AddAttributeArr, WearSlotB[i]); + } + + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/m/m.nut")) { + DgnAddBuff = true; + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/m/m.nut", true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + + local change_appendage = appendage.sq_getChangeStatus("Yosin_MedalDgnBuff"); + if (!change_appendage) { + change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, + CHANGE_STATUS_TYPE_COOLTIME_DECLINE, + false, 0, 114514); + } + if (change_appendage) { + change_appendage.clearParameter(); + //print(WearSlotM.Item.TabName[0]); + + foreach(Key, Value in AddAttributeArr) { + if (Key == "力量") change_appendage.addParameter(0, false, Value.tofloat()); + else if (Key == "体力") change_appendage.addParameter(3, false, Value.tofloat()); + else if (Key == "精神") change_appendage.addParameter(2, false, Value.tofloat()); + else if (Key == "智力") change_appendage.addParameter(1, false, Value.tofloat()); + else if (Key == "独立攻击力") change_appendage.addParameter(53, false, Value.tofloat()); + else if (Key == "物理攻击力") change_appendage.addParameter(4, false, Value.tofloat()); + else if (Key == "魔法攻击力") change_appendage.addParameter(31, false, Value.tofloat()); + else if (Key == "物理防御") change_appendage.addParameter(5, false, Value.tofloat()); + else if (Key == "魔法防御") change_appendage.addParameter(32, false, Value.tofloat()); + else if (Key == "移动速度") change_appendage.addParameter(11, false, Value.tofloat()); + else if (Key == "攻击速度") change_appendage.addParameter(10, false, Value.tofloat()); + else if (Key == "释放速度") change_appendage.addParameter(12, false, Value.tofloat()); + else if (Key == "物理暴击") change_appendage.addParameter(15, false, Value.tofloat() / 10.0); + else if (Key == "魔法暴击") change_appendage.addParameter(16, false, Value.tofloat() / 10.0); + else if (Key == "命中率") change_appendage.addParameter(33, false, 0 - (Value.tofloat() / 10.0)); + + else if (Key == "光属性强化") change_appendage.addParameter(45, false, Value.tofloat()); + else if (Key == "暗属性强化") change_appendage.addParameter(44, false, Value.tofloat()); + else if (Key == "冰属性强化") change_appendage.addParameter(43, false, Value.tofloat()); + else if (Key == "火属性强化") change_appendage.addParameter(42, false, Value.tofloat()); + else if (Key == "全属性强化") change_appendage.addParameter(46, false, Value.tofloat()); + } + } + + //Sout("已附加属性"); + } + } else { + DgnAddBuff = false; + } + } +} + +function Medal(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("MedalObj")) { + local Cobj = MedalSystem(obj); + RootTab.rawset("MedalObj", Cobj); + } else { + RootTab["MedalObj"].Proc(); + RootTab["MedalObj"].DgnSystem(obj); + } +} + +function Sq_L_Medal(x, y) { + local RootTab = getroottable(); + if (RootTab.rawin("MedalObj")) { + local obj = sq_GetMyMasterCharacter(); + RootTab["MedalObj"].Run(obj, x - 900, y); + } +} \ No newline at end of file diff --git a/Plugins/MidsummerParty/MidsummerParty.nut b/Plugins/MidsummerParty/MidsummerParty.nut new file mode 100644 index 0000000..63f81e1 --- /dev/null +++ b/Plugins/MidsummerParty/MidsummerParty.nut @@ -0,0 +1,380 @@ +/* +文件名:MidsummerParty.nut +路径:Plugins/MidsummerParty/MidsummerParty.nut +创建日期:2023-10-28 17:40 +文件用途: +*/ + +class MidsummerPartyC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 0; + Y = 0; + + InitState = false; + + ItemInfoObject = null; + RewardItemObject = null; + UseItemInfo = null; + ExRewardSchedule = null; + + function GetInfoCallBack(Chunk) { + // Sout("收到包 : \n %L", Chunk); + local Jso = Json.Decode(Chunk); + foreach(Value in Jso.items) { + if (Value.Name2.len() == 0) + Value.Name2 = "Rindro-Team"; + ItemInfoObject[Value.Id] <- Value; + } + } + + function GetInfo() { + local T = { + op = 20061001 + } + SendPack(T); + } + + EndRewardFlag = false; + + function GetRewardInfoCallBack(Chunk) { + // Sout("收到包 : \n %L", Chunk); + local Jso = Json.Decode(Chunk); + //常规奖励 + foreach(Value in Jso.items) { + RewardItemObject[Value.index] <- Value; + // if (Value.ifhas == 0) EndRewardFlag = false; + } + //最终奖励 + RewardItemObject["ExReward"] <- Jso.endItem; + //是否已经集齐 + EndRewardFlag = Jso.endani; + //消耗道具 + UseItemInfo.Id <- Jso.useItem; + //消耗道具数量 + UseItemInfo.Count <- Jso.usrItemNum; + if (UseItemInfo.Count > 16) UseItemInfo.Count = 16; + //特殊奖励均衡器 + ExRewardSchedule = Jso.plusNum; + local obj = sq_GetMyMasterCharacter(); + switch (ExRewardSchedule) { + case 0: + break; + case 1: + obj.sq_PlaySound("SUMMERLISTEN_PLAY_01"); + break; + case 2: + obj.sq_PlaySound("SUMMERLISTEN_PLAY_02"); + break; + case 3: + obj.sq_PlaySound("SUMMERLISTEN_PLAY_03"); + break; + case 4: + obj.sq_PlaySound("SUMMERLISTEN_PLAY_04"); + break; + } + + InitState = true; + } + + function GetRewardInfo() { + local T = { + op = 20061003 + } + SendPack(T); + } + + + AnimotionState = 0; + AnimotionEndFlag = 0; + NowReawrdObject = null; + + function LotteryPackCallBack(Chunk) { + // Sout("收到包 : \n %L", Chunk); + local Jso = Json.Decode(Chunk); + NowReawrdObject = Jso.item; + AnimotionState = 1; + AnimotionEndFlag = Jso.endani; + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("SUMMERLISTEN_START"); + } + + //抽奖包 + function LotteryPack() { + local T = { + op = 20061005 + } + SendPack(T); + } + + + + function EndRewardPackCallBack(Chunk) { + GetRewardInfo(); + } + + + //最终奖励包 + function EndRewardPack() { + local T = { + op = 20061009 + } + SendPack(T); + } + + + constructor() { + ItemInfoObject = {}; + RewardItemObject = {}; + UseItemInfo = {}; + + //获取基础配置回调包 + Pack_Control.rawset(20061002, GetInfoCallBack.bindenv(this)); + //获取奖励配置回调包 + Pack_Control.rawset(20061004, GetRewardInfoCallBack.bindenv(this)); + //抽奖回调包 + Pack_Control.rawset(20061008, LotteryPackCallBack.bindenv(this)); + //最终奖励回包 + Pack_Control.rawset(20061010, EndRewardPackCallBack.bindenv(this)); + + //获取基础配置 + GetInfo(); + //获取奖励配置 + GetRewardInfo(); + } + + function DrawRewardAnimotion(obj) { + if (AnimotionState == 1) { + local Ani = T_DrawDynamicAni(obj, "common/midsummerpartypackage/main_play.ani", X, Y, "MidsummerPartyCR1Effect"); + if (sq_IsEnd(Ani)) { + sq_Rewind(Ani); + AnimotionState = 2; + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("SUMMERLISTEN_RESULT"); + } + } else if (AnimotionState == 2) { + local Ani = T_DrawDynamicAni(obj, "common/midsummerpartypackage/main_slotchange.ani", X + 81 + ((NowReawrdObject.index % 4) * 132), Y + 102 + ((NowReawrdObject.index / 4) * 70), "MidsummerPartyCR2Effect"); + if (sq_IsEnd(Ani)) { + sq_Rewind(Ani); + AnimotionState = 3; + } + } else if (AnimotionState == 3) { + local path = "normal"; + if (NowReawrdObject.typ == 1) path = "special"; + local Ani = T_DrawDynamicAni(obj, "common/midsummerpartypackage/reward_" + path + "_00.ani", X, Y, "MidsummerPartyCREffect" + NowReawrdObject.typ); + //特殊奖励 + DrawItemEx(X + 382, Y + 285, NowReawrdObject.itemid, NowReawrdObject.num); + + local OkButton = LenheartBaseButton(X + 362, Y + 344, 68, 35, "interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 11); + OkButton.Show(); + if (OkButton.isLBActive()) { + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("SUMMERLISTEN_CLICK"); + + if (AnimotionEndFlag) { + AnimotionState = 4; + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("SUMMERLISTEN_RESULT_02"); + } else { + AnimotionState = 0; + } + + GetRewardInfo(); + } + } else if (AnimotionState == 4) { + local Ani = T_DrawDynamicAni(obj, "common/midsummerpartypackage/main_slotchange_all.ani", X, Y, "MidsummerPartyCR6Effect"); + if (sq_IsEnd(Ani)) { + sq_Rewind(Ani); + AnimotionState = 0; + } + } + } + + + //绘制主界面 + function DrawMain(obj) { + if (!InitState) return; + //绘制主界面 + L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 0, X, Y); + L_sq_SetDrawImgModel(2, 0); + L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 44, X + 242, Y + 22, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0, 1); + L_sq_ReleaseDrawImgModel(); + T_DrawDynamicAni(obj, "common/midsummerpartypackage/main_loop.ani", X, Y, "MidsummerPartyCMainEffect"); + + if (EndRewardFlag) { + L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 39, X + 92, Y + 114); + + local OkButton = LenheartBaseButton(X + 652, Y + 239, 68, 35, "interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 11); + OkButton.Show(); + if (OkButton.isLBActive()) { + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("SUMMERLISTEN_CLICK"); + EndRewardPack(); + } + } else { + //常规奖励 + foreach(Value in RewardItemObject) { + if ("index" in Value) { + if (Value.ifhas) { + L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 23 + Value.index, X + 81 + ((Value.index % 4) * 132), Y + 102 + ((Value.index / 4) * 70)); + } else { + DrawItemEx(X + 142 + ((Value.index % 4) * 132), Y + 134 + ((Value.index / 4) * 70), Value.itemid, Value.num); + } + } + } + } + + //特殊奖励 + DrawItemEx(X + 672, Y + 204, RewardItemObject.ExReward, 1); + + //消耗道具信息绘制 + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 271, Y + 448, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X + 271; + ItemInfoDrawS.Y <- Y + 448; + ItemInfoDrawS.ItemId <- UseItemInfo.Id; + } + + //消耗道具数量绘制 + L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/num_blue.img", 10, X + 258, Y + 465); + DrawSmallNumber(UseItemInfo.Count); + + //特殊奖励均衡器 + L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 5 + ExRewardSchedule, X + 459, Y + 431); + + + + //启动按钮 + local PlayButton = LenheartBaseButton(X + 338, Y + 410, 121, 86, "interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 1); + PlayButton.Show(); + if (PlayButton.isLBActive()) { + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("SUMMERLISTEN_TAG"); + LotteryPack(); + } + + //购买按钮 + local ShopButton = LenheartBaseButton(X + 352, Y + 500, 121, 86, "interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer.img", 40); + ShopButton.Show(); + if (ShopButton.isLBActive()) { + local obj = sq_GetMyMasterCharacter(); + obj.sq_PlaySound("SUMMERLISTEN_CLICK"); + L_sq_UseSkill(DIK_F5); + MainState = false; + } + + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + + //获取奖励配置 + GetRewardInfo(); + } + + + //绘制道具相信信息 + ItemObject = null; + + function DrawItemInfo(obj) { + if (ItemInfoDrawS && ItemInfoObject) { + if (!ItemObject) { + local ItemId = ItemInfoDrawS.ItemId; + if (ItemInfoObject.rawin(ItemId)) { + ItemObject = ItemInfoClass(ItemInfoObject[ItemId]); + } + } + ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); + } else { + ItemObject = null; + } + } + + ItemInfoDrawS = null; + //绘制入口 + function Draw(obj) { + ItemInfoDrawS = null; + + if (MainState) { + if (WindowObj) { + DrawMain(obj); + DrawRewardAnimotion(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + + DrawItemInfo(obj); + } else { + WindowObj = LenheartWindow(X, Y, 800, 600, 28); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "MidsummerPartyCloseKey")) { + MainState = false; + } + } + + + + + //绘制道具带道具信息 + function DrawItemEx(X, Y, Id, Count) { + L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X; + ItemInfoDrawS.Y <- Y; + ItemInfoDrawS.ItemId <- Id; + } + } + + + //绘制等级数字 + function DrawSmallNumber(num) { + num = num.tostring(); + local x = X + 284; + local y = Y + 465; + if (num.len() == 2) x = X + 276; + for (local i = 0; i< num.len(); i++) { + local n = num.slice(i, i + 1); + n = n.tointeger(); + local Img = "interface2/cs_shop/cs_packageevent/2021_summer/num_blue.img"; + L_sq_DrawImg(Img, n, x + (i * 9), y); + } + } +} + +function MidsummerParty(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("MidsummerPartyCObj")) { + local Cobj = MidsummerPartyC(); + RootTab.rawset("MidsummerPartyCObj", Cobj); + EventIcon("希曼音乐会", 133, 133, Cobj); + } else { + RootTab["MidsummerPartyCObj"].Proc(obj); + RootTab["MidsummerPartyCObj"].Draw(obj); + } +} +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("MidsummerParty_LenheartFunc", MidsummerParty); +} else { + local T = {}; + T.rawset("MidsummerParty_LenheartFunc", MidsummerParty); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/NewUpgrade/NewUpgrade.nut b/Plugins/NewUpgrade/NewUpgrade.nut new file mode 100644 index 0000000..ef747de --- /dev/null +++ b/Plugins/NewUpgrade/NewUpgrade.nut @@ -0,0 +1,446 @@ +/* +文件名:NewUpgrade.nut +路径:Plugins/NewUpgrade/NewUpgrade.nut +创建日期:2023-03-06 13:14 +文件用途:新版强化系统 +*/ + +//HudPro按钮类 +class UpgradeButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + + +class UpgradeWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + //Y坐标 + Y = null; + + YMouseSw = true; + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + } + + function Show(obj) { + //sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + + } +} + + + +class UpgradeC extends BasicsDrawTool { + BaseX = 0; + BaseY = 0; + State = false; + Sw = false; + WindowObj = null; + + EquObj = null; + //所需材料组 + NedItemArr = null; + //幸运值 + Lucky_Value = 0; + + //幸运值回调 + function GetLuckyValue(Chunk) { + local Buffer = Json_STL("UpgradeGetEquInfo"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("UpgradeObj")) { + RootTab["UpgradeObj"].Lucky_Value = Buffer.Get("lucky_value"); + } + } + + //当前对象信息回调 + function GetEquInfo(Chunk) { + local Buffer = Json_STL("UpgradeGetEquInfo"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("UpgradeObj")) { + RootTab["UpgradeObj"].EquObj = null; + RootTab["UpgradeObj"].NedItemArr = []; + + if (Buffer.Get("ok")) { + RootTab["UpgradeObj"].EquObj = { + id = Buffer.Get("id"), + name = Buffer.Get("name"), + grade = Buffer.Get("grade"), + upgrade = Buffer.Get("upgrade"), + pos = Buffer.Get("pos"), + } + + local Size = Buffer.Get("size"); + if (Size && Size > 0) { + for (local i = 0; i < Size; i++) { + local barr = { + name = Buffer.Get("upgradeitem->" + i + "->name"), + id = Buffer.Get("upgradeitem->" + i + "->id"), + count = Buffer.Get("upgradeitem->" + i + "->count"), + rarity = Buffer.Get("upgradeitem->" + i + "->rarity"), + } + RootTab["UpgradeObj"].NedItemArr.append(barr); + } + } + } + } + } + + + constructor() { + //注册装备信息回调 + Pack_Control.rawset(20018006, GetEquInfo); + Pack_Control.rawset(20018008, GetLuckyValue); + + NedItemArr = []; + } + + //获取汉字偏移 + function GetOffserFromLen(char, offset) { + return (char.len() * offset) + } + + //获取装备名称颜色 + function GetEquColor(rarity) { + switch (rarity) { + case 0: + return 0xFFFFFFFF; + case 1: + return 0xFFEDD568; + case 2: + return 0xFFFF6BB3; + case 3: + return 0xFFF000FF; + case 4: + return 0xFF00B1FF; + } + } + + function CallBack(x, y) { + //同步坐标 + BaseX = x; + BaseY = y; + + //背包打开时才绘制 + State = true; + + //开关绘制 + local obj = sq_GetMyMasterCharacter(); + local OpenButton = UpgradeButtonPro(obj, "UpgradeOpenButton", BaseX - 550, BaseY - 300, "common/buffswitching/main.ani", 26, 26, 11); + OpenButton.SetRectEnble(true, "UpgradeOpenButtonr", BaseX - 550 - 4, BaseY - 300 - 4, "common/buffswitching/main.ani", 12); + OpenButton.SetCustomClickEnble(true, "UpgradeOpenButtonc", BaseX - 550 - 4, BaseY - 300 - 4, "common/buffswitching/main.ani", 13); + OpenButton.Show(); + //开关按钮 + if (OpenButton.isLBActive()) { + if (Sw == false) { + Sw = true; + L_sq_SendPackType(130); + L_sq_SendPackWChar("{\"op\":20018007}"); + L_sq_SendPack(); + } else { + Sw = false; + } + } + } + + + function Encode(Table) { + local Size = Table.len(); + local Pos = 0; + local Str = "{"; + foreach(Key, Value in Table) { + ++Pos; + Str += "\""; + Str += Key.tostring(); + Str += "\""; + Str += ":"; + if (typeof(Value) == "string") { + Str += "\""; + Str += Value; + Str += "\""; + } else Str += Value; + if (Pos != Size) Str += ","; + } + Str += "}"; + return Str; + } + + function DrawMain(obj) { + local BX = BaseX - 550 - 710; + local BY = BaseY + 86 - 420; + + + { //底图层绘制 + //窗口 + T_DrawStayAni(obj, "common/new_upgrade/main.ani", BX, BY, 0, "UpgradeSystemMain"); + //窗口标题 + L_sq_DrawCode("强化系统", BX + 200, BY + 3, sq_RGBA(230, 200, 155, 250), 0, 0); + } + + + { //装备信息绘制 + if (EquObj) { + local CodeColor = GetEquColor(EquObj.grade); + L_Sq_DrawItem(BX + 211, BY + 73, EquObj.id, 1, 0, 0, 0); + L_sq_DrawCode(EquObj.name.tostring(), BX + 224 - GetOffserFromLen(EquObj.name.tostring(), 2), BY + 56, CodeColor, 0, 0); + L_sq_DrawCode("当前等级:" + EquObj.upgrade.tostring(), BX + 196, BY + 107, sq_RGBA(230, 200, 155, 250), 0, 0); + } + + if (NedItemArr) { + foreach(Pos, ItemObject in NedItemArr) { + L_Sq_DrawItem(BX + 28 + (230 * (Pos % 2)), BY + 190 + ((35 * (Pos / 2))), ItemObject.id, ItemObject.count, 0, 0, 0); + local ICodeColor = GetEquColor(ItemObject.rarity); + L_sq_DrawCode(ItemObject.name, BX + 62 + (230 * (Pos % 2)), BY + 198 + ((35 * (Pos / 2))), ICodeColor, 0, 0); + //Sout("名称: %L" , ItemObject.name); + } + } + } + + + { //幸运值绘制 + L_sq_DrawCode("当前幸运值: " + Lucky_Value + " / 100", BX + 170, BY + 370, 0xFF00B1FF, 0, 0); + } + + { //强化按钮 + local UpGradeButton = UpgradeButtonPro(obj, "UpGradeButton", BX + 193, BY + 393, "common/new_upgrade/main.ani", 58, 24, 1); + UpGradeButton.SetRectEnble(true, "UpGradeButtonr", BX + 193, BY + 393, "common/new_upgrade/main.ani", 2); + UpGradeButton.SetCustomClickEnble(true, "UpGradeButtonc", BX + 193, BY + 394, "common/new_upgrade/main.ani", 2); + UpGradeButton.Show(); + + if (UpGradeButton.isLBActive()) { + if (EquObj && NedItemArr) { + local GoUpGradePack = Json_STL("GoUpGradePack"); + GoUpGradePack.Put("op", 20018011); + local EquInfo = Encode(EquObj); + GoUpGradePack.Put("EquInfo", EquInfo); + + local NedItemInfoPack = Json_STL("NedItemInfoPack"); + foreach(Pos, ItemObject in NedItemArr) { + NedItemInfoPack.Put("NedItemInfo" + Pos, Encode(ItemObject)); + } + //local NedItemInfo = Json_STL.Encode(NedItemArr); + GoUpGradePack.Put("NedItemInfo", NedItemInfoPack.GetString()); + GoUpGradePack.Put("Luckyvalue", Lucky_Value); + NedItemInfoPack.Delete(); + + local str = GoUpGradePack.GetString(); + + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GoUpGradePack.Delete(); + } + } + } + } + + function Proc(obj) { + //绘制主界面 + if (State && Sw) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + } else { + WindowObj = UpgradeWindow(0, 0, 800, 600, 10); + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + } + } + } +} + + + +//强化系统 +function UpgradeSystem(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("UpgradeObj")) { + local Cobj = UpgradeC(); + RootTab.rawset("UpgradeObj", Cobj); + } else { + RootTab["UpgradeObj"].Proc(obj); + RootTab["UpgradeObj"].State = false; + } +} + +//回调函数 +function Sq_UpgradeCallBack(x, y) { + local RootTab = getroottable(); + if (RootTab.rawin("UpgradeObj")) { + RootTab["UpgradeObj"].CallBack(x, y); + } +} \ No newline at end of file diff --git a/Plugins/OnlineEvent/OnlineEvent.nut b/Plugins/OnlineEvent/OnlineEvent.nut new file mode 100644 index 0000000..6a29863 --- /dev/null +++ b/Plugins/OnlineEvent/OnlineEvent.nut @@ -0,0 +1,491 @@ +/* +文件名:OnlineEvent.nut +路径:Plugins/OnlineEvent/OnlineEvent.nut +创建日期:2023-05-28 09:54 +文件用途: +*/ + +//HudPro按钮类 +class OnlineEventPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + + + + +class OnlineEventC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 136; + Y = 130; + + TimeObj = null; + + reward = null; + NextRewardTime = null; + StaticNowTime = null; + NowTime = null; + NowDay = null; + + + //ItemInfo + ItemInfoObject = null; + ItemInfoDrawS = null; + + + //查询 玩家信息 + function GetPlayerInfo() { + local T = { + op = 20052001, + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + //回调 查询 玩家信息 + function GetPlayerInfoCallBack(Chunk) { + // Sout("收到包内容为 \n %L", Chunk); + local Buffer = Json_STL("OnlineEvent_GetPlayerInfo_Pack_CallBack"); + Buffer.Parse(Chunk, 0, false); + + local RootTab = getroottable(); + if (RootTab.rawin("OnlineEventCObj")) { + reward = null; + reward = []; + StaticNowTime = null; + NowDay = null; + + StaticNowTime = Buffer.Get("time"); + NowDay = Buffer.Get("currentCumulative"); + + for (local i = 0; i< 10; i++) { + local gNormalItemId = Buffer.Get("reward->" + i + "->itemId"); + local gNormalItemCount = Buffer.Get("reward->" + i + "->itemNum"); + local gNormalNeedTime = Buffer.Get("reward->" + i + "->time"); + local gNormalComplete = Buffer.Get("timeReward->" + i); + + local gExItemId = Buffer.Get("reward->" + i + "->cumulativeId"); + local gExItemCount = Buffer.Get("reward->" + i + "->cumulativeNum"); + local gExNeedTime = Buffer.Get("reward->" + i + "->cumulative"); + local gExComplete = Buffer.Get("accumulateReward->" + i); + + local T = { + NormalItemId = gNormalItemId, + NormalItemCount = gNormalItemCount, + NormalNeedTime = gNormalNeedTime, + NormalComplete = gNormalComplete, + + ExItemId = gExItemId, + ExItemCount = gExItemCount, + ExNeedTime = gExNeedTime, + ExNeedTime = gExNeedTime, + ExComplete = gExComplete, + } + reward.append(T); + } + + local ItemGetArray = {}; + foreach(P, V in reward) { + local ItemId = V.NormalItemId; + if (!ItemInfoObject.rawin(ItemId)) { + if (!ItemGetArray.rawin(ItemId)) + ItemGetArray.rawset(ItemId, true); + } + ItemId = V.ExItemId; + if (!ItemInfoObject.rawin(ItemId)) { + if (!ItemGetArray.rawin(ItemId)) + ItemGetArray.rawset(ItemId, true); + } + } + + + if (ItemGetArray.len() > 0) { + local arr = []; + foreach(Key, Value in ItemGetArray) { + arr.append(Key); + } + local T = { + op = 20231010, + realop = 20052004, + itemId = arr, + Type = 2, + } + SendPack(T); + } + + OnlineEventTimeReset(); + } + } + + + function CheckItemInfoCallBack(Chunk) { + // Sout("收到包内容为 \n %L", Chunk); + local Jso = Json.Decode(Chunk); + foreach(Pos, Value in Jso.itemInfo) { + if (Value.Name2.len() == 0) + Value.Name2 = "Yosin-Team"; + ItemInfoObject.rawset(Jso.itemId[Pos], Value); + } + } + + //刷新时间容器 + function OnlineEventTimeReset() { + if (TimeObj) TimeObj.Delete(); + TimeObj = null; + TimeObj = TimeSTL("OnlineEventTimeObj", 90000000); + TimeObj.Reset(); + TimeObj.Start(); + } + + constructor() { + if (TimeObj) TimeObj.Delete(); + TimeObj = null; + TimeObj = TimeSTL("OnlineEventTimeObj", 90000000); + TimeObj.Delete(); + TimeObj = null; + + ItemInfoObject = {}; + + Pack_Control.rawset(20052002, GetPlayerInfoCallBack.bindenv(this)); + + //查询道具信息回调 + Pack_Control.rawset(20052004, CheckItemInfoCallBack.bindenv(this)); + + + GetPlayerInfo(); + } + + //绘制在线时间 + function DrawNowOnlineTime(obj) { + if (TimeObj) NowTime = StaticNowTime + (TimeObj.Get() / 1000).tointeger(); + //当前时间 + if (NowTime) { + L_sq_DrawCode(NowTime + "秒", X + 94, Y + 39, sq_RGBA(255, 255, 184, 250), 0, 1); + //下个奖励的可领取时间 + if (NextRewardTime) { + local AniNowTime = (StaticNowTime * 1000) + TimeObj.Get(); + local AniNextTime = NextRewardTime * 1000; + T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 310, Y + 33, 1, "OnlineEvent_NextRewardTime_Main"); + setClip(X + 310, Y + 33, X + 310 + ((AniNowTime.tofloat() / AniNextTime.tofloat()) * 174.0).tointeger(), Y + 56); //开始裁切 + T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 310, Y + 33, 2, "OnlineEvent_NextRewardTime_Main"); + releaseClip(); //裁切结束 + } else { + T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 310, Y + 33, 1, "OnlineEvent_NextRewardTime_Main"); + T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 310, Y + 33, 2, "OnlineEvent_NextRewardTime_Main"); + } + } + if (NowDay) { + L_sq_DrawCode(NowDay + "天", X + 94 + 40, Y + 39 + 104, sq_RGBA(255, 255, 184, 250), 0, 1); + } + } + + + //绘制道具带道具信息 + function DrawItemEx(X, Y, Id, Count) { + L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X; + ItemInfoDrawS.Y <- Y; + ItemInfoDrawS.ItemId <- Id; + } + } + + //绘制道具相信信息 + ItemObject = null; + + function DrawItemInfo(obj) { + if (ItemInfoDrawS) { + if (!ItemObject) { + local ItemId = ItemInfoDrawS.ItemId; + if (ItemInfoObject.rawin(ItemId)) { + ItemObject = ItemInfoClass(ItemInfoObject[ItemId]); + } + } + ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); + } else { + ItemObject = null; + } + } + + //绘制奖励 + function DrawReward(obj) { + if (reward) { + //下次奖励可领取时间销毁 + NextRewardTime = null; + ItemInfoDrawS = null; + for (local i = 0; i< 10; i++) { + //绘制普通奖励 + DrawItemEx(X + 13 + 3 + (52 * i), Y + 43 + 24, reward[i].NormalItemId, reward[i].NormalItemCount); + //绘制是否可领取 + if (reward[i].NormalNeedTime< NowTime) { + if (reward[i].NormalComplete) { + T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 12 + 4 + (52 * i), Y + 42 + 24 + 30, 6, "OnlineEvent_Reward_Complete"); + } else { + //TODO 达到领取条件 但是还未领取 + local Button = OnlineEventPro(obj, "OnlineEvent_Reward_Button" + i, X + 12 + 4 + (52 * i), Y + 42 + 24 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 28, 18, 3); + Button.SetRectEnble(true, "OnlineEvent_Reward_Buttonr" + i, X + 12 + 4 + (52 * i), Y + 42 + 24 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 4); + Button.SetCustomClickEnble(true, "OnlineEvent_Reward_Buttonc" + i, X + 12 + 4 + (52 * i), Y + 42 + 24 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 5); + Button.Show(); + if (Button.isLBActive()) { + local T = { + op = 20052007, + rewardIndex = i, + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + + GetPlayerInfo(); + } + } + + } else { + //只记录最短的一个可领取时间差 + if (!NextRewardTime) NextRewardTime = reward[i].NormalNeedTime; + //绘制剩余所需时间 + L_sq_DrawCode((reward[i].NormalNeedTime - NowTime).tostring() + "s", X + 13 + 5 + (52 * i), Y + 43 + 24 + 32, sq_RGBA(255, 255, 184, 250), 0, 1); + } + + //绘制累计奖励 + DrawItemEx(X + 13 + 3 + (52 * i), Y + 43 + 128, reward[i].ExItemId, reward[i].ExItemCount); + + if (reward[i].ExNeedTime< NowDay) { + if (reward[i].ExComplete) { + T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 12 + 4 + (52 * i), Y + 42 + 128 + 30, 6, "OnlineEvent_Reward_Ex_Complete"); + } else { + //TODO 达到领取条件 但是还未领取 + local ExButton = OnlineEventPro(obj, "OnlineEvent_Reward_Ex_Button" + i, X + 12 + 4 + (52 * i), Y + 42 + 128 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 28, 18, 3); + ExButton.SetRectEnble(true, "OnlineEvent_Reward_Ex_Buttonr" + i, X + 12 + 4 + (52 * i), Y + 42 + 128 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 4); + ExButton.SetCustomClickEnble(true, "OnlineEvent_Reward_Ex_Buttonc" + i, X + 12 + 4 + (52 * i), Y + 42 + 128 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 5); + ExButton.Show(); + if (ExButton.isLBActive()) { + local T = { + op = 20052007, + rewardIndex = i + 10, + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + + GetPlayerInfo(); + } + } + + } else { + //绘制剩余所需时间 + L_sq_DrawCode((reward[i].ExNeedTime - NowDay).tostring() + "天", X + 13 + 5 + (52 * i), Y + 43 + 128 + 32, sq_RGBA(255, 255, 184, 250), 0, 1); + } + } + } + } + + //绘制主界面 + function DrawMain(obj) { + T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X, Y, 0, "OnlineEvent_Main"); + //绘制在线时间 + DrawNowOnlineTime(obj); + //绘制奖励 + DrawReward(obj); + + DrawItemInfo(obj); + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + GetPlayerInfo(); + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = LenheartWindow(X, Y, 527, 258, 28); //坐标 大小 标题栏高度 + //WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "OnlineEventCloseKey")) { + MainState = false; + } + } +} + +function OnlineEvent_New_Lenheart(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("OnlineEventCObj")) { + local Cobj = OnlineEventC(); + RootTab.rawset("OnlineEventCObj", Cobj); + EventIcon("在线活动", 28, 4, Cobj); + } else { + RootTab["OnlineEventCObj"].Proc(obj); + RootTab["OnlineEventCObj"].Draw(obj); + } +} + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("OnlineEvent_New_LenheartFunc", OnlineEvent_New_Lenheart); +} else { + local T = {}; + T.rawset("OnlineEvent_New_LenheartFunc", OnlineEvent_New_Lenheart); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/Ptst/Ptst.nut b/Plugins/Ptst/Ptst.nut new file mode 100644 index 0000000..9d613e7 --- /dev/null +++ b/Plugins/Ptst/Ptst.nut @@ -0,0 +1,1432 @@ +/* +文件名:Ptst.nut +路径:Plugins/Ptst/Ptst.nut +创建日期:2023-03-15 13:50 +文件用途:护石系统 +*/ + + +//TabTextButtonPro按钮类 +class PtstTabTextButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + SwitchState = false; //复选框是否选中 + str = null; + strx = null; + stry = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + BaseAnifileFrame = null; //调用的Ani帧数 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gBaseAnifileFrame, gWidth, gLength, gstr, gstrx, gstry) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + BaseAnifileFrame = gBaseAnifileFrame; + width = gWidth; + length = gLength; + str = gstr; + strx = gstrx; + stry = gstry; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + //++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + //--y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown() && SwitchState == false) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + } + + if (RectEnble && SwitchState == false) //开启悬停效果时 + { + if ((isInRect()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + } + + if (!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseAnifileFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(221, 197, 147, 250), 1, 1); + } + + if (SwitchState) { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); + } + + + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() { + if (isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } +} + +//HudPro按钮类 +class PtstButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() { + if (isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } +} + +class PtstItem extends BasicsDrawTool { + X = null; + Y = null; + ItemId = null; + Attribute = null; + MCount = 0; + Rarity = null; + Explain = null; + TabName = ["名称: ", + "强化等级: ", + "力量 +", + "体力 +", + "智力 +", + "精神 +", + "独立攻击力 +", + "物理攻击力 +", + "魔法攻击力 +", + "物理防御 +", + "魔法防御 +", + "移动速度 +", + "攻击速度 +", + "释放速度 +", + "物理暴击 +", + "魔法暴击 +", + "命中率 +", + "光属性强化 +", + "暗属性强化 +", + "水属性强化 +", + "火属性强化 +", + "全属性强化 +" + ] + + constructor(Id, attribute, rarity, explain) { + ItemId = Id; + Attribute = attribute; + Rarity = rarity; + Explain = explain.tostring(); + } + + //获取字符串行数 + function GetStrLine(str) { + local line = 0; + local Bpos = 0; + while (true) { + local Npos = str.find("\n", Bpos); + if (!Npos) { + ++line; + break; + } + ++line; + Bpos = Npos + 1; + } + return line; + } + + //高级绘制文字(带换行) + function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc, hl) { + local strarr = []; + if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc); + else { + local Bpos = 0; + while (true) { + local Npos = str.find("\n", Bpos); + if (!Npos) { + local strbuff = str.slice(Bpos, str.len()); + strarr.append(strbuff); + break; + } + local strbuff = str.slice(Bpos, Npos); + strarr.append(strbuff); + Bpos = Npos + 1; + } + for (local z = 0; z < strarr.len(); z++) { + L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc); + } + } + + } + + //绘制悬停 + function DrawHover(obj) { + local dx; + local dy; + local line = Attribute.len() - 3; //减去名字 强化之类的偏移 + + //悬停界面总高度计算 + { + local X1 = 0; //防御力线偏移 + local X2 = 0; //四维和三攻线偏移 + local X3 = 0; //三速线偏移 + local X4 = 0; //属强线偏移 + local X5 = 0; //全属强线偏移 + MCount = 0; + for (local y = 0; y < Attribute.len(); y++) { + local gType = Attribute[y][0]; + //防御力 + if (gType == 9 || gType == 10) X1 = 1; + //四维和三攻 + if (gType >= 2 && gType <= 8) X2 = 1; + //三速 + if (gType >= 11 && gType <= 16) X3 = 1; + //属强 + if (gType >= 17 && gType <= 20) X4 = 1; + //全属强 + if (gType == 21) X5 = 1; + //守护珠数量 + if (gType >= 22 && gType <= 25) MCount++; + } + local ExplainLine = GetStrLine(Explain); + line = line + X1 + X2 + X3 + X4 + X5 + 1 - MCount + ExplainLine; //总共需要的长度 + } + + //界面是否靠近边界偏移计算 + { + if ((800 - X) >= 216) dx = X; + else dx = X - (216 - (800 - X)); + local needY = 19 + (line * 14) + 19; + if ((600 - Y) >= needY) dy = Y; + else dy = Y - (needY - (600 - Y)); + dx += 45; + dy -= 25; + } + + //主界面绘制 + { + //绘制顶 + T_DrawStayAni(obj, "common/ptst/main.ani", dx, dy, 25, "PtstItemInfoMainTopa"); + + //绘制线 + T_DrawStayAni(obj, "common/ptst/main.ani", dx, dy + 19, 26, "PtstItemInfoMainXiana"); + + //绘制中 + for (local i = 0; i < line; i++) { + T_DrawStayAni(obj, "common/ptst/main.ani", dx, dy + 19 + 14 + (i * 14), 27, "PtstItemInfoMainZhong"); + } + //绘制底 + T_DrawStayAni(obj, "common/ptst/main.ani", dx, dy + 19 + 14 + (line * 14), 28, "PtstItemInfoMainDi"); + + if (MCount > 0) L_sq_DrawCode("[ 已镶嵌守护珠: " + MCount + " ]", dx + 6, dy + 19 + 16 + (line * 14), sq_RGBA(255, 177, 0, 250), 1, 1); + } + + + //获取颜色 + local Colorobj = getroottable()["PtstObj"].ColorArr[Rarity]; + local RGBADATA = sq_RGBA(Colorobj[0], Colorobj[1], Colorobj[2], Colorobj[3]); + + //绘制名字 + L_sq_DrawCode(Attribute[0][1], dx + 6, dy + 6, RGBADATA, 1, 1); + + //绘制描述 + L_sq_DrawCode_Ex("" + Explain, dx + 6, dy + 6 + 30, sq_RGBA(255, 255, 255, 250), 1, 1, 20); + + + //绘制强化等级 + if (Attribute[1][1] != 0) L_sq_DrawCode("强化等级: " + Attribute[1][1], dx + 140, dy + 6, sq_RGBA(255, 177, 0, 250), 1, 1); + + //线的数量 + local XianCount = 0; + + local FYS = false; //防御属性是否绘制判断 + local SWS = false; //四维属性是否绘制判断 + local SGS = false; //三攻属性是否绘制判断 + local SSS = false; //三速属性是否绘制判断 + local SQS = false; //属强属性是否绘制判断 + + local cx = dx + 6; //起始点偏移(要从名字下面的线开始绘制) + local cy = dy + 20; //起始点偏移(要从名字下面的线开始绘制) + + local o = 2; //属性剔除前2无用属性 + local RGBA; //根据不同的属性绘制不同颜色字体 + + //防御属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于防御属性就终止 + if (gType != 9 && gType != 10) break; + + RGBA = sq_RGBA(119, 110, 95, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + ((o - 1) * 15), RGBA, 1, 1); + FYS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + //绘制线 + if (FYS) { + T_DrawStayAni(obj, "common/ptst/main.ani", dx, cy + ((o - 1) * 15) + (XianCount * 14), 29, "PtstItemInfoMainXianT"); + XianCount++; + } + + //四维属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于四维属性就终止 + if (gType < 2 || gType > 5) break; + + RGBA = sq_RGBA(141, 140, 109, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + SWS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + //三攻属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于三攻属性就终止 + if (gType < 6 || gType > 8) break; + + RGBA = sq_RGBA(255, 255, 216, 200); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + SGS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + if ((SGS || SWS) && (o < Attribute.len())) { + //绘制线 + T_DrawStayAni(obj, "common/ptst/main.ani", dx, cy + (XianCount * 14) + ((o - 1) * 15), 29, "PtstItemInfoMainXianT"); + XianCount++; + } + + //三速属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于三速属性就终止 + if (gType < 11 || gType > 16) break; + + RGBA = sq_RGBA(166, 215, 136, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1].tofloat() / 10.0; + L_sq_DrawCode(gTabName + gValue.tostring() + "%", cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + SSS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + if (SSS) { + //绘制线 + T_DrawStayAni(obj, "common/ptst/main.ani", dx, cy + (XianCount * 14) + ((o - 1) * 15), 29, "PtstItemInfoMainXianT"); + XianCount++; + } + + //属强属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于属强属性就终止 + if (gType < 17 || gType > 20) break; + + RGBA = sq_RGBA(240, 230, 135, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + SQS = true; + if (o == (Attribute.len() - 1 - MCount)) return; + } + + if (SQS) XianCount++; + + //全属强属性 + for (; o < Attribute.len(); o++) { + local gType = Attribute[o][0]; + //如果不属于全属强属性就终止 + if (gType != 21) break; + + RGBA = sq_RGBA(255, 177, 0, 250); + local gTabName = TabName[gType]; + local gValue = Attribute[o][1]; + L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); + if (o == (Attribute.len() - 1 - MCount)) return; + } + + + } + + function Run(x, y) { + X = x; + Y = y; + L_Sq_DrawItem(x, y, ItemId, 1, 0, 0, 0); + } +} + +class PtstSlot extends BasicsDrawTool { + + Type = null; + X = null; + Y = null; + Item = null; + ItemM = null; + Select = false; + SlotName = null; + + Tobj = null; + + Mobj = null; + + constructor(type) { + Type = type; + local RootTab = getroottable(); + Tobj = RootTab["PtstObj"]; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + function IsHover() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 28, 28)) { + //因为拖拽的时候会有两个重叠 所以要判断不是当前拿着的物品 + if (Tobj.MoveModel != SlotName) Tobj.HoverModel = SlotName; + return true; + } else return false; + } + + + //左键按下状态 + function isLBDown(obj) { + if (IsHover() && Mobj.Lb == 1) { + obj.getVar(SlotName + "L").setBool(1, true); + return true; + } else return false; + } + + //左键弹起状态 + function isLBUp(obj) { + if (Mobj.Lb == 0) { + obj.getVar(SlotName + "L").setBool(1, false); + return true; + } else return false; + } + + //右键按下状态 + function isRBDown(obj) { + if (IsHover() && Mobj.Rb == 1) { + obj.getVar(SlotName + "R").setBool(1, true); + return true; + } else return false; + } + + //右键单击状态 + function isRBActive(obj) { + if (IsHover() && Mobj.RbEvent && obj.getVar(SlotName + "R").getBool(1) == true) { + obj.getVar(SlotName + "R").setBool(1, false); + return true; + } else return false; + } + + function DrawHover(obj) { + if (SlotName >= 30 && SlotName <= 38) { + //绘制悬停槽蓝光 + if (Item) { + T_DrawStayAni(obj, "common/ptst/main.ani", X + 7, Y + 7, Type, "PtstSlotHover" + Type); + } + } else { + //绘制悬停槽蓝光 + T_DrawStayAni(obj, "common/ptst/main.ani", X, Y, Type, "PtstSlotHover" + Type); + } + + } + + //第一图层 + function Show(obj, x, y, slot) { + + SlotName = slot; + + if (Tobj.MoveModel != SlotName) { + X = x; + Y = y; + } else { + X = IMouse.GetXPos() - 14; + Y = IMouse.GetYPos() - 14; + } + + + if (slot >= 30 && slot <= 38) { + if (Item) { + T_DrawStayAni(obj, "common/ptst/main.ani", x, y, 6, "PtstSystemMainSlot2"); + T_DrawDynamicAni(obj, "common/ptst/ani/" + slot + ".ani", 114 + (X * 0.05).tointeger(), 69 + (Y * 0.05).tointeger(), "PtstSystemgx" + slot); + } else { + + //T_DrawStayAni(obj, "common/ptst/main.ani", x, y, 6, "PtstSystemMainSlot2"); + } + //T_DrawDynamicAni(obj, "common/ptst/ani/" + slot + ".ani", X - 46, Y - 24, "PtstSystemgx" + slot); + + if (Item && Tobj.MoveModel != SlotName) Item.Run(X + 7, Y + 6); + } else { + //如果有勋章对象则执行 + if (Item && Tobj.MoveModel != SlotName) Item.Run(X, Y); + } + + + + + + //如果悬停 + if (IsHover()) { + //绘制背景蓝光 移动时绘制蓝光要在图标底下 + if (Tobj.MoveModel != SlotName) DrawHover(obj); + + + isRBDown(obj); + //如果右键穿戴 + if (Item && isRBActive(obj)) { + local UsePtstPack = Json_STL("UsePtstPack"); + UsePtstPack.Put("op", 29991003); + UsePtstPack.Put("sel_type", Tobj.State); + + UsePtstPack.Put("old_slot", slot); + + + + if (slot <= 24) UsePtstPack.Put("new_slot", 88); + //if (slot > 88) UsePtstPack.Put("new_slot", 999999); + if (slot > 24) UsePtstPack.Put("new_slot", 999999); + + + + UsePtstPack.Put("page", Tobj.NowPage); + UsePtstPack.Put("type", Tobj.State); + local str = UsePtstPack.GetString(); + + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + UsePtstPack.Delete(); + } + } + + //如果左键按下 写入可移动状态 + if (Item && isLBDown(obj) && Tobj.MoveModel == null && slot < 88) { + Tobj.MoveModel = SlotName; + } + + //如果左键弹起 写入静止状态 + if (isLBUp(obj) && Tobj.MoveModel != null) { + local MovePtstPack = Json_STL("MovePtstPack"); + MovePtstPack.Put("op", 29991003); + MovePtstPack.Put("sel_type", Tobj.State); + + MovePtstPack.Put("old_slot", Tobj.MoveModel.tointeger()); + MovePtstPack.Put("new_slot", Tobj.HoverModel.tointeger()); + MovePtstPack.Put("page", Tobj.NowPage); + local str = MovePtstPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + MovePtstPack.Delete(); + + Tobj.MoveModel = null; + } + } + + //第二图层 + function ItemShow(obj) { + + if (IsHover() && Tobj.MoveModel == null) { + if (Item) Item.DrawHover(obj); + } + } + + //第三图层 拖动物品时的最高图层绘制 + function ItemMoveShow(obj) { + if (Item && Tobj.MoveModel == SlotName) Item.Run(X, Y); + } +} + + +class PtstWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class PtstC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 120; + Y = 50; + + + Sw = true; + + State = 24; + CheckGetMyPtstInfo = false; + PtstButton = null; + PtstButtonSwitch = true; + BeadButton = null; + BeadButtonSwitch = false; + + BuffSet = false; + + //背包格子 + SlotB = null; + //移动对象 + MoveModel = null; + //悬停对象 + HoverModel = null; + + //最大页数 Json获取 + MaxPage = 5; + //当前页数 Json获取 + NowPage = 1; + //颜色 + ColorArr = null; + + C_Slot0 = null; + C_Slot1 = null; + C_Slot2 = null; + C_Slot3 = null; + C_Slot4 = null; + C_Slot5 = null; + C_Slot6 = null; + C_Slot7 = null; + C_Slot8 = null; + + A_Slot0 = null; + A_Slot1 = null; + A_Slot2 = null; + + + constructor() { + //注册配置类信息回调 + Pack_Control.rawset(29991998, SetBaseInfoCallBack); + //请求配置信息 + GetBaseInfo(); + SlotB = []; + SlotB.resize(24); + + //注册获取背包信息回调 + Pack_Control.rawset(29991002, GetMyPtstInfoCallBack); + + //注册穿戴回调 + Pack_Control.rawset(29991012, GetMyWearPtstCallBack); + + //初始请求背包信息 + F_GetMyPtstInfo(24, 1); + } + + //穿戴信息回调 + function GetMyWearPtstCallBack(Chunk) { + //收到打开包 + + local Buffer = Json_STL("GetMyPtstInfoBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + + if (RootTab.rawin("PtstObj")) { + local Tobj = RootTab["PtstObj"]; + + //清空勋章对象 + Tobj.A_Slot0.Item = null; + Tobj.A_Slot1.Item = null; + Tobj.A_Slot2.Item = null; + + Tobj.C_Slot0.Item = null; + Tobj.C_Slot1.Item = null; + Tobj.C_Slot2.Item = null; + Tobj.C_Slot3.Item = null; + Tobj.C_Slot4.Item = null; + Tobj.C_Slot5.Item = null; + Tobj.C_Slot6.Item = null; + Tobj.C_Slot7.Item = null; + Tobj.C_Slot8.Item = null; + + + /* + //清空守护珠对象组 + for (local w = 0; w < 4; w++) { + Tobj.WearSlotB[w].Item = null; + } + */ + + for (local w = 0; w < 3; w++) { + local dataarrsize = Buffer.Get("data->" + w + "->dataarrsize"); + + if (dataarrsize) { + local dataarr = []; + for (local z = 0; z < dataarrsize; z++) { + local arrbuufer = []; + local a = Buffer.Get("data->" + w + "->stk_ab->" + z + "->0"); + local b = Buffer.Get("data->" + w + "->stk_ab->" + z + "->1"); + arrbuufer.append(a); + arrbuufer.append(b); + dataarr.append(arrbuufer); + } + local rarity = Buffer.Get("data->" + w + "->rarity"); + local explain = Buffer.Get("data->" + w + "->explain"); + local slot = Buffer.Get("data->" + w + "->slot"); + if (slot == 0) Tobj.A_Slot0.Item = PtstItem(Buffer.Get("data->" + w + "->stk_id"), dataarr, rarity, explain); + if (slot == 1) Tobj.A_Slot1.Item = PtstItem(Buffer.Get("data->" + w + "->stk_id"), dataarr, rarity, explain); + if (slot == 2) Tobj.A_Slot2.Item = PtstItem(Buffer.Get("data->" + w + "->stk_id"), dataarr, rarity, explain); + } + } + + for (local u = 0; u < 9; u++) { + local dataarrsize = Buffer.Get("fdata->" + u + "->dataarrsize"); + + if (dataarrsize) { + local dataarr = []; + for (local z = 0; z < dataarrsize; z++) { + local arrbuufer = []; + local a = Buffer.Get("fdata->" + u + "->stk_ab->" + z + "->0"); + local b = Buffer.Get("fdata->" + u + "->stk_ab->" + z + "->1"); + arrbuufer.append(a); + arrbuufer.append(b); + dataarr.append(arrbuufer); + } + local rarity = Buffer.Get("fdata->" + u + "->rarity"); + local explain = Buffer.Get("fdata->" + u + "->explain"); + local slot = Buffer.Get("fdata->" + u + "->slot"); + if (slot == 0) Tobj.C_Slot0.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + if (slot == 1) Tobj.C_Slot1.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + if (slot == 2) Tobj.C_Slot2.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + if (slot == 3) Tobj.C_Slot3.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + if (slot == 4) Tobj.C_Slot4.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + if (slot == 5) Tobj.C_Slot5.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + if (slot == 6) Tobj.C_Slot6.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + if (slot == 7) Tobj.C_Slot7.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + if (slot == 8) Tobj.C_Slot8.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); + } + } + + local obj = sq_GetMyMasterCharacter(); + if (obj) + Tobj.SetSkillData(obj); + } + } + + //请求配置信息 + function GetBaseInfo() { + local GetBaseInfoPack = Json_STL("GetBaseInfoPack"); + GetBaseInfoPack.Put("op", 29991997); + local str = GetBaseInfoPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetBaseInfoPack.Delete(); + } + + //配置类信息回调 + function SetBaseInfoCallBack(Chunk) { + + local Buffer = Json_STL("GetMyPtstInfoBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + if (RootTab.rawin("PtstObj")) { + local Tobj = RootTab["PtstObj"]; + Tobj.MaxPage = Buffer.Get("slotpage"); + Tobj.ColorArr = []; + for (local i = 0; i < 8; i++) { + local arrbuffer = [] + arrbuffer.append(Buffer.Get("color" + i + "->0")); + arrbuffer.append(Buffer.Get("color" + i + "->1")); + arrbuffer.append(Buffer.Get("color" + i + "->2")); + arrbuffer.append(250); + Tobj.ColorArr.append(arrbuffer); + } + } + } + + //首次获取背包信息 + function F_GetMyPtstInfo(Type, Page) { + local GetMyMedalInfoPack = Json_STL("GetMyMedalInfoPack"); + GetMyMedalInfoPack.Put("op", 29991001); + GetMyMedalInfoPack.Put("sel_type", Type); + GetMyMedalInfoPack.Put("page", Page); + GetMyMedalInfoPack.Put("wear", true); + local str = GetMyMedalInfoPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetMyMedalInfoPack.Delete(); + } + + //获取背包信息回调 + function GetMyPtstInfoCallBack(Chunk) { + //收到打开包 + + local Buffer = Json_STL("GetMyPtstInfoBuffer"); + Buffer.Parse(Chunk, 0, false); + local RootTab = getroottable(); + + if (RootTab.rawin("PtstObj")) { + local Tobj = RootTab["PtstObj"]; + + { //同步页面(勋章或守护珠) + local SelType = Buffer.Get("sel_type"); + Tobj.State = SelType; + if (SelType == 24) { + Tobj.PtstButtonSwitch = true; + Tobj.BeadButtonSwitch = false; + } else if (SelType == 23) { + Tobj.PtstButtonSwitch = false; + Tobj.BeadButtonSwitch = true; + } + } + + //Tobj.SlotArr = []; + local Count = Buffer.Get("count"); + + for (local z = 0; z < 24; z++) { + Tobj.SlotB[z].Item = null; + } + for (local i = 0; i < Count; i++) { + local SlotPos = Buffer.Get("data->" + i + "->slot"); + local dataarrsize = Buffer.Get("data->" + i + "->dataarrsize"); + local dataarr = []; + for (local z = 0; z < dataarrsize; z++) { + local arrbuufer = []; + local a = Buffer.Get("data->" + i + "->stk_ab->" + z + "->0"); + local b = Buffer.Get("data->" + i + "->stk_ab->" + z + "->1"); + + + arrbuufer.append(a); + arrbuufer.append(b); + dataarr.append(arrbuufer); + } + local rarity = Buffer.Get("data->" + i + "->rarity"); + local explain = Buffer.Get("data->" + i + "->explain"); + //Tobj.SlotB[SlotPos].Item = PtstItem(Buffer.Get("data->" + i + "->stk_id"), dataarr, rarity,explain,explainlen); + Tobj.SlotB[SlotPos].Item = PtstItem(Buffer.Get("data->" + i + "->stk_id"), dataarr, rarity, explain); + } + } + + + } + + //获取背包信息 + function GetMyPtstInfo(Type, Page) { + local GetMyPtstInfoPack = Json_STL("GetMyPtstInfoPack"); + GetMyPtstInfoPack.Put("op", 29991001); + GetMyPtstInfoPack.Put("sel_type", Type); + GetMyPtstInfoPack.Put("page", Page); + GetMyPtstInfoPack.Put("wear", false); + local str = GetMyPtstInfoPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + GetMyPtstInfoPack.Delete(); + } + + //绘制主界面 + function DrawMain(obj) { + { //底图层绘制 + //窗口 + T_DrawStayAni(obj, "common/ptst/main.ani", X - 120 + 120, Y - 50 + 50, 0, "PtstSystemMain"); + //T_DrawStayAni(obj, "common/ptst/main.ani", X - 120 + 380, Y - 50 + 50, 1, "PtstSystemMain2"); + + T_DrawDynamicAni(obj, "common/ptst/mainjg.ani", X - 120 + 126, Y - 50 + 77, "PtstSystemMain4") + } + + { //勋章和守护珠切换按钮 + PtstButton = PtstTabTextButtonPro(obj, "小护石Tab", X - 120 + 5 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 2, 48, 21, " 护石", 8, 5); + PtstButton.SwitchState = PtstButtonSwitch; + PtstButton.SetRectEnble(true, "a护石Tab", X - 120 + 5 + 1 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 3); + PtstButton.SetCustomClickEnble(true, "a护石Tab", X - 120 + 5 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 4); + + //勋章 + PtstButton.Show(); + if (PtstButton.isLBActive()) { + //PtstButton.SwitchState = true; + PtstButtonSwitch = true; + //BeadButton.SwitchState = false; + BeadButtonSwitch = false; + State = 24; + //清空槽对象 + SlotB = []; + SlotB = null; + //还原页码 + NowPage = 1; + GetMyPtstInfo(State, NowPage); + } + + BeadButton = PtstTabTextButtonPro(obj, "小符文Tab", X - 120 + 5 + 50 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 2, 48, 21, " 符文", 8, 5); + BeadButton.SwitchState = BeadButtonSwitch; + BeadButton.SetRectEnble(true, "a符文Tab", X - 120 + 5 + 51 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 3); + BeadButton.SetCustomClickEnble(true, "a符文Tab", X - 120 + 5 + 50 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 4); + //守护珠 + BeadButton.Show(); + if (BeadButton.isLBActive()) { + PtstButton.SwitchState = false; + PtstButtonSwitch = false; + BeadButton.SwitchState = true; + BeadButtonSwitch = true; + State = 23; + //清空槽对象 + SlotB = []; + SlotB = null; + //还原页码 + NowPage = 1; + GetMyPtstInfo(State, NowPage); + } + } + + { //翻页 + local LeftButton = PtstButtonPro(obj, "PtstLeftButton", X - 120 + 150 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 13, 9, 11); + LeftButton.SetRectEnble(true, "PtstLeftButtonr", X - 120 + 150 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 13); + LeftButton.SetCustomClickEnble(true, "PtstLeftButtonc", X - 120 + 150 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 12); + LeftButton.Show(); + + if (LeftButton.isLBActive()) { + //页码减少 + if (NowPage > 1) NowPage--; + //清空槽对象 + SlotB = []; + SlotB = null; + GetMyPtstInfo(State, NowPage); + } + + local RightButton = PtstButtonPro(obj, "PtstRightButton", X - 120 + 200 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 13, 9, 7); + RightButton.SetRectEnble(true, "PtstRightButtonr", X - 120 + 200 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 9); + RightButton.SetCustomClickEnble(true, "PtstRightButtonc", X - 120 + 200 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 8); + RightButton.Show(); + + if (RightButton.isLBActive()) { + //页码增加 + if (NowPage < MaxPage) NowPage++; + //清空槽对象 + SlotB = []; + SlotB = null; + GetMyPtstInfo(State, NowPage); + } + + L_sq_DrawCode(NowPage + "/" + MaxPage, X - 120 + 175 + 39 + 110, Y - 50 + 258 + 68, sq_RGBA(230, 200, 155, 250), 1, 1); + } + + + { //背包格子 + + //绘制 + { + if (!SlotB || SlotB.len() <= 0) return; + //第一图层 + for (local q = 0; q < 24; q++) { + SlotB[q].Show(obj, X - 120 + 137 + ((q % 8) * 28), Y - 50 + 346 + ((q / 8) * 31), q); + } + + C_Slot0.Show(obj, X - 120 + 118 + 56, Y - 50 + 48 + 55, 30); + C_Slot1.Show(obj, X - 120 + 118 + 110, Y - 50 + 48 + 37, 31); + C_Slot2.Show(obj, X - 120 + 118 + 164, Y - 50 + 48 + 55, 32); + C_Slot3.Show(obj, X - 120 + 118 + 205, Y - 50 + 48 + 127, 33); + C_Slot4.Show(obj, X - 120 + 118 + 194, Y - 50 + 48 + 182, 34); + C_Slot5.Show(obj, X - 120 + 118 + 152, Y - 50 + 48 + 220, 35); + C_Slot6.Show(obj, X - 120 + 118 + 68, Y - 50 + 48 + 220, 36); + C_Slot7.Show(obj, X - 120 + 118 + 26, Y - 50 + 48 + 182, 37); + C_Slot8.Show(obj, X - 120 + 118 + 15, Y - 50 + 48 + 127, 38); + + A_Slot0.Show(obj, X - 120 + 120 + 115, Y - 50 + 50 + 110, 90); + A_Slot1.Show(obj, X - 120 + 120 + 90, Y - 50 + 50 + 153, 91); + A_Slot2.Show(obj, X - 120 + 120 + 140, Y - 50 + 50 + 153, 92); + + //第二图层 + for (local u = 0; u < 24; u++) { + SlotB[u].ItemShow(obj); + } + C_Slot0.ItemShow(obj); + C_Slot1.ItemShow(obj); + C_Slot2.ItemShow(obj); + C_Slot3.ItemShow(obj); + C_Slot4.ItemShow(obj); + C_Slot5.ItemShow(obj); + C_Slot6.ItemShow(obj); + C_Slot7.ItemShow(obj); + C_Slot8.ItemShow(obj); + + A_Slot0.ItemShow(obj); + A_Slot1.ItemShow(obj); + A_Slot2.ItemShow(obj); + + for (local z = 0; z < 24; z++) { + SlotB[z].ItemMoveShow(obj); + } + C_Slot0.ItemMoveShow(obj); + C_Slot1.ItemMoveShow(obj); + C_Slot2.ItemMoveShow(obj); + C_Slot3.ItemMoveShow(obj); + C_Slot4.ItemMoveShow(obj); + C_Slot5.ItemMoveShow(obj); + C_Slot6.ItemMoveShow(obj); + C_Slot7.ItemMoveShow(obj); + C_Slot8.ItemMoveShow(obj); + + + A_Slot0.ItemMoveShow(obj); + A_Slot1.ItemMoveShow(obj); + A_Slot2.ItemMoveShow(obj); + } + } + } + + //设置技能数据 + function SetSkillData(obj) { + obj = sq_ObjectToSQRCharacter(obj); + ClearTalismanData(); + if (A_Slot0.Item && getroottable().rawin("LenheartTalisman_" + A_Slot0.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + A_Slot0.Item.ItemId]; + Func(obj); + } + if (A_Slot1.Item && getroottable().rawin("LenheartTalisman_" + A_Slot1.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + A_Slot1.Item.ItemId]; + Func(obj); + } + if (A_Slot2.Item && getroottable().rawin("LenheartTalisman_" + A_Slot2.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + A_Slot2.Item.ItemId]; + Func(obj); + } + if (C_Slot0.Item && getroottable().rawin("LenheartTalisman_" + C_Slot0.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot0.Item.ItemId]; + Func(obj); + } + if (C_Slot1.Item && getroottable().rawin("LenheartTalisman_" + C_Slot1.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot1.Item.ItemId]; + Func(obj); + } + if (C_Slot2.Item && getroottable().rawin("LenheartTalisman_" + C_Slot2.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot2.Item.ItemId]; + Func(obj); + } + if (C_Slot3.Item && getroottable().rawin("LenheartTalisman_" + C_Slot3.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot3.Item.ItemId]; + Func(obj); + } + if (C_Slot4.Item && getroottable().rawin("LenheartTalisman_" + C_Slot4.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot4.Item.ItemId]; + Func(obj); + } + if (C_Slot5.Item && getroottable().rawin("LenheartTalisman_" + C_Slot5.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot5.Item.ItemId]; + Func(obj); + } + if (C_Slot6.Item && getroottable().rawin("LenheartTalisman_" + C_Slot6.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot6.Item.ItemId]; + Func(obj); + } + if (C_Slot7.Item && getroottable().rawin("LenheartTalisman_" + C_Slot7.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot7.Item.ItemId]; + Func(obj); + } + if (C_Slot8.Item && getroottable().rawin("LenheartTalisman_" + C_Slot8.Item.ItemId)) { + local Func = getroottable()["LenheartTalisman_" + C_Slot8.Item.ItemId]; + Func(obj); + } + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + //初始请求背包信息 + F_GetMyPtstInfo(24, 1); + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = PtstWindow(X, Y, 258, 408, 28); //坐标 大小 标题栏高度 + //WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "PtstCloseKey")) { + MainState = false; + } + + //初始化槽和道具对象 + if (SlotB == null) { + SlotB = []; + SlotB.resize(24); + } + for (local i = 0; i < 24; i++) { + if (SlotB[i] == null) SlotB[i] = PtstSlot(5); + } + + { + if (C_Slot0 == null) C_Slot0 = PtstSlot(5); + if (C_Slot1 == null) C_Slot1 = PtstSlot(5); + if (C_Slot2 == null) C_Slot2 = PtstSlot(5); + if (C_Slot3 == null) C_Slot3 = PtstSlot(5); + if (C_Slot4 == null) C_Slot4 = PtstSlot(5); + if (C_Slot5 == null) C_Slot5 = PtstSlot(5); + if (C_Slot6 == null) C_Slot6 = PtstSlot(5); + if (C_Slot7 == null) C_Slot7 = PtstSlot(5); + if (C_Slot8 == null) C_Slot8 = PtstSlot(5); + + if (A_Slot0 == null) A_Slot0 = PtstSlot(5); + if (A_Slot1 == null) A_Slot1 = PtstSlot(5); + if (A_Slot2 == null) A_Slot2 = PtstSlot(5); + } + + if (sq_GetCurrentModuleType() == 3) { + if (!BuffSet) { + SetSkillData(obj); + BuffSet = true; + } + } else { + if (BuffSet) BuffSet = false; + } + + } +} + + + +function Ptst(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("PtstObj")) { + local Cobj = PtstC(); + RootTab.rawset("PtstObj", Cobj); + EventIcon("护石系统", 120, 120, Cobj); + } else { + RootTab["PtstObj"].Proc(obj); + RootTab["PtstObj"].Draw(obj); + } +} + + diff --git a/Plugins/Ptst/Ptst_Func.nut b/Plugins/Ptst/Ptst_Func.nut new file mode 100644 index 0000000..179c616 --- /dev/null +++ b/Plugins/Ptst/Ptst_Func.nut @@ -0,0 +1,186 @@ +/* +文件名:Ptst_Func.nut +路径:Plugins/Ptst/Ptst_Func.nut +创建日期:2023-07-08 15:47 +文件用途: +*/ + +function AddTalismanIntData(obj, SkillId, Idx, Value) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "LJ" + objAddress + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + basedata += Value; + RootTab.rawset(Key, basedata); + } else RootTab.rawset(Key, Value); +} + +function AddTalismanLevelData(obj, SkillId, Idx, Value) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "EX_LJ" + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + basedata += Value; + RootTab.rawset(Key, basedata); + } else RootTab.rawset(Key, Value); +} + +function AddTalismanSkillCoolTime(obj, SkillId, Value) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "CT_LJ" + "SkillAddress" + SkillAddress; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + basedata += Value; + RootTab.rawset(Key, basedata); + } else RootTab.rawset(Key, Value); +} + +function ClearTalismanData() { + local Root = getroottable(); + if (Root.rawin("LenheartTalismanSkillManager")) { + Root.rawdelete("LenheartTalismanSkillManager"); + } +} +//获取原始静态数据 +function GetTalismanBaseIntData(obj, SkillId, Idx) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "LJ" + objAddress + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + return obj.sq_GetIntData(SkillId, Idx) - basedata; + } else return obj.sq_GetIntData(SkillId, Idx); +} + +//获取原始静态数据 +function GetTalismanBaseLevelData(obj, SkillId, Idx) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "EX_LJ" + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + return obj.sq_GetLevelData(SkillId, Idx, sq_GetSkillLevel(obj, SkillId)) - basedata; + } else return obj.sq_GetLevelData(SkillId, Idx, sq_GetSkillLevel(obj, SkillId)); +} + +//获取原始冷却时间 +function GetTalismanBaseCoolTime(obj, SkillId) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "CT_LJ" + "SkillAddress" + SkillAddress; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + return sq_GetSkill(obj,SkillId).getCoolTime(obj, -1) - basedata; + } else return sq_GetSkill(obj,SkillId).getCoolTime(obj, -1); +} + +//光芒圣痕拔刀奥义 +function LenheartTalisman_100401044(obj) { + //准备动作时间 + AddTalismanIntData(obj, 9, 0, -((GetTalismanBaseIntData(obj, 9, 0) * 0.3).tointeger())); + //拔刀伤害 + AddTalismanLevelData(obj, 9, 0, ((GetTalismanBaseLevelData(obj, 9, 0) * 0.28).tointeger())); +} + +//光芒圣痕:无形剑舞 +function LenheartTalisman_100401046(obj) { + //攻击范围 + AddTalismanIntData(obj, 73, 13, -((GetTalismanBaseIntData(obj, 73, 13) * 0.25).tointeger())); + AddTalismanIntData(obj, 73, 14, -((GetTalismanBaseIntData(obj, 73, 14) * 0.25).tointeger())); + //多段攻击次数 + AddTalismanIntData(obj, 73, 1, 8); + AddTalismanIntData(obj, 73, 2, 8); + AddTalismanIntData(obj, 73, 3, 8); + AddTalismanIntData(obj, 73, 4, 8); + AddTalismanIntData(obj, 73, 5, 8); + AddTalismanIntData(obj, 73, 6, 8); + AddTalismanIntData(obj, 73, 7, 8); + AddTalismanIntData(obj, 73, 8, 8); + AddTalismanIntData(obj, 73, 11, 8); + AddTalismanIntData(obj, 73, 12, 8); +} + +//光芒圣痕:猛龙过江 +function LenheartTalisman_100401045(obj) { + //多段攻击次数上限 + AddTalismanIntData(obj, 72, 1, 5); + //攻击力 + AddTalismanLevelData(obj, 72, 0, -((GetTalismanBaseLevelData(obj, 72, 0) * 0.57).tointeger())); + AddTalismanLevelData(obj, 72, 1, -((GetTalismanBaseLevelData(obj, 72, 1) * 0.57).tointeger())); +} + +//光芒圣痕:流星审判 +function LenheartTalisman_100401047(obj) { + //流星剑间隔 + AddTalismanLevelData(obj, 235, 7, -((GetTalismanBaseLevelData(obj, 235, 7) * 0.2).tointeger())); + //流星剑数量 + AddTalismanLevelData(obj, 235, 6, 9); +} + +//光芒圣痕:一合残像 +function LenheartTalisman_100401049(obj) { + //爆炸攻击力 + AddTalismanLevelData(obj, 234, 2, ((GetTalismanBaseLevelData(obj, 234, 2) * 0.21).tointeger())); +} + +//光芒圣痕:破空一刀 +function LenheartTalisman_100401048(obj) { + //准备动作时间 + AddTalismanLevelData(obj, 97, 2, -((GetTalismanBaseLevelData(obj, 97, 2) * 0.4).tointeger())); + + AddTalismanSkillCoolTime(obj,97,-((GetTalismanBaseCoolTime(obj,97) * 0.1).tointeger())); +} + + +//光芒圣痕:最后一斩 +function LenheartTalisman_100401050(obj) { + //攻击力 + AddTalismanLevelData(obj, 236, 1, -((GetTalismanBaseLevelData(obj, 236, 1) * 0.13).tointeger())); + AddTalismanLevelData(obj, 236, 2, -((GetTalismanBaseLevelData(obj, 236, 2) * 0.13).tointeger())); + AddTalismanLevelData(obj, 236, 4, -((GetTalismanBaseLevelData(obj, 236, 4) * 0.13).tointeger())); +} \ No newline at end of file diff --git a/Plugins/RaidAuction/RaidAuction.nut b/Plugins/RaidAuction/RaidAuction.nut new file mode 100644 index 0000000..2c6fa47 --- /dev/null +++ b/Plugins/RaidAuction/RaidAuction.nut @@ -0,0 +1,438 @@ +/* +文件名:RaidAuction.nut +路径:Plugins/RaidAuction/RaidAuction.nut +创建日期:2023-04-24 15:43 +文件用途:团本竞拍 +*/ + +//HudPro按钮类 +class RAIDAUCTIONButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class RAIDAUCTIONWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + //Y坐标 + Y = null; + + YMouseSw = true; + Mobj = null; //鼠标对象 + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + } + + function Show(obj) { + //sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + + } +} + + +class RAIDAUCTIONC extends BasicsDrawTool { + + Window = null; + WindowName = null; + X = 235; + Y = 109; + State = 0; + + AuctionPack = null; + Cost = null; + NowPrice = null; + + TimeObj = null; + + + function Raid_Auction_Item_Pack_CallBack(Chunk) { + //Sout("收到包内容为 \n %L", Chunk); + local Buffer = Json_STL("Raid_Auction_Item_Pack_CallBack"); + Buffer.Parse(Chunk, 0, false); + + local RootTab = getroottable(); + if (RootTab.rawin("RAIDAUCTIONObj")) { + RootTab["RAIDAUCTIONObj"].State = 1; + RootTab["RAIDAUCTIONObj"].Cost = Buffer.Get("cost"); + RootTab["RAIDAUCTIONObj"].WindowName = Buffer.Get("PDungeon_Name"); + RootTab["RAIDAUCTIONObj"].AuctionTimeReset(); + + RootTab["RAIDAUCTIONObj"].AuctionPack = null; + RootTab["RAIDAUCTIONObj"].AuctionPack = []; + + for (local i = 0; i < 5; i++) { + local Gid = Buffer.Get("auctionpack->" + i + "->id"); + if (Gid == false) break; + local Gcount = Buffer.Get("auctionpack->" + i + "->count"); + local Gname = Buffer.Get("auctionpack->" + i + "->name"); + local Grarity = Buffer.Get("auctionpack->" + i + "->rarity"); + local Gprice = Buffer.Get("auctionpack->" + i + "->price"); + + // local Gnow = i == 0 ? true : false; + local Gnow = Buffer.Get("auctionpack->" + i + "->now"); + local Gover = Buffer.Get("auctionpack->" + i + "->over"); + local Gplayer = Buffer.Get("auctionpack->" + i + "->playername"); + local T = { + id = Gid, + count = Gcount, + name = Gname, + rarity = Grarity, + price = Gprice, + now = Gnow, + over = Gover, + player = Gplayer, + } + RootTab["RAIDAUCTIONObj"].AuctionPack.append(T); + } + + } + } + + function Raid_Auction_Close_Window_CallBack(Chunk) { + ////Sout("收到包内容为 \n %L", Chunk); + //local Buffer = Json_STL("Raid_Auction_Item_Pack_CallBack"); + //Buffer.Parse(Chunk, 0, false); + + local RootTab = getroottable(); + if (RootTab.rawin("RAIDAUCTIONObj")) { + RootTab["RAIDAUCTIONObj"].State = 0; + RootTab["RAIDAUCTIONObj"].Cost = null; + RootTab["RAIDAUCTIONObj"].WindowName = null; + RootTab["RAIDAUCTIONObj"].AuctionPack = null; + } + } + + constructor() { + AuctionPack = []; + + + + + //注册装备信息回调 + Pack_Control.rawset(25700002, Raid_Auction_Item_Pack_CallBack); + //关闭窗口回调 + Pack_Control.rawset(25700008, Raid_Auction_Close_Window_CallBack); + } + + + function AuctionTimeReset() { + if (TimeObj) TimeObj.Delete(); + TimeObj = null; + TimeObj = TimeSTL("AuctionTimeObj", 15000); + TimeObj.Start(); + } + + function Proc(obj) { + //窗口打开生成窗口 + if (!this.Window && State == 1) { + this.Window = RAIDAUCTIONWindow(235, 109, 329, 382, 24); + } else if (this.Window && State == 1) { + this.Window.Show(obj); + } else if (State == 0) { + if (this.Window && this.Window.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + this.Window.YMouseSw = true; + } + } + + if (KeyPressNB.isKeyPress(48, "RaidAuction")) { + State = 0; + } + + } + + + + //绘制主界面 + function DrawMain(obj) { + //主界面背景 + T_DrawStayAni(obj, "common/raid_auction/yosin/tbjp.ani", X, Y, 4, "Raid_AuctionSystemMain"); + + //绘制窗口名字 + L_sq_DrawCode("副本: 【" + WindowName + "】 的竞拍", X + 112, Y + 7, sq_RGBA(255, 255, 184, 250), 0, 1); + } + + //绘制竞拍项目 + function DrawItem(obj) { + foreach(Pos, Item in AuctionPack) { + + if (Item.now == true) { + T_DrawStayAni(obj, "common/raid_auction/yosin/tbjp.ani", X + 38 + (Pos * 50), Y + 40, 3, "Raid_AuctionSystemSlotLight"); + T_DrawStayAni(obj, "common/raid_auction/yosin/tbjp.ani", X + 38 + (Pos * 50), Y + 40, 7, "Raid_AuctionSystemSlotLight + 1"); + //绘制竞拍物品名字 + L_sq_DrawCode("【" + Item.name + "】", X + 52, Y + 230 - 35, sq_RGBA(255, 255, 184, 250), 0, 1); + //绘制竞拍者名字 + L_sq_DrawCode("【" + Item.player + "】", X + 52, Y + 230, sq_RGBA(255, 255, 184, 250), 0, 1); + //绘制当前价格 + L_sq_DrawCode(Item.price.tostring(), X + 52 + 172, Y + 230, sq_RGBA(255, 255, 184, 250), 0, 1); + NowPrice = Item.price; + } + L_Sq_DrawItem(X + 51 + (Pos * 50), Y + 53, Item.id, Item.count, 0, 0, 0); + if (Item.over == true) { + T_DrawStayAni(obj, "common/raid_auction/yosin/tbjp.ani", X + 48 + (Pos * 50), Y + 50, 5, "Raid_AuctionSystemSlotOver"); + } + } + } + + //绘制进度条 + function DrawTimeP(obj) { + if (TimeObj == null) return; + + local Time = TimeObj.Get(); + local NTime = ((15000 - Time).tofloat() / 1000.0).tostring(); + local HRate = Time.tofloat() / 15000.0; + + + //进度条 + setClip(X + 29, Y + 119, X + 29 + 272 - (272.0 * HRate).tointeger(), Y + 119 + 12); //开始裁切 + T_DrawStayAni(obj, "common/raid_auction/yosin/tbjp.ani", X + 29, Y + 119, 6, "Raid_AuctionSystemTimeP"); + releaseClip(); //裁切结束 + + //剩余时间 + L_sq_DrawCode("剩余时间: " + NTime + "s", X + 128, Y + 119, sq_RGBA(21, 187, 255, 250), 0, 1); + } + + + function GetNum(count) { + local a = 1; + if (count == 0) return a; + local b = 10; + for (local i = 0; i < count - 1; i++) { + b *= b; + } + return a * b; + } + //绘制按钮 + function DrawAuctionButton(obj) { + + for (local i = 0; i < 3; i++) { + local Button = RAIDAUCTIONButtonPro(obj, "Raid_AuctionButton" + i, X + 28 + (i * 98), Y + 266, "common/raid_auction/yosin/tbjp.ani", 77, 24, 0); + Button.SetRectEnble(true, "Raid_AuctionButtonr" + i, X + 28 + (i * 98), Y + 266, "common/raid_auction/yosin/tbjp.ani", 1); + Button.SetCustomClickEnble(true, "Raid_AuctionButtonc" + i, X + 28 + (i * 98), Y + 266, "common/raid_auction/yosin/tbjp.ani", 2); + Button.Show(); + + L_sq_DrawCode("+" + GetNum(i), X + 60 + (i * 98), Y + 272, sq_RGBA(21, 187, 255, 250), 0, 1); + if (Button.isLBActive()) { + //print(i); + local T = { + op = 25700003, + price = NowPrice + GetNum(i), + cost = this.Cost, + addcost = GetNum(i), + } + + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + } + + } + + + function Draw(obj) { + if (State == 1) { + DrawMain(obj); //绘制主界面 + + DrawItem(obj); //绘制竞拍项目 + + DrawTimeP(obj); //绘制进度条 + + DrawAuctionButton(obj); //绘制按钮 + } + } +} + + + + + + + + + + + +function Raid_Auction(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("RAIDAUCTIONObj")) { + local Cobj = RAIDAUCTIONC(); + RootTab.rawset("RAIDAUCTIONObj", Cobj); + } else { + RootTab["RAIDAUCTIONObj"].Proc(obj); + RootTab["RAIDAUCTIONObj"].Draw(obj); + } + // print(11); +} \ No newline at end of file diff --git a/Plugins/Roters/New_Roters.nut b/Plugins/Roters/New_Roters.nut new file mode 100644 index 0000000..834a45c --- /dev/null +++ b/Plugins/Roters/New_Roters.nut @@ -0,0 +1,328 @@ +class New_RotersC extends BasicsDrawTool { + //世界BOSS是否打开 + EventState = false; + //活动开启的动画是否播放过 + EventAnimationPlayFlag = false; + //活动开启动画Timer + EventAnimationTimer = null; + + + //基础奖励道具信息 + RewardInfo = null; + ItemInfoObject = null; + ItemInfoDrawS = null; + //排名信息 + RankInfo = null; + + //BOSS血量 + BOSS_HP_RATE = 1; + + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 124; + Y = 16; + + + //收包逻辑 + function GetWolrdBossEventStateCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + switch (Jso.State) { + //未开启 + case 0: { + + } + break; + //开启中 + case 1: { + if (EventState == false) { + EventState = true; + EventAnimationPlayFlag = true; + EventIcon("世界BOSS ", 232, 232, this); + } + } + break; + //结算中 + case 2: { + if (EventState == false) { + EventState = true; + EventAnimationPlayFlag = true; + EventIcon("世界BOSS ", 232, 232, this); + } + } + break; + default: + break; + } + } + + //获取排名信息 + function GetWorldBossEventRankInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + RankInfo = Jso.RankInfo; + BOSS_HP_RATE = Jso.BossHpRate; + if (BOSS_HP_RATE == 0) BOSS_HP_RATE = 0.01; + } + + //获取基础信息包 + function GetWorldBossEventBaseInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + RewardInfo = Jso.RewardInfo; + local GetItemInfoArr = []; + foreach(Value in RewardInfo) { + if (!(ItemInfoObject.rawin(Value))) { + GetItemInfoArr.append(Value); + } + } + if (GetItemInfoArr.len() > 0) { + local T = { + op = 20231010, + realop = 20060020, + itemId = RewardInfo, + Type = 2, + } + SendPack(T); + } + } + + function GetWorldBossEventBaseItemInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + foreach(Pos, Value in Jso.itemInfo) { + if (Value.Name2.len() == 0) + Value.Name2 = "Yosin-Team"; + ItemInfoObject.rawset(Jso.itemId[Pos], Value); + } + } + //收包逻辑 + + + + + //发包逻辑 + function GetWolrdBossEventState() { + local T = { + op = 20060001 + } + SendPack(T); + } + + function GetWorldBossEventRankInfo() { + local T = { + op = 20060003, + Page = 0 + } + SendPack(T); + } + + function GetWorldBossEventBaseInfo() { + local T = { + op = 20060009, + } + SendPack(T); + } + //发包逻辑 + + + + + + constructor() { + ItemInfoObject = {}; + //判断活动是否开启 + Pack_Control.rawset(20060002, GetWolrdBossEventStateCallBack.bindenv(this)); + //获取排名信息 + Pack_Control.rawset(20060004, GetWorldBossEventRankInfoCallBack.bindenv(this)); + //获取基础信息包 + Pack_Control.rawset(20060010, GetWorldBossEventBaseInfoCallBack.bindenv(this)); + //获取道具信息 + Pack_Control.rawset(20060020, GetWorldBossEventBaseItemInfoCallBack.bindenv(this)); + + + + + + GetWolrdBossEventState(); + GetWorldBossEventRankInfo(); + GetWorldBossEventBaseInfo(); + } + + + //绘制道具带道具信息 + function DrawItemEx(X, Y, Id, Count) { + L_sq_DrawImg("roters/rankmain.img", 9, X - 4, Y - 2); + L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X; + ItemInfoDrawS.Y <- Y; + ItemInfoDrawS.ItemId <- Id; + } + } + + + + + //绘制世界Boss渐出动画 + function ShowEventOpenAnimation(obj) { + if (!EventAnimationPlayFlag) return; + if (EventAnimationTimer == null) EventAnimationTimer = Clock(); + + local A = 60; + if (EventAnimationTimer) { + if (Clock() - EventAnimationTimer <= 2000) { + A = sq_GetUniformVelocity(60, 255, Clock() - EventAnimationTimer, 2000); + } + if (Clock() - EventAnimationTimer <= 4000 && Clock() - EventAnimationTimer > 2000) { + A = sq_GetUniformVelocity(255, 0, Clock() - EventAnimationTimer - 2000, 2000); + } + if (Clock() - EventAnimationTimer > 4000) { + EventAnimationTimer = null; + EventAnimationPlayFlag = false; + } else { + L_sq_DrawImg("roters/rankmain.img", 1, 80, 20, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0); + } + } + } + + + //绘制主界面 + function DrawMain(obj) { + //Item信息框一般为211的宽度 + L_sq_DrawWindow(X, Y, 540, 470, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + L_sq_DrawImg("roters/rankmain.img", 0, X + 9, Y + 6); + + //Boss血量 + setClip(X + 15, Y + 30, X + 15 + (532 * BOSS_HP_RATE).tointeger(), Y + 30 + 17); //开始裁切 + L_sq_DrawImg("roters/rankmain.img", 8, X + 15, Y + 30); + releaseClip(); //裁切结束 + + //TODO 要判断这次攻坚是否成功了 成功了就不绘制 + L_sq_DrawImg("roters/rankmaineff.img", 0, X + 13, Y + 50); + + + + //绘制奖励 + if (RewardInfo) { + L_sq_DrawWindow(X + 10, Y + 228, 100, 48, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawCode("活动奖励预览", X + 24, Y + 240, sq_RGBA(251, 251, 181, 250), 1, 1); + foreach(Pos, Value in RewardInfo) { + DrawItemEx(X + 22 + (Pos * 34), Y + 264, Value, 1); + } + } + + + //绘制排名 + if (RankInfo) { + foreach(Pos, Value in RankInfo) { + if (Pos< 10) { + L_sq_DrawCode(Value.RankTop.tostring(), X + 46 - LenheartTextClass.GetStringLength(Value.RankTop.tostring()) / 2, Y + 324 + (Pos * 16), sq_RGBA(251, 251, 181, 250), 1, 1); + L_sq_DrawCode(Value.Name.tostring(), X + 158 - LenheartTextClass.GetStringLength(Value.Name.tostring()) / 2, Y + 324 + (Pos * 16), sq_RGBA(251, 251, 181, 250), 1, 1); + L_sq_DrawCode(Value.Job.tostring(), X + 310 - LenheartTextClass.GetStringLength(Value.Job.tostring()) / 2, Y + 324 + (Pos * 16), sq_RGBA(251, 251, 181, 250), 1, 1); + L_sq_DrawCode(Value.Damage.tostring(), X + 466 - LenheartTextClass.GetStringLength(Value.Damage.tostring()) / 2, Y + 324 + (Pos * 16), sq_RGBA(251, 251, 181, 250), 1, 1); + } else { + L_sq_DrawCode(Value.RankTop.tostring(), X + 46 - LenheartTextClass.GetStringLength(Value.RankTop.tostring()) / 2, Y + 486, sq_RGBA(251, 251, 181, 250), 1, 1); + L_sq_DrawCode(Value.Name.tostring(), X + 158 - LenheartTextClass.GetStringLength(Value.Name.tostring()) / 2, Y + 486, sq_RGBA(251, 251, 181, 250), 1, 1); + L_sq_DrawCode(Value.Job.tostring(), X + 310 - LenheartTextClass.GetStringLength(Value.Job.tostring()) / 2, Y + 486, sq_RGBA(251, 251, 181, 250), 1, 1); + L_sq_DrawCode(Value.Damage.tostring(), X + 466 - LenheartTextClass.GetStringLength(Value.Damage.tostring()) / 2, Y + 486, sq_RGBA(251, 251, 181, 250), 1, 1); + } + } + } + + + + + + local AttackButton = LenheartTabbars(X + 11 + 50, Y + 215, 50, 17); + AttackButton.SetFrame("roters/rankmain.img", 2); + AttackButton.SyncPos(X + 499, Y + 501); + AttackButton.Show(); + if (AttackButton.isLBActive()) { + + } + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + + GetWorldBossEventRankInfo(); + } + + + //绘制道具相信信息 + ItemObject = null; + + function DrawItemInfo(obj) { + if (ItemInfoDrawS && ItemInfoObject) { + if (!ItemObject) { + local ItemId = ItemInfoDrawS.ItemId; + if (ItemInfoObject.rawin(ItemId)) { + ItemObject = ItemInfoClass(ItemInfoObject[ItemId]); + } + } + ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); + } else { + ItemObject = null; + } + } + + //绘制入口 + function Draw(obj) { + ItemInfoDrawS = null; + + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + + DrawItemInfo(obj); + } else { + WindowObj = LenheartWindow(X, Y, 558, 470, 15); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + + + //播放活动开启过场动画 + // ShowEventOpenAnimation(obj); + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "New_RotersCloseKey")) { + MainState = false; + } + } +} + + +function New_Roters(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("New_RotersCObj")) { + local Cobj = New_RotersC(); + RootTab.rawset("New_RotersCObj", Cobj); + } else { + RootTab["New_RotersCObj"].Proc(obj); + RootTab["New_RotersCObj"].Draw(obj); + } +} +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("New_Roters_LenheartFunc", New_Roters); +} else { + local T = {}; + T.rawset("New_Roters_LenheartFunc", New_Roters); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/Roters/Roters.nut b/Plugins/Roters/Roters.nut new file mode 100644 index 0000000..3ff14c2 --- /dev/null +++ b/Plugins/Roters/Roters.nut @@ -0,0 +1,624 @@ +/* +文件名:Roters.nut +路径:Plugins/Roters/Roters.nut +创建日期:2022-11-02 12:27 +文件用途:罗特斯世界BOSS +*/ +RotersControl <- null +RotersRankControl <- null +RotersDgnIndex <- 18081 +RotersMapIndex <- 48502 +RotersMonIndex <- 8865646 +SpiritBarrierNum <- 9 +SpiritBarrierHit_MaxNum <- 100 +SpiritBarrierHit_Damage <- 0.01 +class RotersHudButton extends BasicsDrawTool { + obj = null; + buttonName = null; + x = null; + y = null; + yoffset = 0; + BaseAnifile = null; + width = null; + length = null; + + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength) { + obj = gObj; + buttonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + } + + function DrawButton() { + if (isDown() && yoffset == 0) { + yoffset = 1; + y++; + } + + T_DrawStayAni(obj, BaseAnifile, x, y, 0, buttonName); + if (isInRect()) { + T_DrawStayAni(obj, BaseAnifile, x, y, 1, buttonName); + } + } + + function isInRect() { + local mouseX = IMouse.GetXPos(); + local mouseY = IMouse.GetYPos(); + if (sq_IsIntersectRect(mouseX, mouseY, 5, 5, x, y, width, length)) + return true; + return false; + } + + function isDown() { + if (isInRect() && IMouse.IsLBDown()) { + obj.getVar(buttonName).setBool(0, true); + return true; + } + return false; + } + + function isActive() { + if (isInRect() && IMouse.IsLBUp() && obj.getVar(buttonName).getBool(0)) { + obj.getVar(buttonName).setBool(0, false); + yoffset = 0; + return true; + } + return false; + } +} + +class Roters_Control extends BasicsDrawTool { + //类状态 + STATE = 0; + + Monster_obj = null; + Time_obj = null; + ID_Object = null; //怪物的ID + GR_Object = null; //怪物组 + AP_Chr = null; //人物的AP + + Boss_StaticHp = null; + Boss_LastHp = 1.0; + Boss_RealHp = null; + EndBoss_HP = null; + + SpiritBarrier = SpiritBarrierNum; + Hit_Num = 0; + Hit_MaxNum = SpiritBarrierHit_MaxNum; + Rem_Time = null; + + BossHpMainAni = null; + BossHpAni = null; + BossHpRdcT_obj = null; + BossHpEffT_obj = null; + + BackTown = null; + GoTownTime = null; + + //构造函数 + constructor() { + //构造时间容器 + Time_obj = TimeSTL("RotersDgn", 160000); + } + + function exit() { + STATE = -1; + Time_obj.Reset(); + Time_obj.Delete(); + } + + function GetWorldIndex() { + local stage = sq_GetGlobaludpModuleStage(); + local MapIndex = sq_GetMapIndex(stage); + return MapIndex; + } + //初始化Boss基础代码 + function InitBossStatic(obj) { + //类状态为0时 + if (STATE == 0) { + //还没有给怪物附加AP时 + if (ID_Object == null) { + local objectManager = obj.getObjectManager(); + if (!objectManager) return; + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < CollisionObjectNumber; ++i) { + local Monobject = objectManager.getCollisionObject(i); + local MonIndex = Monobject.getCollisionObjectIndex(); + //罗特斯 附加以后类状态写入1 + if (MonIndex == RotersMonIndex) { + Monobject.setObjectHeight(6666); + sq_ChangeDrawLayer(Monobject, ENUM_DRAWLAYER_BOTTOM); + //Ap_Object = CNSquirrelAppendage.sq_AppendAppendage(Monobject, obj, -1, false, "appendage/roters/ap_roters.nut", true); + ID_Object = sq_GetUniqueId(Monobject); + GR_Object = sq_GetGroup(Monobject); + Time_obj.Start(); + STATE = 1; + } + //门 + if (MonIndex == 5718) { + sq_ChangeDrawLayer(Monobject, 7); + } + } + } + } + } + //初始化人物基础代码 + function InitChrStatic(obj) { + //如果类状态为1时 + if (STATE == 1) { + //如果人物AP不存在时 + if (AP_Chr == null) { + //附加人物AP 并将类状态写入2 + AP_Chr = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/roters/ap_chr.nut", true); + STATE = 2; + } + } + } + //罗特斯Ap proc 执行代码 + function proc_Roters_M(obj) { + if (!ID_Object || !GR_Object) return; + local sourceObj = sq_GetObject(obj, GR_Object, ID_Object); //得到源对象 -- 施加AP的人 + sourceObj = sq_GetCNRDObjectToActiveObject(sourceObj); + //如果附加Ap的人不存在了直接返回城镇 + if (sourceObj.isDead()) { + L_sq_GoTown(); + return; + } + //如果Ap源对象不是我 则直接返回 只需要一个人来操作机制 + if (!sourceObj.isMyControlObject()) return; + + //如果Boss的基准生命值为空时 赋值给Boss最大生命值 + if (Boss_StaticHp == null) Boss_StaticHp = sourceObj.getHpMax(); + //如果Boss对象为空时 赋值给对象 + //if (Monster_obj == null) Monster_obj = sourceObj; + //Boss当前真实生命值赋值 + Boss_RealHp = sourceObj.getHp(); + //判断时间写入Boss蓝耗机制 + if (Rem_Time > 12000 && Rem_Time < 15000) { + sourceObj.sendSetMpPacket(((sourceObj.getMpMax() * 0.9) - 15.0).tointeger()); + if (STATE == 2) STATE = 3; + } + if (Rem_Time > 8000 && Rem_Time < 12000) { + sourceObj.sendSetMpPacket(((sourceObj.getMpMax() * 0.7) - 15.0).tointeger()); + if (STATE == 3) STATE = 4; + } + if (Rem_Time > 0 && Rem_Time < 8000) { + sourceObj.sendSetMpPacket(((sourceObj.getMpMax() * 0.5) - 15.0).tointeger()); + if (STATE == 4) STATE = 5; + } + } + //人物AP执行代码 + function onAttack_chr_M(appendage, realAttacker, damager, boundingBox, isStuck) { + local ParentObj = appendage.getParent(); //得到源对象 -- 施加AP的人 + if (!ID_Object || !GR_Object) return; + local sourceObj = sq_GetObject(ParentObj, GR_Object, ID_Object); //得到源对象 -- 施加AP的人 + sourceObj = sq_GetCNRDObjectToActiveObject(sourceObj); + + //如果Ap父对象不是我 则直接返回 不增加其他人的连击数 + if (!ParentObj.isMyControlObject()) return; + //如果攻击到的是罗特斯本体不增加连击数 + if (damager.getCollisionObjectIndex() == RotersMonIndex) return; + //如果连击数小于100 每次攻击+1 + if (Hit_Num < 100) ++Hit_Num; + //如果连击数大于等于100 并且壁障数大于0 + if (Hit_Num >= 100 && SpiritBarrier > 0) { + //清空连击数 壁障数设置-1 + Hit_Num = 0; + --SpiritBarrier; + sourceObj.setHp(sourceObj.getHp() - (sourceObj.getHpMax().tofloat() * SpiritBarrierHit_Damage).tointeger(), null, true); + CallBossHp(1); + } + + } + //绘制精神屏障主界面 + function drawSpiritBarrier(obj) { + T_DrawStayAni(obj, "common/dungeon/roters/bz/main.ani", 650, 25, 0, "精神屏障主界面"); + setClip(659, 50, 659 + (97 * (Hit_Num.tofloat() / Hit_MaxNum.tofloat())).tointeger(), 54); + T_DrawStayAni(obj, "common/dungeon/roters/bz/main.ani", 659, 50, 1, "精神屏障进度条"); + releaseClip(); + T_DrawCustomNum(obj, 736, 26, SpiritBarrier, "common/dungeon/roters/bz/", 0); + } + //绘制时间 + function drawTime(obj) { + if (!Time_obj.Get()) return; + Rem_Time = (160000 - Time_obj.Get()) / 10; + local Offset_Xpos = 0; + if (Rem_Time < 10000) Offset_Xpos = -9; + if (Rem_Time < 1000) Offset_Xpos = -18; + if (IMouse.GetXPos() < 205 && IMouse.GetYPos() < 49 && IMouse.GetXPos() >= 0 && IMouse.GetYPos() >= 0) T_DrawStayAni(obj, "common/dungeon/roters/time/main.ani", 0, 2, 1, "倒计时主界面背景"); + T_DrawStayAni(obj, "common/dungeon/roters/time/main.ani", 0, 2, 0, "倒计时主界面"); + T_DrawStayAni(obj, "common/dungeon/roters/time/d.ani", 101 + Offset_Xpos, 9, 0, "时间点"); + T_DrawStayAni(obj, "common/dungeon/roters/time/d.ani", 101 + Offset_Xpos, 18, 0, "时间点2"); + T_DrawCustomTimeNum(obj, 132 + Offset_Xpos, 23, Rem_Time, "common/dungeon/roters/time/", 18, 0); + } + //绘制Boss血条动画 + function drawBossHp(obj) { + if (BossHpRdcT_obj) { + local nowhun = Boss_RealHp.tofloat() / Boss_StaticHp.tofloat(); + BossHpMainAni = T_DrawStayAni(obj, "common/dungeon/roters/hp/main.ani", 106, 67, 0, "Boss血条主界面"); + local v = sq_GetUniformVelocity((Boss_LastHp * 493.0).tointeger(), (nowhun * 493.0).tointeger(), BossHpRdcT_obj.Get(), 1000); + setClip(154, 88, 154 + v, 109); + BossHpAni = T_DrawStayAni(obj, "common/dungeon/roters/hp/main.ani", 154, 88, 1, "Boss血条"); + releaseClip(); + BossHpMainAni.setRGBA(255, 255, 255, 250); + BossHpAni.setRGBA(255, 255, 255, 250); + if (BossHpRdcT_obj.Get() >= 2000) { + BossHpRdcT_obj.Delete(); + BossHpRdcT_obj = null; + CallBossHp(2); + } + } else if (BossHpEffT_obj) { + local nowhun = Boss_RealHp.tofloat() / Boss_StaticHp.tofloat(); + BossHpMainAni = T_DrawStayAni(obj, "common/dungeon/roters/hp/main.ani", 106, 67, 0, "Boss血条主界面"); + setClip(154, 88, 154 + (nowhun * 493.0).tointeger(), 109); + BossHpAni = T_DrawStayAni(obj, "common/dungeon/roters/hp/main.ani", 154, 88, 1, "Boss血条"); + releaseClip(); + local v = sq_GetUniformVelocity(250, 0, BossHpEffT_obj.Get(), 1000); + BossHpMainAni.setRGBA(255, 255, 255, v); + BossHpAni.setRGBA(255, 255, 255, v); + if (BossHpEffT_obj.Get() >= 1000) { + BossHpEffT_obj.Delete(); + BossHpEffT_obj = null; + Boss_LastHp = nowhun; + } + } + } + //绘制Boss血条动画 + function CallBossHp(Type) { + switch (Type) { + case 1: + if (BossHpRdcT_obj == null) BossHpRdcT_obj = TimeSTL("RotersBossHpRdc", 2000); + BossHpRdcT_obj.Reset(); + BossHpRdcT_obj.Start(); + break; + case 2: + if (BossHpEffT_obj == null) BossHpEffT_obj = TimeSTL("RotersBossHpEff", 1000); + BossHpEffT_obj.Reset(); + BossHpEffT_obj.Start(); + break; + } + } + + function DrawMain(obj) { + if (STATE >= 6) return; + //绘制精神屏障主界面 + drawSpiritBarrier(obj); + //绘制时间 + drawTime(obj); + drawBossHp(obj); + } + + function ProcDgn(obj) { + //初始化BOSS基础代码 + InitBossStatic(obj); + //初始化角色基础代码 + InitChrStatic(obj); + + //罗特斯循环函数 + proc_Roters_M(obj); + + + //如果时间结束 + if (Rem_Time == 0 && STATE >= 3) { + if (EndBoss_HP == null) EndBoss_HP = Boss_StaticHp - Boss_RealHp; + if (BackTown == null) BackTown = RotersHudButton(obj, "rotersbacktown", 371, 245, "common/dungeon/roters/damage/back.ani", 66, 19); + local Offset_Xpos = ((EndBoss_HP.tostring().len() - 1) * -5); + T_DrawStayAni(obj, "common/dungeon/roters/damage/main.ani", 249, 115, 0, "结算主界面"); + T_DrawCustomNum(obj, 395 + Offset_Xpos, 171, EndBoss_HP, "common/dungeon/roters/damage/num/", 10); + + if (STATE == 5) { + local WorldBossUpdateDamage = Json_STL("WorldBossUpdateDamage"); + WorldBossUpdateDamage.Put("op", 13); + WorldBossUpdateDamage.Put("hurt", EndBoss_HP); + local str = WorldBossUpdateDamage.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + WorldBossUpdateDamage.Delete(); + + STATE = 6; + } + + + BackTown.DrawButton(); + if (BackTown.isActive()) { + L_sq_GoTown(); + } + } + } +} + +function Roters(obj) { + //如果在副本中 + if (sq_GetCurrentModuleType() == 3) { + //如果获取当前地图ID 等于 罗特斯地图ID + if (Roters_Control.GetWorldIndex() == RotersMapIndex) { + //如果罗特斯对象为空 则实例化 + if (RotersControl == null) { + RotersControl = Roters_Control(); + } + //执行逻辑主函数 + RotersControl.ProcDgn(obj); + //执行绘制主函数 + RotersControl.DrawMain(obj); + } else { + //如果罗特斯对象不为空 则销毁他 + if (RotersControl != null) { + RotersControl.exit(); + RotersControl = null; + } + } + } else { + //如果罗特斯对象不为空 则销毁他 + if (RotersControl != null) { + RotersControl.exit(); + RotersControl = null; + } + } +} + +//罗特斯排行榜界面类 +class Roters_RankControl extends BasicsDrawTool { + State = -2; //世界BOSS当前状态 + End = 0; + Windows_Object = null; + AnimotionState = 0; + BufferTimeSTL = null; + Page = 0; + + MainSwitchButton = null; + + //OP模式 + ThisOp = null; + //类JsonBuffer + ThisJsonBuffer = null; + + function RotersRankCallBack(chunk) { + local RootTab = getroottable(); + if (RootTab.rawin("ROTERSRANKCONTROL") == false) return; + + local RotersRankPack = Json_STL("RotersRankPack"); + RotersRankPack.Parse(chunk, 0, false); + local op = RotersRankPack.Get("op"); + switch (op) { + //开界面 + case 12: { + RootTab["ROTERSRANKCONTROL"].ThisOp = 12; + if (RootTab["ROTERSRANKCONTROL"].ThisJsonBuffer) RootTab["ROTERSRANKCONTROL"].ThisJsonBuffer.Delete(); + RootTab["ROTERSRANKCONTROL"].ThisJsonBuffer = Json_STL("ThisJsonBuffer"); + RootTab["ROTERSRANKCONTROL"].ThisJsonBuffer.Parse(chunk, 0, false); + } + break; + //开启世界BOSS + case 14: + RootTab["ROTERSRANKCONTROL"].ThisOp = 14; + break; + //打赢了 + case 16: + RootTab["ROTERSRANKCONTROL"].ThisOp = 16; + break; + //没打赢 + case 18: + RootTab["ROTERSRANKCONTROL"].ThisOp = 18; + break; + //彻底结束 + case 20: + RootTab["ROTERSRANKCONTROL"].ThisOp = 20; + break; + default: + break; + } + RotersRankPack.Delete(); + } + + constructor() { + Pack_Control.rawset(12, RotersRankCallBack); + Pack_Control.rawset(14, RotersRankCallBack); + Pack_Control.rawset(16, RotersRankCallBack); + Pack_Control.rawset(18, RotersRankCallBack); + Pack_Control.rawset(20, RotersRankCallBack); + BufferTimeSTL = TimeSTL("RotersBufferTimeSTL", 3000); + } + + + //绘制排名信息 + function DrawRankInfo(obj) { + //如果信息表不存在 或数据不正确 则返回 + if (!ThisJsonBuffer || ThisJsonBuffer.tostring().len() < 1) return; + local Y_Pos_Offset = 0; + for (local i = 0; i < 11; i++) { + if (i == 10) Y_Pos_Offset = 3; + L_Code_STL(ThisJsonBuffer.Get("result->" + i + "->rank"), 163, 325 + (i * 16) + Y_Pos_Offset, 0xFF99D7FF, 1); + L_Code_STL(ThisJsonBuffer.Get("result->" + i + "->cName"), 257, 325 + (i * 16) + Y_Pos_Offset, 0xFF00D7FF, 1); + L_Code_STL(ThisJsonBuffer.Get("result->" + i + "->job"), 409, 325 + (i * 16) + Y_Pos_Offset, 0xB79260FF, 1); + L_Code_STL(ThisJsonBuffer.Get("result->" + i + "->hurt"), 535, 325 + (i * 16) + Y_Pos_Offset, 0xFFFF00FF, 1); + } + } + + //绘制主界面框 + function DrawRankMain(obj) { + //如果信息表不存在 或数据不正确 则返回 + if (!ThisJsonBuffer || ThisJsonBuffer.tostring().len() < 1) return; + + T_DrawStayAni(obj, "common/dungeon/roters/main/main.ani", 129, 8, 0, "罗特斯Rank主界面"); + //T_DrawDynamicAni(obj, "common/dungeon/roters/main/maineff.ani", 133, 52, "罗特斯Rankeff主界面"); + + local HpPoi = ThisJsonBuffer.Get("hppercentage").tofloat() / 100.0; + setClip(130, 28, 130 + (542.0 * HpPoi).tointeger(), 68); + T_DrawStayAni(obj, "common/dungeon/roters/main/mainhp.ani", 130, 28, 0, "罗特斯Rank生命值"); + releaseClip(); + + local AttackButton = ButtonPro(obj, "AttackButton", 542, 270, "common/dungeon/roters/main/attackbutton.ani", 120, 20); + AttackButton.SetRectEnble(true, "AttackButton", 542, 270, "common/dungeon/roters/main/attackbutton.ani", 1); + AttackButton.SetCustomClickEnble(true, "AttackButton", 542, 270 + 1, "common/dungeon/roters/main/attackbutton.ani", 1); + if (End != 1) AttackButton.Show(); + if (AttackButton.isLBActive()) { + L_sq_GoDungeon(RotersDgnIndex); + } + + local RightSwitchButton = ButtonPro(obj, "RightSwitchButton", 460, 504, "common/dungeon/roters/main/rightbutton.ani", 11, 13); + RightSwitchButton.SetRectEnble(true, "RightSwitchButton", 460, 504, "common/dungeon/roters/main/rightbutton.ani", 1); + RightSwitchButton.SetCustomClickEnble(true, "RightSwitchButton", 460, 504 + 1, "common/dungeon/roters/main/rightbutton.ani", 1); + RightSwitchButton.Show(); + if (RightSwitchButton.isLBActive()) { + if (Page < 4) ++Page; + local Test = Json_STL("WorldBossBuffer"); + Test.Put("op", 11); + Test.Put("page", Page); + local str = Test.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + Test.Delete(); + } + + local LeftSwitchButton = ButtonPro(obj, "LeftSwitchButton", 336, 504, "common/dungeon/roters/main/leftbutton.ani", 11, 13); + LeftSwitchButton.SetRectEnble(true, "LeftSwitchButton", 336, 504, "common/dungeon/roters/main/leftbutton.ani", 1); + LeftSwitchButton.SetCustomClickEnble(true, "LeftSwitchButton", 336, 504 + 1, "common/dungeon/roters/main/leftbutton.ani", 1); + LeftSwitchButton.Show(); + if (LeftSwitchButton.isLBActive()) { + if (Page > 0) --Page; + local Test = Json_STL("WorldBossBuffer"); + Test.Put("op", 11); + Test.Put("page", Page); + local str = Test.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + Test.Delete(); + } + } + + //绘制主界面开启按钮 + function DrawMainButton(obj) { + T_DrawDynamicAni(obj, "common/dungeon/roters/main/mainbuttoneff.ani", -30, 35, "罗特斯Rank按钮特效"); + + if (MainSwitchButton == null) { + MainSwitchButton = ButtonPro(obj, "MainSwitchButton", 15, 70, "common/dungeon/roters/main/mainbutton.ani", 65, 65); + } + MainSwitchButton.SetRectEnble(true, "MainSwitchButtonr", 15, 70, "common/dungeon/roters/main/mainbutton.ani", 1); + MainSwitchButton.SetCustomClickEnble(true, "MainSwitchButtonc", 15, 70, "common/dungeon/roters/main/mainbutton.ani", 2); + MainSwitchButton.Show(); + + if (MainSwitchButton.isLBActive()) { + if (!sq_GetPopupWindowMainCotrol(267)) L_NewWindows("Lenheart", 267, 0x65535); + local Test = Json_STL("WorldBossBuffer"); + Test.Put("op", 11); + Test.Put("page", Page); + local str = Test.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + Test.Delete(); + } + } + + + //Run主执行函数 + function Run(obj) { + //初始状态 + if (State == -2) { + //构造 嗅探包 请求世界Boss是否开启 + local WordBossSwitchReqPack = Json_STL("WordBossSwitchReqPack"); + WordBossSwitchReqPack.Put("op", 15); + local StrBuffer = WordBossSwitchReqPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(StrBuffer); + L_sq_SendPack(); + WordBossSwitchReqPack.Delete(); + State = -1; + } + //等待开启信号状态 + if (State == -1) { + //如果OP状态等于14 + if (ThisOp == 14) { + if (AnimotionState == 0) { + BufferTimeSTL.Reset(); + BufferTimeSTL.Start(); + AnimotionState = 1; + } + if (AnimotionState == 1) { + local MainStartAni = T_DrawStayAni(obj, "common/dungeon/roters/main/mainstart.ani", 80, 50, 0, "RotersMainStartAni"); + local v = sq_GetUniformVelocity(0, 250, BufferTimeSTL.Get(), 3000); + MainStartAni.setRGBA(255, 255, 255, v); + if (BufferTimeSTL.Get() >= 2900) { + BufferTimeSTL.Reset(); + BufferTimeSTL.Start(); + AnimotionState = 2; + } + } + if (AnimotionState == 2) { + local MainStartAni = T_DrawStayAni(obj, "common/dungeon/roters/main/mainstart.ani", 80, 50, 0, "RotersMainStartAni"); + local v = sq_GetUniformVelocity(250, 0, BufferTimeSTL.Get(), 3000); + MainStartAni.setRGBA(255, 255, 255, v); + if (BufferTimeSTL.Get() >= 2900) { + BufferTimeSTL.Reset(); + BufferTimeSTL.Delete(); + BufferTimeSTL = null; + AnimotionState = 3; + } + } + if (AnimotionState == 3) { + End = 0; //是否结束写入0 + State = 0; + } + } + } + //绘制世界BOSS面板按钮 + if (State == 0) { + DrawMainButton(obj); + //如果收到 op 12号包 打开了面板 state写入1 + if (ThisOp == 12) { + State = 1; + ThisOp = 0; + } + } + //绘制面板 + if (State == 1) { + //如果窗口开启绘制面板 绘制排名 + if (sq_GetPopupWindowMainCotrol(267)) { + Windows_Object = sq_GetPopupWindowMainCotrol(267); + DrawRankMain(obj); + DrawRankInfo(obj); + } + //窗口关闭状态写回0 + else { + State = 0; + } + } + //检测到 打赢或者打输了的 包 是否结束写入1 + if (ThisOp == 16 || ThisOp == 18) { + State = 0; + End = 1; + } + //世界BOSS彻底结束 状态回归-2 + if (ThisOp == 20) { + State = -2; + } + } +} + +function RotersRank(obj) { + //只在城镇中执行 + if (sq_GetCurrentModuleType() != 1) return; + + local RootTab = getroottable(); + + //如果不在西海岸主干道不执行 + if (L_sq_GetTownIndex() != 3 || L_sq_GetRegionIndex() != 0) { + if (RootTab.rawin("ROTERSRANKCONTROL"))RootTab.rawdelete("ROTERSRANKCONTROL"); + return; + } + + //如果对象不存在 实例化对象 + if (RootTab.rawin("ROTERSRANKCONTROL") == false) { + local ROTERSRANKCONTROLOBJ = Roters_RankControl(); + RootTab.rawset("ROTERSRANKCONTROL", ROTERSRANKCONTROLOBJ); + } else { + RootTab["ROTERSRANKCONTROL"].Run(obj); + } + +} \ No newline at end of file diff --git a/Plugins/ServerAuction/ServerAuction.nut b/Plugins/ServerAuction/ServerAuction.nut new file mode 100644 index 0000000..0dcfc37 --- /dev/null +++ b/Plugins/ServerAuction/ServerAuction.nut @@ -0,0 +1,495 @@ +/* +文件名:ServerAuction.nut +路径:Plugins/ServerAuction/ServerAuction.nut +创建日期:2023-05-12 10:27 +文件用途: +*/ + +//HudPro按钮类 +class ServerAuctionPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class ServerAuctionWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class ServerAuctionC extends BasicsDrawTool { + + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 235; + Y = 109; + + WindowName = "暂无拍卖会"; + + AuctionPack = null; + Cost = null; + NowPrice = null; + + TimeObj = null; + TimeMax = 15000; + TimeNow = 10000; + ReqFrame = false; + + //查询拍卖回包 + function Raid_Auction_Item_Pack_CallBack(Chunk) { + // Sout("收到包内容为 \n %L", Chunk); + local Buffer = Json_STL("Raid_Auction_Item_Pack_CallBack"); + Buffer.Parse(Chunk, 0, false); + + local RootTab = getroottable(); + if (RootTab.rawin("ServerAuctionCObj")) { + RootTab["ServerAuctionCObj"].Cost = Buffer.Get("cost"); + RootTab["ServerAuctionCObj"].WindowName = Buffer.Get("preset_name"); + + RootTab["ServerAuctionCObj"].TimeMax = Buffer.Get("auction_await_max"); + RootTab["ServerAuctionCObj"].TimeNow = Buffer.Get("auction_await_now"); + RootTab["ServerAuctionCObj"].ReqFrame = false; + RootTab["ServerAuctionCObj"].AuctionTimeReset(); + + RootTab["ServerAuctionCObj"].AuctionPack = null; + RootTab["ServerAuctionCObj"].AuctionPack = []; + + for (local i = 0; i < 5; i++) { + local Gid = Buffer.Get("auctionpack->" + i + "->id"); + if (Gid == false) break; + local Gcount = Buffer.Get("auctionpack->" + i + "->count"); + local Gname = Buffer.Get("auctionpack->" + i + "->name"); + local Grarity = Buffer.Get("auctionpack->" + i + "->rarity"); + local Gprice = Buffer.Get("auctionpack->" + i + "->price"); + + // local Gnow = i == 0 ? true : false; + local Gnow = Buffer.Get("auctionpack->" + i + "->now"); + local Gover = Buffer.Get("auctionpack->" + i + "->over"); + local Gplayer = Buffer.Get("auctionpack->" + i + "->playername"); + local Gcost_id = Buffer.Get("auctionpack->" + i + "->cost_id"); + local Gcost_name = Buffer.Get("auctionpack->" + i + "->cost_name"); + local T = { + id = Gid, + count = Gcount, + name = Gname, + rarity = Grarity, + price = Gprice, + now = Gnow, + over = Gover, + player = Gplayer, + cost_id = Gcost_id, + cost_name = Gcost_name, + } + RootTab["ServerAuctionCObj"].AuctionPack.append(T); + } + + } + } + + constructor() { + //注册装备信息回调 + Pack_Control.rawset(25701002, Raid_Auction_Item_Pack_CallBack); + } + + //绘制主界面 + function DrawMain(obj) { + //主界面背景 + T_DrawStayAni(obj, "common/server_auction/qfjp.ani", X, Y, 4, "Server_AuctionSystemMain"); + + //绘制窗口名字 + L_sq_DrawCode("【" + WindowName + "】", X + 155 - (WindowName.len() * 2), Y + 7, sq_RGBA(255, 255, 184, 250), 0, 1); + } + + + //绘制竞拍项目 + function DrawItem(obj) { + if (!AuctionPack) return; + foreach(Pos, Item in AuctionPack) { + + if (Item.now == true) { + T_DrawStayAni(obj, "common/server_auction/qfjp.ani", X + 38 + (Pos * 50), Y + 40, 3, "Server_AuctionSystemSlotLight"); + T_DrawStayAni(obj, "common/server_auction/qfjp.ani", X + 38 + (Pos * 50), Y + 40, 7, "Server_AuctionSystemSlotLight + 1"); + //绘制竞拍物品名字 + L_sq_DrawCode("【" + Item.name + "】", X + 155, Y + 207, sq_RGBA(255, 255, 184, 250), 0, 1); + //绘制竞拍者名字 + L_sq_DrawCode("【" + Item.player + "】", X + 155, Y + 229, sq_RGBA(255, 255, 184, 250), 0, 1); + //绘制当前价格 + L_sq_DrawCode(Item.price.tostring(), X + 155, Y + 251, sq_RGBA(255, 255, 184, 250), 0, 1); + + + //绘制货币 + L_Sq_DrawItem(X + 40, Y + 284, Item.cost_id, 1, 0, 0, 0); + //绘制货币名字 + L_sq_DrawCode("【" + Item.cost_name + "】", X + 79, Y + 299, sq_RGBA(255, 255, 184, 250), 0, 1); + NowPrice = Item.price; + } + L_Sq_DrawItem(X + 51 + (Pos * 50), Y + 53, Item.id, Item.count, 0, 0, 0); + if (Item.over == true) { + T_DrawStayAni(obj, "common/server_auction/qfjp.ani", X + 48 + (Pos * 50), Y + 50, 5, "Server_AuctionSystemSlotOver"); + } + } + } + + + function AuctionTimeReset() { + if (TimeObj) TimeObj.Delete(); + TimeObj = null; + TimeObj = TimeSTL("AuctionTimeObj", TimeNow); + TimeObj.Reset(); + TimeObj.Start(); + } + + //绘制进度条 + function DrawTimeP(obj) { + if (TimeObj == null) return; + + local Time = TimeObj.Get(); + local NTime = ((TimeNow - Time).tofloat() / 1000.0).tostring(); + local HRate = (Time.tofloat() + (TimeMax.tofloat() - TimeNow.tofloat())) / TimeMax.tofloat(); + + + + setClip(X + 29, Y + 119, X + 29 + 272 - (272.0 * HRate).tointeger(), Y + 119 + 12); //开始裁切 + T_DrawStayAni(obj, "common/server_auction/qfjp.ani", X + 29, Y + 119, 6, "Server_AuctionSystemTimeP"); + releaseClip(); //裁切结束 + + + L_sq_DrawCode("剩余时间: " + NTime + "s", X + 128, Y + 119, sq_RGBA(21, 187, 255, 250), 0, 1); + + /* + //时间走到以后需要重新请求数据包 + if (HRate == 0 && ReqFrame == false) { + local T = { + op = 25701001 + } + + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + ReqFrame = true; + } + */ + } + + function GetNum(count) { + local a = 1; + if (count == 0) return a; + local b = 10; + for (local i = 0; i < count - 1; i++) { + b *= b; + } + return a * b; + } + //绘制按钮 + function DrawAuctionButton(obj) { + + for (local i = 0; i < 3; i++) { + local Button = ServerAuctionPro(obj, "Server_AuctionButton" + i, X + 28 + (i * 98), Y + 266 + 68, "common/server_auction/qfjp.ani", 77, 24, 0); + Button.SetRectEnble(true, "Server_AuctionButtonr" + i, X + 28 + (i * 98), Y + 266 + 68, "common/server_auction/qfjp.ani", 1); + Button.SetCustomClickEnble(true, "Server_AuctionButtonc" + i, X + 28 + (i * 98), Y + 266 + 68, "common/server_auction/qfjp.ani", 2); + Button.Show(); + + L_sq_DrawCode("+" + GetNum(i), X + 60 + (i * 98), Y + 272 + 68, sq_RGBA(21, 187, 255, 250), 0, 1); + if (Button.isLBActive()) { + + local T = { + op = 25701005, + price = NowPrice + GetNum(i), + cost = this.Cost, + addcost = GetNum(i), + } + + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + } + + } + + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + + local T = { + op = 25701001 + } + + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); //绘制主界面 + + DrawItem(obj); //绘制竞拍项目 + + DrawTimeP(obj); //绘制进度条 + + DrawAuctionButton(obj); //绘制按钮 + + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = ServerAuctionWindow(X, Y, 329, 382, 28); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "SeverAuctionCloseKey")) { + MainState = false; + } + } +} + + +function ServerAuction(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("ServerAuctionCObj")) { + local Cobj = ServerAuctionC(); + RootTab.rawset("ServerAuctionCObj", Cobj); + EventIcon("全服拍卖", 118, 118, Cobj); + } else { + RootTab["ServerAuctionCObj"].Proc(obj); + RootTab["ServerAuctionCObj"].Draw(obj); + } +} \ No newline at end of file diff --git a/Plugins/SeverNotiAnimotion/SeverNotiAnimotion.nut b/Plugins/SeverNotiAnimotion/SeverNotiAnimotion.nut new file mode 100644 index 0000000..9c034c4 --- /dev/null +++ b/Plugins/SeverNotiAnimotion/SeverNotiAnimotion.nut @@ -0,0 +1,29 @@ +function LenheartSeverNotiAnimotionCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + + getroottable().rawset("LenheartSeverNotiAnimotionSw", Jso.Ani); +} + +Pack_Control.rawset(30060, LenheartSeverNotiAnimotionCallBack); + +function LenheartSeverNotiAnimotion(obj) { + // getroottable().rawset("LenheartSeverNotiAnimotionSw", "common/announcement/leveche_cutscene.ani"); + if (getroottable().rawin("LenheartSeverNotiAnimotionSw")) { + if (getroottable()["LenheartSeverNotiAnimotionSw"]) { + //LenheartSeverNotiAnimotionSwmain.img + if (sq_GetCurrentModuleType() == 1) { + L_sq_DrawImg("lenheartsevernotianimotionswmain.img", 0, -1, 0); + obj = sq_GetCNRDObjectToSQRCharacter(obj); + local Ani = obj.sq_GetRestAni(); + sq_AnimationProc(Ani); + sq_drawCurrentFrame(Ani, 400, 350, true); + + local TAni = BasicsDrawTool.T_DrawDynamicAni(obj, getroottable()["LenheartSeverNotiAnimotionSw"], 0, 0, getroottable()["LenheartSeverNotiAnimotionSw"]); + if (sq_IsEnd(TAni)) { + sq_Rewind(TAni); + getroottable().rawdelete("LenheartSeverNotiAnimotionSw"); + } + } + } + } +} \ No newline at end of file diff --git a/Plugins/SignIn/SignIn.nut b/Plugins/SignIn/SignIn.nut new file mode 100644 index 0000000..d32f9cf --- /dev/null +++ b/Plugins/SignIn/SignIn.nut @@ -0,0 +1,447 @@ +/* +文件名:SignIn.nut +路径:Plugins/SignIn/SignIn.nut +创建日期:2023-05-06 15:28 +文件用途: +*/ + +//HudPro按钮类 +class SIGNINButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class SIGNINC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 124; + Y = 66; + + NowClearanceCount = 0; + RewardDayCount = 0; + TodayState = 0; + ExSignDate = null; + BaseItemArr = null; + ExItemArr = null; + + + + //ItemInfo + ItemInfoObject = null; + ItemInfoDrawS = null; + + //查询玩家信息 + function CheckPlayerInfo() { + local T = { + op = 20051001, + } + + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + //玩家信息收包回调 + function CheckPlayerInfoCallBack(Chunk) { + // Sout("收到包内容为 \n %L", Chunk); + local Buffer = Json_STL("SignIn_Item_CheckPlayerInfo_CallBack"); + Buffer.Parse(Chunk, 0, false); + + local RootTab = getroottable(); + if (RootTab.rawin("SIGNINCObj")) { + + //通关次数 + NowClearanceCount = Buffer.Get("PlayerInfo->NowClearanceCount"); + //已签到天数 + RewardDayCount = Buffer.Get("PlayerInfo->RewardDayCount"); + //今日是否签到 + TodayState = Buffer.Get("PlayerInfo->TodayState"); + //特殊签到天数信息 + ExSignDate = null; + ExSignDate = []; + for (local q = 0; q< 3; q++) { + ExSignDate.append(Buffer.Get("ExSignDate->" + q)); + } + //常规道具数组 + BaseItemArr = null; + BaseItemArr = []; + for (local i = 0; i< 28; i++) { + local a = Buffer.Get("BaseItemArr->" + i + "->id"); + local b = Buffer.Get("BaseItemArr->" + i + "->num"); + local T = { + id = a, + count = b, + } + BaseItemArr.append(T); + } + + //特殊道具数组 + ExItemArr = null; + ExItemArr = []; + for (local z = 0; z< 3; z++) { + local a = Buffer.Get("ExItemArr->" + z + "->id"); + local b = Buffer.Get("ExItemArr->" + z + "->num"); + local T = { + id = a, + count = b, + } + ExItemArr.append(T); + } + + + local ItemGetArray = {}; + foreach(P, V in BaseItemArr) { + local ItemId = V.id; + if (!ItemInfoObject.rawin(ItemId)) { + if (!ItemGetArray.rawin(ItemId)) + ItemGetArray.rawset(ItemId, true); + } + } + foreach(P, V in ExItemArr) { + local ItemId = V.id; + if (!ItemInfoObject.rawin(ItemId)) { + if (!ItemGetArray.rawin(ItemId)) + ItemGetArray.rawset(ItemId, true); + } + } + + + if (ItemGetArray.len() > 0) { + local arr = []; + foreach(Key, Value in ItemGetArray) { + arr.append(Key); + } + local T = { + op = 20231010, + realop = 20051004, + itemId = arr, + Type = 2, + } + SendPack(T); + } + } + } + + + function CheckItemInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + foreach(Pos, Value in Jso.itemInfo) { + if (Value.Name2.len() == 0) + Value.Name2 = "Yosin-Team"; + ItemInfoObject.rawset(Jso.itemId[Pos], Value); + } + } + + + constructor() { + //查询玩家信息回调 + Pack_Control.rawset(20051002, CheckPlayerInfoCallBack.bindenv(this)); + //查询道具信息回调 + Pack_Control.rawset(20051004, CheckItemInfoCallBack.bindenv(this)); + + ItemInfoObject = {}; + + //查询玩家信息 + CheckPlayerInfo(); + } + + //绘制道具带道具信息 + function DrawItemEx(X, Y, Id, Count) { + L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X; + ItemInfoDrawS.Y <- Y; + ItemInfoDrawS.ItemId <- Id; + } + } + + //绘制道具相信信息 + ItemObject = null; + + function DrawItemInfo(obj) { + if (ItemInfoDrawS) { + if (!ItemObject) { + local ItemId = ItemInfoDrawS.ItemId; + if (ItemInfoObject.rawin(ItemId)) { + ItemObject = ItemInfoClass(ItemInfoObject[ItemId]); + } + } + ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); + } else { + ItemObject = null; + } + } + + + //绘制主界面 + function DrawMain(obj) { + //主界面背景框 + T_DrawStayAni(obj, "common/signin/main.ani", X - 6, Y - 28, 9, "SignInSystemMainBackGround"); + + //主界面背景 + T_DrawStayAni(obj, "common/signin/main.ani", X, Y, 0, "SignInSystemMain"); + + //通关次数Max + T_DrawStayAni(obj, "common/signin/main.ani", X + 194, Y + 101, 4, "SignInSystemMainMax"); + + //当前通关次数 + T_DrawStayAni(obj, "common/signin/main.ani", X + 167, Y + 101, NowClearanceCount + 2, "SignInSystemMainNow"); + + + ItemInfoDrawS = null; + //绘制奖励道具 + if (BaseItemArr) { + for (local z = 0; z< 28; z++) { + local Item = BaseItemArr[z]; + DrawItemEx(X + 22 + ((z % 7) * 55), Y + 154 + ((z / 7) * 65), Item.id, Item.count); + } + } + if (ExItemArr) { + for (local y = 0; y< 3; y++) { + local Item = ExItemArr[y]; + DrawItemEx(X + 457, Y + 166 + (y * 72), Item.id, Item.count); + } + } + + if (TodayState == 0 && NowClearanceCount == 2) { + local Button = SIGNINButtonPro(obj, "SignIn", X + 401, Y + 397, "common/signin/main.ani", 140, 40, 5); + Button.SetRectEnble(true, "SignInr", X + 401, Y + 397, "common/signin/main.ani", 6); + Button.SetCustomClickEnble(true, "SignInc", X + 401, Y + 397, "common/signin/main.ani", 7); + + Button.Show(); + //签到按钮按下 + if (Button.isLBActive()) { + local T = { + op = 20051005, + } + + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + } + + //签到绘制标签 + for (local i = 0; i< RewardDayCount; i++) { + T_DrawStayAni(obj, "common/signin/main.ani", X + 13 + ((i % 7) * 55), Y + 145 + ((i / 7) * 66), 1, "SignInSystemMainSignDay" + i); + for (local p = 0; p< 3; p++) { + if (i == ExSignDate[p] - 1) { + T_DrawStayAni(obj, "common/signin/main.ani", X + 450, Y + 159 + (p * 72), 1, "SignInSystemMainSignDay" + i + p); + } + } + } + + + //绘制累计签到日期 + if (ExSignDate) { + for (local r = 0; r< 3; r++) { + local Date = ExSignDate[r]; + local len = Date.tostring().len(); + if (len == 1) { + T_DrawStayAni(obj, "common/signin/num.ani", X + 484, Y + 144 + (r * 72), Date, "SignInSystemMainExSignDay" + r); + } else { + T_DrawStayAni(obj, "common/signin/num.ani", X + 480, Y + 144 + (r * 72), Date.tostring().slice(0, 1).tointeger(), "SignInSystemMainExSignDay" + r); + T_DrawStayAni(obj, "common/signin/num.ani", X + 488, Y + 144 + (r * 72), Date.tostring().slice(1, 2).tointeger(), "SignInSystemMainExSignDay" + r); + } + } + } + + } + + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + //查询玩家信息 + CheckPlayerInfo(); + } + + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X + 6; + Y = WindowObj.Y + 28; + DrawItemInfo(obj); + } else { + WindowObj = LenheartWindow(X - 6, Y - 28, 631 - 70, 535 - 48, 28); //坐标 大小 标题栏高度 + //WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "SignIn")) { + MainState = false; + } + } +} + + +function SignIn_New_Lenheart(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("SIGNINCObj")) { + local Cobj = SIGNINC(); + RootTab.rawset("SIGNINCObj", Cobj); + EventIcon("签到活动", 91, 1, Cobj); + } else { + RootTab["SIGNINCObj"].Proc(obj); + RootTab["SIGNINCObj"].Draw(obj); + } +} + + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("SignIn_New_LenheartFunc", SignIn_New_Lenheart); +} else { + local T = {}; + T.rawset("SignIn_New_LenheartFunc", SignIn_New_Lenheart); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/Tomb/Tomb.nut b/Plugins/Tomb/Tomb.nut new file mode 100644 index 0000000..aa2c083 --- /dev/null +++ b/Plugins/Tomb/Tomb.nut @@ -0,0 +1,282 @@ +/* +文件名:Tomb.nut +路径:Plugins/Tomb/Tomb.nut +创建日期:2023-10-28 17:40 +文件用途: +*/ + + +class TombC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 300; + Y = 160; + + //层数 + Index = 0; + //总层数 + MaxIndex = 0; + //道具 + ItemInfoObject = null; + //需要的道具名字 + ItemName = null; + //需要的道具数量 + ItemCount = null; + + UseFlag = false; + EndFlag = false; + + function GetInfoCallBack(Chunk) { + Sout("收到包 : \n %L", Chunk); + ItemInfoObject = null; + local Jso = Json.Decode(Chunk); + Index = Jso.index; + MaxIndex = Jso.endSize; + + ItemName = Jso.useItemInfo.Name; + ItemCount = Jso.useNum; + + EndFlag = !Jso.end; + + ItemInfoObject = Jso.itemInfo; + if (ItemInfoObject.Name2.len() == 0) + ItemInfoObject.Name2 = "Rindro-Team"; + } + + function GetInfo() { + local T = { + op = 20062013 + } + SendPack(T); + } + + //失败 + function OpenTombCallBack_L(Chunk) { + // Sout("收到包 : \n %L", Chunk); + } + //成功 + function OpenTombCallBack_S(Chunk) { + // Sout("收到包 : \n %L", Chunk); + } + + //拔剑 + function OpenTomb() { + local T = { + op = 20062003, + index = Index + } + SendPack(T); + } + + function GetMyStkFlagCallBack(Chunk) { + // Sout("收到包 : \n %L", Chunk); + local Jso = Json.Decode(Chunk); + UseFlag = Jso.useFlag; + } + + //获取自身材料 + function GetMyStkFlag() { + local T = { + op = 20062019 + } + SendPack(T); + } + + + constructor() { + //获取基础配置回调包 + Pack_Control.rawset(20062014, GetInfoCallBack.bindenv(this)); + //拔剑结果包 + Pack_Control.rawset(20062008, OpenTombCallBack_L.bindenv(this)); + Pack_Control.rawset(20062006, OpenTombCallBack_S.bindenv(this)); + //自身材料是否足够回调包 + Pack_Control.rawset(20062020, GetMyStkFlagCallBack.bindenv(this)); + //获取自身材料是否足够 + + + GetInfo(); + GetMyStkFlag(); + } + + QuestTips = false; + + //绘制主界面 + function DrawMain(obj) { + // if (!ItemInfoObject) return; + //Item信息框一般为211的宽度 + L_sq_DrawWindow(X, Y, 210, 200, "interface/lenheartwindowcommon.img", 0, 11, 12, 11, 13); + + //绘制背景 + L_sq_DrawImg("interface2/event/chn_event_2015/chn_tomb_ui.img", 0, X + 10, Y + 16); + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 150, Y + 196, 16, 16)) { + L_sq_DrawImg("interface/lenheartwindowcommon.img", 240, X + 150, Y + 196); + QuestTips = true; + } else { + L_sq_DrawImg("interface/lenheartwindowcommon.img", 239, X + 150, Y + 196); + QuestTips = false; + } + + + //关闭按钮 + local CloseButton = LenheartBaseButton(X + 206, Y + 1, 11, 12, "interface/lenheartwindowcommon.img", 276); + CloseButton.Show(); + if (CloseButton.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + L_sq_UseSkill(DIK_ESCAPE); + MainState = false; + } + + + + if (!UseFlag || !EndFlag) { + local Str = "材料不足"; + if (UseFlag && !EndFlag) Str = "活动结束"; + local OpenButton = LenheartButtonText(X + 70, Y + 120 + 20 + 31 + 20, 22, Str); + OpenButton.SetFrame(null, 323); + OpenButton.SetTextOffset(-3, 1); + OpenButton.Show(); + } else { + //拔剑按钮 + local OpenButton = LenheartButtonText(X + 70, Y + 120 + 20 + 31 + 20, 22, "拔 剑"); + OpenButton.SetFrame(null, 323); + OpenButton.SetTextOffset(6, 1); + OpenButton.Show(); + if (OpenButton.isLBActive()) { + obj.sq_PlaySound("CLICK_BUTTON2"); + AniState = 1; + } + + } + DrawAni(obj); + + + if (AniState == 0) T_DrawDynamicAni(obj, "common/tomb/stay.ani", X + 113, Y + 179, "TombEffectStay"); + + //特殊奖励 + if (ItemInfoObject) DrawItemEx(X + 96, Y + 120, ItemInfoObject.Id, 1); + } + + AniState = 0; + + function DrawAni(obj) { + if (AniState == 1) { + local Ani = T_DrawDynamicAni(obj, "common/tomb/pick.ani", X + 113, Y + 179, "TombEffect"); + if (sq_IsEnd(Ani)) { + sq_Rewind(Ani); + AniState = 0; + OpenTomb(); + } + } + } + + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + GetInfo(); + GetMyStkFlag(); + } + + + //绘制道具相信信息 + ItemObject = null; + ItemInfoDrawS = null; + + function DrawItemInfo(obj) { + if (ItemInfoDrawS && ItemInfoObject) { + if (!ItemObject) { + local ItemId = ItemInfoDrawS.ItemId; + // if (ItemInfoObject.rawin(ItemId)) { + ItemObject = ItemInfoClass(ItemInfoObject); + // } + } + ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); + } else { + ItemObject = null; + } + } + + //绘制入口 + function Draw(obj) { + ItemInfoDrawS = null; + if (MainState) { + if (WindowObj) { + DrawMain(obj); + DrawSuspensionLayer(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + + DrawItemInfo(obj); + } else { + WindowObj = LenheartWindow(X, Y, 224, 228, 28); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "TombCloseKey")) { + MainState = false; + } + } + + ItemInfoDrawS = null; + //绘制道具带道具信息 + function DrawItemEx(X, Y, Id, Count) { + L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X; + ItemInfoDrawS.Y <- Y; + ItemInfoDrawS.ItemId <- Id; + } + } + + + //悬浮层 + function DrawSuspensionLayer(obj) { + //任务提示 + if (QuestTips) { + L_sq_DrawWindow(X + 40, Y + 150, 224, 40, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + local QuestTipsStr = "背包在存在道具 [ " + ItemName + " ] x" + ItemCount + "个时,可参与拔剑活动。\n当前拔剑层数为 [ " + (Index + 1) + " ]层,总层数为 [ " + (MaxIndex + 1) + " ]层。"; + local QuestTipsArray = L_sq_GetStringDrawArray(QuestTipsStr, 251); + foreach(Pos, va in QuestTipsArray) { + // Sout("文本内容嗯: %L", va); + L_sq_DrawCode(va, X + 40 + 7, Y + 7 + 150 + (Pos * 16), 0xFFFFFFFF, 1, 1); + } + } + } +} + + +function Tomb(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("TombCObj")) { + local Cobj = TombC(); + RootTab.rawset("TombCObj", Cobj); + EventIcon("拔剑挑战", 271, 271, Cobj); + } else { + RootTab["TombCObj"].Proc(obj); + RootTab["TombCObj"].Draw(obj); + } +} +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("Tomb_LenheartFunc", Tomb); +} else { + local T = {}; + T.rawset("Tomb_LenheartFunc", Tomb); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/TownMove/TownMove.nut b/Plugins/TownMove/TownMove.nut new file mode 100644 index 0000000..1e00202 --- /dev/null +++ b/Plugins/TownMove/TownMove.nut @@ -0,0 +1,445 @@ +/* +文件名:TownMove.nut +路径:Plugins/TownMove/TownMove.nut +创建日期:2023-05-17 18:02 +文件用途: +*/ + +//HudPro按钮类 +class TownMovePro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx, CustomClicky); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) L_sq_DrawImg(RectBaseAnifile, RectFrame, Rectx, Recty); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) L_sq_DrawImg(BaseAnifile, BaseFrame, x, y); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + + +class TownMoveWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class TownMoveC extends BasicsDrawTool { + + //基准时间 + BaseTime = null; + //闪光模式 + FlashMode = false; + //按钮信息 + ButtonInfo = null; + //移动信息 + MoveInfo = null; + //页数 + Page = 0; + //当前显示 + PageInfo = null; + + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 253; + Y = 55; + + + function GetTownMoveInfo() { + local T = { + op = 31013 + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + + local T = { + op = 31011 + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + + } + + function GetTownMoveInfoCallBack(Chunk) { + // Sout("收到包内容为 \n %L", Chunk); + local Buffer = Json_STL("TownMoveJsonObj"); + Buffer.Parse(Chunk, 0, false); + + ButtonInfo = {}; + ButtonInfo.x <- Buffer.Get("ButtonXpos"); + ButtonInfo.y <- Buffer.Get("ButtonYpos"); + ButtonInfo.sx <- Buffer.Get("ButtonSizeX"); + ButtonInfo.sy <- Buffer.Get("ButtonSizeY"); + + MoveInfo = []; + for (local i = 0; i< 50; i++) { + local TownIndex = Buffer.Get("MoveInfo->" + i + "->TownIndex"); + if (TownIndex == false) break; + local AreaIndex = Buffer.Get("MoveInfo->" + i + "->AreaIndex"); + local Xpos = Buffer.Get("MoveInfo->" + i + "->Xpos"); + local Ypos = Buffer.Get("MoveInfo->" + i + "->Ypos"); + local ImgPath = Buffer.Get("MoveInfo->" + i + "->ImgPath"); + local ImgFrame = Buffer.Get("MoveInfo->" + i + "->ImgFrame"); + local Title = Buffer.Get("MoveInfo->" + i + "->Title"); + local T = {}; + T.TownIndex <- TownIndex; + T.AreaIndex <- AreaIndex; + T.Xpos <- Xpos; + T.Ypos <- Ypos; + T.ImgPath <- ImgPath; + T.ImgFrame <- ImgFrame; + T.Title <- Title; + MoveInfo.append(T); + } + + PageInfo = ScrollControl(MoveInfo, 7, 1); + } + + constructor() { + //注册装备信息回调 + Pack_Control.rawset(31012, GetTownMoveInfoCallBack.bindenv(this)); + + GetTownMoveInfo(); + + BaseTime = Clock(); + } + + //绘制按钮 + function DrawButton(obj) { + //如果有信息绘制按钮 + if (ButtonInfo && !MainState) { + //绘制镶嵌按钮 + local Button = TownMovePro("传送功能打开按钮", ButtonInfo.x, ButtonInfo.y, "interface2/hud/hud.img", ButtonInfo.sx, ButtonInfo.sy, 221); + Button.SetRectEnble(true, "传送功能打开按钮", ButtonInfo.x, ButtonInfo.y, "interface2/hud/hud.img", 222); + Button.SetCustomClickEnble(true, "传送功能打开按钮", ButtonInfo.x, ButtonInfo.y, "interface2/hud/hud.img", 223); + Button.Show(); + if (Button.isLBActive()) { + MainState = !MainState; + OpenClassCallBack(); + } + } + } + + + + //绘制主界面 + function DrawMain(obj) { + //绘制主界面 + L_sq_DrawImg("interface2/ui/warpportal/warpportal_cn.img", 0, X, Y); + + if (PageInfo) { + if (IMouse.IsWheelUp()) { + PageInfo.M(); + } + if (IMouse.IsWheelDown()) { + PageInfo.A(); + } + + foreach(Pos, Value in PageInfo.FocusList[0]) { + //绘制传送按钮 + local Button = TownMovePro("传送功能传送按钮" + Pos, X + 25, Y + 78 + (Pos * 52), "interface2/ui/warpportal/warpportal.img", 244, 45, Value.ImgFrame); + Button.SetRectEnble(true, "传送功能传送按钮" + Pos, X + 25, Y + 78 + (Pos * 52), "interface2/ui/warpportal/warpportal.img", Value.ImgFrame + 1); + Button.SetCustomClickEnble(true, "传送功能传送按钮" + Pos, X + 25, Y + 78 + (Pos * 52), "interface2/ui/warpportal/warpportal.img", Value.ImgFrame + 2); + Button.Show(); + if (Button.isInRect()) { + local NowTime = Clock() - BaseTime; + if (NowTime >= 1000) { + FlashMode = !FlashMode; + BaseTime = Clock(); + } + local A; + if (!FlashMode) { + A = sq_GetUniformVelocity(10, 250, NowTime, 1000); + } else { + A = sq_GetUniformVelocity(250, 10, NowTime, 1000); + } + //绘制特殊光效 + L_sq_DrawImg("interface2/ui/warpportal/warpportal.img", 1, X + 25, Y + 78 + (Pos * 52), 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0); + } + + L_sq_DrawCode(Value.Title, X + 25 + 10, Y + 78 + (Pos * 52) + 14, sq_RGBA(243, 223, 197, 250), 2, 1); + if (Button.isLBActive()) { + L_sq_MoveTown(Value.TownIndex, Value.AreaIndex, Value.Xpos, Value.Ypos); + MainState = !MainState; + } + } + } + + if (PageInfo) { + + L_sq_DrawCode((PageInfo.Controller.Value + 1).tostring(), X + 124, Y + 438, sq_RGBA(150, 255, 30, 250), 0, 1); + L_sq_DrawCode(" / " + (PageInfo.Controller.MaxValue + 1).tostring(), X + 124, Y + 438, sq_RGBA(150, 255, 30, 250), 0, 1); + } + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + } + + //绘制入口 + function Draw(obj) { + DrawButton(obj); + + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = LenheartWindow(X, Y, 294, 459, 24); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "TownMoveCloseKey")) { + MainState = false; + } + } +} + +function TownMove(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("TownMoveCObj")) { + local Cobj = TownMoveC(); + RootTab.rawset("TownMoveCObj", Cobj); + } else { + RootTab["TownMoveCObj"].Proc(obj); + RootTab["TownMoveCObj"].Draw(obj); + } +} + +// if (getroottable().rawin("LenheartFuncTab")) { +// getroottable()["LenheartFuncTab"].rawset("TownMoveFunc", TownMove); +// } else { +// local T = {}; +// T.rawset("TownMoveFunc", TownMove); +// getroottable().rawset("LenheartFuncTab", T); +// } \ No newline at end of file diff --git a/Plugins/Training/Training.nut b/Plugins/Training/Training.nut new file mode 100644 index 0000000..49b387a --- /dev/null +++ b/Plugins/Training/Training.nut @@ -0,0 +1,4251 @@ +/* +文件名:Training.nut +路径:Plugins/Training/Training.nut +创建日期:2022-10-14 16:03 +文件用途: +*/ + +/*引用Tool API列表 + -- GetWorldIndex + -- DrawDynamicAni + -- getCurrencyAppendage + -- sendSummonMonsterPacketWithFriend + -- TraversalObjectManager monster_die +*/ + + +MainXpos <- 0 +MainYpos <- 0 +MainTabXpos <- 0 +MainTabYpos <- 0 + +function Training(obj) { + + if (sq_GetCurrentModuleType() != 3) return; //如果不是已经进入了副本直接返回 + if (!isGm()) return; + + //---------------修炼场分页选择储存器---------------------- + local TrainingSelect = obj.getVar("TrainingSelect"); + TrainingSelect.clear_vector(); + //---------------修炼场分页选择储存器---------------------- + + //临时弄个背景 + /* + if(TrainingSelect.getInt(500) == 10) + { + sq_SendCreatePassiveObjectPacketPos(obj, 102535, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102530, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102531, 0, 0, 0, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102534, 0, 0, 120, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 102536, 0, 0, 120, 0); + + local YP = 120; + sq_SendCreatePassiveObjectPacketPos(obj, 8959, 0, 266, 151 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -46, 582 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, 3, 130 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -99, 485 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1072, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1039, 144 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 483, 572 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 503, 592 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 411, 568 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 777, 136 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 673, 137 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1574, 265 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1526, 195 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1553, 533 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1538, 516 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1440, 160 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 393, 141 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 139, 154 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 543, 598 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 464, 587 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1511, 211 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1500, 186 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1528, 546 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10152, 0, 985, 137 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 860, 155 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1323, 150 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 491, 138 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 538, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 607, 148 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 638, 160 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1555, 312 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 405, 596 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1126, 157 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1163, 146 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 1239, 126 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1354, 153 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1543, 298 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 907, 138 + YP, 0); + sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1573, 505 + YP, 0); + TrainingSelect.setInt(500, 1); + } +*/ + + local apd = GameC.getCurrencyAppendage(obj); //获取通用AP + if (!apd) return; + + TrainingMain(obj, apd); //主界面及主界面按钮 + + local TrainingPage = TrainingSelect.getInt(0); //修炼场分页储存器值 + + if (TrainingPage == 0) TrainingCallMonster(obj); //召唤怪物界面 + if (TrainingPage == 1) TrainingCharacterPower(obj); //人物属性界面 + if (TrainingPage == 2) TrainingDamagerTest(obj); //伤害测试界面 + if (TrainingPage == 3) TrainingStateTest(obj); //状态测试界面 + if (TrainingPage == 4) TrainingObjectTest(obj); //特效测试界面 + if (TrainingPage == 5) TrainingBackGroundSelect(obj); //背景选择界面 + + + + //197 185 169 + //Print ( obj, MainXpos - 90, MainYpos + 440, "倾泪寒吖",152,128,95,255); + + //DrawDynamicAni(obj, "common/hud_ui/hudprint/ice.ani", 0, 0, "冰冻"); +} + + + +//////////////////////////////////////////////////////////////////////////////召唤怪物 +//56923 //62922//56923 +function TrainingCallMonster(obj) { + //---------------召唤怪物储存器---------------------- + local CallMonster = obj.getVar("CallMonster"); + CallMonster.clear_vector(); + //---------------召唤怪物储存器---------------------- + + //---------------键入值储存器---------------------- + local KeyBNum = obj.getVar("KeyBNum"); + //---------------键入值储存器---------------------- + + BasicsDrawTool.T_DrawStayAni(obj, "common/training/summonmonster/main.ani", MainXpos - 320, MainYpos + 48, 0, "召唤界面"); + + //变量 + local CallMonsterID = CallMonster.getInt(0); //怪物ID + local CallMonsterLV = CallMonster.getInt(1); //怪物等级 + local MonsterKill = CallMonster.getInt(2); //杀死怪物判断 + local KeyForNumSw = CallMonster.getInt(3); //键入状态判断 + local MonState = CallMonster.getInt(4); //怪物状态 + + + { //点击初始化区域 + local Fris = click(obj, "Fris", IMouse, 0, 45, 321, 474); + if (Fris.isActive()) { + CallMonster.setInt(3, 0); //初始化区域 + } + } + + { //点击可键入区域 + local KeyForMonsterID = click(obj, "KeyFor", IMouse, 53, 142, 120, 30); + local KeyForMonsterLV = click(obj, "KeyFor", IMouse, 225, 135, 55, 18); + if (KeyForMonsterID.isActive() /*&& KeyForNumSw == 0*/ ) { + KeyBNum.setInt(0, 0); + CallMonster.setInt(3, 1); //开启输入模式 + } + if (KeyForMonsterLV.isActive() /*&& KeyForNumSw == 0*/ ) { + KeyBNum.setInt(0, 0); + CallMonster.setInt(3, 2); //开启输入模式 + } + } + + + //怪物代码输入模式 + if (KeyForNumSw == 1) { + BasicsDrawTool.T_DrawStayAni(obj, "common/training/anieff/anieff2.ani", 0, 49, 0, "代码输入中"); + SetKeyBNum(obj); //如果判断为开启 执行获取键入数值 + //得到键入的怪物ID + CallMonster.setInt(0, KeyBNum.getInt(0)); + } + + + //怪物等级输入模式 + if (KeyForNumSw == 2) { + BasicsDrawTool.T_DrawStayAni(obj, "common/training/anieff/anieff3.ani", 0, 49, 0, "等级输入中"); + SetKeyBNum(obj); //如果判断为开启 执行获取键入数值 + //得到键入的怪物LV + CallMonster.setInt(1, KeyBNum.getInt(0)); + } + + + { + //显示怪物ID + if (CallMonsterID != 0) BasicsDrawTool.T_DrawCustomNum(obj, MainXpos - 215 - ((CallMonsterID.tostring()).len()), MainYpos + 440 - 355 + 37 + 16, CallMonsterID, "common/skillcooltime/", 6); + if (CallMonsterID == 0 && KeyForNumSw != 1) BasicsDrawTool.T_DrawCustomNum(obj, MainXpos - 215, MainYpos + 440 - 355 + 37 + 16, 56923, "common/skillcooltime/", 6); //默认 + //显示怪物等级 + if (CallMonsterLV != 0) BasicsDrawTool.T_DrawCustomNum(obj, MainXpos - 80, MainYpos + 440 - 355 + 37 + 16, CallMonsterLV, "common/skillcooltime/", 6); + if (CallMonsterLV == 0 && KeyForNumSw != 2) BasicsDrawTool.T_DrawCustomNum(obj, MainXpos - 80, MainYpos + 440 - 355 + 37 + 16, 86, "common/skillcooltime/", 6); + //显示抗性类型 + + //显示抗性数值 + BasicsDrawTool.T_DrawCustomNum(obj, MainXpos - 167, 166, 0, "common/skillcooltime/", 6); + //显示异常类型 + + //显示怪物状态 + BasicsDrawTool.T_DrawCustomNum(obj, MainXpos - 80 - 148, MainYpos + 440 - 355 + 37 + 16 + 56, MonState, "common/skillcooltime/", 6); + } + + + //向怪物写入状态按钮 + local push = TrainingButton(obj, "push", IMouse, MainXpos - 182, MainYpos + 189, 27, 19, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/summonmonster/push1.ani", -1, -1); + push.setButtonAni("common/training/summonmonster/push.ani", 27, 19); + push.drawButtonImage(); + + { //召唤怪物按钮 + local callmon = TrainingButton(obj, "callmon", IMouse, MainXpos - 153, MainYpos + 189, 26, 19, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/summonmonster/call1.ani", -1, -1); + callmon.setButtonAni("common/training/summonmonster/call.ani", 26, 19); + callmon.drawButtonImage(); { + //召唤怪物按钮按下 + if (callmon.isActive()) { + CallMonster.setInt(3, 0); //设置获取键入关闭 + CallMonster.setInt(2, 0); //设置杀死怪物关闭 + local dstX = sq_GetDistancePos(0, obj.getDirection(), 200); + if (CallMonsterID == 0) CallMonsterID = 1; + if (CallMonsterLV == 0) CallMonsterLV = 120; + GameC.sendSummonMonsterPacketWithFriend(obj, CallMonsterID, CallMonsterLV, 600000000, obj.getXPos() + dstX, obj.getYPos(), 0, 100); + } + } + } + + //杀死怪物按钮 + local mondelete = TrainingButton(obj, "mondelete", IMouse, MainXpos - 125, MainYpos + 189, 27, 19, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/summonmonster/delete1.ani", -1, -1); + mondelete.setButtonAni("common/training/summonmonster/delete.ani", 27, 19); + mondelete.drawButtonImage(); + if (mondelete.isActive()) CallMonster.setInt(2, 1); + + //杀死全部怪物按钮 + local allmondelete = TrainingButton(obj, "allmondelete", IMouse, MainXpos - 96, MainYpos + 189, 51, 19, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/summonmonster/alldelete1.ani", -1, -1); + allmondelete.setButtonAni("common/training/summonmonster/alldelete.ani", 51, 19); + allmondelete.drawButtonImage(); + if (allmondelete.isActive()) CallMonster.setInt(2, 2); + + //怪物Ani显示 + local MonsterPrintAni = obj.getVar().GetAnimationMap(CallMonsterID.tostring(), getSwitchMonsterindexAni(CallMonsterID)); + sq_AnimationProc(MonsterPrintAni); + sq_drawCurrentFrame(MonsterPrintAni, MainXpos - 176, MainYpos + 470, true); +} + +//////////////////////////////////////////////////////////////////////////////人物属性 +function TrainingCharacterPower(obj) { + //111 + + +} + +//////////////////////////////////////////////////////////////////////////////伤害测试 +function TrainingDamagerTest(obj) { + //11 + + +} + +//////////////////////////////////////////////////////////////////////////////状态测试 +function TrainingStateTest(obj) { + //111 + + + +} + +//////////////////////////////////////////////////////////////////////////////特效测试 +function TrainingObjectTest(obj) { + //11 + + + +} + +//////////////////////////////////////////////////////////////////////////////背景选择 +function TrainingBackGroundSelect(obj) { + local BackGroundSelect = obj.getVar("BackGroundSelect"); + BackGroundSelect.clear_vector(); + + local BackGroundIndex = BackGroundSelect.getInt(0); //背景图片ID + local BackGroundset = BackGroundSelect.getInt(1); //背景设置判断 + + /* + local ani = obj.getVar().GetAnimationMap("background" + 0, "common/training/background/" + 0 + ".ani"); + ani.setImageRateFromOriginal(0.12, 0.12); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, 26, 135, true); + + local ani1 = obj.getVar().GetAnimationMap("background" + 1, "common/training/background/" + 1 + ".ani"); + ani1.setImageRateFromOriginal(0.15, 0.12); + sq_AnimationProc(ani1); + sq_drawCurrentFrame(ani1, 26, 235, true); + */ + BackGroundSelect.setInt(0, 3); + + //if (BackGroundIndex == 0) local Anifile = "map/xiulianchang/animation/beijing.ani"; + + //local ani = obj.getVar().GetAnimationMap("修炼场背景" + BackGroundIndex, "map/xiulianchang/animation/beijing.ani"); + if ( /*BackGroundset == 0 && */ BackGroundIndex > 0) { + local aniobj = sq_CreateDrawOnlyObject(obj, "common/training/background/" + (BackGroundIndex - 1) + ".ani", 3, true); + aniobj.setCurrentPos(0, -200, 0); + BackGroundSelect.setInt(1, 1); + } + +} + + + + + + + + + + + + + +class TrainingButton // obj -- 按钮名称 -- 鼠标对象 -- X坐标 -- Y坐标 -- 宽度 -- 高度 -- Ani调用路径 -- Ani宽度 -- Ani高度 -- AniRGB -- +{ + obj = null; + buttonName = null; + IMouse = null; + x = null; + y = null; + width = null; + length = null; + aniFileName = null; + aniWidth = null; + aniLength = null; + anirgb = null; + anialpha = null; + anieffectType = null; + anieffectFile = null; + xdeviation = null; + ydeviation = null; + constructor(gObj, gButtonName, gIMouse, gX, gY, gWidth, gLength, gRGB, gAlpha, geffectType, ganieffectFile, gxdeviation, gydeviation) { + obj = gObj; + buttonName = gButtonName; + IMouse = gIMouse; + x = gX; + y = gY; + width = gWidth; + length = gLength; + anirgb = gRGB; + anialpha = gAlpha; + anieffectType = geffectType; + anieffectFile = ganieffectFile; + xdeviation = gxdeviation; + ydeviation = gydeviation; + } + + function setButtonAni(gAniFileName, gAniWidth, gAnilength) { + aniFileName = gAniFileName; + aniWidth = gAniWidth; + aniLength = gAnilength; + } + + + + + function drawButtonImage() { + if (aniFileName != null) { + local buttonAni = obj.getVar().GetAnimationMap(buttonName.tostring(), aniFileName); + buttonAni.setImageRateFromOriginal(width.tofloat() / aniWidth.tofloat(), length.tofloat() / aniLength.tofloat()); //设置Ani的宽度和高度 + if (isDown()) + y++; + + if (isInRect()) { + local buttonAniEff = obj.getVar().GetAnimationMap(buttonName.tostring() + "Eff", anieffectFile); + //buttonAniEff.setImageRateFromOriginal ( width.tofloat ( ) / 250, length.tofloat ( ) / 250 );//设置Ani的宽度和高度 + //buttonAniEff.setEffectLayer ( true, GRAPHICEFFECT_LINEARDODGE, true, sq_RGB(0, 0, 0), sq_ALPHA(0), true, true ); + //buttonAniEff.setRGBA(225, 212, 197, 200); + sq_AnimationProc(buttonAniEff); + sq_drawCurrentFrame(buttonAniEff, x + xdeviation, y + ydeviation, true); + } + if (!isInRect()) { + sq_AnimationProc(buttonAni); + sq_DrawCurrentFrameEffect_SIMPLE(buttonAni, x, y, anirgb, anialpha, false); + } + } + } + + function isInRect() { + local mouseX = IMouse.GetXPos(); + local mouseY = IMouse.GetYPos(); + if (sq_IsIntersectRect(mouseX, mouseY, 5, 5, x, y, width, length)) + return true; + return false; + } + + function isDown() { + if (isInRect() && IMouse.IsLBDown()) { + obj.getVar(buttonName).setBool(0, true); + return true; + } + return false; + } + + function isActive() { + if (isInRect() && IMouse.IsLBUp() && obj.getVar(buttonName).getBool(0)) { + obj.getVar(buttonName).setBool(0, false); + return true; + } + return false; + } +} + + + + + + + + + + + + + + + + + + + + + +/////////////////////////////////////////////////////////////////////////////////////修炼场主界面及主界面按钮 +function TrainingMain(obj, apd) { + local TrainingSelect = obj.getVar("TrainingSelect"); //功能选择储存器 + + local Mainaniset = obj.getVar("Main"); + local currentT = apd.getTimer().Get(); //获取AP存在时间 + + + //主界面静态面板绘制 + BasicsDrawTool.T_DrawStayAni(obj, "common/training/main/main.ani", MainXpos - 320, MainYpos + 48, 0, "修炼场主界面"); + //主界面弹出按钮 + local maintab = TrainingButton(obj, "maintab", IMouse, MainTabXpos + 0, 49, 38, 35, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/main/maintab2.ani", 0, 0); + maintab.setButtonAni("common/training/main/maintab.ani", 39, 35); + maintab.drawButtonImage(); + //主界面收回按钮 + local MainTabFalse = TrainingButton(obj, "MainTabFalse", IMouse, MainXpos - 320, 50, 39, 35, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/main/maintab3.ani", 0, 0); + MainTabFalse.setButtonAni("common/training/main/maintab1.ani", 39, 35); + MainTabFalse.drawButtonImage(); + if (maintab.isActive()) { + Mainaniset.clear_vector(); //清空储存器 + Mainaniset.setInt(1, currentT); //向储存器1号位传递时间 + Mainaniset.setInt(2, MainXpos); //向储存器2号位传递坐标 + Mainaniset.setInt(3, MainTabXpos); //向储存器2号位传递坐标 + + Mainaniset.setInt(0, 1); //开面板 + } + if (MainTabFalse.isActive()) { + Mainaniset.clear_vector(); //清空储存器 + Mainaniset.setInt(1, currentT); //向储存器1号位传递时间 + Mainaniset.setInt(2, MainXpos); //向储存器2号位传递坐标 + Mainaniset.setInt(3, MainTabXpos); //向储存器2号位传递坐标 + + Mainaniset.setInt(0, 2); //关面板 + } else if (sq_IsKeyDown(OPTION_HOTKEY_MENU_SYSTEM__CLOSE_ALL_WINDOW, ENUM_SUBKEY_TYPE_ALL)) { + Mainaniset.setInt(0, 2); + Mainaniset.setInt(1, currentT); //向储存器1号位传递时间 + Mainaniset.setInt(2, MainXpos); //向储存器2号位传递坐标 + obj.getVar("CallMonster").setInt(3, 0); //取消输入状态 + } else if (Mainaniset.getInt(0) == 1) //开面板方法 + { + local currentT = apd.getTimer().Get(); //获取AP当前存在时间 + local b = sq_GetAccel(0, 39 - Mainaniset.getInt(3), currentT - Mainaniset.getInt(1), 50, false); + MainTabXpos = Mainaniset.getInt(3) - b; + if (MainTabXpos == -39) { + local v = sq_GetAccel(0, 320 - Mainaniset.getInt(2), currentT - Mainaniset.getInt(1), 300, false); + MainXpos = Mainaniset.getInt(2) + v; + if (MainXpos == 320) Mainaniset.setInt(0, 0); //到达指定位置时停止 + } + } else if (Mainaniset.getInt(0) == 2) //关面板方法 + { + local currentT = apd.getTimer().Get(); //获取AP当前存在时间 + local v = sq_GetAccel(0, Mainaniset.getInt(2), currentT - Mainaniset.getInt(1), 300, false); + MainXpos = Mainaniset.getInt(2) - v; + if (MainXpos == 0) { + local b = sq_GetAccel(0, -Mainaniset.getInt(3), currentT - Mainaniset.getInt(1), 480, false); + MainTabXpos = Mainaniset.getInt(3) + b; + if (MainTabXpos == 0) Mainaniset.setInt(0, 0); //到达指定位置时停止 + } + } + + + + + //分页选中光效 + BasicsDrawTool.T_DrawStayAni(obj, "common/training/anieff/anieff4.ani", MainXpos - 323 + (TrainingSelect.getInt(0) * 42), MainYpos + 98, 0, "分页选中光效"); + + local addvaule = 42; + + local mainsum = TrainingButton(obj, "mainsum", IMouse, MainXpos - 293, MainYpos + 102, 25, 14, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/main/mainsum1.ani", 0, 0); + mainsum.setButtonAni("common/training/main/mainsum.ani", 25, 14); + mainsum.drawButtonImage(); + if (mainsum.isActive()) TrainingSelect.setInt(0, 0); + + + local mainchr = TrainingButton(obj, "mainchr", IMouse, MainXpos - 293 + (1 * addvaule), MainYpos + 102, 25, 14, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/main/mainchr1.ani", 0, 0); + mainchr.setButtonAni("common/training/main/mainchr.ani", 25, 14); + mainchr.drawButtonImage(); + if (mainchr.isActive()) TrainingSelect.setInt(0, 1); + + local maindam = TrainingButton(obj, "maindam", IMouse, MainXpos - 293 + (2 * addvaule), MainYpos + 102, 25, 14, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/main/maindam1.ani", 0, 0); + maindam.setButtonAni("common/training/main/maindam.ani", 25, 14); + maindam.drawButtonImage(); + if (maindam.isActive()) TrainingSelect.setInt(0, 2); + + local mainobj = TrainingButton(obj, "mainobj", IMouse, MainXpos - 293 + (3 * addvaule), MainYpos + 102, 25, 14, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/main/mainobj1.ani", 0, 0); + mainobj.setButtonAni("common/training/main/mainobj.ani", 25, 14); + mainobj.drawButtonImage(); + if (mainobj.isActive()) TrainingSelect.setInt(0, 3); + + local mainsta = TrainingButton(obj, "mainsta", IMouse, MainXpos - 293 + (4 * addvaule), MainYpos + 102, 25, 14, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/main/mainsta1.ani", 0, 0); + mainsta.setButtonAni("common/training/main/mainsta.ani", 25, 14); + mainsta.drawButtonImage(); + if (mainsta.isActive()) TrainingSelect.setInt(0, 4); + + local mainps = TrainingButton(obj, "mainps", IMouse, MainXpos - 293 + (5 * addvaule), MainYpos + 102, 25, 14, sq_RGB(0, 0, 255), sq_ALPHA(255), 0, "common/training/main/mainps1.ani", 0, 0); + mainps.setButtonAni("common/training/main/mainps.ani", 25, 14); + mainps.drawButtonImage(); + if (mainps.isActive()) TrainingSelect.setInt(0, 5); + + + + + +} + + + + +class click { + obj = null; + clickName = null; + IMouse = null; + x = null; + y = null; + width = null; + length = null; + + constructor(gObj, gclickName, gIMouse, gX, gY, gWidth, gLength) { + obj = gObj; + clickName = gclickName; + IMouse = gIMouse; + x = gX; + y = gY; + width = gWidth; + length = gLength; + } + + function isInRect() { + local mouseX = IMouse.GetXPos(); + local mouseY = IMouse.GetYPos(); + if (sq_IsIntersectRect(mouseX, mouseY, 5, 5, x, y, width, length)) { + if (IMouse.IsLBDown()) { + obj.getVar(clickName).setBool(0, true); + return true; + } + return true; + } + return false; + } + + + function isDown() { + if (isInRect() && IMouse.IsLBDown()) { + obj.getVar(clickName).setBool(0, true); + return true; + } + return false; + } + + function isActive() { + if (isInRect() && IMouse.IsLBUp() && obj.getVar(clickName).getBool(0)) { + obj.getVar(clickName).setBool(0, false); + return true; + } + return false; + } +} + + + + +function SetKeyBNum(obj) { + local KeyBNum = obj.getVar("KeyBNum"); + KeyBNum.clear_vector(); + local num = KeyBNum.getInt(0); + local len = (num.tostring()).len(); + + + for (local i = 0; i < 9; i++) { + if (i == len || i == num) { + for (local o = 0; o < 10; o++) { + if (KeyPress.isKeyPress(69 + o) == true) KeyBNum.setInt(0, num * 10 + (0 + o)); + } + } + } + if (KeyPress.isKeyPress(86) == true) KeyBNum.setInt(0, (num - (num % 10)) / 10); +} + + + +function getSwitchMonsterindexAni(num) { + switch (num) { + case 61260: + return "monster/babydragon/BabyDragonAnimation/Move.ani"; + case 1013: + return "monster/bantu/BAAnimation/Move.ani"; + case 50085: + return "monster/bantu/BEAnimation/Move.ani"; + case 1012: + return "monster/bantu/BfAnimation/Move.ani"; + case 1014: + return "monster/bantu/BMLAnimation/Move.ani"; + case 50079: + return "monster/bantu/LabinaAnimation/Move.ani"; + case 55010: + return "monster/bantu/BAAnimation/Move.ani"; + case 50503: + return "monster/bantu/BEAnimation/Move.ani"; + case 55009: + return "monster/bantu/BfAnimation/Move.ani"; + case 40006: + return "monster/bantu/BAAnimation/Move.ani"; + case 40005: + return "monster/bantu/BfAnimation/Move.ani"; + case 43004: + return "monster/bantu/BMLAnimation/Move.ani"; + case 41007: + return "monster/bantu/BAAnimation/Move.ani"; + case 41006: + return "monster/bantu/BfAnimation/Move.ani"; + case 42005: + return "monster/bantu/BEAnimation/Move.ani"; + case 42006: + return "monster/bantu/BashAnimation/Move.ani"; + case 42007: + return "monster/bantu/EmreAnimation/Move.ani"; + case 42008: + return "monster/bantu/LabinaAnimation/Move.ani"; + case 82: + return "monster/characterstatue/MagicianAnimation/Move.ani"; + case 83: + return "monster/characterstatue/PriestAnimation/Move.ani"; + case 84: + return "monster/characterstatue/SwordmanAnimation/Move.ani"; + case 1030: + return "monster/coldboy/ColdBoyAnimation/Move.ani"; + case 61425: + return "monster/cosmofiend/Animation_Braze/Move.ani"; + case 1050: + return "monster/cosmofiend/Animation_Braze/Move.ani"; + case 61428: + return "monster/cosmofiend/Animation_DarkSteel/Move.ani"; + case 61427: + return "monster/cosmofiend/Animation_Overgrowth/Move.ani"; + case 1052: + return "monster/cosmofiend/Animation_Overgrowth/Move.ani"; + case 61426: + return "monster/cosmofiend/Animation_Vapor/Move.ani"; + case 1086: + return "monster/crimebuffalo/CrimeBuffaloArtifacterAni/Move.ani"; + case 1087: + return "monster/crimebuffalo/CrimeBuffaloGeneralAni/Move.ani"; + case 1088: + return "monster/crimebuffalo/CrimeBuffaloNormalAni/Move.ani"; + case 1089: + return "monster/crimebuffalo/Animation_RuneGhost/Move.ani"; + case 55016: + return "monster/crimebuffalo/CrimeBuffaloGeneralAni/Move.ani"; + case 55015: + return "monster/crimebuffalo/CrimeBuffaloNormalAni/Move.ani"; + case 1095: + return "monster/darkelf/Animation_DarkElf_Guard/Move.ani"; + case 1098: + return "monster/darkelf/Animation_DarkElf_Sprit_Hunter/Move.ani"; + case 55013: + return "monster/darkelf/Animation_DarkElf_Guard/Move.ani"; + case 61603: + return "monster/dendroid/DenAni/Move.ani"; + case 500: + return "monster/dendroid/DenAni/Move.ani"; + case 501: + return "monster/dendroid/GolAni/Move.ani"; + case 64542: + return "monster/dendroid/RodAni/Move.ani"; + case 502: + return "monster/dendroid/RodAni/Move.ani"; + case 50090: + return "monster/dingo_humpri/Dingo_Ani/Move.ani"; + case 50091: + return "monster/dingo_humpri/Humpri_Ani/Move.ani"; + case 50096: + return "monster/dingo_humpri/Marve_Ani/Move.ani"; + case 55026: + return "monster/dingo_humpri/Dingo_Ani/Move.ani"; + case 1073: + return "monster/dog/Animation_MadDog/Move.ani"; + case 1074: + return "monster/dog/Animation_MadDog/Move.ani"; + case 1075: + return "monster/dog/Animation_DOg/Move.ani"; + case 55006: + return "monster/dog/Animation_MadDog/Move.ani"; + case 61546: + return "monster/dog/Animation_MadDog/Move.ani"; + case 39: + return "monster/dollmaster/ClayAnimation/Move.ani"; + case 50094: + return "monster/dollmaster/GolemMasterAnimation/Move.ani"; + case 56109: + return "monster/dollmaster/GolemMasterAnimation/Move.ani"; + case 50006: + return "monster/dollmaster/SharedoAnimation/Move.ani"; + case 40: + return "monster/dollmaster/DogriAnimation/Move.ani"; + case 38: + return "monster/dollmaster/SteelAnimation/Move.ani"; + case 37: + return "monster/dollmaster/StoneAnimation/Move.ani"; + case 50007: + return "monster/draconian/SiusAni/MoveFoward.ani"; + case 71: + return "monster/draconian/DLAni/MoveFoward.ani"; + case 70: + return "monster/draconian/DMAni/MoveFoward.ani"; + case 55023: + return "monster/draconian/DLAni/MoveFoward.ani"; + case 61762: + return "monster/drake/Animation_SacrificeOfDrake/Move.ani"; + case 1011: + return "monster/drake/Animation_SacrificeOfDrake/Move.ani"; + case 60116: + return "monster/drake/Animation_SacrificeOfDrake/Move.ani"; + case 65015: + return "monster/equipment/taumini/MiniAnimation/Move.ani"; + case 62624: + return "monster/event/bluemarble/alex/AlexAni/Move_1.ani"; + case 62614: + return "monster/event/bluemarble/bantuamazones/BAAnimation/Move.ani"; + case 62623: + return "monster/event/bluemarble/bantufighter/BfAnimation/Move.ani"; + case 62616: + return "monster/event/bluemarble/battlingram/BattlinGramAni/Move.ani"; + case 62612: + return "monster/event/bluemarble/beastmasterlooger/BMLAnimation/Move.ani"; + case 62678: + return "monster/event/bluemarble/bigrat/BigRatAnimation/Move.ani"; + case 62676: + return "monster/event/bluemarble/biterat/BiteRatAnimation/Move.ani"; + case 62669: + return "monster/event/bluemarble/blacktentacle/Animation/move.ani"; + case 62657: + return "monster/event/bluemarble/bossatlas/Animation_Atlas/Move.ani"; + case 62607: + return "monster/event/bluemarble/bossfather/FatherAni/Move_3.ani"; + case 62618: + return "monster/event/bluemarble/bossfather_grim/FatherAni/Move.ani"; + case 62658: + return "monster/event/bluemarble/bossgoliath/Animation_Goliath/Move.ani"; + case 62608: + return "monster/event/bluemarble/bosspope/PopeAni/Move_3.ani"; + case 62622: + return "monster/event/bluemarble/bosspope_grim/PopeAni/Move.ani"; + case 62659: + return "monster/event/bluemarble/bosstitan/Animation_Titan/Move.ani"; + case 62606: + return "monster/event/bluemarble/catapult/CatapultAni/Move_3.ani"; + case 62617: + return "monster/event/bluemarble/catapultflame/FlameCataAni/Move.ani"; + case 62635: + return "monster/event/bluemarble/catapultlaser/LaserCataAni/Move.ani"; + case 62765: + return "monster/event/bluemarble/coldboy/ColdBoyAnimation/Move.ani"; + case 62680: + return "monster/event/bluemarble/darkelf_guard/Animation_DarkElf_Guard/Move.ani"; + case 62602: + return "monster/event/bluemarble/dendroid/DenAni/Move_0.ani"; + case 62639: + return "monster/event/bluemarble/dendroid_breeding/DenAni/Move.ani"; + case 62672: + return "monster/event/bluemarble/dog/Animation_MadDog/Move.ani"; + case 57005: + return "monster/event/bluemarble/evangelistofdark_grim/DarkAni/Move.ani"; + case 57001: + return "monster/event/bluemarble/evangelistofdawn_grim/DawnAni/Move.ani"; + case 57003: + return "monster/event/bluemarble/evangelistoflight_grim/LightAni/Move.ani"; + case 57004: + return "monster/event/bluemarble/evangelistoftwilight_grim/TwilightAni/Move.ani"; + case 62634: + return "monster/event/bluemarble/father/FatherAni/Move.ani"; + case 57000: + return "monster/event/bluemarble/gardener_ral/Animation_Ral/Move_0.ani"; + case 62664: + return "monster/event/bluemarble/gbltentacle/Animation/Move.ani"; + case 62648: + return "monster/event/bluemarble/ghoul/GhoulAni/Move.ani"; + case 62679: + return "monster/event/bluemarble/ghoulheadless/GhoulHeadlessAni/Move.ani"; + case 62651: + return "monster/event/bluemarble/ghoulmorgan/GhoulMorganAni/Move.ani"; + case 62649: + return "monster/event/bluemarble/ghoulthrower/GhoulThrowerAni/Move.ani"; + case 62774: + return "monster/event/bluemarble/goblin/Animation_Goblin2/Move.ani"; + case 62603: + return "monster/event/bluemarble/goliden/GolAni/Move_0.ani"; + case 62681: + return "monster/event/bluemarble/headlessknight/Knight_Animation/Move.ani"; + case 57012: + return "monster/event/bluemarble/hiddena/HiddenAAni/Move.ani"; + case 57013: + return "monster/event/bluemarble/hiddenb/HiddenBAni/Move.ani"; + case 57015: + return "monster/event/bluemarble/hiddenc/HiddenCAni/Move.ani"; + case 57014: + return "monster/event/bluemarble/hiddend/HiddenDAni/Move.ani"; + case 62601: + return "monster/event/bluemarble/hunter/HunterAni/Move_2.ani"; + case 62628: + return "monster/event/bluemarble/icegolem/Animation/move.ani"; + case 62682: + return "monster/event/bluemarble/incompletegoliath/Animation_IncompleteGoliath/Move.ani"; + case 62670: + return "monster/event/bluemarble/invader/Animation/move.ani"; + case 62666: + return "monster/event/bluemarble/isadora/Animation/Move.ani"; + case 62619: + return "monster/event/bluemarble/isadora_grim/Animation/Move.ani"; + case 62600: + return "monster/event/bluemarble/kurogaru/Animation_BlackLugaru/Move_0.ani"; + case 62668: + return "monster/event/bluemarble/lightspirit/LightAnimation/Move_1.ani"; + case 62621: + return "monster/event/bluemarble/lightspirit/LightAnimation/Move_0.ani"; + case 62636: + return "monster/event/bluemarble/lotus/LotusAni/Move.ani"; + case 57007: + return "monster/event/bluemarble/louis/Animation/move.ani"; + case 62611: + return "monster/event/bluemarble/master/MasterAni/Move_0.ani"; + case 62673: + return "monster/event/bluemarble/myojin/MyojinAnimation/Move.ani"; + case 62775: + return "monster/event/bluemarble/myojin/MyojinAnimation/Move.ani"; + case 62677: + return "monster/event/bluemarble/peterthepiper/PeterThePiperAnimation/Move.ani"; + case 62637: + return "monster/event/bluemarble/pope/PopeAni/Move.ani"; + case 62605: + return "monster/event/bluemarble/raxy-a/Raxy-AAni/Move_3.ani"; + case 62642: + return "monster/event/bluemarble/rebirthbrother/RebirthBrotherAni/Move.ani"; + case 62644: + return "monster/event/bluemarble/rebirthgbl/RebirthGBLAni/Move.ani"; + case 62643: + return "monster/event/bluemarble/rebirthgblbishop/RebirthGBLBishopAni/Move.ani"; + case 62646: + return "monster/event/bluemarble/rebirthgblleader/RebirthGBLLeaderAni/Move.ani"; + case 62647: + return "monster/event/bluemarble/rebirthgblpriest/RebirthGBLPriestAni/Move.ani"; + case 62645: + return "monster/event/bluemarble/rebirthsister/RebirthSisterAni/Move.ani"; + case 57006: + return "monster/event/bluemarble/ricubaby/Animation/move.ani"; + case 62604: + return "monster/event/bluemarble/rodinglo/RodAni/Move_0.ani"; + case 62654: + return "monster/event/bluemarble/sasquatch/Animation/move.ani"; + case 62610: + return "monster/event/bluemarble/shavante/ShavanteAnimation/Move.ani"; + case 62662: + return "monster/event/bluemarble/skeleton/Animation_Skeleton/Move.ani"; + case 62633: + return "monster/event/bluemarble/snowman/Animation/move.ani"; + case 62655: + return "monster/event/bluemarble/spider/SpiderAni/Stay.ani"; + case 62656: + return "monster/event/bluemarble/spiderboss/SpiderBossAni/Stay.ani"; + case 62653: + return "monster/event/bluemarble/spiderpoison/SpiderPoisonAni/Stay.ani"; + case 62627: + return "monster/event/bluemarble/starfish/TentacleAnimation/Move.ani"; + case 62626: + return "monster/event/bluemarble/starfishking/GreatAnimation/Move.ani"; + case 62625: + return "monster/event/bluemarble/starfishrukuku/RukAnimation/Move.ani"; + case 62660: + return "monster/event/bluemarble/stoneskeleton/Animation_StoneSkeleton/Move.ani"; + case 62667: + return "monster/event/bluemarble/waterspirit/WaterAnimation/Move_0.ani"; + case 62620: + return "monster/event/bluemarble/waterspirit/WaterAnimation/Move.ani"; + case 62650: + return "monster/event/bluemarble/wraith/WraithAni/Move.ani"; + case 62652: + return "monster/event/bluemarble/wraithspectress/WraithSpectressAni/Move.ani"; + case 62613: + return "monster/event/bluemarble/zepplin/ZepplinAni/Move.ani"; + case 62615: + return "monster/event/bluemarble/zepplinmachinegun/MacZepAni/Move.ani"; + case 62609: + return "monster/event/bluemarble/zombiezombie/ZZAnimation/Move_0.ani"; + case 750: + return "monster/evileye/EvilEyeAni/Move.ani"; + case 64538: + return "monster/evileye/EvilEyeAni/Move.ani"; + case 752: + return "monster/evileye/EvilEyeAni/Move.ani"; + case 64537: + return "monster/evileye/EvilEyeAni/Move.ani"; + case 751: + return "monster/evileye/EvilEyeAni/Move.ani"; + case 55021: + return "monster/evileye/EvilEyeAni/Move.ani"; + case 50005: + return "monster/flydragon/Dash_RezAnimation/MoveX.ani"; + case 52: + return "monster/flydragon/HarseSeriAnimation/MoveYZ.ani"; + case 53: + return "monster/flydragon/SelionAnimation/Move.ani"; + case 60110: + return "monster/flydragon/SerimalionAnimation/MoveYZ.ani"; + case 3016: + return "monster/ghoul/GhoulAni/Move.ani"; + case 3017: + return "monster/ghoul/GhoulThrowerAni/Move.ani"; + case 400: + return "monster/ghoul/GhoulAni/Move.ani"; + case 409: + return "monster/ghoul/GhoulHeadlessAni/Move.ani"; + case 64548: + return "monster/ghoul/GhoulMorganAni/Move.ani"; + case 402: + return "monster/ghoul/GhoulMorganAni/Move.ani"; + case 405: + return "monster/ghoul/GhoulNoMercyAni/Move.ani"; + case 406: + return "monster/ghoul/GhoulNoMercyAni/Move.ani"; + case 403: + return "monster/ghoul/GhoulAni/Move.ani"; + case 401: + return "monster/ghoul/GhoulThrowerAni/Move.ani"; + case 404: + return "monster/ghoul/GhoulThrowerAni/Move.ani"; + case 61173: + return "monster/ghoul/GhoulAni/Move.ani"; + case 40010: + return "monster/ghoul/GhoulNoMercyAni/Move.ani"; + case 40009: + return "monster/ghoul/GhoulThrowerAni/Move.ani"; + case 60: + return "monster/goblin/Animation_BombKagel/Move.ani"; + case 50062: + return "monster/goblin/Animation_BullsEye/Move.ani"; + case 50003: + return "monster/goblin/Animation_BunkerWorker/Move.ani"; + case 7: + return "monster/goblin/Animation_MountainGoblin2/Move.ani"; + case 1: + return "monster/goblin/Animation_Goblin2/Move.ani"; + case 61255: + return "monster/goblin/Animation_Hodor/Move.ani"; + case 900: + return "monster/goblin/Animation_Hodor/Move.ani"; + case 5006: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 50070: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 5: + return "monster/goblin/Animation_Kinol2/Move.ani"; + case 64523: + return "monster/goblin/Animation_Thrower/Move.ani"; + case 2: + return "monster/goblin/Animation_Thrower/Move.ani"; + case 6: + return "monster/goblin/Animation_Gero/Move.ani"; + case 4: + return "monster/goblin/Animation_MountainGoblin/Move.ani"; + case 64527: + return "monster/goblin/Animation_LightningKinol2/Move.ani"; + case 60005: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 1100: + return "monster/goblin/Animation_NigntVisionKagel/Move.ani"; + case 50004: + return "monster/goblin/Animation_Prag/Move.ani"; + case 24: + return "monster/goblin/Animation_Rudolf/Move.ani"; + case 3: + return "monster/goblin/Animation_IslandGoblin/Move.ani"; + case 25: + return "monster/goblin/Animation_Snowman/Move.ani"; + case 1021: + return "monster/goblin/Animation_IslandGoblin/Move.ani"; + case 63: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 60101: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 61: + return "monster/goblin/Animation_SurikenKagel/Move.ani"; + case 65: + return "monster/goblin/Animation_SurikenKagel/Move.ani"; + case 55001: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 55002: + return "monster/goblin/Animation_Thrower/Move.ani"; + case 55022: + return "monster/goblin/Animation_LightningKinol/Move.ani"; + case 907: + return "monster/goblin/Animation_Kinol/Move.ani"; + case 20: + return "monster/goblin/Animation_Goblin2/Move.ani"; + case 43015: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 43002: + return "monster/goblin/Animation_KingGalok/Move.ani"; + case 43001: + return "monster/goblin/Animation_LightningKinol/Move.ani"; + case 41002: + return "monster/goblin/Animation_Kinol/Move.ani"; + case 41003: + return "monster/goblin/Animation_Gero/Move.ani"; + case 41001: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 40004: + return "monster/goblin/Animation_BombKagel/Move.ani"; + case 40002: + return "monster/goblin/Animation_Kinol/Move.ani"; + case 40003: + return "monster/goblin/Animation_Gero/Move.ani"; + case 40001: + return "monster/goblin/Animation_Goblin/Move.ani"; + case 42001: + return "monster/goblin/Animation_Kinol/Move.ani"; + case 62922: + return "monster/goblin/Animation_LightningKinol/Move.ani"; + case 35: + return "monster/golem/Animation_GoldGolem/Move.ani"; + case 32: + return "monster/golem/Animation_SteelGolem/Move.ani"; + case 31: + return "monster/golem/Animation_StoneGolem/Move.ani"; + case 60011: + return "monster/gunner/robot/AlarmRobot/Move.ani"; + case 60013: + return "monster/gunner/robot/RX78_Ani/Move.ani"; + case 60063: + return "monster/gunner/robot/RX78Ex_Ani/Move.ani"; + case 60061: + return "monster/gunner/robot/Ez8Rx78_Ani/Move.ani"; + case 60019: + return "monster/gunner/robot/FightingSpirit_Ani/Move.ani"; + case 60014: + return "monster/gunner/robot/FireRX78_Ani/Move.ani"; + case 60015: + return "monster/gunner/robot/HeadingRX78_Ani/Move.ani"; + case 60016: + return "monster/gunner/robot/HealRX78_Ani/Move.ani"; + case 60017: + return "monster/gunner/robot/HealRX78_Ani/Move.ani"; + case 60002: + return "monster/gunner/robot/RX78_Ani/Move.ani"; + case 60018: + return "monster/gunner/robot/TempesterAni/BodyMove.ani"; + case 60041: + return "monster/gunner/robot/TempesterATAni/BodyMove.ani"; + case 64566: + return "monster/headlessknight/Knight_Animation/Move.ani"; + case 1081: + return "monster/headlessknight/Knight_Animation/Move.ani"; + case 10004: + return "monster/hunter/AlexAni/Move.ani"; + case 201: + return "monster/hunter/AlexAni/Move.ani"; + case 3015: + return "monster/hunter/AlexAni/Move.ani"; + case 200: + return "monster/hunter/HunterAni/Move.ani"; + case 64543: + return "monster/hunter/MasterAni/Move.ani"; + case 202: + return "monster/hunter/MasterAni/Move.ani"; + case 50095: + return "monster/hunter/RollingHunterAni/Move.ani"; + case 55014: + return "monster/hunter/HunterAni/Move.ani"; + case 906: + return "monster/hunter/HunterAni/Move.ani"; + case 61196: + return "monster/hunter/AlexAni/Move.ani"; + case 61195: + return "monster/hunter/HunterAni/Move.ani"; + case 43003: + return "monster/hunter/AlexAni/Move.ani"; + case 41004: + return "monster/hunter/HunterAni/Move.ani"; + case 42003: + return "monster/hunter/AlexAni/Move.ani"; + case 42002: + return "monster/hunter/HunterAni/Move.ani"; + case 10000: + return "monster/icetiger/ITAnimation/Move.ani"; + case 1016: + return "monster/icetiger/ITAnimation/Move.ani"; + case 50086: + return "monster/icetiger/ShavanteAnimation/Move.ani"; + case 1017: + return "monster/icetiger/ShavanteAnimation/Move.ani"; + case 60111: + return "monster/icetiger/ITAnimation/Move.ani"; + case 61544: + return "monster/icetiger/ITAnimation/Move.ani"; + case 62100: + return "monster/icetiger/ITAnimation/Move.ani"; + case 43005: + return "monster/icetiger/ShavanteAnimation/Move.ani"; + case 41008: + return "monster/icetiger/ITAnimation/Move.ani"; + case 40007: + return "monster/icetiger/ITAnimation/Move.ani"; + case 64539: + return "monster/lordoflight/LOL/Stay.ani"; + case 3000: + return "monster/lordoflight/LOL/Stay.ani"; + case 3002: + return "monster/lotus/LotusAni/Move.ani"; + case 62006: + return "monster/lugaru/Animation_BloodLugaru/Move.ani"; + case 61848: + return "monster/lugaru/Animation_BloodLugaru/Move.ani"; + case 5005: + return "monster/lugaru/Animation_BloodLugaru/Move.ani"; + case 62007: + return "monster/lugaru/Animation_Ciel/Move.ani"; + case 61849: + return "monster/lugaru/Animation_Ciel/Move.ani"; + case 5007: + return "monster/lugaru/Animation_Ciel/Move.ani"; + case 50000: + return "monster/lugaru/Animation_Ral/Move.ani"; + case 56421: + return "monster/lugaru/Animation_Heart/Move.ani"; + case 61850: + return "monster/lugaru/Animation_Heart/Move.ani"; + case 50072: + return "monster/lugaru/Animation_Heart/Move.ani"; + case 62004: + return "monster/lugaru/Animation_BlackLugaru/Move.ani"; + case 5002: + return "monster/lugaru/Animation_BlackLugaru/Move.ani"; + case 62003: + return "monster/lugaru/Animation_Lugaru/Move.ani"; + case 5001: + return "monster/lugaru/Animation_Lugaru/Move.ani"; + case 5004: + return "monster/lugaru/Animation_Penril/Move.ani"; + case 62005: + return "monster/lugaru/Animation_WhiteLugaru/Move.ani"; + case 5003: + return "monster/lugaru/Animation_WhiteLugaru/Move.ani"; + case 61545: + return "monster/lugaru/Animation_BloodLugaru/Move.ani"; + case 43014: + return "monster/lugaru/Animation_Heart/Move.ani"; + case 41022: + return "monster/lugaru/Animation_BloodLugaru/Move.ani"; + case 41023: + return "monster/lugaru/Animation_Ciel/Move.ani"; + case 40024: + return "monster/lugaru/Animation_Ciel/Move.ani"; + case 42020: + return "monster/lugaru/Animation_Heart/Move.ani"; + case 60042: + return "monster/mage/LanternRunnerAni/Move.ani"; + case 50030: + return "monster/magma/Animation_Atlas/Move.ani"; + case 760: + return "monster/magma/Animation_Atlas/Move.ani"; + case 761: + return "monster/magma/Animation_Goliath/Move.ani"; + case 762: + return "monster/magma/Animation_Titan/Move.ani"; + case 50033: + return "monster/magma/Animation_BurningHella/Move.ani"; + case 64586: + return "monster/magma/Animation_IncompleteGoliath/Move.ani"; + case 413: + return "monster/magma/Animation_IncompleteGoliath/Move.ani"; + case 61182: + return "monster/magma/Animation_Titan/Move.ani"; + case 407: + return "monster/magma/Animation_Magma_Ghoul/Move.ani"; + case 408: + return "monster/magma/Animation_Magma_Ghoul/Move.ani"; + case 770: + return "monster/magma/Animation_MagmaSacrificerBig/Move.ani"; + case 771: + return "monster/magma/Animation_MagmaSacrificerSmall/Move.ani"; + case 60107: + return "monster/magma/Animation_Atlas/Move.ani"; + case 60106: + return "monster/magma/Animation_Goliath/Move.ani"; + case 60105: + return "monster/magma/Animation_Titan/Move.ani"; + case 50032: + return "monster/magma/Animation_Titan/Move.ani"; + case 50501: + return "monster/magma/Animation_BurningHella/Move.ani"; + case 43008: + return "monster/magma/Animation_Atlas/Move.ani"; + case 40011: + return "monster/magma/Animation_Magma_Ghoul/Move.ani"; + case 51: + return "monster/new_flydragon/LooseSeriAnimation/StayMove.ani"; + case 50: + return "monster/new_flydragon/SerimalionAnimation/StayMove.ani"; + case 64583: + return "monster/new_golem/Animation_BigGolem/Move.ani"; + case 75: + return "monster/new_golem/Animation_BigGolem/Move.ani"; + case 34: + return "monster/new_golem/Animation_BronzeGolem/Move.ani"; + case 61124: + return "monster/new_golem/Animation_BronzeGolem/Move.ani"; + case 33: + return "monster/new_golem/Animation_ClayGolem/Move.ani"; + case 61123: + return "monster/new_golem/Animation_ClayGolem/Move.ani"; + case 76: + return "monster/new_golem/Animation_GreatGolem/StayMove.ani"; + case 64535: + return "monster/new_golem/Animation_Platany/Move.ani"; + case 3001: + return "monster/new_golem/Animation_Platany/Move.ani"; + case 61140: + return "monster/new_golem/Animation_SpiritOfGolem/Move.ani"; + case 50008: + return "monster/new_golem/Animation_Razor/Move.ani"; + case 56035: + return "monster/newmonsters/bantu/_rabbitbird/Animation/move.ani"; + case 56036: + return "monster/newmonsters/bantu/_rabbitmedusa/Animation/move.ani"; + case 61701: + return "monster/newmonsters/bantu/bantuwoman/Animation/move.ani"; + case 61454: + return "monster/newmonsters/bantu/buffaloman/Animation/move.ani"; + case 56710: + return "monster/newmonsters/bantu/elitebuffaloman/Animation/move.ani"; + case 56704: + return "monster/newmonsters/bantu/emeldir/Animation/move.ani"; + case 56708: + return "monster/newmonsters/bantu/isil/Animation/move.ani"; + case 56703: + return "monster/newmonsters/bantu/mohini/Animation/move.ani"; + case 61242: + return "monster/newmonsters/bantu/rabbit/Animation/run.ani"; + case 61450: + return "monster/newmonsters/bantu/rabbitman/Animation/move.ani"; + case 56018: + return "monster/newmonsters/bantu/rabbitwoman/Animation/move.ani"; + case 61451: + return "monster/newmonsters/bantu/rabbitwoman/Animation/move.ani"; + case 56701: + return "monster/newmonsters/bantu/ratree/Animation/move.ani"; + case 56702: + return "monster/newmonsters/bantu/sati/Animation/move.ani"; + case 56707: + return "monster/newmonsters/bantu/wolfpatriarch/Animation/move.ani"; + case 61467: + return "monster/newmonsters/gbl/blacktentacle/Animation/move.ani"; + case 61102: + return "monster/newmonsters/gbl/blacktentacle/Animation/move.ani"; + case 56102: + return "monster/newmonsters/gbl/gblcolossus/Animation/Move.ani"; + case 61465: + return "monster/newmonsters/gbl/gbltentacle/Animation/Move.ani"; + case 61101: + return "monster/newmonsters/gbl/gbltentacle/Animation/Move.ani"; + case 56432: + return "monster/newmonsters/gbl/gbltentaclenamed/Animation/Move.ani"; + case 56104: + return "monster/newmonsters/gbl/gbltentaclenamed/Animation/Move.ani"; + case 61468: + return "monster/newmonsters/gbl/invader/Animation/move.ani"; + case 61106: + return "monster/newmonsters/gbl/invader/Animation/move.ani"; + case 61435: + return "monster/newmonsters/gbl/isadora/Animation/Move.ani"; + case 61103: + return "monster/newmonsters/gbl/isadora/Animation/Move.ani"; + case 64560: + return "monster/newmonsters/gbl/isadora/Animation/Move.ani"; + case 61115: + return "monster/newmonsters/gbl/isadora/Animation/Move.ani"; + case 61114: + return "monster/newmonsters/gbl/ladyzealot/Animation/Move.ani"; + case 61466: + return "monster/newmonsters/gbl/ladyzealot/Animation/Move.ani"; + case 61104: + return "monster/newmonsters/gbl/ladyzealot/Animation/Move.ani"; + case 56433: + return "monster/newmonsters/gbl/stickcle/Animation/move.ani"; + case 56101: + return "monster/newmonsters/gbl/stickcle/Animation/move.ani"; + case 61471: + return "monster/newmonsters/gbl/thrower/Animation/move.ani"; + case 61100: + return "monster/newmonsters/gbl/thrower/Animation/move.ani"; + case 61105: + return "monster/newmonsters/gbl/webcannon/Animation/Move.ani"; + case 61703: + return "monster/newmonsters/golem/icegolem/Animation/move.ani"; + case 56712: + return "monster/newmonsters/golem/icewavegolem/Animation/move.ani"; + case 56711: + return "monster/newmonsters/golem/ricubaby/Animation/move.ani"; + case 56706: + return "monster/newmonsters/golem/stormgolem/Animation/move.ani"; + case 56731: + return "monster/newmonsters/risk_dungeon/kingsruins/guardblock/AnimationGuardBlock/Move.ani"; + case 56733: + return "monster/newmonsters/risk_dungeon/kingsruins/guardfire/AnimationGuardFire/Move.ani"; + case 56732: + return "monster/newmonsters/risk_dungeon/kingsruins/guardice/AnimationGuardIce/Move.ani"; + case 56734: + return "monster/newmonsters/risk_dungeon/kingsruins/guardlight/AnimationGuardLight/Move.ani"; + case 56730: + return "monster/newmonsters/risk_dungeon/kingsruins/guardwind/AnimationGuardWind/Move.ani"; + case 61750: + return "monster/newmonsters/risk_dungeon/kingsruins/hammerking/AnimationHammerKing/Move.ani"; + case 61748: + return "monster/newmonsters/risk_dungeon/vilmark/bloodlugaru/Animation_BloodLugaru/Move.ani"; + case 56743: + return "monster/newmonsters/risk_dungeon/vilmark/ciel/Animation_Ciel/Move.ani"; + case 61753: + return "monster/newmonsters/risk_dungeon/vilmark/goblinkrazyivan/Animation_Goblin/Move.ani"; + case 56740: + return "monster/newmonsters/risk_dungeon/vilmark/goblinkrazyivancaptain/Animation_Goblin/Move.ani"; + case 56742: + return "monster/newmonsters/risk_dungeon/vilmark/heart/Animation_Heart/Move.ani"; + case 61737: + return "monster/newmonsters/risk_dungeon/vilmark/mecatau/MetaCowAnimation/Move.ani"; + case 56741: + return "monster/newmonsters/risk_dungeon/vilmark/taucaptain/CaptainAnimation/Move.ani"; + case 61752: + return "monster/newmonsters/risk_dungeon/vilmark/taumini/MiniAnimation/Move.ani"; + case 61452: + return "monster/newmonsters/snake/ice_snake/Animation/move.ani"; + case 65000: + return "monster/newmonsters/snake/ice_snake/Animation/move.ani"; + case 62104: + return "monster/newmonsters/snake/ice_snake/Animation/move.ani"; + case 56450: + return "monster/newmonsters/snowman/louis/Animation/move.ani"; + case 64558: + return "monster/newmonsters/snowman/sasquatch/Animation/move.ani"; + case 61707: + return "monster/newmonsters/snowman/sasquatch/Animation/move.ani"; + case 43006: + return "monster/newmonsters/snowman/sasquatch/Animation/move.ani"; + case 61453: + return "monster/newmonsters/snowman/snowman/Animation/move.ani"; + case 62101: + return "monster/newmonsters/snowman/snowman/Animation/move.ani"; + case 41009: + return "monster/newmonsters/snowman/snowman/Animation/move.ani"; + case 40008: + return "monster/newmonsters/snowman/snowman/Animation/move.ani"; + case 62011: + return "monster/newmonsters/spider/slotor/Animation/move.ani"; + case 61706: + return "monster/newmonsters/spider/slotor/Animation/move.ani"; + case 62102: + return "monster/newmonsters/spider/slotor/Animation/move.ani"; + case 56452: + return "monster/newmonsters/spider/slotor1/Animation/move.ani"; + case 61326: + return "monster/newmonsters/spider/slotorblind/Animation/move.ani"; + case 63038: + return "monster/newmonsters/timegate/conflagration/elf_guard/Animation/Move.ani"; + case 63028: + return "monster/newmonsters/timegate/conflagration/flaghillgab/Animation_MountainGoblin2/Move.ani"; + case 59030: + return "monster/newmonsters/timegate/conflagration/tangga/CaptainAnimation/Move.ani"; + case 63029: + return "monster/newmonsters/timegate/conflagration/tauassaulter/AssaulterAnimation/Move.ani"; + case 63030: + return "monster/newmonsters/timegate/conflagration/tauguard/GuardAnimation/Move.ani"; + case 63032: + return "monster/newmonsters/timegate/epidemic/skeleton/Animation_Skeleton/Move.ani"; + case 1083: + return "monster/nugol/BabyNugol_Animation/Move.ani"; + case 1085: + return "monster/nugol/KingNugol_Animation/Move.ani"; + case 1084: + return "monster/nugol/Nugol_Animation/Move.ani"; + case 1097: + return "monster/peterthepiper/BiteRatAnimation/Move.ani"; + case 1101: + return "monster/peterthepiper/CursedRatAnimation/Move.ani"; + case 1096: + return "monster/peterthepiper/PeterThePiperAnimation/Move.ani"; + case 1078: + return "monster/peterthepiper/PeterThePiperAnimation/Move.ani"; + case 1077: + return "monster/peterthepiper/PeterThePiperAnimation/Move.ani"; + case 1080: + return "monster/peterthepiper/RatWaveAnimation/RatRush.ani"; + case 50076: + return "monster/skeleton/Animation_CuladSkeleton/Move.ani"; + case 61172: + return "monster/skeleton/Animation_Skeleton/Move.ani"; + case 10003: + return "monster/skeleton/Animation_Skeleton/Move.ani"; + case 1094: + return "monster/skeleton/Animation_HeadlessSkeleton/Move.ani"; + case 1000: + return "monster/skeleton/Animation_Skeleton/Move.ani"; + case 1006: + return "monster/skeleton/Animation_FallenGuardian/Move.ani"; + case 1090: + return "monster/skeleton/Animation_SkullKane/Move.ani"; + case 1001: + return "monster/skeleton/Animation_StoneSkeleton/Move.ani"; + case 50074: + return "monster/skeleton/Animation_SzakSkeleton/Move.ani"; + case 55004: + return "monster/skeleton/Animation_Skeleton/Move.ani"; + case 41013: + return "monster/skeleton/Animation_StoneSkeleton/Move.ani"; + case 40014: + return "monster/skeleton/Animation_Skeleton/Move.ani"; + case 42012: + return "monster/skeleton/Animation_CuladSkeleton/Move.ani"; + case 42009: + return "monster/skeleton/Animation_HydeSkeleton/Move.ani"; + case 42010: + return "monster/skeleton/Animation_SzakSkeleton/Move.ani"; + case 42011: + return "monster/skeleton/Animation_ZakasiyaSkeleton/Move.ani"; + case 50075: + return "monster/skeleton/Animation_ZakasiyaSkeleton/Move.ani"; + case 1020: + return "monster/slotor/SlotorAnimation/Move.ani"; + case 1019: + return "monster/snowman/SnowmanAnimation/Move.ani"; + case 40025: + return "monster/snowman/SnowmanAnimation/Move.ani"; + case 3013: + return "monster/soceress/Animation_Vinoshu/Move.ani"; + case 3014: + return "monster/soceress/Animation_Keraha/Move.ani"; + case 50023: + return "monster/soceress/Animation_Vinoshu/Move.ani"; + case 50024: + return "monster/soceress/Animation_Keraha/Move.ani"; + case 64529: + return "monster/soceress/Animation_Keraha/Move.ani"; + case 64588: + return "monster/soceress/Animation_Keraha/Move.ani"; + case 21: + return "monster/soceress/Animation_Keraha/Move.ani"; + case 61257: + return "monster/soceress/Animation_Luis/Move.ani"; + case 902: + return "monster/soceress/Animation_Luis/Move.ani"; + case 60104: + return "monster/soceress/Animation_Keraha/Move.ani"; + case 64531: + return "monster/soceress/Animation_Vinoshu/Move.ani"; + case 62523: + return "monster/soceress/Animation_Vinoshu/Move.ani"; + case 64589: + return "monster/soceress/Animation_Vinoshu/Move.ani"; + case 22: + return "monster/soceress/Animation_Vinoshu/Move.ani"; + case 61215: + return "monster/soldier/AnimationAxeExpeller/Move.ani"; + case 61846: + return "monster/soldier/AnimationAxeExpeller/Move.ani"; + case 701: + return "monster/soldier/AnimationAxeExpeller/Move.ani"; + case 61839: + return "monster/soldier/AnimationAxionExpeller/Move.ani"; + case 50063: + return "monster/soldier/AnimationAxionExpeller/Move.ani"; + case 61213: + return "monster/soldier/AnimationExpeller/Move.ani"; + case 61845: + return "monster/soldier/AnimationExpeller/Move.ani"; + case 700: + return "monster/soldier/AnimationExpeller/Move.ani"; + case 61842: + return "monster/soldier/AnimationGuardBlock/Move.ani"; + case 50066: + return "monster/soldier/AnimationGuardBlock/Move.ani"; + case 61840: + return "monster/soldier/AnimationGuardFire/Move.ani"; + case 50064: + return "monster/soldier/AnimationGuardFire/Move.ani"; + case 61843: + return "monster/soldier/AnimationGuardIce/Move.ani"; + case 50067: + return "monster/soldier/AnimationGuardIce/Move.ani"; + case 61844: + return "monster/soldier/AnimationGuardLight/Move.ani"; + case 50068: + return "monster/soldier/AnimationGuardLight/Move.ani"; + case 61841: + return "monster/soldier/AnimationGuardWind/Move.ani"; + case 50065: + return "monster/soldier/AnimationGuardWind/Move.ani"; + case 711: + return "monster/soldier/AnimationHammerKing/Move.ani"; + case 61847: + return "monster/soldier/AnimationHeavenExpeller/Move.ani"; + case 702: + return "monster/soldier/AnimationHeavenExpeller/Move.ani"; + case 61214: + return "monster/soldier/AnimationLegionExpeller/Move.ani"; + case 704: + return "monster/soldier/AnimationLegionExpeller/Move.ani"; + case 909: + return "monster/soldier/AnimationSandorExpellerEX/Move.ani"; + case 61256: + return "monster/soldier/AnimationSandorExpeller/Move.ani"; + case 901: + return "monster/soldier/AnimationSandorExpeller/Move.ani"; + case 60108: + return "monster/soldier/AnimationExpeller/Move.ani"; + case 60109: + return "monster/soldier/AnimationGuardBlock/Move.ani"; + case 705: + return "monster/soldier/AnimationTSMExpeller/Move.ani"; + case 40021: + return "monster/soldier/AnimationAxeExpeller/Move.ani"; + case 41020: + return "monster/soldier/AnimationAxeExpeller/Move.ani"; + case 41021: + return "monster/soldier/AnimationAxionExpeller/Move.ani"; + case 41019: + return "monster/soldier/AnimationExpeller/Move.ani"; + case 40020: + return "monster/soldier/AnimationExpeller/Move.ani"; + case 40022: + return "monster/soldier/AnimationLegionExpeller/Move.ani"; + case 42018: + return "monster/soldier/AnimationHeavenExpeller/Move.ani"; + case 222: + return "monster/spacefish/CrokutaAni/Head/Move.ani"; + case 221: + return "monster/spacefish/SFishLongAni/Head/Move.ani"; + case 55028: + return "monster/spacefish/SFishAni/Head/Move.ani"; + case 3012: + return "monster/spider/SpiderAni/Stay.ani"; + case 1092: + return "monster/spider/CursedSpiderAni/Stay.ani"; + case 62008: + return "monster/spider/SpiderAni/Stay.ani"; + case 420: + return "monster/spider/SpiderAni/Stay.ani"; + case 56420: + return "monster/spider/SpiderBossAni/Stay.ani"; + case 64549: + return "monster/spider/SpiderBossAni/Stay.ani"; + case 422: + return "monster/spider/SpiderBossAni/Stay.ani"; + case 10002: + return "monster/spider/SpiderPoisonAni/Stay.ani"; + case 62009: + return "monster/spider/SpiderPoisonAni/Stay.ani"; + case 421: + return "monster/spider/SpiderPoisonAni/Stay.ani"; + case 55027: + return "monster/spider/SpiderBossAni/Stay.ani"; + case 43007: + return "monster/spider/SpiderBossAni/Stay.ani"; + case 62010: + return "monster/spider/YoungSpiderAni/Stay.ani"; + case 61504: + return "monster/spider/YoungSpiderAni/Stay.ani"; + case 430: + return "monster/spider/YoungSpiderAni/Stay.ani"; + case 61259: + return "monster/spikeking/Animation_SpikeKing/Move.ani"; + case 904: + return "monster/spikeking/Animation_SpikeKing/Move.ani"; + case 61253: + return "monster/spirit/MageDarkHigherAnimation/Move.ani"; + case 606: + return "monster/spirit/MageDarkHigherAnimation/Move.ani"; + case 602: + return "monster/spirit/DarkAnimation/Move.ani"; + case 50098: + return "monster/spirit/DarkAnimation/Move.ani"; + case 61252: + return "monster/spirit/MageFireHigherAnimation/Move.ani"; + case 605: + return "monster/spirit/MageFireHigherAnimation/Move.ani"; + case 601: + return "monster/spirit/FireAnimation/Move.ani"; + case 610: + return "monster/spirit/FireAnimation/Move.ani"; + case 61254: + return "monster/spirit/MageLightHigherAnimation/Move.ani"; + case 607: + return "monster/spirit/MageLightHigherAnimation/Move.ani"; + case 603: + return "monster/spirit/LightAnimation/Move.ani"; + case 60008: + return "monster/spirit/MageDarkAnimation/Move.ani"; + case 60044: + return "monster/spirit/MageDarkExAnimation/Move.ani"; + case 60023: + return "monster/spirit/MageFireHigherAnimation/Move.ani"; + case 60007: + return "monster/spirit/MageFireAnimation/Move.ani"; + case 60045: + return "monster/spirit/MageFireExAnimation/Move.ani"; + case 60009: + return "monster/spirit/MageLightAnimation/Move.ani"; + case 60046: + return "monster/spirit/MageLightExAnimation/Move.ani"; + case 60020: + return "monster/spirit/MageWaterHigherAnimation/Move.ani"; + case 60006: + return "monster/spirit/MageWaterAnimation/Move.ani"; + case 60043: + return "monster/spirit/MageWaterExAnimation/Move.ani"; + case 1022: + return "monster/spirit/WaterAnimation/Move.ani"; + case 50069: + return "monster/spirit/SoulEterAnimation/Move.ani"; + case 60113: + return "monster/spirit/DarkAnimation/Move.ani"; + case 60112: + return "monster/spirit/FireAnimation/Move.ani"; + case 60115: + return "monster/spirit/LightAnimation/Move.ani"; + case 60103: + return "monster/spirit/WaterAnimation/Move.ani"; + case 55019: + return "monster/spirit/DarkAnimation/Move.ani"; + case 55020: + return "monster/spirit/FireAnimation/Move.ani"; + case 55017: + return "monster/spirit/LightAnimation/Move.ani"; + case 50507: + return "monster/spirit/SoulEterAnimation/Move.ani"; + case 55018: + return "monster/spirit/WaterAnimation/Move.ani"; + case 50502: + return "monster/spirit/ShisukeAnimation/Move.ani"; + case 41010: + return "monster/spirit/FireAnimation/Move.ani"; + case 40013: + return "monster/spirit/FireAnimation/Move.ani"; + case 42013: + return "monster/spirit/SoulEterAnimation/Move.ani"; + case 61251: + return "monster/spirit/MageWaterHigherAnimation/Move.ani"; + case 604: + return "monster/spirit/MageWaterHigherAnimation/Move.ani"; + case 600: + return "monster/spirit/WaterAnimation/Move.ani"; + case 50078: + return "monster/spirit/ShisukeAnimation/Move.ani"; + case 250: + return "monster/starfish/TentacleAnimation/Move.ani"; + case 253: + return "monster/starfish/DevAnimation/Move.ani"; + case 64545: + return "monster/starfish/GreatAnimation/Move.ani"; + case 251: + return "monster/starfish/GreatAnimation/Move.ani"; + case 64584: + return "monster/starfish/RukAnimation/Move.ani"; + case 252: + return "monster/starfish/RukAnimation/Move.ani"; + case 60100: + return "monster/starfish/DevAnimation/Move.ani"; + case 61197: + return "monster/starfish/TentacleAnimation/Move.ani"; + case 61199: + return "monster/starfish/DevAnimation/Move.ani"; + case 61198: + return "monster/starfish/RukAnimation/Move.ani"; + case 1082: + return "monster/statue/Animation/Move.ani"; + case 1061: + return "monster/succubus/Animation_Azuriness/Move.ani"; + case 1060: + return "monster/succubus/Animation_Mistylime/Move.ani"; + case 50002: + return "monster/tau/Rock_MoudAnimation/Move.ani"; + case 64530: + return "monster/tau/TangasAnimation/Move.ani"; + case 15: + return "monster/tau/TangasAnimation/Move.ani"; + case 64524: + return "monster/tau/ArmyAnimation/Move.ani"; + case 11: + return "monster/tau/ArmyAnimation/Move.ani"; + case 10001: + return "monster/tau/AssaulterAnimation/Move.ani"; + case 13: + return "monster/tau/AssaulterAnimation/Move.ani"; + case 64525: + return "monster/tau/BeastAnimation/Move.ani"; + case 12: + return "monster/tau/BeastAnimation/Move.ani"; + case 61836: + return "monster/tau/CaptainAnimation/Move.ani"; + case 50071: + return "monster/tau/CaptainAnimation/Move.ani"; + case 14: + return "monster/tau/GuardAnimation/Move.ani"; + case 61838: + return "monster/tau/MetaCowAnimation/Move.ani"; + case 17: + return "monster/tau/MetaCowAnimation/Move.ani"; + case 61837: + return "monster/tau/MiniAnimation/Move.ani"; + case 16: + return "monster/tau/MiniAnimation/Move.ani"; + case 908: + return "monster/tau/BeastAnimation/Move.ani"; + case 43016: + return "monster/tau/MetaCowAnimation/Move.ani"; + case 42019: + return "monster/tau/CaptainAnimation/Move.ani"; + case 50084: + return "monster/thief/HakudoAnimation/Move.ani"; + case 50092: + return "monster/thief/MouseHeadSueAnimation/Move.ani"; + case 1072: + return "monster/thief/MyojinAnimation/Move.ani"; + case 1071: + return "monster/thief/ThiefFemaleAnimation/Move.ani"; + case 50087: + return "monster/thief/ThiefGhostRunner/Move.ani"; + case 1070: + return "monster/thief/ThiefMaleAnimation/Move.ani"; + case 1069: + return "monster/thief/ThiefMaleMadAnimation/Move.ani"; + case 50505: + return "monster/thief/HakudoAnimation/Move.ani"; + case 50506: + return "monster/thief/MouseHeadSueAnimation/Move.ani"; + case 55012: + return "monster/thief/MyojinAnimation/Move.ani"; + case 43011: + return "monster/thief/HakudoAnimation/Move.ani"; + case 43013: + return "monster/thief/MyojinAnimation/Move.ani"; + case 43012: + return "monster/thief/ThiefGhostRunner/Move.ani"; + case 1031: + return "monster/toy/CheapToyAnimation/Move.ani"; + case 1033: + return "monster/toy/ExpensiveToyAnimation/Move.ani"; + case 50080: + return "monster/toy/HiddenAAni/Move.ani"; + case 50081: + return "monster/toy/HiddenBAni/Move.ani"; + case 50082: + return "monster/toy/HiddenCAni/Move.ani"; + case 50083: + return "monster/toy/HiddenDAni/Move.ani"; + case 55005: + return "monster/toy/ExpensiveToyAnimation/Move.ani"; + case 50504: + return "monster/toy/HiddenBAni/Move.ani"; + case 50508: + return "monster/toy/HiddenDAni/Move.ani"; + case 1032: + return "monster/toy/ToyAnimation/Move.ani"; + case 271: + return "monster/vehicle/BattlinGramAni/Move.ani"; + case 270: + return "monster/vehicle/CatapultAni/Move.ani"; + case 272: + return "monster/vehicle/FlameCataAni/Move.ani"; + case 273: + return "monster/vehicle/LaserCataAni/Move.ani"; + case 41005: + return "monster/vehicle/CatapultAni/Move.ani"; + case 42004: + return "monster/vehicle/CatapultAni/Move.ani"; + case 61821: + return "monster/villageattacked/Animation_MountainGoblin2/Move.ani"; + case 61822: + return "monster/villageattacked/Animation_IslandGoblin2/Move.ani"; + case 61835: + return "monster/villageattacked/Animation_Ral/Move.ani"; + case 61815: + return "monster/villageattacked/Animation_Goblin2/Move.ani"; + case 61819: + return "monster/villageattacked/Animation_Kinol2/Move.ani"; + case 61816: + return "monster/villageattacked/Animation_Thrower/Move.ani"; + case 61820: + return "monster/villageattacked/Animation_Gero/Move.ani"; + case 61818: + return "monster/villageattacked/Animation_MountainGoblin/Move.ani"; + case 61829: + return "monster/villageattacked/Animation_Keraha/Move.ani"; + case 61823: + return "monster/villageattacked/Animation_LightningKinol2/Move.ani"; + case 61832: + return "monster/villageattacked/Animation_BlackLugaru/Move.ani"; + case 61831: + return "monster/villageattacked/Animation_Lugaru/Move.ani"; + case 61834: + return "monster/villageattacked/Animation_Penril/Move.ani"; + case 61817: + return "monster/villageattacked/Animation_IslandGoblin/Move.ani"; + case 61828: + return "monster/villageattacked/TangasAnimation/Move.ani"; + case 61833: + return "monster/villageattacked/Animation_WhiteLugaru/Move.ani"; + case 61824: + return "monster/villageattacked/ArmyAnimation/Move.ani"; + case 61826: + return "monster/villageattacked/AssaulterAnimation/Move.ani"; + case 61825: + return "monster/villageattacked/BeastAnimation/Move.ani"; + case 61827: + return "monster/villageattacked/GuardAnimation/Move.ani"; + case 61830: + return "monster/villageattacked/Animation_Vinoshu/Move.ani"; + case 1091: + return "monster/wraith/SkillHuntressAni/Move.ani"; + case 50509: + return "monster/wraith/WraithLilithAni/Move.ani"; + case 41011: + return "monster/wraith/WraithLilithAni/Move.ani"; + case 40012: + return "monster/wraith/WraithSpectressAni/Move.ani"; + case 410: + return "monster/wraith/WraithAni/Move.ani"; + case 50077: + return "monster/wraith/WraithLilithAni/Move.ani"; + case 411: + return "monster/wraith/WraithSpectressAni/Move.ani"; + case 64540: + return "monster/zealot/FatherAni/Move.ani"; + case 61433: + return "monster/zealot/FatherAni/Move.ani"; + case 265: + return "monster/zealot/FatherAni/Move.ani"; + case 64541: + return "monster/zealot/PopeAni/Move.ani"; + case 61434: + return "monster/zealot/PopeAni/Move.ani"; + case 266: + return "monster/zealot/PopeAni/Move.ani"; + case 263: + return "monster/zealot/CraxyAni/Move.ani"; + case 56417: + return "monster/zealot/DarkAni/Move.ani"; + case 56414: + return "monster/zealot/DawnAni/Move.ani"; + case 56415: + return "monster/zealot/LightAni/Move.ani"; + case 50010: + return "monster/zealot/LightAni/Move.ani"; + case 56416: + return "monster/zealot/TwilightAni/Move.ani"; + case 50011: + return "monster/zealot/TwilightAni/Move.ani"; + case 261: + return "monster/zealot/FatherAni/Move.ani"; + case 262: + return "monster/zealot/PopeAni/Move.ani"; + case 260: + return "monster/zealot/Raxy-AAni/Move.ani"; + case 264: + return "monster/zealot/Raxy-BAni/Move.ani"; + case 60102: + return "monster/zealot/Raxy-AAni/Move.ani"; + case 55024: + return "monster/zealot/FatherAni/Move.ani"; + case 55008: + return "monster/zealot/CraxyAni/Move.ani"; + case 1038: + return "monster/zealotrebirth/RebirthBrotherAni/Move.ani"; + case 1040: + return "monster/zealotrebirth/RebirthGBLAni/Move.ani"; + case 1042: + return "monster/zealotrebirth/RebirthGBLBishopAni/Move.ani"; + case 64547: + return "monster/zealotrebirth/RebirthGBLLeaderAni/Move.ani"; + case 1043: + return "monster/zealotrebirth/RebirthGBLLeaderAni/Move.ani"; + case 1041: + return "monster/zealotrebirth/RebirthGBLPriestAni/Move.ani"; + case 1039: + return "monster/zealotrebirth/RebirthSisterAni/Move.ani"; + case 55007: + return "monster/zepplin/ZepplinAni/Move.ani"; + case 280: + return "monster/zepplin/ZepplinAni/Move.ani"; + case 64544: + return "monster/zepplin/MacZepAni/Move.ani"; + case 281: + return "monster/zepplin/MacZepAni/Move.ani"; + case 61171: + return "monster/zombie/kalkazakAnimation/Move.ani"; + case 50001: + return "monster/zombie/kalkazakAnimation/Move.ani"; + case 61533: + return "monster/zombie/NZAnimation/Move.ani"; + case 61532: + return "monster/zombie/NZAnimation/Move.ani"; + case 65002: + return "monster/zombie/ZGAnimation/Move.ani"; + case 60114: + return "monster/zombie/ZHAnimation/Move.ani"; + case 65001: + return "monster/zombie/ZZAnimation/Move.ani"; + case 55011: + return "monster/zombie/ZGAnimation/Move.ani"; + case 55003: + return "monster/zombie/ZZAnimation/Move.ani"; + case 41012: + return "monster/zombie/ZGAnimation/Move.ani"; + case 64532: + return "monster/zombie/ZGAnimation/Move.ani"; + case 212: + return "monster/zombie/ZGAnimation/Move.ani"; + case 211: + return "monster/zombie/ZHAnimation/Move.ani"; + case 210: + return "monster/zombie/ZZAnimation/Move.ani"; + + + + + + case 64580: + return "monster/act8/blackscalemoussambani/animation/move.ani"; + case 64592: + return "monster/act8/blackscalemoussambani/animation/move.ani"; + case 61192: + return "monster/act8/blackscalemoussambani/animation/move.ani"; + case 56019: + return "monster/act8/botticelli/animation/move.ani"; + case 64581: + return "monster/act8/botticelli/animation/move.ani"; + case 61223: + return "monster/act8/botticelli/animation/move.ani"; + case 61231: + return "monster/act8/burnbotti/animation/move.ani"; + case 65010: + return "monster/act8/burnbotti/animation/move.ani"; + case 59000: + return "monster/act8/chiefmong/animation/move.ani"; + case 59001: + return "monster/act8/chiefmongghost/animation/move.ani"; + case 59002: + return "monster/act8/chiefmongghost_2nd/animation/move.ani"; + case 59003: + return "monster/act8/chiefmongghost_3rd/animation/move.ani"; + case 56013: + return "monster/act8/chiefsars/animation/move.ani"; + case 56014: + return "monster/act8/chiefsars/animation/move.ani"; + case 63005: + return "monster/act8/chiefsars_crow/animation/move.ani"; + case 61487: + return "monster/act8/chiefsars_crow/animation/move.ani"; + case 56020: + return "monster/act8/congcong/animation/move.ani"; + case 64582: + return "monster/act8/congcong/animation/move.ani"; + case 61194: + return "monster/act8/congcong/animation/move.ani"; + case 61191: + return "monster/act8/crokhan/animation/move.ani"; + case 62106: + return "monster/act8/crokhan_spearman/animation/move.ani"; + case 61492: + return "monster/act8/dark_ghost/animation/move.ani"; + case 61543: + return "monster/act8/dark_ghost/animation/move.ani"; + case 61491: + return "monster/act8/ghost_flu/animation/move.ani"; + case 56139: + return "monster/act8/knifetooth/animation/move.ani"; + case 56011: + return "monster/act8/masaccio/animation/move.ani"; + case 56010: + return "monster/act8/masaccio/animation/move.ani"; + case 61224: + return "monster/act8/masaccio/animation/move.ani"; + case 61225: + return "monster/act8/masaccio/animation/move.ani"; + case 61186: + return "monster/act8/mermadia_mage/animation/move.ani"; + case 61188: + return "monster/act8/mermadia_mage/animation/move.ani"; + case 61189: + return "monster/act8/mermadia_mage/animation/move.ani"; + case 61190: + return "monster/act8/mermadia_mage/animation/move.ani"; + case 61187: + return "monster/act8/mermadia_warrior/animation/move.ani"; + case 61248: + return "monster/act8/merman/animation/move.ani"; + case 61218: + return "monster/act8/merman/animation/move.ani"; + case 56008: + return "monster/act8/mermanhook/animation/move.ani"; + case 61219: + return "monster/act8/mermanmage/animation/move.ani"; + case 56137: + return "monster/act8/oneeyedmermaid/animation/move.ani"; + case 62115: + return "monster/act8/plover/animation/move.ani"; + case 61193: + return "monster/act8/plover/animation/move.ani"; + case 61484: + return "monster/act8/skeleton_mermadia/animation/move.ani"; + case 64587: + return "monster/act8/turtlecannon/animation/move.ani"; + case 61222: + return "monster/act8/turtlecannon/animation/move.ani"; + case 61220: + return "monster/act8/turtlek/animation/move.ani"; + case 61221: + return "monster/act8/turtlekdeckhand/animation/move.ani"; + case 59005: + return "monster/act8/wooden_doll/animation/move.ani"; + case 61490: + return "monster/act8/wooden_doll_l/animation/move.ani"; + case 59006: + return "monster/act8/wooden_doll_l/animation/move.ani"; + case 63004: + return "monster/act8/wooden_doll_nomnal/animation/move.ani"; + case 63006: + return "monster/act8/wooden_doll_nomnal/animation/move.ani"; + case 59007: + return "monster/act8/wooden_doll_p/animation/move.ani"; + case 59008: + return "monster/act8/wooden_doll_t/animation/move.ani"; + case 63000: + return "monster/act8/woodendoll_nb/animation/move.ani"; + case 63003: + return "monster/act8/woodendoll_ng/animation/move.ani"; + case 63002: + return "monster/act8/woodendoll_np/animation/move.ani"; + case 63001: + return "monster/act8/woodendoll_ny/animation/move.ani"; + case 61485: + return "monster/act8/zombie_marine/animation/move.ani"; + case 85111: + return "monster/bosstower/domina/animation/move.ani"; + case 56153: + return "monster/casillas/animation/move.ani"; + case 100001: + return "monster/dragondungeon/babydragon/animation/move.ani"; + case 100009: + return "monster/dragondungeon/babydragonmodify/animation/move.ani"; + case 100002: + return "monster/dragondungeon/masterdragon/animation/move.ani"; + case 100005: + return "monster/dragondungeon/mineralgolem/animation/move.ani"; + case 110001: + return "monster/dragondungeon/mineralgolem/animation/move.ani"; + case 100004: + return "monster/dragondungeon/rockgolem/animation/move.ani"; + case 110000: + return "monster/dragondungeon/rockgolem/animation/move.ani"; + case 100011: + return "monster/dragondungeon/summonbabydragon/animation/move.ani"; + case 100012: + return "monster/dragondungeon/summonbabydragonmodify/animation/move.ani"; + case 65500: + return "monster/equipment/gun_congcong/animation/move.ani"; + case 65014: + return "monster/equipment/gungoblin/gunman/animation/move.ani"; + case 65013: + return "monster/equipment/gungoblin2/macgee/animation/move.ani"; + case 65012: + return "monster/equipment/plover/animation/move.ani"; + case 62773: + return "monster/event/bluemarble/agamemnon/animation/move.ani"; + case 62737: + return "monster/event/bluemarble/agarum/animation/move.ani"; + case 62632: + return "monster/event/bluemarble/astray_alsor/animation/move.ani"; + case 62630: + return "monster/event/bluemarble/astray_gbl_devotee/animation/move.ani"; + case 62631: + return "monster/event/bluemarble/astray_gbl_w_devotee/animation/move.ani"; + case 62708: + return "monster/event/bluemarble/at_5t/animation/move.ani"; + case 62768: + return "monster/event/bluemarble/attackbody/animation/move.ani"; + case 62762: + return "monster/event/bluemarble/axeoutlaw/animation/move.ani"; + case 62758: + return "monster/event/bluemarble/axeoutlaw/animation/move.ani"; + case 62691: + return "monster/event/bluemarble/bentinck/animation/move.ani"; + case 62705: + return "monster/event/bluemarble/bigsoldier/animation/move.ani"; + case 62716: + return "monster/event/bluemarble/bigsoldier/animation/move.ani"; + case 62696: + return "monster/event/bluemarble/bigsoldier/animation/move.ani"; + case 62757: + return "monster/event/bluemarble/biker2/animation/move.ani"; + case 62752: + return "monster/event/bluemarble/blackscalemoussambani/animation/move.ani"; + case 62754: + return "monster/event/bluemarble/botticelli/animation/move.ani"; + case 62755: + return "monster/event/bluemarble/burnbotti/animation/move.ani"; + case 62663: + return "monster/event/bluemarble/bwanga/animation/move.ani"; + case 62699: + return "monster/event/bluemarble/captainshured/animation/move.ani"; + case 62761: + return "monster/event/bluemarble/chainbiker/animation/move.ani"; + case 62735: + return "monster/event/bluemarble/confusethief/animation/move.ani"; + case 62741: + return "monster/event/bluemarble/congcong/animation/move.ani"; + case 62750: + return "monster/event/bluemarble/crokhan/animation/move.ani"; + case 62751: + return "monster/event/bluemarble/crokhan_spearman/animation/move.ani"; + case 62675: + return "monster/event/bluemarble/cutpurse/animation/move.ani"; + case 62687: + return "monster/event/bluemarble/cypher/animation/move.ani"; + case 62766: + return "monster/event/bluemarble/defendbody/animation/move.ani"; + case 62638: + return "monster/event/bluemarble/dendroid_disguise/animation/move.ani"; + case 62722: + return "monster/event/bluemarble/engineerg/animation/move.ani"; + case 62763: + return "monster/event/bluemarble/enjosipho/animation/move.ani"; + case 62777: + return "monster/event/bluemarble/enjosipho/animation/move.ani"; + case 62778: + return "monster/event/bluemarble/enjosipho/animation/move.ani"; + case 62779: + return "monster/event/bluemarble/enjosipho/animation/move.ani"; + case 57018: + return "monster/event/bluemarble/fastcannon-lightning/animation/move.ani"; + case 62740: + return "monster/event/bluemarble/firevictim/animation/move.ani"; + case 62641: + return "monster/event/bluemarble/flare_worm/animation/move.ani"; + case 62720: + return "monster/event/bluemarble/frenken/animation/move.ani"; + case 62719: + return "monster/event/bluemarble/frenken_baby/animation/move.ani"; + case 62674: + return "monster/event/bluemarble/gang2/animation/move.ani"; + case 62701: + return "monster/event/bluemarble/gt9600/animation/move.ani"; + case 57017: + return "monster/event/bluemarble/gt_proto/animation/move.ani"; + case 62671: + return "monster/event/bluemarble/hydracle/animation/move.ani"; + case 62697: + return "monster/event/bluemarble/incendiarysoldier/animation/move.ani"; + case 62706: + return "monster/event/bluemarble/incendiarysoldier/animation/move.ani"; + case 62712: + return "monster/event/bluemarble/incendiarysoldier/animation/move.ani"; + case 62688: + return "monster/event/bluemarble/incendiarysoldier/animation/move.ani"; + case 62772: + return "monster/event/bluemarble/lv4goblin_int/animation/move.ani"; + case 62771: + return "monster/event/bluemarble/lv4goblin_str/animation/move.ani"; + case 62770: + return "monster/event/bluemarble/macgee2/animation/move.ani"; + case 62702: + return "monster/event/bluemarble/medic/animation/move.ani"; + case 62713: + return "monster/event/bluemarble/medic/animation/move.ani"; + case 62693: + return "monster/event/bluemarble/medic/animation/move.ani"; + case 62739: + return "monster/event/bluemarble/mermadia_mage/animation/move.ani"; + case 62743: + return "monster/event/bluemarble/mermadia_mage2/animation/move.ani"; + case 62744: + return "monster/event/bluemarble/mermadia_mage3/animation/move.ani"; + case 62745: + return "monster/event/bluemarble/mermadia_mage4/animation/move.ani"; + case 62742: + return "monster/event/bluemarble/mermadia_warrior/animation/move.ani"; + case 62746: + return "monster/event/bluemarble/merman/animation/move.ani"; + case 62738: + return "monster/event/bluemarble/mermanmage/animation/move.ani"; + case 62700: + return "monster/event/bluemarble/minorsoldier/animation/move.ani"; + case 62703: + return "monster/event/bluemarble/minorsoldier/animation/move.ani"; + case 62714: + return "monster/event/bluemarble/minorsoldier/animation/move.ani"; + case 62694: + return "monster/event/bluemarble/minorsoldier/animation/move.ani"; + case 62736: + return "monster/event/bluemarble/mosqueen/animation/move.ani"; + case 62709: + return "monster/event/bluemarble/normalsoldier/animation/move.ani"; + case 62711: + return "monster/event/bluemarble/normalsoldier/animation/move.ani"; + case 62698: + return "monster/event/bluemarble/normalsoldier/animation/move.ani"; + case 57011: + return "monster/event/bluemarble/oneeyedmermaid/animation/move.ani"; + case 62717: + return "monster/event/bluemarble/peltshu/animation/move.ani"; + case 62734: + return "monster/event/bluemarble/poisoningthief/animation/move.ani"; + case 62780: + return "monster/event/bluemarble/richgoblin2/animation/move.ani"; + case 62629: + return "monster/event/bluemarble/ricu/animation/move.ani"; + case 62685: + return "monster/event/bluemarble/rocketman/animation/move.ani"; + case 62684: + return "monster/event/bluemarble/rod_aradman/animation/move.ani"; + case 62767: + return "monster/event/bluemarble/runawaybody/animation/move.ani"; + case 62689: + return "monster/event/bluemarble/scasa/animation/move.ani"; + case 62728: + return "monster/event/bluemarble/silkhat/animation/move.ani"; + case 62727: + return "monster/event/bluemarble/silverclown_ballacrobat/animation/move.ani"; + case 62729: + return "monster/event/bluemarble/silverclown_ballacrobat2/animation/move.ani"; + case 62730: + return "monster/event/bluemarble/silverclown_fluent/animation/move.ani"; + case 62718: + return "monster/event/bluemarble/silverclown_jugglingacrobat2/animation/move.ani"; + case 57016: + return "monster/event/bluemarble/soniccannon-thunder/animation/move.ani"; + case 62686: + return "monster/event/bluemarble/special_rod_aradman/animation/move.ani"; + case 62692: + return "monster/event/bluemarble/specialforce/animation/move.ani"; + case 62704: + return "monster/event/bluemarble/spy/animation/move.ani"; + case 62715: + return "monster/event/bluemarble/spy/animation/move.ani"; + case 62695: + return "monster/event/bluemarble/spy/animation/move.ani"; + case 62759: + return "monster/event/bluemarble/stickban/animation/move.ani"; + case 62723: + return "monster/event/bluemarble/timerunner/animation/move.ani"; + case 62749: + return "monster/event/bluemarble/turtlecannon/animation/move.ani"; + case 62753: + return "monster/event/bluemarble/turtlek/animation/move.ani"; + case 62747: + return "monster/event/bluemarble/turtlek/animation/move.ani"; + case 62748: + return "monster/event/bluemarble/turtlekdeckhand/animation/move.ani"; + case 62665: + return "monster/event/bluemarble/vangelis/animation/move.ani"; + case 62710: + return "monster/event/bluemarble/warjack/animation/move.ani"; + case 62776: + return "monster/event/bluemarble/warjack/animation/move.ani"; + case 62640: + return "monster/event/bluemarble/woody_plant/animation/move.ani"; + case 62724: + return "monster/event/bluemarble/zx_5_1/animation/move.ani"; + case 62725: + return "monster/event/bluemarble/zx_5_2/animation/move.ani"; + case 62726: + return "monster/event/bluemarble/zx_5_3/animation/move.ani"; + case 62731: + return "monster/event/bluemarble/zx_5_4/animation/move.ani"; + case 57008: + return "monster/event/bluemarble/zx_5_beta/animation/move.ani"; + case 57009: + return "monster/event/bluemarble/zx_5_gamma/animation/move.ani"; + case 62732: + return "monster/event/bluemarble/zx_9/animation/move.ani"; + case 62733: + return "monster/event/bluemarble/zx_99/animation/move.ani"; + case 56717: + return "monster/mj/animation/move.ani"; + case 64620: + return "monster/newmonsters/advancealtar/enemy/bloodlugaru/animation/move.ani"; + case 64604: + return "monster/newmonsters/advancealtar/enemy/burninghella/animation/move.ani"; + case 64623: + return "monster/newmonsters/advancealtar/enemy/darkelf_sprit_hunter/animation/move.ani"; + case 64624: + return "monster/newmonsters/advancealtar/enemy/evileye/animation/move.ani"; + case 64626: + return "monster/newmonsters/advancealtar/enemy/expeller_axion/animation/move.ani"; + case 64627: + return "monster/newmonsters/advancealtar/enemy/expeller_lsw/animation/move.ani"; + case 64630: + return "monster/newmonsters/advancealtar/enemy/goblin_chariot/animation/move.ani"; + case 64631: + return "monster/newmonsters/advancealtar/enemy/goblin_fanatic/animation/move.ani"; + case 64615: + return "monster/newmonsters/advancealtar/enemy/goblintaskmaster/animation/move.ani"; + case 64603: + return "monster/newmonsters/advancealtar/enemy/goliath/animation/move.ani"; + case 64622: + return "monster/newmonsters/advancealtar/enemy/greatgolem/animation/move.ani"; + case 64628: + return "monster/newmonsters/advancealtar/enemy/hammerking/animation/move.ani"; + case 64605: + return "monster/newmonsters/advancealtar/enemy/headrlessknight/animation/move.ani"; + case 64625: + return "monster/newmonsters/advancealtar/enemy/keraha/animation/move.ani"; + case 64661: + return "monster/newmonsters/advancealtar/enemy/mecatau_summon_robot/animation/move.ani"; + case 64599: + return "monster/newmonsters/advancealtar/enemy/melee_ghoul/animation/move.ani"; + case 64606: + return "monster/newmonsters/advancealtar/enemy/metacow/animation/move.ani"; + case 64629: + return "monster/newmonsters/advancealtar/enemy/shauta/animation/move.ani"; + case 64600: + return "monster/newmonsters/advancealtar/enemy/skullkane/animation/move.ani"; + case 64607: + return "monster/newmonsters/advancealtar/enemy/tauarmy/animation/move.ani"; + case 64601: + return "monster/newmonsters/advancealtar/enemy/wraith/animation/move.ani"; + case 64621: + return "monster/newmonsters/advancealtar/enemy/zetes/animation/move.ani"; + case 64602: + return "monster/newmonsters/advancealtar/enemy/zombie/animation/move.ani"; + case 64597: + return "monster/newmonsters/advancealtar/friend/center/animation/move.ani"; + case 64596: + return "monster/newmonsters/advancealtar/friend/dollmaster/animation/move.ani"; + case 64598: + return "monster/newmonsters/advancealtar/friend/dollmaster2/animation/move.ani"; + case 64611: + return "monster/newmonsters/advancealtar/friend/knifetooth/animation/move.ani"; + case 64657: + return "monster/newmonsters/advancealtar/friend/knifetooth/animation/move.ani"; + case 64658: + return "monster/newmonsters/advancealtar/friend/knifetooth/animation/move.ani"; + case 64659: + return "monster/newmonsters/advancealtar/friend/knifetooth/animation/move.ani"; + case 64618: + return "monster/newmonsters/advancealtar/friend/masaccio/animation/move.ani"; + case 64645: + return "monster/newmonsters/advancealtar/friend/masaccio/animation/move.ani"; + case 64646: + return "monster/newmonsters/advancealtar/friend/masaccio/animation/move.ani"; + case 64647: + return "monster/newmonsters/advancealtar/friend/masaccio/animation/move.ani"; + case 64595: + return "monster/newmonsters/advancealtar/friend/melee_goblin/animation/move.ani"; + case 64613: + return "monster/newmonsters/advancealtar/friend/mermadia_mage/animation/move.ani"; + case 64651: + return "monster/newmonsters/advancealtar/friend/mermadia_mage/animation/move.ani"; + case 64652: + return "monster/newmonsters/advancealtar/friend/mermadia_mage/animation/move.ani"; + case 64653: + return "monster/newmonsters/advancealtar/friend/mermadia_mage/animation/move.ani"; + case 64617: + return "monster/newmonsters/advancealtar/friend/merman/animation/move.ani"; + case 64639: + return "monster/newmonsters/advancealtar/friend/merman/animation/move.ani"; + case 64640: + return "monster/newmonsters/advancealtar/friend/merman/animation/move.ani"; + case 64641: + return "monster/newmonsters/advancealtar/friend/merman/animation/move.ani"; + case 64614: + return "monster/newmonsters/advancealtar/friend/mermanhook/animation/move.ani"; + case 64654: + return "monster/newmonsters/advancealtar/friend/mermanhook/animation/move.ani"; + case 64655: + return "monster/newmonsters/advancealtar/friend/mermanhook/animation/move.ani"; + case 64656: + return "monster/newmonsters/advancealtar/friend/mermanhook/animation/move.ani"; + case 64616: + return "monster/newmonsters/advancealtar/friend/mermedia_w/animation/move.ani"; + case 64636: + return "monster/newmonsters/advancealtar/friend/mermedia_w/animation/move.ani"; + case 64637: + return "monster/newmonsters/advancealtar/friend/mermedia_w/animation/move.ani"; + case 64638: + return "monster/newmonsters/advancealtar/friend/mermedia_w/animation/move.ani"; + case 64594: + return "monster/newmonsters/advancealtar/friend/throw_goblin/animation/move.ani"; + case 64619: + return "monster/newmonsters/advancealtar/friend/turtlecannon/animation/move.ani"; + case 64642: + return "monster/newmonsters/advancealtar/friend/turtlecannon/animation/move.ani"; + case 64643: + return "monster/newmonsters/advancealtar/friend/turtlecannon/animation/move.ani"; + case 64644: + return "monster/newmonsters/advancealtar/friend/turtlecannon/animation/move.ani"; + case 64612: + return "monster/newmonsters/advancealtar/friend/turtlekdeckhand/animation/move.ani"; + case 64648: + return "monster/newmonsters/advancealtar/friend/turtlekdeckhand/animation/move.ani"; + case 64649: + return "monster/newmonsters/advancealtar/friend/turtlekdeckhand/animation/move.ani"; + case 64650: + return "monster/newmonsters/advancealtar/friend/turtlekdeckhand/animation/move.ani"; + case 64610: + return "monster/newmonsters/advancealtar/riding/riding_turtle/animation/move.ani"; + case 64660: + return "monster/newmonsters/advancealtar/tower/goblin_propeller/animation/move.ani"; + case 64632: + return "monster/newmonsters/advancealtar/tower/goblin_propeller/animation/move.ani"; + case 64633: + return "monster/newmonsters/advancealtar/tower/goblin_propeller/animation/move.ani"; + case 64634: + return "monster/newmonsters/advancealtar/tower/goblin_propeller/animation/move.ani"; + case 64635: + return "monster/newmonsters/advancealtar/tower/goblin_propeller/animation/move.ani"; + case 61331: + return "monster/newmonsters/aganzo/cutpurse/animation/move.ani"; + case 61508: + return "monster/newmonsters/aganzo/gang/animation/move.ani"; + case 61509: + return "monster/newmonsters/aganzo/gang2/animation/move.ani"; + case 61711: + return "monster/newmonsters/aganzo/pubman/animation/move.ani"; + case 61332: + return "monster/newmonsters/aganzo/sinead/animation/move.ani"; + case 61767: + return "monster/newmonsters/airsword/longsword/animation/move.ani"; + case 61764: + return "monster/newmonsters/airsword/shortsword/animation/move.ani"; + case 61765: + return "monster/newmonsters/airsword/shortsword/animation/move.ani"; + case 61766: + return "monster/newmonsters/airsword/shortsword/animation/move.ani"; + case 61262: + return "monster/newmonsters/albert/animation/move.ani"; + case 61419: + return "monster/newmonsters/ancient/infected_ghoula/animation/move.ani"; + case 61420: + return "monster/newmonsters/ancient/infected_ghoulb/animation/move.ani"; + case 56409: + return "monster/newmonsters/ancient/infected_ghoulc/animation/move.ani"; + case 61004: + return "monster/newmonsters/ancient/noir_dimension_gate/animation/move.ani"; + case 63413: + return "monster/newmonsters/anton_awakening/phase1/blacksmoke/cloud_boss_r/animation/move.ani"; + case 56676: + return "monster/newmonsters/anton_awakening/phase1/blacksmoke/fire_ulf/animation/move.ani"; + case 63427: + return "monster/newmonsters/anton_awakening/phase1/blacksmoke/mist_ulf/animation/move.ani"; + case 56675: + return "monster/newmonsters/anton_awakening/phase1/blacksmoke/tog/animation/move.ani"; + case 63415: + return "monster/newmonsters/anton_awakening/phase1/strongleg/agnes/animation/move.ani"; + case 63416: + return "monster/newmonsters/anton_awakening/phase1/strongleg/agnes_firesum/animation/move.ani"; + case 63429: + return "monster/newmonsters/anton_awakening/phase1/strongleg/agnes_firesum_illu/agnes_firesum/animation/move.ani"; + case 56681: + return "monster/newmonsters/anton_awakening/phase1/strongleg/agnes_illu_close/animation/move.ani"; + case 56682: + return "monster/newmonsters/anton_awakening/phase1/strongleg/agnes_illu_far/animation/move.ani"; + case 56680: + return "monster/newmonsters/anton_awakening/phase1/strongleg/cratek/animation/move.ani"; + case 63430: + return "monster/newmonsters/anton_awakening/phase1/strongleg/cratek/cratek/animation/move.ani"; + case 56677: + return "monster/newmonsters/anton_awakening/phase1/strongleg/dumfleinurs/animation/move.ani"; + case 56678: + return "monster/newmonsters/anton_awakening/phase1/strongleg/dumthaioric/animation/move.ani"; + case 56679: + return "monster/newmonsters/anton_awakening/phase1/strongleg/eclipse/animation/move.ani"; + case 63428: + return "monster/newmonsters/anton_awakening/phase1/strongleg/tartan_archer/animation/move.ani"; + case 63436: + return "monster/newmonsters/anton_awakening/phase1/strongleg/tartan_warrior/animation/move.ani"; + case 63431: + return "monster/newmonsters/anton_awakening/phase1/strongleg/zombie/animation/move.ani"; + case 56686: + return "monster/newmonsters/anton_awakening/phase2/blackvolcano/cress/animation/move.ani"; + case 56688: + return "monster/newmonsters/anton_awakening/phase2/blackvolcano/cress_sub2/animation/move.ani"; + case 56683: + return "monster/newmonsters/anton_awakening/phase2/blackvolcano/five/animation/move.ani"; + case 56684: + return "monster/newmonsters/anton_awakening/phase2/blackvolcano/five_illu/animation/move.ani"; + case 56692: + return "monster/newmonsters/anton_awakening/phase2/blackvolcano/kuro/animation/move.ani"; + case 63437: + return "monster/newmonsters/anton_awakening/phase2/blackvolcano/mini_five/animation/move.ani"; + case 56691: + return "monster/newmonsters/anton_awakening/phase2/blackvolcano/rok/animation/move.ani"; + case 63418: + return "monster/newmonsters/anton_awakening/phase2/energycut/egeneu/animation/move.ani"; + case 56696: + return "monster/newmonsters/anton_awakening/phase3/a-toll/animation/move.ani"; + case 63455: + return "monster/newmonsters/anton_awakening/phase3/a-toll_item/animation/move.ani"; + case 63412: + return "monster/newmonsters/anton_awakening/phase3/a-toll_sub/animation/move.ani"; + case 63451: + return "monster/newmonsters/anton_awakening/phase3/black_fire/animation/move.ani"; + case 56694: + return "monster/newmonsters/anton_awakening/phase3/eye_cell/animation/move.ani"; + case 56697: + return "monster/newmonsters/anton_awakening/phase3/fear_cerebrate/animation/move.ani"; + case 63446: + return "monster/newmonsters/anton_awakening/phase3/fire_turtle/animation/move.ani"; + case 63417: + return "monster/newmonsters/anton_awakening/phase3/mateka/animation/move.ani"; + case 63441: + return "monster/newmonsters/anton_awakening/phase3/mateka_atoll/animation/move.ani"; + case 63442: + return "monster/newmonsters/anton_awakening/phase3/mateka_bug/animation/move.ani"; + case 63440: + return "monster/newmonsters/anton_awakening/phase3/mateka_cell/animation/move.ani"; + case 63439: + return "monster/newmonsters/anton_awakening/phase3/mateka_meltadoroc/animation/move.ani"; + case 63444: + return "monster/newmonsters/anton_awakening/phase3/mateka_staff/animation/move.ani"; + case 63443: + return "monster/newmonsters/anton_awakening/phase3/mateka_yung/animation/move.ani"; + case 56685: + return "monster/newmonsters/anton_awakening/phase3/medel/animation/move.ani"; + case 56695: + return "monster/newmonsters/anton_awakening/phase3/meltadoroc/animation/move.ani"; + case 63448: + return "monster/newmonsters/anton_awakening/phase3/mini_bug/animation/move.ani"; + case 56693: + return "monster/newmonsters/anton_awakening/phase3/strange_bug_r/animation/move.ani"; + case 63449: + return "monster/newmonsters/anton_awakening/phase3/strange_bug_sub/animation/move.ani"; + case 56107: + return "monster/newmonsters/aradman/arad_lugaru_master/animation/move.ani"; + case 61476: + return "monster/newmonsters/aradman/gblrebirtharadman/animation/move.ani"; + case 61111: + return "monster/newmonsters/aradman/gblrebirtharadman/animation/move.ani"; + case 61400: + return "monster/newmonsters/aradman/grim_aradman/animation/move.ani"; + case 56411: + return "monster/newmonsters/aradman/grim_crazy/animation/move.ani"; + case 61405: + return "monster/newmonsters/aradman/grim_crazy_b/animation/move.ani"; + case 56412: + return "monster/newmonsters/aradman/grim_crazy_ghost/animation/move.ani"; + case 56405: + return "monster/newmonsters/aradman/grim_crazy_n/animation/move.ani"; + case 56418: + return "monster/newmonsters/aradman/grim_hwaian/animation/move.ani"; + case 61007: + return "monster/newmonsters/aradman/grim_hwaian/animation/move.ani"; + case 61421: + return "monster/newmonsters/aradman/grim_kungfu/animation/move.ani"; + case 56410: + return "monster/newmonsters/aradman/grim_kungfu_staff/animation/move.ani"; + case 61424: + return "monster/newmonsters/aradman/grim_yorkshire/animation/move.ani"; + case 61336: + return "monster/newmonsters/aradman/poisonhand/animation/move.ani"; + case 56428: + return "monster/newmonsters/aradwoman/gbl_chief_libraian/animation/move.ani"; + case 56406: + return "monster/newmonsters/aradwoman/gbl_chief_libraian/animation/move.ani"; + case 61475: + return "monster/newmonsters/aradwoman/gbl_libraian/animation/move.ani"; + case 61496: + return "monster/newmonsters/aradwoman/gbl_libraian/animation/move.ani"; + case 61401: + return "monster/newmonsters/aradwoman/grim_aradwoma/animation/move.ani"; + case 56037: + return "monster/newmonsters/bantu/_buffalomalaga/animation/move.ani"; + case 56038: + return "monster/newmonsters/bantu/_buffalorari/animation/move.ani"; + case 61700: + return "monster/newmonsters/bantu/buffalowoman/animation/move.ani"; + case 56709: + return "monster/newmonsters/bantu/elitebuffalowoman/animation/move.ani"; + case 61464: + return "monster/newmonsters/bee/bee/animation/move.ani"; + case 56426: + return "monster/newmonsters/bee/bee_named/animation/move.ani"; + case 61165: + return "monster/newmonsters/blood_an/agaress/animation/move.ani"; + case 61163: + return "monster/newmonsters/blood_an/bow_goblin/animation/move.ani"; + case 61156: + return "monster/newmonsters/blood_an/goblin_chariot/animation/move.ani"; + case 61161: + return "monster/newmonsters/blood_an/goblin_chariot2/animation/move.ani"; + case 61158: + return "monster/newmonsters/blood_an/goblin_fanatic1/animation/move.ani"; + case 61159: + return "monster/newmonsters/blood_an/goblin_fanatic2/animation/move.ani"; + case 61160: + return "monster/newmonsters/blood_an/goblin_propeller/animation/move.ani"; + case 56126: + return "monster/newmonsters/blood_an/goblin_propeller/animation/move.ani"; + case 61164: + return "monster/newmonsters/blood_an/morningstar_goblin/animation/move.ani"; + case 61162: + return "monster/newmonsters/blood_an/spear_goblin/animation/move.ani"; + case 62016: + return "monster/newmonsters/bloodbutterfly/ant/animation/move.ani"; + case 56009: + return "monster/newmonsters/bloodbutterfly/antnamed/animation/move.ani"; + case 62018: + return "monster/newmonsters/bloodbutterfly/ants/animation/move.ani"; + case 61505: + return "monster/newmonsters/bloodbutterfly/ants/animation/move.ani"; + case 62021: + return "monster/newmonsters/bloodbutterfly/bloodbutterfly/animation/move.ani"; + case 56427: + return "monster/newmonsters/bloodbutterfly/bloodbutterflynamed/animation/move.ani"; + case 62014: + return "monster/newmonsters/bloodbutterfly/confusethief/animation/move.ani"; + case 62013: + return "monster/newmonsters/bloodbutterfly/meltman/animation/move.ani"; + case 61481: + return "monster/newmonsters/bloodbutterfly/meltman_b/animation/move.ani"; + case 64578: + return "monster/newmonsters/bloodbutterfly/mosqueen/animation/move.ani"; + case 62012: + return "monster/newmonsters/bloodbutterfly/mosqueen/animation/move.ani"; + case 62015: + return "monster/newmonsters/bloodbutterfly/poisoningthief/animation/move.ani"; + case 56007: + return "monster/newmonsters/bloodmoon/zetes/animation/move.ani"; + case 64559: + return "monster/newmonsters/bwanga/animation/move.ani"; + case 61429: + return "monster/newmonsters/bwanga/animation/move.ani"; + case 61814: + return "monster/newmonsters/bwanga/animation/move.ani"; + case 61806: + return "monster/newmonsters/bwanga/animation/move.ani"; + case 61005: + return "monster/newmonsters/cartel/alterationsoldier/animation/move.ani"; + case 61174: + return "monster/newmonsters/cartel/alterationsoldier/animation/move.ani"; + case 61473: + return "monster/newmonsters/cartel/cypher/aircrow/animation/move.ani"; + case 61321: + return "monster/newmonsters/cartel/cypher/aircrow/animation/move.ani"; + case 64568: + return "monster/newmonsters/cartel/cypher/cypher/animation/move.ani"; + case 61328: + return "monster/newmonsters/cartel/cypher/cypher/animation/move.ani"; + case 61335: + return "monster/newmonsters/cartel/cypher/cypher/animation/move.ani"; + case 61329: + return "monster/newmonsters/cartel/cypher/cypherobject/animation/move.ani"; + case 56429: + return "monster/newmonsters/cartel/cypher/darkcrow/animation/move.ani"; + case 56302: + return "monster/newmonsters/cartel/cypher/darkcrow/animation/move.ani"; + case 61507: + return "monster/newmonsters/cartel/cypher/mini_stoneswarm/animation/move.ani"; + case 56034: + return "monster/newmonsters/cartel/cypher/poltergeistbookshelf/animation/move.ani"; + case 61202: + return "monster/newmonsters/cartel/cypher/poltergeistchair/animation/move.ani"; + case 61323: + return "monster/newmonsters/cartel/cypher/poltergeistobject/animation/move.ani"; + case 61478: + return "monster/newmonsters/cartel/cypher/scarecrow/animation/move.ani"; + case 61320: + return "monster/newmonsters/cartel/cypher/scarecrow/animation/move.ani"; + case 61474: + return "monster/newmonsters/cartel/cypher/stoneswarm/animation/move.ani"; + case 61325: + return "monster/newmonsters/cartel/cypher/stoneswarm/animation/move.ani"; + case 56022: + return "monster/newmonsters/cartel/deserter/animation/move.ani"; + case 56021: + return "monster/newmonsters/cartel/dismantle/animation/move.ani"; + case 61006: + return "monster/newmonsters/cartel/engineer/animation/move.ani"; + case 61181: + return "monster/newmonsters/cartel/engineer/animation/move.ani"; + case 61803: + return "monster/newmonsters/cartel/incendiarysoldier/animation/move.ani"; + case 61176: + return "monster/newmonsters/cartel/incendiarysoldier/animation/move.ani"; + case 61494: + return "monster/newmonsters/cartel/medic/animation/move.ani"; + case 61800: + return "monster/newmonsters/cartel/minorsoldier/animation/move.ani"; + case 61801: + return "monster/newmonsters/cartel/normalsoldier/animation/move.ani"; + case 61175: + return "monster/newmonsters/cartel/normalsoldier/animation/move.ani"; + case 61458: + return "monster/newmonsters/cartel/peltshu/animation/move.ani"; + case 64567: + return "monster/newmonsters/cartel/rocketman/animation/move.ani"; + case 61708: + return "monster/newmonsters/cartel/rocketman/animation/move.ani"; + case 63014: + return "monster/newmonsters/cartel/signalsoldier/animation/move.ani"; + case 61804: + return "monster/newmonsters/cartel/silkhat/animation/move.ani"; + case 61802: + return "monster/newmonsters/cartel/spy/animation/move.ani"; + case 61493: + return "monster/newmonsters/cartel/tendersoldier/animation/move.ani"; + case 64573: + return "monster/newmonsters/cartel/warjack/animation/move.ani"; + case 61236: + return "monster/newmonsters/cartel/warjack/animation/move.ani"; + case 61472: + return "monster/newmonsters/cartel/westcoast/junk_thrower/animation/move.ani"; + case 61303: + return "monster/newmonsters/cartel/westcoast/junk_thrower/animation/move.ani"; + case 56431: + return "monster/newmonsters/cartel/westcoast/macgee/animation/move.ani"; + case 56301: + return "monster/newmonsters/cartel/westcoast/macgee/animation/move.ani"; + case 61334: + return "monster/newmonsters/cartel/westcoast/macgee/animation/move.ani"; + case 61469: + return "monster/newmonsters/cartel/westcoast/rod_aradman/animation/move.ani"; + case 61300: + return "monster/newmonsters/cartel/westcoast/rod_aradman/animation/move.ani"; + case 56434: + return "monster/newmonsters/cartel/westcoast/rod_boss/animation/move.ani"; + case 56303: + return "monster/newmonsters/cartel/westcoast/rod_boss/animation/move.ani"; + case 61470: + return "monster/newmonsters/cartel/westcoast/special_rod_aradman/animation/move.ani"; + case 61301: + return "monster/newmonsters/cartel/westcoast/special_rod_aradman/animation/move.ani"; + case 61307: + return "monster/newmonsters/cartel/westcoast/trashcan_thrower/animation/move.ani"; + case 61304: + return "monster/newmonsters/cartel/westcoast/tree_thrower/animation/move.ani"; + case 61279: + return "monster/newmonsters/cartelcommand/at_walker/animation/move.ani"; + case 56466: + return "monster/newmonsters/cartelcommand/courjeep/animation/move.ani"; + case 56049: + return "monster/newmonsters/cartelcommand/goro/animation/move.ani"; + case 56402: + return "monster/newmonsters/cartelcommand/gunmax/animation/move.ani"; + case 61612: + return "monster/newmonsters/cartelcommand/outlaw/animation/move.ani"; + case 61613: + return "monster/newmonsters/cartelcommand/outlaw/animation/move.ani"; + case 61278: + return "monster/newmonsters/cartelcommand/ranjerus/animation/move.ani"; + case 61606: + return "monster/newmonsters/cartelcommand/robot_du1/animation/move.ani"; + case 61607: + return "monster/newmonsters/cartelcommand/robot_du1/animation/move.ani"; + case 61608: + return "monster/newmonsters/cartelcommand/robot_du1/animation/move.ani"; + case 61609: + return "monster/newmonsters/cartelcommand/robot_du1/animation/move.ani"; + case 61610: + return "monster/newmonsters/cartelcommand/robot_du1/animation/move.ani"; + case 61611: + return "monster/newmonsters/cartelcommand/robot_du1/animation/move.ani"; + case 61282: + return "monster/newmonsters/cartelcommand/specialarmy/animation/move.ani"; + case 61118: + return "monster/newmonsters/crimebuffalo/grim_crimebuffalogeneral/animation/move.ani"; + case 56718: + return "monster/newmonsters/crimebuffalo/treasurenamed/animation/move.ani"; + case 56716: + return "monster/newmonsters/cyclops/animation/move.ani"; + case 56721: + return "monster/newmonsters/dimensiongate/bakal/dark_dragon_nagor/animation/move.ani"; + case 61738: + return "monster/newmonsters/dimensiongate/bakal/dark_spirit/animation/move.ani"; + case 56448: + return "monster/newmonsters/dimensiongate/bakal/gold_dragon_main/animation/move.ani"; + case 56447: + return "monster/newmonsters/dimensiongate/bakal/gold_dragon_shadow/animation/move.ani"; + case 59009: + return "monster/newmonsters/dimensiongate/bakal/itrenog/animation/move.ani"; + case 56146: + return "monster/newmonsters/dimensiongate/bakal/red_dragon_ashcore/animation/move.ani"; + case 62135: + return "monster/newmonsters/dimensiongate/bakal/shelder/animation/move.ani"; + case 62136: + return "monster/newmonsters/dimensiongate/bakal/shelder/animation/move.ani"; + case 62137: + return "monster/newmonsters/dimensiongate/bakal/shelder/animation/move.ani"; + case 62138: + return "monster/newmonsters/dimensiongate/bakal/shelder/animation/move.ani"; + case 62139: + return "monster/newmonsters/dimensiongate/bakal/shelder/animation/move.ani"; + case 61250: + return "monster/newmonsters/dimensiongate/blackearth/astaroth/animation/move.ani"; + case 56151: + return "monster/newmonsters/dimensiongate/blackearth/astaroth/animation/move.ani"; + case 56451: + return "monster/newmonsters/dimensiongate/blackearth/berias/animation/move.ani"; + case 61500: + return "monster/newmonsters/dimensiongate/blackearth/berias_sub/animation/move.ani"; + case 56152: + return "monster/newmonsters/dimensiongate/blackearth/fear/animation/move.ani"; + case 56026: + return "monster/newmonsters/dimensiongate/blackearth/michaela/animation/move.ani"; + case 56027: + return "monster/newmonsters/dimensiongate/blackearth/michaela/animation/move.ani"; + case 56028: + return "monster/newmonsters/dimensiongate/blackearth/michaela/animation/move.ani"; + case 56024: + return "monster/newmonsters/dimensiongate/blackearth/michaela/animation/move.ani"; + case 56025: + return "monster/newmonsters/dimensiongate/blackearth/michaela/animation/move.ani"; + case 62141: + return "monster/newmonsters/dimensiongate/blackearth/ozma/animation/move.ani"; + case 62145: + return "monster/newmonsters/dimensiongate/blackearth/pincers/animation/move.ani"; + case 62143: + return "monster/newmonsters/dimensiongate/blackearth/pincers/animation/move.ani"; + case 62146: + return "monster/newmonsters/dimensiongate/blackearth/sawtooth/animation/move.ani"; + case 63499: + return "monster/newmonsters/dimensiongate/blackearth/sawtooth/animation/move.ani"; + case 62147: + return "monster/newmonsters/dimensiongate/blackearth/scissors/animation/move.ani"; + case 63500: + return "monster/newmonsters/dimensiongate/blackearth/scissors/animation/move.ani"; + case 62144: + return "monster/newmonsters/dimensiongate/blackearth/skewer/animation/move.ani"; + case 61294: + return "monster/newmonsters/dimensiongate/blackearth/skewer/animation/move.ani"; + case 62142: + return "monster/newmonsters/dimensiongate/blackearth/skewer/animation/move.ani"; + case 56453: + return "monster/newmonsters/dimensiongate/blackearth/tiamat/animation/move.ani"; + case 62140: + return "monster/newmonsters/dimensiongate/cosmofiend/check_trap/animation/move.ani"; + case 56147: + return "monster/newmonsters/dimensiongate/cosmofiend/cocozola/animation/move.ani"; + case 63018: + return "monster/newmonsters/dimensiongate/cosmofiend/crimsonreaper/animation/move.ani"; + case 56148: + return "monster/newmonsters/dimensiongate/cosmofiend/garmea/animation/move.ani"; + case 63020: + return "monster/newmonsters/dimensiongate/cosmofiend/gaunis/animation/move.ani"; + case 61239: + return "monster/newmonsters/dimensiongate/cosmofiend/greenfetters/animation/move.ani"; + case 61240: + return "monster/newmonsters/dimensiongate/cosmofiend/greenfetters/animation/move.ani"; + case 61241: + return "monster/newmonsters/dimensiongate/cosmofiend/greenfetters/animation/move.ani"; + case 56149: + return "monster/newmonsters/dimensiongate/cosmofiend/hernion/animation/move.ani"; + case 56722: + return "monster/newmonsters/dimensiongate/cosmofiend/insent/animation/move.ani"; + case 63019: + return "monster/newmonsters/dimensiongate/cosmofiend/lemonriles/animation/move.ani"; + case 56723: + return "monster/newmonsters/dimensiongate/cosmofiend/light/animation/move.ani"; + case 56724: + return "monster/newmonsters/dimensiongate/cosmofiend/light/animation/move.ani"; + case 56023: + return "monster/newmonsters/dimensiongate/cosmofiend/swaycle/animation/move.ani"; + case 56449: + return "monster/newmonsters/dimensiongate/cosmofiend/vanish/animation/move.ani"; + case 56150: + return "monster/newmonsters/dimensiongate/cosmofiend/venommara/animation/move.ani"; + case 61002: + return "monster/newmonsters/direzie/animation/move.ani"; + case 61001: + return "monster/newmonsters/direzie/animation/move.ani"; + case 61422: + return "monster/newmonsters/disguiser/disease_spirit/animation/move.ani"; + case 61265: + return "monster/newmonsters/disguiser/mummy_basic/animation/move.ani"; + case 61261: + return "monster/newmonsters/disguiser/mummy_basic/animation/move.ani"; + case 61000: + return "monster/newmonsters/disguiser/mummy_basic/animation/move.ani"; + case 56408: + return "monster/newmonsters/disguiser/mummy_ghost/animation/move.ani"; + case 63010: + return "monster/newmonsters/dog/assaultdog/animation/move.ani"; + case 61216: + return "monster/newmonsters/dog/doberman/animation/move.ani"; + case 56006: + return "monster/newmonsters/dog/dreckdog/animation/move.ani"; + case 61402: + return "monster/newmonsters/dog/grim_dog/animation/move.ani"; + case 56404: + return "monster/newmonsters/dog/grim_dog_n/animation/move.ani"; + case 61346: + return "monster/newmonsters/dollmaster/calamary/animation/move.ani"; + case 61345: + return "monster/newmonsters/dollmaster/lobotomy/animation/move.ani"; + case 61344: + return "monster/newmonsters/dollmaster/teleport/animation/move.ani"; + case 61343: + return "monster/newmonsters/dollmaster/underdog/animation/move.ani"; + case 61812: + return "monster/newmonsters/draconian/magneus/animation/move.ani"; + case 61811: + return "monster/newmonsters/draconian/magneus/animation/move.ani"; + case 61456: + return "monster/newmonsters/dragon/scasa/animation/move.ani"; + case 62000: + return "monster/newmonsters/dragonknight/dragonspear/animation/move.ani"; + case 62001: + return "monster/newmonsters/dragonknight/dragonsword/animation/move.ani"; + case 62002: + return "monster/newmonsters/dragonknight/dragonwizard/animation/move.ani"; + case 56423: + return "monster/newmonsters/dragonknight/kampera/animation/move.ani"; + case 62782: + return "monster/newmonsters/dummymonster/normalsoldier/animation/move.ani"; + case 57101: + return "monster/newmonsters/event/2012_thxgiving/darkcrow/animation/move.ani"; + case 57102: + return "monster/newmonsters/event/2012_thxgiving/darkcrow/animation/move.ani"; + case 57103: + return "monster/newmonsters/event/2012_thxgiving/darkcrow/animation/move.ani"; + case 65101: + return "monster/newmonsters/event/2012_thxgiving/sparrow/animation/move.ani"; + case 62505: + return "monster/newmonsters/event/clown/animation/move.ani"; + case 62501: + return "monster/newmonsters/event/cricket/animation/move.ani"; + case 62502: + return "monster/newmonsters/event/cricket/animation/move.ani"; + case 62503: + return "monster/newmonsters/event/cricket/animation/move.ani"; + case 62504: + return "monster/newmonsters/event/event_wolf/animation/move.ani"; + case 61733: + return "monster/newmonsters/event/ghosts_seriea/animation/move.ani"; + case 61497: + return "monster/newmonsters/event/mini_bus/animation/move.ani"; + case 61498: + return "monster/newmonsters/event/mini_bus/animation/move.ani"; + case 61499: + return "monster/newmonsters/event/mini_bus/animation/move.ani"; + case 62500: + return "monster/newmonsters/event/present_box/animation/move.ani"; + case 61739: + return "monster/newmonsters/event/seria/animation/move.ani"; + case 61740: + return "monster/newmonsters/event/seria/animation/move.ani"; + case 61736: + return "monster/newmonsters/event/seria/animation/move.ani"; + case 61732: + return "monster/newmonsters/event/wedding_sister/animation/move.ani"; + case 61141: + return "monster/newmonsters/eventbak/animation/move.ani"; + case 61142: + return "monster/newmonsters/eventbak/animation/move.ani"; + case 61459: + return "monster/newmonsters/eventbak/animation/move.ani"; + case 61125: + return "monster/newmonsters/flydragon/looseseri/animation/move.ani"; + case 61126: + return "monster/newmonsters/flydragon/serimalion/animation/move.ani"; + case 56430: + return "monster/newmonsters/gbl/acidra/animation/move.ani"; + case 56103: + return "monster/newmonsters/gbl/acidra/animation/move.ani"; + case 61477: + return "monster/newmonsters/gbl/combinetentacle/animation/move.ani"; + case 61805: + return "monster/newmonsters/gbl/combinetentacle/animation/move.ani"; + case 64562: + return "monster/newmonsters/gbl/hydracle/animation/move.ani"; + case 61108: + return "monster/newmonsters/gbl/hydracle/animation/move.ani"; + case 61109: + return "monster/newmonsters/gbl/vangelis/animation/move.ani"; + case 61604: + return "monster/newmonsters/gbl_breeding/dendroid_disguise/animation/move.ani"; + case 56457: + return "monster/newmonsters/gbl_breeding/dendroid_elder/animation/move.ani"; + case 56456: + return "monster/newmonsters/gbl_breeding/flare_spawn/animation/move.ani"; + case 61601: + return "monster/newmonsters/gbl_breeding/flare_worm/animation/move.ani"; + case 61602: + return "monster/newmonsters/gbl_breeding/new_gbl_nomal/animation/move.ani"; + case 61600: + return "monster/newmonsters/gbl_breeding/new_gbl_woman/animation/move.ani"; + case 61605: + return "monster/newmonsters/gbl_breeding/woody_plant/animation/move.ani"; + case 63021: + return "monster/newmonsters/gbl_goddess_temple/astray_alsor/animation/move.ani"; + case 63022: + return "monster/newmonsters/gbl_goddess_temple/astray_gbl_devotee/animation/move.ani"; + case 59019: + return "monster/newmonsters/gbl_goddess_temple/astray_gbl_pope/animation/move.ani"; + case 63023: + return "monster/newmonsters/gbl_goddess_temple/astray_gbl_w_devotee/animation/move.ani"; + case 59018: + return "monster/newmonsters/gbl_goddess_temple/zookeeper/animation/move.ani"; + case 61431: + return "monster/newmonsters/goblin/archer_gonlin/animation/move.ani"; + case 61408: + return "monster/newmonsters/goblin/archer_gonlin/animation/move.ani"; + case 65006: + return "monster/newmonsters/goblin/archer_gonlin/animation/move.ani"; + case 61407: + return "monster/newmonsters/goblin/assassin_gonlin/animation/move.ani"; + case 61409: + return "monster/newmonsters/goblin/bomber_gonlin/animation/move.ani"; + case 61717: + return "monster/newmonsters/goblin/event_goblin/lv1goblin/animation/move.ani"; + case 61716: + return "monster/newmonsters/goblin/event_goblin/lv1goblin/animation/move.ani"; + case 61719: + return "monster/newmonsters/goblin/event_goblin/lv2goblin/animation/move.ani"; + case 61718: + return "monster/newmonsters/goblin/event_goblin/lv2goblin/animation/move.ani"; + case 61721: + return "monster/newmonsters/goblin/event_goblin/lv3goblin/animation/move.ani"; + case 61720: + return "monster/newmonsters/goblin/event_goblin/lv3goblin/animation/move.ani"; + case 61723: + return "monster/newmonsters/goblin/event_goblin/lv4goblin/animation/move.ani"; + case 61722: + return "monster/newmonsters/goblin/event_goblin/lv4goblin/animation/move.ani"; + case 61729: + return "monster/newmonsters/goblin/event_goblin/shylock/animation/move.ani"; + case 61731: + return "monster/newmonsters/goblin/event_goblin/wedding_goblin/animation/move.ani"; + case 61432: + return "monster/newmonsters/goblin/foreman_gonlin/animation/move.ani"; + case 61410: + return "monster/newmonsters/goblin/foreman_gonlin/animation/move.ani"; + case 65007: + return "monster/newmonsters/goblin/foreman_gonlin/animation/move.ani"; + case 61127: + return "monster/newmonsters/goblin/guardianarcher/animation/move.ani"; + case 56108: + return "monster/newmonsters/goblin/guardianmaster/animation/move.ani"; + case 61119: + return "monster/newmonsters/goblin/guardiantraper/animation/move.ani"; + case 61121: + return "monster/newmonsters/goblin/guardiantraper/animation/move.ani"; + case 61122: + return "monster/newmonsters/goblin/guardiantraper/animation/move.ani"; + case 56413: + return "monster/newmonsters/goblin/madman_gonlin/animation/move.ani"; + case 56407: + return "monster/newmonsters/goblin/madman_gonlin/animation/move.ani"; + case 65005: + return "monster/newmonsters/goblin/madman_gonlin/animation/move.ani"; + case 62781: + return "monster/newmonsters/goblin/richgoblin/animation/move.ani"; + case 61726: + return "monster/newmonsters/goblin/richgoblin/animation/move.ani"; + case 61727: + return "monster/newmonsters/goblin/richgoblin/animation/move.ani"; + case 61728: + return "monster/newmonsters/goblin/richgoblin/animation/move.ani"; + case 61411: + return "monster/newmonsters/goblin/summon_archergoblin/animation/move.ani"; + case 61702: + return "monster/newmonsters/goblin/summon_goblin/animation/move.ani"; + case 61110: + return "monster/newmonsters/goblin/tentaclerider/animation/move.ani"; + case 56705: + return "monster/newmonsters/goblin/throwgoblin/animation/move.ani"; + case 61511: + return "monster/newmonsters/goblinkingdom/bomb_thrower/animation/move.ani"; + case 61513: + return "monster/newmonsters/goblinkingdom/bombgoblin/animation/move.ani"; + case 61714: + return "monster/newmonsters/goblinkingdom/elite_goblin/animation/move.ani"; + case 61724: + return "monster/newmonsters/goblinkingdom/fire_goblin/animation/move.ani"; + case 61337: + return "monster/newmonsters/goblinkingdom/glig/attack/animation/move.ani"; + case 61338: + return "monster/newmonsters/goblinkingdom/glig/defend/animation/move.ani"; + case 61339: + return "monster/newmonsters/goblinkingdom/glig/runaway/animation/move.ani"; + case 61809: + return "monster/newmonsters/goblinkingdom/golgo/animation/move.ani"; + case 61810: + return "monster/newmonsters/goblinkingdom/golgoserver/animation/move.ani"; + case 61517: + return "monster/newmonsters/goblinkingdom/holdgoblin/animation/move.ani"; + case 61725: + return "monster/newmonsters/goblinkingdom/ice_goblin/animation/move.ani"; + case 61430: + return "monster/newmonsters/goblinkingdom/kinggalok/animation/move.ani"; + case 61713: + return "monster/newmonsters/goblinkingdom/kinggalok/animation/move.ani"; + case 65008: + return "monster/newmonsters/goblinkingdom/kinggalok/animation/move.ani"; + case 61519: + return "monster/newmonsters/goblinkingdom/redgoblin/animation/move.ani"; + case 61515: + return "monster/newmonsters/goblinkingdom/sleepgoblin/animation/move.ani"; + case 61521: + return "monster/newmonsters/goblinkingdom/slowgoblin/animation/move.ani"; + case 61518: + return "monster/newmonsters/goblinkingdom/speedgoblin/animation/move.ani"; + case 61516: + return "monster/newmonsters/goblinkingdom/stonegoblin/animation/move.ani"; + case 61514: + return "monster/newmonsters/goblinkingdom/stungoblin/animation/move.ani"; + case 61715: + return "monster/newmonsters/goblinkingdom/throw_goblin/animation/move.ani"; + case 61342: + return "monster/newmonsters/goblinkingdom/tree/leader/animation/move.ani"; + case 61341: + return "monster/newmonsters/goblinkingdom/tree/rudolf/animation/move.ani"; + case 64556: + return "monster/newmonsters/golem/ricu/animation/move.ani"; + case 61705: + return "monster/newmonsters/golem/ricu/animation/move.ani"; + case 56419: + return "monster/newmonsters/grim/grim_bogers/animation/move.ani"; + case 61153: + return "monster/newmonsters/grim/grim_bogers/animation/move.ani"; + case 61807: + return "monster/newmonsters/grim/grim_executive/animation/move.ani"; + case 61808: + return "monster/newmonsters/grim/grim_sorcerer/animation/move.ani"; + case 61510: + return "monster/newmonsters/grim/grimfiresprit/animation/move.ani"; + case 56505: + return "monster/newmonsters/grim/grimhodor/animation/move.ani"; + case 56802: + return "monster/newmonsters/grim_priest/grim_priest_1_2/animation/move.ani"; + case 56803: + return "monster/newmonsters/grim_priest/grim_priest_1_2/animation/move.ani"; + case 56801: + return "monster/newmonsters/grim_priest/grimpriest_nubelus/animation/move.ani"; + case 61243: + return "monster/newmonsters/haze/axeoutlaw/animation/move.ani"; + case 61268: + return "monster/newmonsters/haze/biker2/animation/move.ani"; + case 61247: + return "monster/newmonsters/haze/chainbiker/animation/move.ani"; + case 63007: + return "monster/newmonsters/haze/death_squad/animation/move.ani"; + case 61269: + return "monster/newmonsters/haze/enjosipho/animation/move.ani"; + case 61267: + return "monster/newmonsters/haze/enjosipho/animation/move.ani"; + case 59017: + return "monster/newmonsters/haze/hass/animation/move.ani"; + case 61245: + return "monster/newmonsters/haze/humanhunter/animation/move.ani"; + case 56031: + return "monster/newmonsters/haze/irigare/animation/move.ani"; + case 62161: + return "monster/newmonsters/haze/irigare/animation/move.ani"; + case 61244: + return "monster/newmonsters/haze/outlaw/animation/move.ani"; + case 56029: + return "monster/newmonsters/haze/peyo_piere/animation/move.ani"; + case 59016: + return "monster/newmonsters/haze/poena/animation/move.ani"; + case 61266: + return "monster/newmonsters/haze/stickban/animation/move.ani"; + case 56032: + return "monster/newmonsters/haze/tretri/animation/move.ani"; + case 56033: + return "monster/newmonsters/haze/zzjo/animation/move.ani"; + case 56051: + return "monster/newmonsters/haze/zzjo/animation/move.ani"; + case 56030: + return "monster/newmonsters/haze/zzjo/animation/move.ani"; + case 56134: + return "monster/newmonsters/heaven/assaultmarine/animation/move.ani"; + case 61495: + return "monster/newmonsters/heaven/big_soldier/animation/move.ani"; + case 56714: + return "monster/newmonsters/heaven/captain_berhik/animation/move.ani"; + case 61712: + return "monster/newmonsters/heaven/captain_berhik_boss/animation/move.ani"; + case 64571: + return "monster/newmonsters/heaven/captainshured/animation/move.ani"; + case 61112: + return "monster/newmonsters/heaven/captainshured/animation/move.ani"; + case 56501: + return "monster/newmonsters/heaven/caspar/animation/move.ani"; + case 56124: + return "monster/newmonsters/heaven/doctorgiselle/animation/move.ani"; + case 56502: + return "monster/newmonsters/heaven/dorian/animation/move.ani"; + case 59014: + return "monster/newmonsters/heaven/fastcannon-lightning/animation/move.ani"; + case 64572: + return "monster/newmonsters/heaven/gt9600/animation/move.ani"; + case 61710: + return "monster/newmonsters/heaven/gt9600/animation/move.ani"; + case 59015: + return "monster/newmonsters/heaven/gt_proto/animation/move.ani"; + case 56503: + return "monster/newmonsters/heaven/jena/animation/move.ani"; + case 64570: + return "monster/newmonsters/heaven/letsburn_bentinck/animation/move.ani"; + case 61709: + return "monster/newmonsters/heaven/letsburn_bentinck/animation/move.ani"; + case 61184: + return "monster/newmonsters/heaven/majorcamoka/animation/move.ani"; + case 61208: + return "monster/newmonsters/heaven/mechanicgiselle/zx_5_1/animation/move.ani"; + case 61209: + return "monster/newmonsters/heaven/mechanicgiselle/zx_5_2/animation/move.ani"; + case 61210: + return "monster/newmonsters/heaven/mechanicgiselle/zx_5_3/animation/move.ani"; + case 61211: + return "monster/newmonsters/heaven/mechanicgiselle/zx_5_4/animation/move.ani"; + case 56131: + return "monster/newmonsters/heaven/mechanicgiselle/zx_5_alpha/animation/move.ani"; + case 56132: + return "monster/newmonsters/heaven/mechanicgiselle/zx_5_beta/animation/move.ani"; + case 56133: + return "monster/newmonsters/heaven/mechanicgiselle/zx_5_gamma/animation/move.ani"; + case 61204: + return "monster/newmonsters/heaven/mechanicgiselle/zx_9/animation/move.ani"; + case 61203: + return "monster/newmonsters/heaven/mechanicgiselle/zx_99/animation/move.ani"; + case 63013: + return "monster/newmonsters/heaven/mortar_soldier/animation/move.ani"; + case 56713: + return "monster/newmonsters/heaven/nife_claese/animation/move.ani"; + case 56136: + return "monster/newmonsters/heaven/quartermaster/animation/move.ani"; + case 56135: + return "monster/newmonsters/heaven/sergeant/animation/move.ani"; + case 61185: + return "monster/newmonsters/heaven/shadow/animation/move.ani"; + case 56715: + return "monster/newmonsters/heaven/smarine/animation/move.ani"; + case 59013: + return "monster/newmonsters/heaven/soniccannon-thunder/animation/move.ani"; + case 61113: + return "monster/newmonsters/heaven/specialforce/animation/move.ani"; + case 61155: + return "monster/newmonsters/heaven/timerunner/animation/move.ani"; + case 56106: + return "monster/newmonsters/heaven/vulcherspecialforce/animation/move.ani"; + case 56125: + return "monster/newmonsters/heaven/zx_camo/animation/move.ani"; + case 62119: + return "monster/newmonsters/leshphon/divol/animation/move.ani"; + case 56142: + return "monster/newmonsters/leshphon/duke_juris/animation/move.ani"; + case 62126: + return "monster/newmonsters/leshphon/gackle/animation/move.ani"; + case 56143: + return "monster/newmonsters/leshphon/hyungteo/animation/move.ani"; + case 62117: + return "monster/newmonsters/leshphon/infectee/animation/move.ani"; + case 56144: + return "monster/newmonsters/leshphon/isangoma_nazaloh/animation/move.ani"; + case 56145: + return "monster/newmonsters/leshphon/isangoma_nazaloh/animation/move.ani"; + case 62130: + return "monster/newmonsters/leshphon/melt_knight/animation/move.ani"; + case 62118: + return "monster/newmonsters/leshphon/melt_knight/animation/move.ani"; + case 62127: + return "monster/newmonsters/leshphon/particle/animation/move.ani"; + case 62131: + return "monster/newmonsters/leshphon/particle/animation/move.ani"; + case 62125: + return "monster/newmonsters/leshphon/scavenger/animation/move.ani"; + case 62116: + return "monster/newmonsters/leshphon/the_wicked_disease_direzie/animation/move.ani"; + case 61347: + return "monster/newmonsters/lizardman/avengers/alecto/animation/move.ani"; + case 61349: + return "monster/newmonsters/lizardman/avengers/megaira/animation/move.ani"; + case 61348: + return "monster/newmonsters/lizardman/avengers/tispone/animation/move.ani"; + case 61128: + return "monster/newmonsters/lizardman/basilisk/animation/move.ani"; + case 61412: + return "monster/newmonsters/lizardman/dragon_man/animation/move.ani"; + case 61350: + return "monster/newmonsters/lizardman/gizmo/animation/move.ani"; + case 65003: + return "monster/newmonsters/lizardman/gizmo/animation/move.ani"; + case 56110: + return "monster/newmonsters/lizardman/kungfulizard/animation/move.ani"; + case 61413: + return "monster/newmonsters/lizardman/lizard_man/animation/move.ani"; + case 61129: + return "monster/newmonsters/lizardman/lizardman_guard/animation/move.ani"; + case 61130: + return "monster/newmonsters/lizardman/lizardman_guard/animation/move.ani"; + case 61131: + return "monster/newmonsters/lizardman/lizardman_guard/animation/move.ani"; + case 61132: + return "monster/newmonsters/lizardman/lizardman_guard/animation/move.ani"; + case 61133: + return "monster/newmonsters/lizardman/lizardman_guard/animation/move.ani"; + case 62107: + return "monster/newmonsters/lizardman/lizardman_guard/animation/move.ani"; + case 61351: + return "monster/newmonsters/lizardman/shiger/animation/move.ani"; + case 65004: + return "monster/newmonsters/lizardman/shiger/animation/move.ani"; + case 61355: + return "monster/newmonsters/lizardman/tiguan/animation/move.ani"; + case 61116: + return "monster/newmonsters/lugaru/firelugaru/animation/move.ani"; + case 66170: + return "monster/newmonsters/luke_normal/blueswings/animation/move.ani"; + case 66183: + return "monster/newmonsters/luke_normal/dark_archer_(59827)/animation/move.ani"; + case 66174: + return "monster/newmonsters/luke_normal/machinegolem/animation/move.ani"; + case 66173: + return "monster/newmonsters/luke_normal/sparkbomb/animation/move.ani"; + case 72642: + return "monster/newmonsters/luke_raid/detector/animation/move.ani"; + case 72643: + return "monster/newmonsters/luke_raid/detector/animation/move.ani"; + case 72644: + return "monster/newmonsters/luke_raid/detector/animation/move.ani"; + case 72645: + return "monster/newmonsters/luke_raid/detector/animation/move.ani"; + case 56674: + return "monster/newmonsters/luke_raid/karina/animation/move.ani"; + case 63408: + return "monster/newmonsters/luke_raid/karina_slime/animation/move.ani"; + case 63409: + return "monster/newmonsters/luke_raid/karina_slime_small/animation/move.ani"; + case 59873: + return "monster/newmonsters/luke_raid/massp_beckey_01/animation/move.ani"; + case 56063: + return "monster/newmonsters/luke_raid/metalgear/animation/move.ani"; + case 56673: + return "monster/newmonsters/luke_raid/rosaura/animation/move.ani"; + case 63406: + return "monster/newmonsters/luke_raid/rosaura_dark_light/animation/move.ani"; + case 63407: + return "monster/newmonsters/luke_raid/rosaura_dark_small_light/animation/move.ani"; + case 56012: + return "monster/newmonsters/medeia/animation/move.ani"; + case 107001623: + return "monster/newmonsters/metrocenter/hell/darkghost/animation/move.ani"; + case 65011: + return "monster/newmonsters/militiaman/militiaman/animation/move.ani"; + case 61003: + return "monster/newmonsters/militiaman/militiaman/animation/move.ani"; + case 56000: + return "monster/newmonsters/militiaman/militiamanboss/animation/move.ani"; + case 61480: + return "monster/newmonsters/mimic/animation/move.ani"; + case 61479: + return "monster/newmonsters/mimic/animation/move.ani"; + case 56478: + return "monster/newmonsters/new_event/dual/blanka/animation/move.ani"; + case 61644: + return "monster/newmonsters/new_event/dual/dual_face/animation/move.ani"; + case 61645: + return "monster/newmonsters/new_event/dual/dual_face/animation/move.ani"; + case 61641: + return "monster/newmonsters/new_event/dual/frenken_baby/animation/move.ani"; + case 61643: + return "monster/newmonsters/new_event/dual/marine/animation/move.ani"; + case 61642: + return "monster/newmonsters/new_event/dual/tank_landrunner/animation/move.ani"; + case 61651: + return "monster/newmonsters/new_event/dual/tank_landrunner/animation/move.ani"; + case 61652: + return "monster/newmonsters/new_event/dual/zx_5_1/animation/move.ani"; + case 61636: + return "monster/newmonsters/new_event/dual/zx_5_1/animation/move.ani"; + case 61647: + return "monster/newmonsters/new_event/dual/zx_5_1/animation/move.ani"; + case 61637: + return "monster/newmonsters/new_event/dual/zx_5_2/animation/move.ani"; + case 61638: + return "monster/newmonsters/new_event/dual/zx_5_3/animation/move.ani"; + case 61639: + return "monster/newmonsters/new_event/dual/zx_5_4/animation/move.ani"; + case 56477: + return "monster/newmonsters/new_event/dual/zx_5_gamma/animation/move.ani"; + case 61656: + return "monster/newmonsters/new_event/dual/zx_69/animation/move.ani"; + case 61650: + return "monster/newmonsters/new_event/dual/zx_69/animation/move.ani"; + case 61646: + return "monster/newmonsters/new_event/dual/zx_69/animation/move.ani"; + case 61653: + return "monster/newmonsters/new_event/dual/zx_77/animation/move.ani"; + case 61654: + return "monster/newmonsters/new_event/dual/zx_77/animation/move.ani"; + case 61655: + return "monster/newmonsters/new_event/dual/zx_77/animation/move.ani"; + case 61649: + return "monster/newmonsters/new_event/dual/zx_77/animation/move.ani"; + case 61648: + return "monster/newmonsters/new_event/dual/zx_99/animation/move.ani"; + case 61640: + return "monster/newmonsters/new_event/dual/zx_99/animation/move.ani"; + case 61768: + return "monster/newmonsters/parasite/parasite_fire/animation/move.ani"; + case 61769: + return "monster/newmonsters/parasite/parasite_ice/animation/move.ani"; + case 56055: + return "monster/newmonsters/powerstation/botula/animation/move.ani"; + case 56057: + return "monster/newmonsters/powerstation/botula/animation/move.ani"; + case 56058: + return "monster/newmonsters/powerstation/botula/animation/move.ani"; + case 56059: + return "monster/newmonsters/powerstation/botula/animation/move.ani"; + case 56060: + return "monster/newmonsters/powerstation/botula/animation/move.ani"; + case 56061: + return "monster/newmonsters/powerstation/botula/animation/move.ani"; + case 56470: + return "monster/newmonsters/powerstation/fruz_station/coward_planet/animation/move.ani"; + case 61635: + return "monster/newmonsters/powerstation/fruz_station/granite/animation/move.ani"; + case 61634: + return "monster/newmonsters/powerstation/fruz_station/granite_fly_b/animation/move.ani"; + case 61632: + return "monster/newmonsters/powerstation/fruz_station/samuel/animation/move.ani"; + case 61295: + return "monster/newmonsters/powerstation/fuhrman/animation/move.ani"; + case 63048: + return "monster/newmonsters/powerstation/kohlepowerstation/fire_slime/animation/move.ani"; + case 59038: + return "monster/newmonsters/powerstation/kohlepowerstation/fire_slime_big/animation/move.ani"; + case 63045: + return "monster/newmonsters/powerstation/kohlepowerstation/fitz/animation/move.ani"; + case 63047: + return "monster/newmonsters/powerstation/kohlepowerstation/fitz_archer/animation/move.ani"; + case 59031: + return "monster/newmonsters/powerstation/kohlepowerstation/fitz_other_self/animation/move.ani"; + case 63046: + return "monster/newmonsters/powerstation/kohlepowerstation/fitz_warrior/animation/move.ani"; + case 61272: + return "monster/newmonsters/powerstation/rockslime/animation/move.ani"; + case 61273: + return "monster/newmonsters/powerstation/rockslotor/animation/move.ani"; + case 64016: + return "monster/newmonsters/powerstation/trombe/granite_b/animation/move.ani"; + case 64019: + return "monster/newmonsters/powerstation/trombe/granite_fly/animation/move.ani"; + case 58006: + return "monster/newmonsters/powerstation/trombe/granite_great/animation/move.ani"; + case 64017: + return "monster/newmonsters/powerstation/trombe/granite_t/animation/move.ani"; + case 64022: + return "monster/newmonsters/powerstation/trombe/ma_squid/animation/move.ani"; + case 64023: + return "monster/newmonsters/powerstation/trombe/ma_squid2/animation/move.ani"; + case 58007: + return "monster/newmonsters/powerstation/trombe/paris/animation/move.ani"; + case 64020: + return "monster/newmonsters/powerstation/trombe/patris/animation/move.ani"; + case 64018: + return "monster/newmonsters/powerstation/trombe/river/animation/move.ani"; + case 64021: + return "monster/newmonsters/powerstation/trombe/river_map/animation/move.ani"; + case 61704: + return "monster/newmonsters/queen_rosi/animation/move.ani"; + case 61525: + return "monster/newmonsters/ranjerus/assaulting/animation/move.ani"; + case 65009: + return "monster/newmonsters/ranjerus/assaulting/animation/move.ani"; + case 56506: + return "monster/newmonsters/ranjerus/bitbusty/animation/move.ani"; + case 61530: + return "monster/newmonsters/ranjerus/bombgunsoldier/animation/move.ani"; + case 61354: + return "monster/newmonsters/ranjerus/dugong/animation/move.ani"; + case 61415: + return "monster/newmonsters/ranjerus/fireman/animation/move.ani"; + case 61137: + return "monster/newmonsters/ranjerus/g3/animation/move.ani"; + case 61138: + return "monster/newmonsters/ranjerus/g3/animation/move.ani"; + case 61139: + return "monster/newmonsters/ranjerus/g3/animation/move.ani"; + case 61134: + return "monster/newmonsters/ranjerus/g3/animation/move.ani"; + case 61135: + return "monster/newmonsters/ranjerus/gashengrigun/animation/move.ani"; + case 56140: + return "monster/newmonsters/ranjerus/jeff/animation/move.ani"; + case 61352: + return "monster/newmonsters/ranjerus/maryjane/animation/move.ani"; + case 61527: + return "monster/newmonsters/ranjerus/medic/animation/move.ani"; + case 61526: + return "monster/newmonsters/ranjerus/minesoldier/animation/move.ani"; + case 61136: + return "monster/newmonsters/ranjerus/miracle_landrunner/animation/move.ani"; + case 61416: + return "monster/newmonsters/ranjerus/serve_fireman/animation/move.ani"; + case 61353: + return "monster/newmonsters/ranjerus/sniper/animation/move.ani"; + case 61528: + return "monster/newmonsters/ranjerus/tempester/animation/move.ani"; + case 61524: + return "monster/newmonsters/realsky/babydragon/animation/move.ani"; + case 61523: + return "monster/newmonsters/realsky/minius/animation/move.ani"; + case 61522: + return "monster/newmonsters/realsky/mirkius/animation/move.ani"; + case 61735: + return "monster/newmonsters/riding/archer_goblin/animation/move.ani"; + case 61235: + return "monster/newmonsters/riding/at_5t/animation/move.ani"; + case 63008: + return "monster/newmonsters/riding/kartana/animation/move.ani"; + case 62133: + return "monster/newmonsters/riding/masaccio/animation/move.ani"; + case 61249: + return "monster/newmonsters/riding/masaccio_quest/animation/move.ani"; + case 62132: + return "monster/newmonsters/riding/metacow/animation/move.ani"; + case 63009: + return "monster/newmonsters/riding/zepplinex/animation/move.ani"; + case 61783: + return "monster/newmonsters/risk_dungeon/cartelcommand/at_walker/animation/move.ani"; + case 56772: + return "monster/newmonsters/risk_dungeon/cartelcommand/courjeep/animation/move.ani"; + case 56775: + return "monster/newmonsters/risk_dungeon/cartelcommand/goro/animation/move.ani"; + case 56768: + return "monster/newmonsters/risk_dungeon/cartelcommand/gunmax/animation/move.ani"; + case 62216: + return "monster/newmonsters/risk_dungeon/cartelcommand/outlaw/animation/move.ani"; + case 61780: + return "monster/newmonsters/risk_dungeon/cartelcommand/ranjerus/animation/move.ani"; + case 62238: + return "monster/newmonsters/risk_dungeon/cartelcommand/robot_du1/animation/move.ani"; + case 62239: + return "monster/newmonsters/risk_dungeon/cartelcommand/robot_du2/animation/move.ani"; + case 62242: + return "monster/newmonsters/risk_dungeon/cartelcommand/robot_du3/animation/move.ani"; + case 62243: + return "monster/newmonsters/risk_dungeon/cartelcommand/robot_du4/animation/move.ani"; + case 62240: + return "monster/newmonsters/risk_dungeon/cartelcommand/robot_du5/animation/move.ani"; + case 62241: + return "monster/newmonsters/risk_dungeon/cartelcommand/robot_du6/animation/move.ani"; + case 61788: + return "monster/newmonsters/risk_dungeon/cartelcommand/rx78/animation/move.ani"; + case 62207: + return "monster/newmonsters/risk_dungeon/cartelcommand/specialarmy/animation/move.ani"; + case 61784: + return "monster/newmonsters/risk_dungeon/cartelcommand/warjack/animation/move.ani"; + case 56755: + return "monster/newmonsters/risk_dungeon/ghosttrain/chiefmong0/animation/move.ani"; + case 56756: + return "monster/newmonsters/risk_dungeon/ghosttrain/chiefmongghost0/animation/move.ani"; + case 56758: + return "monster/newmonsters/risk_dungeon/ghosttrain/chiefmongghost_2nd0/animation/move.ani"; + case 56761: + return "monster/newmonsters/risk_dungeon/ghosttrain/chiefmongghost_3rd0/animation/move.ani"; + case 56767: + return "monster/newmonsters/risk_dungeon/ghosttrain/chiefsars/animation/move.ani"; + case 61786: + return "monster/newmonsters/risk_dungeon/ghosttrain/chiefsars_crow/animation/move.ani"; + case 61778: + return "monster/newmonsters/risk_dungeon/ghosttrain/dark_ghost0/animation/move.ani"; + case 61770: + return "monster/newmonsters/risk_dungeon/ghosttrain/ghost_flu3/animation/move.ani"; + case 61771: + return "monster/newmonsters/risk_dungeon/ghosttrain/skeleton_mermadia2/animation/move.ani"; + case 56752: + return "monster/newmonsters/risk_dungeon/ghosttrain/wooden_doll1/animation/move.ani"; + case 56754: + return "monster/newmonsters/risk_dungeon/ghosttrain/wooden_doll_l1/animation/move.ani"; + case 61773: + return "monster/newmonsters/risk_dungeon/ghosttrain/wooden_doll_l_shadow1/animation/move.ani"; + case 61787: + return "monster/newmonsters/risk_dungeon/ghosttrain/wooden_doll_nomnal/animation/move.ani"; + case 56746: + return "monster/newmonsters/risk_dungeon/ghosttrain/wooden_doll_p1/animation/move.ani"; + case 56745: + return "monster/newmonsters/risk_dungeon/ghosttrain/wooden_doll_t1/animation/move.ani"; + case 61789: + return "monster/newmonsters/risk_dungeon/ghosttrain/woodendoll_nb/animation/move.ani"; + case 61792: + return "monster/newmonsters/risk_dungeon/ghosttrain/woodendoll_ng/animation/move.ani"; + case 61793: + return "monster/newmonsters/risk_dungeon/ghosttrain/woodendoll_np/animation/move.ani"; + case 61790: + return "monster/newmonsters/risk_dungeon/ghosttrain/woodendoll_ny/animation/move.ani"; + case 61785: + return "monster/newmonsters/risk_dungeon/ghosttrain/zombie_marine/animation/move.ani"; + case 62286: + return "monster/newmonsters/risk_dungeon/leshphon/divol1/animation/move.ani"; + case 56777: + return "monster/newmonsters/risk_dungeon/leshphon/doomferion/animation/move.ani"; + case 56739: + return "monster/newmonsters/risk_dungeon/leshphon/duke_juris/animation/move.ani"; + case 62320: + return "monster/newmonsters/risk_dungeon/leshphon/gackle/animation/move.ani"; + case 56744: + return "monster/newmonsters/risk_dungeon/leshphon/hyungteo/animation/move.ani"; + case 56759: + return "monster/newmonsters/risk_dungeon/leshphon/isangoma_nazaloh/animation/move.ani"; + case 56760: + return "monster/newmonsters/risk_dungeon/leshphon/isangoma_nazaloh2/animation/move.ani"; + case 56776: + return "monster/newmonsters/risk_dungeon/leshphon/jarojjaroo/animation/move.ani"; + case 56778: + return "monster/newmonsters/risk_dungeon/leshphon/kator/animation/move.ani"; + case 62225: + return "monster/newmonsters/risk_dungeon/leshphon/melt_knight/animation/move.ani"; + case 62255: + return "monster/newmonsters/risk_dungeon/leshphon/particle/animation/move.ani"; + case 62244: + return "monster/newmonsters/risk_dungeon/leshphon/pathogens/animation/move.ani"; + case 61797: + return "monster/newmonsters/risk_dungeon/leshphon/scavenger/animation/move.ani"; + case 62254: + return "monster/newmonsters/risk_dungeon/leshphon/the_wicked_disease_direzie/animation/move.ani"; + case 61746: + return "monster/newmonsters/risk_dungeon/noirpera/direzie/animation/move.ani"; + case 61749: + return "monster/newmonsters/risk_dungeon/noirpera/direzie_sub/animation/move.ani"; + case 61754: + return "monster/newmonsters/risk_dungeon/noirpera/disease_spirit/animation/move.ani"; + case 56751: + return "monster/newmonsters/risk_dungeon/noirpera/grim_priest1/animation/move.ani"; + case 56750: + return "monster/newmonsters/risk_dungeon/noirpera/grim_priest2/animation/move.ani"; + case 56753: + return "monster/newmonsters/risk_dungeon/noirpera/grimpriest_nubelus/animation/move.ani"; + case 61782: + return "monster/newmonsters/risk_dungeon/noirpera/infected_ghoula/animation/move.ani"; + case 61781: + return "monster/newmonsters/risk_dungeon/noirpera/infected_ghoulb/animation/move.ani"; + case 56757: + return "monster/newmonsters/risk_dungeon/noirpera/infected_ghoulc/animation/move.ani"; + case 61798: + return "monster/newmonsters/risk_dungeon/noirpera/militiaman/animation/move.ani"; + case 56762: + return "monster/newmonsters/risk_dungeon/noirpera/militiamanboss/animation/move.ani"; + case 61775: + return "monster/newmonsters/risk_dungeon/noirpera/mummy_basic/animation/move.ani"; + case 56749: + return "monster/newmonsters/risk_dungeon/noirpera/mummy_ghost/animation/move.ani"; + case 61759: + return "monster/newmonsters/risk_dungeon/noirpera/noir_dimension_gate/animation/move.ani"; + case 61755: + return "monster/newmonsters/risk_dungeon/screamingcave/babynugol/animation/move.ani"; + case 61758: + return "monster/newmonsters/risk_dungeon/screamingcave/babynugol2/animation/move.ani"; + case 56726: + return "monster/newmonsters/risk_dungeon/screamingcave/bloodystormhardy/animation/move.ani"; + case 61744: + return "monster/newmonsters/risk_dungeon/screamingcave/crimebuffalo/animation/move.ani"; + case 61741: + return "monster/newmonsters/risk_dungeon/screamingcave/crimebuffalo/animation/move.ani"; + case 61747: + return "monster/newmonsters/risk_dungeon/screamingcave/cursecrimebuffalo/animation/move.ani"; + case 61743: + return "monster/newmonsters/risk_dungeon/screamingcave/cursecrimebuffalo/animation/move.ani"; + case 56748: + return "monster/newmonsters/risk_dungeon/screamingcave/eviledge1/animation/move.ani"; + case 56725: + return "monster/newmonsters/risk_dungeon/screamingcave/eviledge1/animation/move.ani"; + case 56736: + return "monster/newmonsters/risk_dungeon/screamingcave/eviledge2/animation/move.ani"; + case 56735: + return "monster/newmonsters/risk_dungeon/screamingcave/graverobberking/animation/move.ani"; + case 61745: + return "monster/newmonsters/risk_dungeon/screamingcave/hardystorm/animation/move.ani"; + case 56737: + return "monster/newmonsters/risk_dungeon/screamingcave/highspectresslene/animation/move.ani"; + case 61757: + return "monster/newmonsters/risk_dungeon/screamingcave/kingnugol/animation/move.ani"; + case 61756: + return "monster/newmonsters/risk_dungeon/screamingcave/nugol/animation/move.ani"; + case 56738: + return "monster/newmonsters/risk_dungeon/screamingcave/skullkane/animation/move.ani"; + case 61327: + return "monster/newmonsters/rosiclock/animation/move.ani"; + case 61455: + return "monster/newmonsters/scasababy/animation/move.ani"; + case 62103: + return "monster/newmonsters/scasababy/animation/move.ani"; + case 61147: + return "monster/newmonsters/screamingcave/babynugol/animation/move.ani"; + case 61149: + return "monster/newmonsters/screamingcave/babynugol/animation/move.ani"; + case 56112: + return "monster/newmonsters/screamingcave/bloodystormhardy/animation/move.ani"; + case 61144: + return "monster/newmonsters/screamingcave/crimebuffalo/animation/move.ani"; + case 61145: + return "monster/newmonsters/screamingcave/cursecrimebuffalo/animation/move.ani"; + case 56123: + return "monster/newmonsters/screamingcave/eviledge/animation/move.ani"; + case 56436: + return "monster/newmonsters/screamingcave/eviledge1/animation/move.ani"; + case 56113: + return "monster/newmonsters/screamingcave/eviledge1/animation/move.ani"; + case 56114: + return "monster/newmonsters/screamingcave/eviledge2/animation/move.ani"; + case 56115: + return "monster/newmonsters/screamingcave/graverobberking/animation/move.ani"; + case 61148: + return "monster/newmonsters/screamingcave/hardystorm/animation/move.ani"; + case 56116: + return "monster/newmonsters/screamingcave/highspectresslene/animation/move.ani"; + case 61143: + return "monster/newmonsters/screamingcave/kingnugol/animation/move.ani"; + case 61146: + return "monster/newmonsters/screamingcave/nugol/animation/move.ani"; + case 56117: + return "monster/newmonsters/screamingcave/skullkane/animation/move.ani"; + case 59024: + return "monster/newmonsters/shonan/biwoong/animation/move.ani"; + case 59025: + return "monster/newmonsters/shonan/biwoong_mirror/animation/move.ani"; + case 59020: + return "monster/newmonsters/shonan/chinchin/animation/move.ani"; + case 56463: + return "monster/newmonsters/shonan/cho_lance/animation/move.ani"; + case 56040: + return "monster/newmonsters/shonan/choa/animation/move.ani"; + case 59026: + return "monster/newmonsters/shonan/gado/animation/move.ani"; + case 56464: + return "monster/newmonsters/shonan/hajin/animation/move.ani"; + case 56043: + return "monster/newmonsters/shonan/haneum/animation/move.ani"; + case 56046: + return "monster/newmonsters/shonan/holyu/animation/move.ani"; + case 56045: + return "monster/newmonsters/shonan/hukbichun/animation/move.ani"; + case 56155: + return "monster/newmonsters/shonan/hwaho/animation/move.ani"; + case 59021: + return "monster/newmonsters/shonan/hwoaryeong/animation/move.ani"; + case 56044: + return "monster/newmonsters/shonan/jaunbi/animation/move.ani"; + case 56157: + return "monster/newmonsters/shonan/jebi/animation/move.ani"; + case 59022: + return "monster/newmonsters/shonan/jin/animation/move.ani"; + case 56458: + return "monster/newmonsters/shonan/jinpie/animation/move.ani"; + case 59023: + return "monster/newmonsters/shonan/kaizen/animation/move.ani"; + case 56156: + return "monster/newmonsters/shonan/kinshou/animation/move.ani"; + case 56041: + return "monster/newmonsters/shonan/lin/animation/move.ani"; + case 56461: + return "monster/newmonsters/shonan/luck2/animation/move.ani"; + case 56047: + return "monster/newmonsters/shonan/moonsu/animation/move.ani"; + case 56042: + return "monster/newmonsters/shonan/orona/animation/move.ani"; + case 56462: + return "monster/newmonsters/shonan/poison_lance/animation/move.ani"; + case 56459: + return "monster/newmonsters/shonan/sarin/animation/move.ani"; + case 56465: + return "monster/newmonsters/shonan/seorock/animation/move.ani"; + case 59027: + return "monster/newmonsters/shonan/tapay/animation/move.ani"; + case 56727: + return "monster/newmonsters/shonan/white/animation/move.ani"; + case 56460: + return "monster/newmonsters/shonan/yang/animation/move.ani"; + case 56729: + return "monster/newmonsters/shonan/yen/animation/move.ani"; + case 56048: + return "monster/newmonsters/shonan/zagyu/animation/move.ani"; + case 56728: + return "monster/newmonsters/shonan/zhenlun/animation/move.ani"; + case 61017: + return "monster/newmonsters/silverspoon/crazyman/animation/move.ani"; + case 56128: + return "monster/newmonsters/silverspoon/crazyman/animation/move.ani"; + case 61008: + return "monster/newmonsters/silverspoon/fatso/animation/move.ani"; + case 61018: + return "monster/newmonsters/silverspoon/gusto/animation/move.ani"; + case 56002: + return "monster/newmonsters/silverspoon/gusto/animation/move.ani"; + case 61177: + return "monster/newmonsters/silverspoon/silverclown/animation/move.ani"; + case 61760: + return "monster/newmonsters/silverspoon/silverclown_ballacrobat/animation/move.ani"; + case 61442: + return "monster/newmonsters/silverspoon/silverclown_ballacrobat/animation/move.ani"; + case 61461: + return "monster/newmonsters/silverspoon/silverclown_ballacrobat/animation/move.ani"; + case 61437: + return "monster/newmonsters/silverspoon/silverclown_crutches/animation/move.ani"; + case 61441: + return "monster/newmonsters/silverspoon/silverclown_fluent/animation/move.ani"; + case 61761: + return "monster/newmonsters/silverspoon/silverclown_jugglingacrobat/animation/move.ani"; + case 61443: + return "monster/newmonsters/silverspoon/silverclown_jugglingacrobat/animation/move.ani"; + case 61460: + return "monster/newmonsters/silverspoon/silverclown_jugglingacrobat/animation/move.ani"; + case 56422: + return "monster/newmonsters/silverspoon/silverclown_robert/animation/move.ani"; + case 61178: + return "monster/newmonsters/silverspoon/silverman/animation/move.ani"; + case 61483: + return "monster/newmonsters/silverspoon/silverman/animation/move.ani"; + case 61436: + return "monster/newmonsters/silverspoon/silverman/animation/move.ani"; + case 61462: + return "monster/newmonsters/silverspoon/silverman/animation/move.ani"; + case 61438: + return "monster/newmonsters/silverspoon/silversmallmana/animation/move.ani"; + case 61463: + return "monster/newmonsters/silverspoon/silversmallmanb/animation/move.ani"; + case 61179: + return "monster/newmonsters/silverspoon/silversmallmanb/animation/move.ani"; + case 61482: + return "monster/newmonsters/silverspoon/silversmallmanb/animation/move.ani"; + case 61439: + return "monster/newmonsters/silverspoon/silversmallmanb/animation/move.ani"; + case 61440: + return "monster/newmonsters/silverspoon/silversmallmanc/animation/move.ani"; + case 61009: + return "monster/newmonsters/silverspoon/transfatso/animation/move.ani"; + case 56001: + return "monster/newmonsters/silverspoon/tripo/animation/move.ani"; + case 61011: + return "monster/newmonsters/slime/slime_firm/animation/move.ani"; + case 61012: + return "monster/newmonsters/slime/slime_frantic/animation/move.ani"; + case 61016: + return "monster/newmonsters/slime/slime_king/animation/move.ani"; + case 56004: + return "monster/newmonsters/slime/slime_king/animation/move.ani"; + case 61015: + return "monster/newmonsters/slime/slime_mini/animation/move.ani"; + case 61010: + return "monster/newmonsters/slime/slime_red/animation/move.ani"; + case 61330: + return "monster/newmonsters/snake/medusasnake/animation/move.ani"; + case 61229: + return "monster/newmonsters/snake/stonesnake/animation/move.ani"; + case 56005: + return "monster/newmonsters/snowman/blanka/animation/move.ani"; + case 64576: + return "monster/newmonsters/snowman/frenken/animation/move.ani"; + case 61013: + return "monster/newmonsters/snowman/frenken/animation/move.ani"; + case 61014: + return "monster/newmonsters/snowman/frenken_baby/animation/move.ani"; + case 61180: + return "monster/newmonsters/snowman/frenken_baby/animation/move.ani"; + case 61730: + return "monster/newmonsters/tau/event_child_tau/animation/move.ani"; + case 56039: + return "monster/newmonsters/tau/event_cow/animation/move.ani"; + case 61154: + return "monster/newmonsters/tau/summon_tau/animation/move.ani"; + case 61404: + return "monster/newmonsters/thief/grim_marcenary/animation/move.ani"; + case 56401: + return "monster/newmonsters/thief/grim_marcenary_n/animation/move.ani"; + case 61531: + return "monster/newmonsters/thief/nicolas/animation/move.ani"; + case 62519: + return "monster/newmonsters/timegate/beginning/angry_dragon/animation/move.ani"; + case 56162: + return "monster/newmonsters/timegate/beginning/baby_hisma/animation/move.ani"; + case 56161: + return "monster/newmonsters/timegate/beginning/baby_scasa/animation/move.ani"; + case 56163: + return "monster/newmonsters/timegate/beginning/baby_spirazzi/animation/move.ani"; + case 62517: + return "monster/newmonsters/timegate/beginning/black_dragon/animation/move.ani"; + case 62520: + return "monster/newmonsters/timegate/beginning/dragon_knight/animation/move.ani"; + case 62518: + return "monster/newmonsters/timegate/beginning/fire_dragon/animation/move.ani"; + case 62112: + return "monster/newmonsters/timegate/beginning/young_scasa/animation/move.ani"; + case 56475: + return "monster/newmonsters/timegate/black_church/astaroth/animation/move.ani"; + case 61292: + return "monster/newmonsters/timegate/black_church/astaroth/animation/move.ani"; + case 56473: + return "monster/newmonsters/timegate/black_church/astaroth/animation/move.ani"; + case 56471: + return "monster/newmonsters/timegate/black_church/berias/animation/move.ani"; + case 61616: + return "monster/newmonsters/timegate/black_church/berias_sub/animation/move.ani"; + case 61622: + return "monster/newmonsters/timegate/black_church/cross_axe/animation/move.ani"; + case 56474: + return "monster/newmonsters/timegate/black_church/fear/animation/move.ani"; + case 56403: + return "monster/newmonsters/timegate/black_church/michaela/animation/move.ani"; + case 61623: + return "monster/newmonsters/timegate/black_church/mummy/animation/move.ani"; + case 61626: + return "monster/newmonsters/timegate/black_church/nillbass/animation/move.ani"; + case 61625: + return "monster/newmonsters/timegate/black_church/nillbass/animation/move.ani"; + case 61615: + return "monster/newmonsters/timegate/black_church/nillbass/animation/move.ani"; + case 61624: + return "monster/newmonsters/timegate/black_church/ozma/animation/move.ani"; + case 61618: + return "monster/newmonsters/timegate/black_church/pincers/animation/move.ani"; + case 61619: + return "monster/newmonsters/timegate/black_church/sawtooth/animation/move.ani"; + case 61620: + return "monster/newmonsters/timegate/black_church/scissors/animation/move.ani"; + case 61291: + return "monster/newmonsters/timegate/black_church/shapirogracia/animation/move.ani"; + case 58001: + return "monster/newmonsters/timegate/black_church/shapirogracia/animation/move.ani"; + case 61617: + return "monster/newmonsters/timegate/black_church/skewer/animation/move.ani"; + case 56472: + return "monster/newmonsters/timegate/black_church/tiamat/animation/move.ani"; + case 61621: + return "monster/newmonsters/timegate/black_church/yorkshire/animation/move.ani"; + case 63033: + return "monster/newmonsters/timegate/conflagration/bird/animation/move.ani"; + case 58005: + return "monster/newmonsters/timegate/conflagration/dauwa/animation/move.ani"; + case 63044: + return "monster/newmonsters/timegate/conflagration/eldergoblin/animation/move.ani"; + case 63037: + return "monster/newmonsters/timegate/conflagration/forest_elf/animation/move.ani"; + case 63042: + return "monster/newmonsters/timegate/conflagration/forest_elf/animation/move.ani"; + case 63025: + return "monster/newmonsters/timegate/conflagration/forest_m/animation/move.ani"; + case 59029: + return "monster/newmonsters/timegate/conflagration/forest_magician/animation/move.ani"; + case 63039: + return "monster/newmonsters/timegate/conflagration/forest_oak/animation/move.ani"; + case 63027: + return "monster/newmonsters/timegate/conflagration/forest_spider/animation/move.ani"; + case 63026: + return "monster/newmonsters/timegate/conflagration/forest_w/animation/move.ani"; + case 59028: + return "monster/newmonsters/timegate/conflagration/ghoulkawish/animation/move.ani"; + case 63041: + return "monster/newmonsters/timegate/conflagration/grim_aradwoman/animation/move.ani"; + case 59037: + return "monster/newmonsters/timegate/conflagration/redeyes_sinua/animation/move.ani"; + case 63024: + return "monster/newmonsters/timegate/conflagration/umtara/animation/move.ani"; + case 63043: + return "monster/newmonsters/timegate/conflagration/umtara_rage/animation/move.ani"; + case 63040: + return "monster/newmonsters/timegate/conflagration/warrior_oak/animation/move.ani"; + case 56054: + return "monster/newmonsters/timegate/consciousness/aquajello/animation/move.ani"; + case 61288: + return "monster/newmonsters/timegate/consciousness/doll_fighter/animation/move.ani"; + case 62506: + return "monster/newmonsters/timegate/consciousness/doll_fighter/animation/move.ani"; + case 61289: + return "monster/newmonsters/timegate/consciousness/doll_priest/animation/move.ani"; + case 62507: + return "monster/newmonsters/timegate/consciousness/doll_priest/animation/move.ani"; + case 61290: + return "monster/newmonsters/timegate/consciousness/doll_sword/animation/move.ani"; + case 62508: + return "monster/newmonsters/timegate/consciousness/doll_sword/animation/move.ani"; + case 62509: + return "monster/newmonsters/timegate/consciousness/doll_whip/animation/move.ani"; + case 62510: + return "monster/newmonsters/timegate/consciousness/fire_doll/animation/move.ani"; + case 62511: + return "monster/newmonsters/timegate/consciousness/fire_doll/animation/move.ani"; + case 62512: + return "monster/newmonsters/timegate/consciousness/fire_doll/animation/move.ani"; + case 59035: + return "monster/newmonsters/timegate/consciousness/glutton_daroo/animation/move.ani"; + case 56053: + return "monster/newmonsters/timegate/consciousness/ignis/animation/move.ani"; + case 62108: + return "monster/newmonsters/timegate/consciousness/mareritt/animation/move.ani"; + case 62521: + return "monster/newmonsters/timegate/consciousness/mareritt2/animation/move.ani"; + case 59036: + return "monster/newmonsters/timegate/consciousness/mirror/animation/move.ani"; + case 61281: + return "monster/newmonsters/timegate/consciousness/musicbox/animation/move.ani"; + case 61293: + return "monster/newmonsters/timegate/consciousness/questmonster/animation/move.ani"; + case 61287: + return "monster/newmonsters/timegate/consciousness/spacetoy/animation/move.ani"; + case 61286: + return "monster/newmonsters/timegate/consciousness/timetoy/animation/move.ani"; + case 62513: + return "monster/newmonsters/timegate/epidemic/darkelf_ghoul/animation/move.ani"; + case 56159: + return "monster/newmonsters/timegate/epidemic/doomferion/animation/move.ani"; + case 59034: + return "monster/newmonsters/timegate/epidemic/fusion_infectee/animation/move.ani"; + case 62514: + return "monster/newmonsters/timegate/epidemic/gackle_warrior/animation/move.ani"; + case 56160: + return "monster/newmonsters/timegate/epidemic/hogas/animation/move.ani"; + case 59033: + return "monster/newmonsters/timegate/epidemic/jarojjaroo/animation/move.ani"; + case 62515: + return "monster/newmonsters/timegate/epidemic/kah_divol/animation/move.ani"; + case 59032: + return "monster/newmonsters/timegate/epidemic/kator/animation/move.ani"; + case 62124: + return "monster/newmonsters/timegate/epidemic/melt_warrior/animation/move.ani"; + case 62123: + return "monster/newmonsters/timegate/epidemic/melted_residents/animation/move.ani"; + case 62121: + return "monster/newmonsters/timegate/epidemic/pathogens/animation/move.ani"; + case 62122: + return "monster/newmonsters/timegate/epidemic/primary_infectee/animation/move.ani"; + case 62516: + return "monster/newmonsters/timegate/epidemic/secondary_infectee/animation/move.ani"; + case 63031: + return "monster/newmonsters/timegate/epidemic/skull_knight/animation/move.ani"; + case 61274: + return "monster/newmonsters/timegate/formacartel/cartelvolunteer/animation/move.ani"; + case 61276: + return "monster/newmonsters/timegate/formacartel/fatoutlaw/animation/move.ani"; + case 58002: + return "monster/newmonsters/timegate/formacartel/gun_congcong/animation/move.ani"; + case 61280: + return "monster/newmonsters/timegate/formacartel/gungoblin/animation/move.ani"; + case 61275: + return "monster/newmonsters/timegate/formacartel/gunman/animation/move.ani"; + case 56050: + return "monster/newmonsters/timegate/formacartel/poena/animation/move.ani"; + case 61277: + return "monster/newmonsters/timegate/formacartel/verrickt/animation/move.ani"; + case 62105: + return "monster/newmonsters/timegate/iris/animation/move.ani"; + case 61629: + return "monster/newmonsters/timegate/oldscreamingcave/ant/animation/move.ani"; + case 61631: + return "monster/newmonsters/timegate/oldscreamingcave/bee/animation/move.ani"; + case 61630: + return "monster/newmonsters/timegate/oldscreamingcave/bloodbutterfly/animation/move.ani"; + case 56468: + return "monster/newmonsters/timegate/oldscreamingcave/cachimo/animation/move.ani"; + case 64001: + return "monster/newmonsters/timegate/oldscreamingcave/empiresoldier/animation/move.ani"; + case 58000: + return "monster/newmonsters/timegate/oldscreamingcave/insectmagician/animation/move.ani"; + case 56425: + return "monster/newmonsters/timegate/oldscreamingcave/kaiji/animation/move.ani"; + case 61614: + return "monster/newmonsters/timegate/oldscreamingcave/kain/animation/move.ani"; + case 61627: + return "monster/newmonsters/timegate/oldscreamingcave/mistgirl/animation/move.ani"; + case 64000: + return "monster/newmonsters/timegate/oldscreamingcave/mistmember/animation/move.ani"; + case 61628: + return "monster/newmonsters/timegate/oldscreamingcave/mistpowerman/animation/move.ani"; + case 56476: + return "monster/newmonsters/timegate/oldscreamingcave/poena/animation/move.ani"; + case 63036: + return "monster/newmonsters/timegate/parasite/animation/move.ani"; + case 63035: + return "monster/newmonsters/timegate/parasite_fire/animation/move.ani"; + case 64013: + return "monster/newmonsters/timegate/timelord/andres/animation/move.ani"; + case 64014: + return "monster/newmonsters/timegate/timelord/andres_l/animation/move.ani"; + case 64015: + return "monster/newmonsters/timegate/timelord/andres_r/animation/move.ani"; + case 64007: + return "monster/newmonsters/timegate/timelord/basten/animation/move.ani"; + case 64008: + return "monster/newmonsters/timegate/timelord/basten_l/animation/move.ani"; + case 64009: + return "monster/newmonsters/timegate/timelord/basten_r/animation/move.ani"; + case 64010: + return "monster/newmonsters/timegate/timelord/neymar/animation/move.ani"; + case 64011: + return "monster/newmonsters/timegate/timelord/neymar_l/animation/move.ani"; + case 64024: + return "monster/newmonsters/timegate/timelord/neymar_r/animation/move.ani"; + case 64012: + return "monster/newmonsters/timegate/timelord/neymar_r/animation/move.ani"; + case 64002: + return "monster/newmonsters/timegate/topsecretarea/bloodneck/animation/move.ani"; + case 64006: + return "monster/newmonsters/timegate/topsecretarea/empire_m_fight/animation/move.ani"; + case 64004: + return "monster/newmonsters/timegate/topsecretarea/empireknight/animation/move.ani"; + case 64003: + return "monster/newmonsters/timegate/topsecretarea/empireresearcher/animation/move.ani"; + case 64005: + return "monster/newmonsters/timegate/topsecretarea/empirespear/animation/move.ani"; + case 56747: + return "monster/newmonsters/timegate/topsecretarea/hmecagoblin/animation/move.ani"; + case 56469: + return "monster/newmonsters/timegate/topsecretarea/kamina/animation/move.ani"; + case 61742: + return "monster/newmonsters/timegate/topsecretarea/kerberos/animation/move.ani"; + case 58003: + return "monster/newmonsters/timegate/topsecretarea/rudol/animation/move.ani"; + case 58004: + return "monster/newmonsters/timegate/topsecretarea/toma/animation/move.ani"; + case 62157: + return "monster/newmonsters/towerofdespair/buffcheck/animation/move.ani"; + case 62158: + return "monster/newmonsters/towerofdespair/buffcheck/animation/move.ani"; + case 56154: + return "monster/newmonsters/towerofdespair/claris/animation/move.ani"; + case 56454: + return "monster/newmonsters/towerofdespair/cross_axe/animation/move.ani"; + case 62148: + return "monster/newmonsters/towerofdespair/fluore/animation/move.ani"; + case 62149: + return "monster/newmonsters/towerofdespair/frost/animation/move.ani"; + case 62154: + return "monster/newmonsters/towerofdespair/genie/animation/move.ani"; + case 62155: + return "monster/newmonsters/towerofdespair/genie/animation/move.ani"; + case 62156: + return "monster/newmonsters/towerofdespair/genie/animation/move.ani"; + case 62152: + return "monster/newmonsters/towerofdespair/ixia/animation/move.ani"; + case 62150: + return "monster/newmonsters/towerofdespair/jack/animation/move.ani"; + case 62153: + return "monster/newmonsters/towerofdespair/ogong/animation/move.ani"; + case 62151: + return "monster/newmonsters/towerofdespair/pluto/animation/move.ani"; + case 61548: + return "monster/newmonsters/towerofdespair/robot_blind/animation/move.ani"; + case 61549: + return "monster/newmonsters/towerofdespair/robot_confuse/animation/move.ani"; + case 61551: + return "monster/newmonsters/towerofdespair/robot_freeze/animation/move.ani"; + case 61550: + return "monster/newmonsters/towerofdespair/robot_hold/animation/move.ani"; + case 61542: + return "monster/newmonsters/towerofdespair/rodem/animation/move.ani"; + case 61540: + return "monster/newmonsters/towerofdespair/rodem/animation/move.ani"; + case 61541: + return "monster/newmonsters/towerofdespair/rodem_sub/animation/move.ani"; + case 56455: + return "monster/newmonsters/towerofdespair/sand_doll/animation/move.ani"; + case 61264: + return "monster/newmonsters/towerofdespair/silverfox/animation/move.ani"; + case 61547: + return "monster/newmonsters/towerofdespair/soccer_ball/animation/move.ani"; + case 62159: + return "monster/newmonsters/towerofdespair/soldo/animation/move.ani"; + case 62160: + return "monster/newmonsters/towerofdespair/soldo/animation/move.ani"; + case 62134: + return "monster/newmonsters/towerofultimate/agamemnon/animation/move.ani"; + case 56015: + return "monster/newmonsters/towerofultimate/coco/animation/move.ani"; + case 61232: + return "monster/newmonsters/towerofultimate/darkcrow_coco/animation/move.ani"; + case 61233: + return "monster/newmonsters/towerofultimate/darkcrow_coco/animation/move.ani"; + case 56720: + return "monster/newmonsters/towerofultimate/darklizardman/animation/move.ani"; + case 56016: + return "monster/newmonsters/towerofultimate/elise/animation/move.ani"; + case 61734: + return "monster/newmonsters/towerofultimate/firezombie/animation/move.ani"; + case 56719: + return "monster/newmonsters/towerofultimate/goblinunderminer/animation/move.ani"; + case 56017: + return "monster/newmonsters/towerofultimate/gordic/animation/move.ani"; + case 56437: + return "monster/newmonsters/towerofultimate/limit_elitebuffaloman/animation/move.ani"; + case 56439: + return "monster/newmonsters/towerofultimate/limit_ladyzealot/animation/move.ani"; + case 56441: + return "monster/newmonsters/towerofultimate/limit_ladyzealot_dark/animation/move.ani"; + case 56440: + return "monster/newmonsters/towerofultimate/limit_ladyzealot_fire/animation/move.ani"; + case 56442: + return "monster/newmonsters/towerofultimate/limit_ladyzealot_ice/animation/move.ani"; + case 56443: + return "monster/newmonsters/towerofultimate/limit_marcenary/animation/move.ani"; + case 56444: + return "monster/newmonsters/towerofultimate/limit_transfatso/animation/move.ani"; + case 56438: + return "monster/newmonsters/towerofultimate/limit_wolfpatriarch/animation/move.ani"; + case 61488: + return "monster/newmonsters/towerofultimate/mummy_dark/animation/move.ani"; + case 61489: + return "monster/newmonsters/towerofultimate/mummy_dark/animation/move.ani"; + case 56446: + return "monster/newmonsters/towerofultimate/mummy_dark/animation/move.ani"; + case 56445: + return "monster/newmonsters/towerofultimate/mummy_light/animation/move.ani"; + case 59011: + return "monster/newmonsters/towerofultimate/sniper_triker/animation/move.ani"; + case 64579: + return "monster/newmonsters/witch/agarum/animation/move.ani"; + case 64590: + return "monster/newmonsters/witch/agarum/animation/move.ani"; + case 62110: + return "monster/newmonsters/witch/agarum/animation/move.ani"; + case 62113: + return "monster/newmonsters/witch/agarum/animation/move.ani"; + case 62109: + return "monster/newmonsters/witch/bat/animation/move.ani"; + case 61230: + return "monster/newmonsters/witch/bat/animation/move.ani"; + case 56435: + return "monster/newmonsters/witch/namak/animation/move.ani"; + case 61226: + return "monster/newmonsters/witch/resident_evil/animation/move.ani"; + case 61227: + return "monster/newmonsters/witch/resident_evil/animation/move.ani"; + case 61763: + return "monster/newmonsters/witch/victim/animation/move.ani"; + case 62111: + return "monster/newmonsters/witch/victim/animation/move.ani"; + case 61228: + return "monster/newmonsters/witch/victim/animation/move.ani"; + case 59012: + return "monster/spirit/animation/move.ani"; + case 62027: + return "monster/twdf/tw_doblin/animation/move.ani"; + case 62025: + return "monster/twdf/tw_tutorial_monster/tw_dragonspear/animation/move.ani"; + case 62024: + return "monster/twdf/tw_tutorial_monster/tw_dragonsword/animation/move.ani"; + case 62026: + return "monster/twdf/tw_tutorial_monster/tw_kampera/animation/move.ani"; + case 56921: + return "monster/xiulianchang/rosaura/animation/move.ani"; + } + return "common/training/summonmonster/nomonster.ani"; +} \ No newline at end of file diff --git a/Plugins/Tuguan/Tuguan.nut b/Plugins/Tuguan/Tuguan.nut new file mode 100644 index 0000000..703286e --- /dev/null +++ b/Plugins/Tuguan/Tuguan.nut @@ -0,0 +1,705 @@ +/* +文件名:Tuguan.nut +路径:Plugins/Tuguan/Tuguan.nut +创建日期:2022-12-15 07:09 +文件用途:土罐的袖珍罐 +*/ +class TuguanButton // obj -- 按钮名称 -- 鼠标对象 -- X坐标 -- Y坐标 -- 宽度 -- 高度 -- Ani调用路径 -- Ani宽度 -- Ani高度 -- AniRGB -- +{ + obj = null; + buttonName = null; + IMouse = null; + x = null; + y = null; + width = null; + length = null; + aniFileName = null; + BoxStetu = null; + Mobj = null; //鼠标对象 + + constructor(gObj, gButtonName, gIMouse, gX, gY, gWidth, gLength, ganiFileName) { + obj = gObj; + buttonName = gButtonName; + IMouse = gIMouse; + x = gX; + y = gY; + width = gWidth; + length = gLength; + aniFileName = ganiFileName; + BoxStetu = BoxStetu; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + function drawButtonImage() { + if (isDown()) + y++; + + if (isInRect()) { + local buttonAniEff = obj.getVar().GetAnimationMap(buttonName + "rect", aniFileName.tostring() + "_2.ani"); + sq_AnimationProc(buttonAniEff); + sq_drawCurrentFrame(buttonAniEff, x, y, true); + } + if (!isInRect()) { + local buttonAni = obj.getVar().GetAnimationMap(buttonName, aniFileName.tostring() + "_1.ani"); + sq_AnimationProc(buttonAni); + sq_drawCurrentFrame(buttonAni, x, y, true); + } + } + + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } + +} + +class TuguanTextButton // obj -- 按钮名称 -- 鼠标对象 -- X坐标 -- Y坐标 -- 宽度 -- 高度 -- Ani调用路径 -- Ani宽度 -- Ani高度 -- AniRGB -- +{ + obj = null; + IMouse = null; + x = null; + y = null; + width = null; + length = null; + BoxStetu = null; + str = null; + type = null; + mb = null; + rgb = null; + irgb = null; + Mobj = null; //鼠标对象 + + constructor(gObj, gIMouse, gX, gY, gWidth, gLength, gstr, grgba, girgba, gtype, gmb) { + obj = gObj; + IMouse = gIMouse; + x = gX; + y = gY; + width = gWidth; + length = gLength; + BoxStetu = BoxStetu; + str = gstr; + type = gtype; + mb = gmb; + rgb = grgba; + irgb = girgba; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + function draw() { + if (isDown()) + y++; + + if (isInRect()) { + L_sq_DrawCode(str, x, y, irgb, type, mb); + } + if (!isInRect()) { + L_sq_DrawCode(str, x, y, rgb, type, mb); + } + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class TuguanSystem extends BasicsDrawTool { + + State = 0; + MainSoundsSw = 0; + ASoundSw = 0; + SSoundSw = 0; + + SelectModel = 0; + BoxName = null; + BoxId = null; + BoxNameXpos = null; + BoxNameYpos = null; + BoxCount = null; + ProbabilityTab = null; + AniType = null; + + //Ani对象 + P1_01 = null; + P2_01 = null; + P3_01 = null; + P4_02 = null; + MainEffAni = null; + MainEffAniArr = null; + + + //奖励包对象 + RewardObj = null; + + RewardObjTen = null; + + SendBackChunk = null; + + + //ItemInfo + ItemInfoObject = null; + ItemInfoDrawS = null; + + //界面回包 + function TuguanOpenCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + if (State == 0) { + BoxName = Jso.BoxName; + BoxId = Jso.BoxId; + BoxNameXpos = Jso.BoxNameXpos; + BoxNameYpos = Jso.BoxNameYpos; + BoxCount = Jso.BoxCount; + ProbabilityTab = Jso.ProbabilityTab; + State = 1; + } + + if (!ItemInfoObject.rawin(BoxId)) { + local arr = [BoxId]; + local T = { + op = 20231010, + realop = 20008668, + itemId = arr, + Type = 2, + } + SendPack(T); + } + + } + + //抽奖回包 + function TuguanRewardCallBack(Chunk) { + + local Jso = Json.Decode(Chunk); + + AniType = Jso.AniType; + BoxCount = Jso.BoxCount; + RewardObj = Jso.RewardObj; + State = 3; + + local ItemGetArray = {}; + foreach(P, V in RewardObj.ItemBuffer) { + for (local i = 0; i< 2; i++) { + local ItemId = V["itemid" + i]; + if (!ItemInfoObject.rawin(ItemId)) { + if (!ItemGetArray.rawin(ItemId)) + ItemGetArray.rawset(ItemId, true); + } + } + + } + + if (ItemGetArray.len() > 0) { + local arr = []; + foreach(Key, Value in ItemGetArray) { + arr.append(Key); + } + local T = { + op = 20231010, + realop = 20008668, + itemId = arr, + Type = 2, + } + SendPack(T); + } + + } + + function SendCallBackChunk(Chunk) { + local RootTab = getroottable(); + if (RootTab.rawin("TuguanObj")) { + local Tobj = RootTab["TuguanObj"]; + Tobj.SendBackChunk = Chunk; + Tobj.State = 3; + } + } + + function GetItemInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + + foreach(Pos, Value in Jso.itemInfo) { + if (Value.Name2.len() == 0) + Value.Name2 = "Yosin-Team"; + ItemInfoObject.rawset(Jso.itemId[Pos], Value); + } + } + + constructor() { + MainEffAniArr = {}; + ItemInfoObject = {}; + + Pack_Control.rawset(20008002, TuguanOpenCallBack.bindenv(this)); + Pack_Control.rawset(20008004, TuguanRewardCallBack.bindenv(this)); + Pack_Control.rawset(20008666, SendCallBackChunk.bindenv(this)); + Pack_Control.rawset(20008668, GetItemInfoCallBack.bindenv(this)); + } + + //退出 + function Exit() { + State = 0; + MainEffAniArr.rawset("P1_01", P1_01); + MainEffAniArr.rawset("P2_01", P2_01); + MainEffAniArr.rawset("P3_01", P3_01); + MainEffAniArr.rawset("P4_02", P4_02); + ResetRewardMainAni(); + } + + //打开窗口 + function OpenWindow(obj) { + //窗口关闭 + if (!sq_GetPopupWindowMainCotrol(267)) { + L_NewWindows("Lenheart", 267, 0x65535); //打开土罐窗口 + State = 2; + } + } + + //重置特效Ani + function ResetRewardMainAni() { + foreach(Pos, value in MainEffAniArr) { + sq_Rewind(value); + } + MainEffAniArr = null; + MainEffAniArr = {}; + + } + + //绘制抽奖动画 + function DrawRewardAni(obj) { + + //停止斗篷风声 + obj.stopSound(2022121701); + + P1_01 = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/" + AniType + "/" + AniType + "1_01.ani", X + 20, Y + 30, "TuguanSystemDrawReward" + AniType + "1_01"); + //土罐眼睛闪光 + if (P1_01 && sq_GetAnimationFrameIndex(P1_01) == 13) { + if (AniType == "a" || AniType == "s") obj.sq_PlaySound("DANJIN_START_AS"); + else obj.sq_PlaySound("DANJIN_START_N"); + } + + if (P1_01 && sq_IsEnd(P1_01)) P2_01 = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/" + AniType + "/" + AniType + "2_01.ani", X + 20, Y + 30, "TuguanSystemDrawReward" + AniType + "2_01"); + if (P2_01 && sq_GetAnimationFrameIndex(P2_01) == 0) { + if (AniType == "b") obj.sq_PlaySound("DANJIN_SUMMON_B"); + else if (AniType == "a") obj.sq_PlaySound("DANJIN_SUMMON_A"); + else if (AniType == "s") obj.sq_PlaySound("DANJIN_SUMMON_S"); + } + if (P2_01 && sq_GetAnimationFrameIndex(P2_01) == 8) { + if (AniType == "b") obj.sq_PlaySound("DANJIN_GAMBLE_B"); + else if (AniType == "a") obj.sq_PlaySound("DANJIN_GAMBLE_A"); + else if (AniType == "s") obj.sq_PlaySound("DANJIN_GAMBLE_S"); + } + + if (P2_01 && sq_IsEnd(P2_01)) P3_01 = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/" + AniType + "/" + AniType + "3_01.ani", X + 20, Y + 30, "TuguanSystemDrawReward" + AniType + "3_01"); + if (P3_01 && sq_IsEnd(P3_01)) P4_02 = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/" + AniType + "/" + AniType + "4_02.ani", X + 20, Y + 30, "TuguanSystemDrawReward" + AniType + "4_02"); + + if (P4_02 && sq_IsEnd(P4_02)) { + + MainEffAniArr.rawset("P1_01", P1_01); + MainEffAniArr.rawset("P2_01", P2_01); + MainEffAniArr.rawset("P3_01", P3_01); + MainEffAniArr.rawset("P4_02", P4_02); + + sq_Rewind(P1_01); + sq_Rewind(P2_01); + sq_Rewind(P3_01); + sq_Rewind(P4_02); + // ResetRewardMainAni(); + + obj.sq_PlaySound("DANJIN_GAMBLE_FIN"); + + State = 4; + + } + + } + + //绘制奖励列表 + function DrawRewardItem(obj) { + //单抽 + if (SelectModel == 1) { + T_DrawStayAni(obj, "common/tuguan/main.ani", X + 20, Y + 30, 5, "TuguanRewardMain"); + L_sq_DrawCode("最后结果", (X - 195) + 377, (Y - 100) + 182, sq_RGBA(255, 177, 0, 250), 1, 1); + T_DrawStayAni(obj, "common/tuguan/main.ani", X + 20 + 141, Y + 30 + 91, 7, "TuguanRewardMainOneX"); + + for (local z = 0; z< 2; z++) { + //绘制槽 + T_DrawStayAni(obj, "common/tuguan/main.ani", X + 20 + 141 + 9 + (z * 34), Y + 30 + 91 + 9, 8, "TuguanRewardMainOneXx"); + } + for (local x = 0; x< 2; x++) { + //品级背景光 + local Rarity = RewardObj.ItemBuffer[0]["itemrarity" + x]; + switch (Rarity) { + case 2: + T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/light_iconslot.ani", X + 20 + 141 + 9 + (x * 34), Y + 30 + 91 + 9, "TuguanRewardMainoieff" + Rarity); + break; + case 3: + T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/light_iconslot_1.ani", X + 20 + 141 + 9 + (x * 34), Y + 30 + 91 + 9, "TuguanRewardMainoieff" + Rarity); + break; + } + } + + ItemInfoDrawS = null; + for (local i = 0; i< 2; i++) { + local ItemId = RewardObj.ItemBuffer[0]["itemid" + i]; + local ItemCount = RewardObj.ItemBuffer[0]["itemcount" + i]; + //绘制物品 + L_Sq_DrawItem(X + 20 + 141 + 9 + (i * 34) + 3, Y + 30 + 91 + 9 + 3, ItemId, ItemCount, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 20 + 141 + 9 + (i * 34) + 3, Y + 30 + 91 + 9 + 3, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X + 20 + 141 + 9 + (i * 34) + 3; + ItemInfoDrawS.Y <- Y + 30 + 91 + 9 + 3; + ItemInfoDrawS.ItemId <- ItemId; + } + + //物品刷新光 + local Ani = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/common_excute_icon_front_a.ani", X + 20 + 141 + 13 + (i * 34), Y + 30 + 91 + 12, "TuguanRewardMainoieff" + i); + MainEffAniArr.rawset("TuguanRewardMainoieff" + i, Ani); + + //品级闪烁光 + local Rarity = RewardObj.ItemBuffer[0]["itemrarity" + i]; + switch (Rarity) { + case 2: + if (ASoundSw == 0) { + obj.sq_PlaySound("DANJIN_GAMBLE_CLASS_A"); + ASoundSw = 1; + } + local RAni = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/iconslot_00.ani", X + 20 + 141 + 13 + (i * 34), Y + 30 + 91 + 12, "TuguanRewardMainoreff" + 2); + MainEffAniArr.rawset("TuguanRewardMainoreff" + 2, RAni); + break; + case 3: + if (SSoundSw == 0) { + obj.sq_PlaySound("DANJIN_GAMBLE_FANFARE"); + SSoundSw = 1; + } + local RAni = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/iconslot_01.ani", X + 20 + 141 + 13 + (i * 34), Y + 30 + 91 + 12, "TuguanRewardMainoreff" + 3); + MainEffAniArr.rawset("TuguanRewardMainoreff" + 3, RAni); + break; + } + } + + L_sq_DrawCode("祝你发大财!", (X - 195) + 371, (Y - 100) + 320, sq_RGBA(255, 177, 0, 250), 1, 1); + } + //10连抽 + else if (SelectModel == 10) { + T_DrawStayAni(obj, "common/tuguan/main.ani", X + 20, Y + 30, 6, "TuguanRewardMainT"); + L_sq_DrawCode("最后结果", (X - 195) + 377, (Y - 100) + 142, sq_RGBA(255, 177, 0, 250), 1, 1); + //T_DrawStayAni(obj, "common/tuguan/main.ani", X + 20 + 141, Y + 30 + 91, 7, "TuguanRewardMainTenX"); + ItemInfoDrawS = null; + for (local i = 0; i< 10; i++) { + local ofs = i; + if (i > 7) ofs += 1; + T_DrawStayAni(obj, "common/tuguan/main.ani", (X - 195) + 198 + 30 + ((ofs % 4) * 86), Y + 62 + ((ofs / 4) * 50), 7, "TuguanRewardMainTenX"); + + for (local y = 0; y< 2; y++) { + //绘制槽 + T_DrawStayAni(obj, "common/tuguan/main.ani", (X - 195) + 198 + 30 + 9 + ((ofs % 4) * 86) + (y * 34), Y + 62 + 9 + ((ofs / 4) * 50), 8, "TuguanRewardMainOneXx"); + } + + for (local x = 0; x< 2; x++) { + //品级背景光 + local Rarity = RewardObj.ItemBuffer[i]["itemrarity" + x]; + switch (Rarity) { + case 2: + T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/light_iconslot.ani", (X - 195) + 198 + 30 + 10 + ((ofs % 4) * 86) + (x * 34), Y + 62 + 10 + ((ofs / 4) * 50), "TuguanRewardMainoieff" + Rarity); + break; + case 3: + T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/light_iconslot_1.ani", (X - 195) + 198 + 30 + 10 + ((ofs % 4) * 86) + (x * 34), Y + 62 + 10 + ((ofs / 4) * 50), "TuguanRewardMainoieff" + Rarity); + break; + } + } + + for (local z = 0; z< 2; z++) { + local ItemId = RewardObj.ItemBuffer[i]["itemid" + z]; + local ItemCount = RewardObj.ItemBuffer[i]["itemcount" + z]; + //绘制物品 + L_Sq_DrawItem((X - 195) + 198 + 30 + 9 + ((ofs % 4) * 86) + (z * 34) + 3, Y + 62 + 9 + ((ofs / 4) * 50) + 3, ItemId, ItemCount, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, (X - 195) + 198 + 30 + 9 + ((ofs % 4) * 86) + (z * 34) + 3, Y + 62 + 9 + ((ofs / 4) * 50) + 3, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- (X - 195) + 198 + 30 + 9 + ((ofs % 4) * 86) + (z * 34) + 3; + ItemInfoDrawS.Y <- Y + 62 + 9 + ((ofs / 4) * 50) + 3; + ItemInfoDrawS.ItemId <- ItemId; + } + + //物品刷新光 + local Ani = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/common_excute_icon_front_a.ani", (X - 195) + 198 + 30 + 13 + ((ofs % 4) * 86) + (z * 34), Y + 62 + 12 + ((ofs / 4) * 50), "TuguanRewardMainoieff" + z); + MainEffAniArr.rawset("TuguanRewardMainoieff" + z, Ani); + + //品级闪烁光 + local Rarity = RewardObj.ItemBuffer[i]["itemrarity" + z]; + switch (Rarity) { + case 2: + if (ASoundSw == 0) { + obj.sq_PlaySound("DANJIN_GAMBLE_CLASS_A"); + ASoundSw = 1; + } + local RAni = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/iconslot_00.ani", (X - 195) + 198 + 30 + 13 + ((ofs % 4) * 86) + (z * 34), Y + 62 + 12 + ((ofs / 4) * 50), "TuguanRewardMainoreff" + 2); + MainEffAniArr.rawset("TuguanRewardMainoreff" + 2, RAni); + break; + case 3: + if (SSoundSw == 0) { + obj.sq_PlaySound("DANJIN_GAMBLE_FANFARE"); + SSoundSw = 1; + } + local RAni = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/iconslot_01.ani", (X - 195) + 198 + 30 + 13 + ((ofs % 4) * 86) + (z * 34), Y + 62 + 12 + ((ofs / 4) * 50), "TuguanRewardMainoreff" + 3); + MainEffAniArr.rawset("TuguanRewardMainoreff" + 3, RAni); + break; + } + } + } + + L_sq_DrawCode("祝你发大财!", (X - 195) + 371, (Y - 100) + 336, sq_RGBA(255, 177, 0, 250), 1, 1); + } + MainEffAni = T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/background_excute_front_supreme.ani", X + 20, Y + 30, "TuguanSystemDrawRewardMainAniL"); + MainEffAniArr.rawset("TuguanSystemDrawRewardMainAniL", MainEffAni); + } + + //播放主界面音效 + function PlayMainSounds(obj) { + if (State == 2 && MainSoundsSw == 0) { + obj.sq_PlaySound("DANJIN_START_LOOP", 2022121701); + MainSoundsSw = 1; + } + if (State != 2 && State != 3) { + obj.stopSound(2022121701); + MainSoundsSw = 0; + } + if (State != 4) { + SSoundSw = 0; + ASoundSw = 0; + } + } + + //绘制主界面 + function DrawMain(obj) { + //窗口 + T_DrawStayAni(obj, "common/tuguan/main.ani", X, Y, 0, "TuguanSystemMain"); + //标题 + L_sq_DrawCode(BoxName, X + BoxNameXpos, Y + BoxNameYpos, sq_RGBA(230, 200, 155, 250), 1, 1); + //动画 + if (State == 2) T_DrawDynamicAni(obj, "common/tuguan/0510_danjinjar/lobby/lobby_wait_rank_1step_1_step_common_0510_danjin_body.ani", X + 20, Y + 30, "TuguanSystemMainbackgroundeff"); + //抽奖动画 + if (State == 3) { + + DrawRewardAni(obj); + + } + //奖励列表 + if (State == 4) { + DrawRewardItem(obj); + if (SendBackChunk) { + L_sq_SendPackType(130); + L_sq_SendPackWChar(SendBackChunk); + L_sq_SendPack(); + SendBackChunk = null; + } + } + //遮罩 + T_DrawStayAni(obj, "common/tuguan/main.ani", X + 17, Y + 26, 1, "TuguanSystemMainbackgroundblack"); + //图标框 + T_DrawStayAni(obj, "common/tuguan/main.ani", X + 187, Y + 26 + 250, 3, "TuguanSystemMainbackgrounditem"); + //盒子数量 + L_Sq_DrawItem(X + 187 + 3, Y + 26 + 250 + 3, BoxId, BoxCount, 0, 0, 0); + if (State == 2) ItemInfoDrawS = null; + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 187 + 3, Y + 26 + 250, 24, 24)) { + ItemInfoDrawS = {}; + ItemInfoDrawS.X <- X + 187 + 3; + ItemInfoDrawS.Y <- Y + 26 + 250; + ItemInfoDrawS.ItemId <- BoxId; + } + + //绘制模式字体 + L_sq_DrawCode("开启1个", X + 90, Y + 287, sq_RGBA(230, 200, 155, 250), 0, 1); + L_sq_DrawCode("开启10个", X + 90 + 200, Y + 287, sq_RGBA(230, 200, 155, 250), 0, 1); + + + //单抽按钮 + local OneButton = TuguanButton(obj, "TuguanOneButton", IMouse, X + 68, Y + 286, 72, 20, "common/tuguan/db_newani_sel"); + OneButton.drawButtonImage(); + if (OneButton.isActive() && (State == 2 || State == 4)) //单抽按钮按下 + { + SelectModel = 1; + State = 2; + } + + //单抽按钮 + local TenButton = TuguanButton(obj, "TuguanTenButton", IMouse, X + 68 + 201, Y + 286, 72, 20, "common/tuguan/db_newani_sel"); + TenButton.drawButtonImage(); + if (TenButton.isActive() && (State == 2 || State == 4)) //单抽按钮按下 + { + SelectModel = 10; + State = 2; + } + + if (SelectModel != 0) { + local Box_Statu_Button_Offset = 0; + if (SelectModel == 10) Box_Statu_Button_Offset = 201; + T_DrawStayAni(obj, "common/tuguan/db_newani_sel_3.ani", X + 68 + Box_Statu_Button_Offset, Y + 286, 0, "TuguanSelectModelp"); + T_DrawStayAni(obj, "common/tuguan/main.ani", X + 68 + Box_Statu_Button_Offset - 41, Y + 286 - 6, 4, "TuguanSystemMainbackgrounditem"); + } + + local ProbabilityButton = TuguanTextButton(obj, IMouse, X + 68 - 46, Y + 286 + 40, 62, 18, "※查看概率", sq_RGBA(230, 200, 155, 150), sq_RGBA(230, 200, 155, 250), 1, 1); + ProbabilityButton.draw(); + if (ProbabilityButton.isActive()) { + L_Cmd(ProbabilityTab); + } + + local doselectbutton = TuguanButton(obj, "Tuguandoselectbutton", IMouse, X + 68 + 98, Y + 347, 72, 20, "common/tuguan/open"); + doselectbutton.drawButtonImage(); + if (doselectbutton.isActive()) { + if (SelectModel != 0 && (State == 2 || State == 4)) { + //抽奖包 + local TuguanDoselectPack = Json_STL("TuguanDoselectPack"); + TuguanDoselectPack.Put("op", 20008003); + TuguanDoselectPack.Put("doselect", SelectModel); + TuguanDoselectPack.Put("itemindex", BoxId); + local str = TuguanDoselectPack.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + TuguanDoselectPack.Delete(); + } else if (State == 3) { + MainEffAniArr.rawset("P1_01", P1_01); + MainEffAniArr.rawset("P2_01", P2_01); + MainEffAniArr.rawset("P3_01", P3_01); + MainEffAniArr.rawset("P4_02", P4_02); + ResetRewardMainAni(); + State = 4; + } + } + + } + + ItemObject = null; + + function DrawItemInfo(obj) { + if (ItemInfoDrawS) { + if (!ItemInfoObject.rawin(ItemInfoDrawS.ItemId)) return; + if (!ItemObject) { + local ItemId = ItemInfoDrawS.ItemId; + ItemObject = ItemInfoClass(ItemInfoObject[ItemId]); + } + ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); + } else { + ItemObject = null; + } + } + + + function DrawAMain(obj) { + //如果是打开状态 + if (State >= 2) { + //窗口被关闭类状态写回未开启 + if (KeyPressNB.isKeyPress(48, "TuguanFucCloseKey")) { + MainState = false; + Exit(); + } + //播放主界面音效 + PlayMainSounds(obj); + //绘制主界面 + DrawMain(obj); + //绘制道具信息 + DrawItemInfo(obj); + } + } + + X = 195; + Y = 100; + MainState = false; + WindowObj = null; + //运行主函数 + function Run(obj) { + if (State == 1) { + MainState = true; + State = 2; + } + + if (MainState) { + if (WindowObj) { + + DrawAMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = LenheartWindow(X, Y, 405, 372, 28); //坐标 大小 标题栏高度 + // WindowObj.DeBugMode = true; + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + + + + + } +} + + +function TuguanFuc(obj) { + local RootTab = getroottable(); + if (sq_GetCurrentModuleType() == 1) { + if (!RootTab.rawin("TuguanObj")) { + local Cobj = TuguanSystem(); + RootTab.rawset("TuguanObj", Cobj); + } else { + RootTab["TuguanObj"].Run(obj); + } + } else { + if (RootTab.rawin("TuguanObj")) { + RootTab.rawdelete("TuguanObj"); + } + } + +} + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("TuguanFucFunc", TuguanFuc); +} else { + local T = {}; + T.rawset("TuguanFucFunc", TuguanFuc); + getroottable().rawset("LenheartFuncTab", T); +} \ No newline at end of file diff --git a/Plugins/WorldTower/WorldTower.nut b/Plugins/WorldTower/WorldTower.nut new file mode 100644 index 0000000..110a4c2 --- /dev/null +++ b/Plugins/WorldTower/WorldTower.nut @@ -0,0 +1,314 @@ +/* +文件名:WorldTower.nut +路径:Plugins/WorldTower/WorldTower.nut +创建日期:2023-06-20 06:33 +文件用途: +*/ + +//HudPro按钮类 +class WorldTowerPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + BaseFrame = null; + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + + Mobj = null; //鼠标对象 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + BaseFrame = gBaseFrame; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +class WorldTowerWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + } + } + + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + +class WorldTowerC extends BasicsDrawTool { + WindowObj = null; //窗口对象 + MainState = false; //主状态 + X = 6; + Y = 30; + + constructor() { + + } + + //绘制功能按钮 + function DrawTabButton(obj) { + local Btn = WorldTowerPro(obj, "WorldTowerMain1", X + 21, Y + 29, "common/worldtower/new/btn.ani", 29, 23, 150); + Btn.SetRectEnble(true, "WorldTowerMain2", X + 21, Y + 29, "common/worldtower/new/btn.ani", 151); + Btn.SetCustomClickEnble(true, "WorldTowerMain3", X + 21, Y + 30, "common/worldtower/new/btn.ani", 152); + Btn.Show(); + } + + + //绘制主界面 + function DrawMain(obj) { + //窗口 + T_DrawStayAni(obj, "common/worldtower/new/resource.ani", X, Y, 0, "WorldTowerSystemMaina"); + setClip(X + 2, Y + 65, X + 727, Y + 378); + T_DrawDynamicAni(obj, "common/worldtower/new/title_bg_001.ani", X + 3, Y + 24, "WorldTowerSystemMainb"); + releaseClip(); //裁切结束 + + DrawTabButton(obj); + } + + //开启界面回调 + function OpenClassCallBack() { + + L_NewWindows("Lenheart", 170, 0x65535); + local W = sq_GetPopupWindowMainCotrol(170); + W.SetVisible(false); + W.SetEnable(false); + + } + + //绘制入口 + function Draw(obj) { + if (MainState) { + if (WindowObj) { + DrawMain(obj); + WindowObj.Show(obj); + X = WindowObj.X; + Y = WindowObj.Y; + } else { + WindowObj = WorldTowerWindow(X, Y, 788, 468, 28); //坐标 大小 标题栏高度 + //WindowObj.DeBugMode = true; + } + } else { + if (WindowObj && WindowObj.YMouseSw == false) { + IMouse.ReleaseMouseClick(); + WindowObj.YMouseSw = true; + WindowObj = null; + } + } + } + + //逻辑入口 + function Proc(obj) { + if (KeyPressNB.isKeyPress(48, "WorldTowerCloseKey")) { + MainState = false; + } + } +} + +function WorldTower(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("WorldTowerCObj")) { + local Cobj = WorldTowerC(); + RootTab.rawset("WorldTowerCObj", Cobj); + EventIcon("世界之塔", 52, 52, Cobj); + } else { + RootTab["WorldTowerCObj"].Proc(obj); + RootTab["WorldTowerCObj"].Draw(obj); + } +} \ No newline at end of file diff --git a/ProcPassiveSkill/ProcPassiveSkill_ATGunner.nut b/ProcPassiveSkill/ProcPassiveSkill_ATGunner.nut new file mode 100644 index 0000000..438a1ad --- /dev/null +++ b/ProcPassiveSkill/ProcPassiveSkill_ATGunner.nut @@ -0,0 +1,15 @@ +/* +文件名:ProcPassiveSkill_ATGunner.nut +路径:ProcPassiveSkill/ProcPassiveSkill_ATGunner.nut +创建日期:2022-09-09 19:11 +文件用途:女枪手被动技能 +*/ +if (!getroottable().rawin("ProcPassiveSkill_ATGunner_Table")) ProcPassiveSkill_ATGunner_Table <- {} + +function ProcPassiveSkill_ATGunner(obj, Index, Level) { + ProcPassiveSkill_All(obj, Index, Level); + + if (ProcPassiveSkill_ATGunner_Table.rawin(Index) == true) { + ProcPassiveSkill_ATGunner_Table[Index](obj, Index, Level); + } +} \ No newline at end of file diff --git a/ProcPassiveSkill/ProcPassiveSkill_All.nut b/ProcPassiveSkill/ProcPassiveSkill_All.nut new file mode 100644 index 0000000..3192f03 --- /dev/null +++ b/ProcPassiveSkill/ProcPassiveSkill_All.nut @@ -0,0 +1,12 @@ +/* +文件名:ProcPassiveSkill_All.nut +路径:ProcPassiveSkill/ProcPassiveSkill_All.nut +创建日期:2022-09-09 19:11 +文件用途:全职业被动技能 +*/ + + +function ProcPassiveSkill_All(obj, Index, Level) { + + +} \ No newline at end of file diff --git a/SetState/SetState_ATFighter.nut b/SetState/SetState_ATFighter.nut new file mode 100644 index 0000000..686dcd1 --- /dev/null +++ b/SetState/SetState_ATFighter.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_ATFighter.nut +路径:SetState/SetState_ATFighter.nut +创建日期:2022-09-04 20:18 +文件用途:男格斗设置状态函数 +*/ +function setState_ATFighter(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_ATGunner.nut b/SetState/SetState_ATGunner.nut new file mode 100644 index 0000000..baadaf3 --- /dev/null +++ b/SetState/SetState_ATGunner.nut @@ -0,0 +1,23 @@ +/* +文件名:SetState_ATGunner.nut +路径:SetState/SetState_ATGunner.nut +创建日期:2022-09-04 20:19 +文件用途:女枪手设置状态函数 +*/ + +if (!getroottable().rawin("setState_ATGunner_Table")) setState_ATGunner_Table <- {} +function setState_ATGunner(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + + //根据主状态判断执行函数 + if (setState_ATGunner_Table.rawin(state) == true) { + foreach (Flag,Func in setState_ATGunner_Table[state]) { + Func(obj, state, datas, isResetTimer); + } + } + + return 1; + +} \ No newline at end of file diff --git a/SetState/SetState_ATMage.nut b/SetState/SetState_ATMage.nut new file mode 100644 index 0000000..876db6d --- /dev/null +++ b/SetState/SetState_ATMage.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_ATMage.nut +路径:SetState/SetState_ATMage.nut +创建日期:2022-09-04 20:19 +文件用途:男法师设置状态函数 +*/ +function setState_ATMage(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_All.nut b/SetState/SetState_All.nut new file mode 100644 index 0000000..1f2b544 --- /dev/null +++ b/SetState/SetState_All.nut @@ -0,0 +1,29 @@ +/* +文件名:SetState_All.nut +路径:SetState/SetState_All.nut +创建日期:2022-09-04 20:15 +文件用途:全职业设置状态函数 +*/ + + +dofile("sqr/SetState/SetState_ATFighter.nut"); +dofile("sqr/SetState/SetState_ATGunner.nut"); +dofile("sqr/SetState/SetState_ATMage.nut"); +dofile("sqr/SetState/SetState_CreatorMage.nut"); +dofile("sqr/SetState/SetState_DemonicSwordman.nut"); +dofile("sqr/SetState/SetState_Fighter.nut"); +dofile("sqr/SetState/SetState_Gunner.nut"); +dofile("sqr/SetState/SetState_Mage.nut"); +dofile("sqr/SetState/SetState_Priest.nut"); +dofile("sqr/SetState/SetState_Swordman.nut"); +dofile("sqr/SetState/SetState_Thief.nut"); + +if (!getroottable().rawin("Chr_State_Table")) Chr_State_Table <- {} + +function setState_All(obj, state, datas, isResetTimer) { + Chr_State_Table.rawset(15, state); + for (local i = 0; i < 12; i++) //将12位子状态push进 储存器的对应号位中 + { + Chr_State_Table.rawset(i, obj.sq_GetVectorData(datas, i)); + } +} \ No newline at end of file diff --git a/SetState/SetState_CreatorMage.nut b/SetState/SetState_CreatorMage.nut new file mode 100644 index 0000000..b6f1fbf --- /dev/null +++ b/SetState/SetState_CreatorMage.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_CreatorMage.nut +路径:SetState/SetState_CreatorMage.nut +创建日期:2022-09-04 20:19 +文件用途:缔造者设置状态函数 +*/ +function setState_CreatorMage(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_DemonicSwordman.nut b/SetState/SetState_DemonicSwordman.nut new file mode 100644 index 0000000..d71f41b --- /dev/null +++ b/SetState/SetState_DemonicSwordman.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_DemonicSwordman.nut +路径:SetState/SetState_DemonicSwordman.nut +创建日期:2022-09-04 20:19 +文件用途:黑暗武士设置状态函数 +*/ +function setState_DemonicSwordman(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_Fighter.nut b/SetState/SetState_Fighter.nut new file mode 100644 index 0000000..3fe1bb4 --- /dev/null +++ b/SetState/SetState_Fighter.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_Fighter.nut +路径:SetState/SetState_Fighter.nut +创建日期:2022-09-04 20:19 +文件用途:女格斗设置状态函数 +*/ +function setState_Fighter(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_Gunner.nut b/SetState/SetState_Gunner.nut new file mode 100644 index 0000000..e8d5294 --- /dev/null +++ b/SetState/SetState_Gunner.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_Gunner.nut +路径:SetState/SetState_Gunner.nut +创建日期:2022-09-04 20:19 +文件用途:男枪手设置状态函数 +*/ +function setState_Gunner(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_Mage.nut b/SetState/SetState_Mage.nut new file mode 100644 index 0000000..d990793 --- /dev/null +++ b/SetState/SetState_Mage.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_Mage.nut +路径:SetState/SetState_Mage.nut +创建日期:2022-09-04 20:20 +文件用途:女法师设置状态函数 +*/ +function setState_Mage(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_Priest.nut b/SetState/SetState_Priest.nut new file mode 100644 index 0000000..0546b6f --- /dev/null +++ b/SetState/SetState_Priest.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_Priest.nut +路径:SetState/SetState_Priest.nut +创建日期:2022-09-04 20:20 +文件用途:圣职者设置状态函数 +*/ +function setState_Priest(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_Swordman.nut b/SetState/SetState_Swordman.nut new file mode 100644 index 0000000..dc7e148 --- /dev/null +++ b/SetState/SetState_Swordman.nut @@ -0,0 +1,14 @@ +/* +文件名:SetState_Swordman.nut +路径:SetState/SetState_Swordman.nut +创建日期:2022-09-04 20:15 +文件用途:鬼剑士绘制界面回调函数(原生) +*/ + +function setState_Swordman(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + + return 1; +} \ No newline at end of file diff --git a/SetState/SetState_Thief.nut b/SetState/SetState_Thief.nut new file mode 100644 index 0000000..5c3c46d --- /dev/null +++ b/SetState/SetState_Thief.nut @@ -0,0 +1,12 @@ +/* +文件名:SetState_Thief.nut +路径:SetState/SetState_Thief.nut +创建日期:2022-09-04 20:20 +文件用途:暗夜使者设置状态函数 +*/ +function setState_Thief(obj, state, datas, isResetTimer) { + if (!obj) + return; + setState_All(obj, state, datas, isResetTimer); + return 1; +} \ No newline at end of file diff --git a/Tool/ClassTool.nut b/Tool/ClassTool.nut new file mode 100644 index 0000000..d8104fb --- /dev/null +++ b/Tool/ClassTool.nut @@ -0,0 +1,1074 @@ +function LenheartAdditionalAttributes(obj) { + //在副本中 + if (sq_GetCurrentModuleType() == 3) { + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/lenheartap.nut")) { + if ("LenheartAttributesTable" in getroottable()) { + local Abarr = array(32, 0); + foreach(AtObj in getroottable()["LenheartAttributesTable"]) { + foreach(Apos, At in AtObj) { + Abarr[Apos] += At; + } + } + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/lenheartap.nut", true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + local change_appendage = appendage.sq_getChangeStatus("Yosin_LenheartDgnBuff"); + if (!change_appendage) { + change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, + CHANGE_STATUS_TYPE_COOLTIME_DECLINE, + false, 0, 115514); + } + if (change_appendage) { + change_appendage.clearParameter(); + + foreach(Key, Value in Abarr) { + if (Key == 0) change_appendage.addParameter(13, false, Value.tofloat()); //HP + else if (Key == 1) change_appendage.addParameter(48, false, Value.tofloat()); //MP + else if (Key == 2) change_appendage.addParameter(0, false, Value.tofloat()); //力量 + else if (Key == 3) change_appendage.addParameter(1, false, Value.tofloat()); //智力 + else if (Key == 4) change_appendage.addParameter(2, false, Value.tofloat()); //体力 + else if (Key == 5) change_appendage.addParameter(3, false, Value.tofloat()); //精神 + else if (Key == 6) change_appendage.addParameter(4, false, Value.tofloat()); //物攻 + else if (Key == 7) change_appendage.addParameter(31, false, Value.tofloat()); //魔攻 + else if (Key == 8) { + change_appendage.addParameter(53, false, Value.tofloat()); //独立 + change_appendage.addParameter(54, false, Value.tofloat()); //独立 + } else if (Key == 10) change_appendage.addParameter(5, false, Value.tofloat()); //物理防御 + else if (Key == 11) change_appendage.addParameter(32, false, Value.tofloat()); //魔法防御 + else if (Key == 12) change_appendage.addParameter(15, false, Value.tofloat() / 10.0); //物理暴击 + else if (Key == 13) change_appendage.addParameter(16, false, Value.tofloat() / 10.0); //魔法暴击 + else if (Key == 14) change_appendage.addParameter(10, false, Value.tofloat()); //攻速 + else if (Key == 15) change_appendage.addParameter(12, false, Value.tofloat()); //释放 + else if (Key == 16) change_appendage.addParameter(11, false, Value.tofloat()); //移速 + else if (Key == 17) change_appendage.addParameter(39, false, Value.tofloat()); //抗磨 + else if (Key == 18) change_appendage.addParameter(33, false, Value.tofloat()); //命中 + else if (Key == 19) change_appendage.addParameter(27, false, Value.tofloat()); //闪避 + else if (Key == 20) change_appendage.addParameter(14, false, Value.tofloat()); //HP恢复 + else if (Key == 21) change_appendage.addParameter(29, false, Value.tofloat()); //MP恢复 + else if (Key == 22) change_appendage.addParameter(41, false, Value.tofloat()); //僵直 + else if (Key == 23) change_appendage.addParameter(34, false, Value.tofloat()); //硬直 + else if (Key == 24) change_appendage.addParameter(42, false, Value.tofloat()); //火强 + else if (Key == 25) change_appendage.addParameter(20, false, Value.tofloat()); //火抗 + else if (Key == 26) change_appendage.addParameter(43, false, Value.tofloat()); //冰强 + else if (Key == 27) change_appendage.addParameter(21, false, Value.tofloat()); //冰抗 + else if (Key == 28) change_appendage.addParameter(45, false, Value.tofloat()); //光强 + else if (Key == 29) change_appendage.addParameter(23, false, Value.tofloat()); //光抗 + else if (Key == 30) change_appendage.addParameter(44, false, Value.tofloat()); //暗强 + else if (Key == 31) change_appendage.addParameter(22, false, Value.tofloat()); //暗抗 + } + } + } + } + } +} + + +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("LenheartAdditionalAttributesFunc", LenheartAdditionalAttributes); +} else { + local T = {}; + T.rawset("LenheartAdditionalAttributesFunc", LenheartAdditionalAttributes); + getroottable().rawset("LenheartFuncTab", T); +} + +class LenheartTextClass { + + function GetStringLength(str) { + return L_sq_GetStringDrawLength(str); + } + +} + + +class ItemInfoClass { + + //Gm模式 + GmModel = true; + + Info = null; + PageLength = 0; + + //静态品级颜色 + static RarityColor = [ + 0xFFFFFFFF, //白 + 0xFFEDD568, //蓝 + 0xFFFF6BB3, //紫 + 0xFFF000FF, //粉 + 0xFF00B1FF, //黄 + 0xFF6666FF, //红 + 0xFF0055FF, //橙 + ]; + // print(format("0x%02X as ",sq_RGBA(255, 85, 0, 255))); + + //我的品级颜色 + MyRarityColor = null; + //我的售价长度 + MyPriceLength = null; + //我的冷却时间长度 + MyCoolTimeLength = null; + + //获取真实类型 + function GetRealType(Type) { + switch (Type) { + case "[material]\r": + return "材料"; + break; + default: + return "道具"; + break; + } + } + + constructor(gInfo) { + Info = clone(gInfo); + + + //Gm模式显示编号 + if (GmModel) Info.Name += "[" + Info.Id + "]"; + + //配置品级颜色 + if (Info.Rarity< 0 || Info.Rarity > 6) { + MyRarityColor = Info.Rarity; + } else { + MyRarityColor = RarityColor[Info.Rarity]; + } + + //配置售价长度 + if ("Price" in Info) { + MyPriceLength = LenheartTextClass.GetStringLength(Info.Price.tostring()); + } + + //配置冷却时间长度 + if ("CoolTime" in Info) { + MyCoolTimeLength = LenheartTextClass.GetStringLength((Info.CoolTime / 1000.0).tostring()); + } + + //配置类型 + if ("Type" in Info) { + Info.Type = GetRealType(Info.Type); + } + + // CheckInfoLength("Name", 40); + // CheckInfoLength("Price", 16); + // CheckInfoLength("Type", 16); + + PageLength += 72; + CheckStrLength(); + } + + function CheckInfoLength(TableKey, AddLength) { + if (TableKey in Info) { + PageLength += AddLength; + } + } + + function CheckStrLength() { + if ("Explain" in Info) { + local Buf = LenheartTextClass.GetStringLength(Info.Explain.tostring()); + local Pn = (Buf / 211.0); + if (Pn< 1) PageLength += 12; + if (Pn > 1) Pn = Pn.tointeger() + 1; + PageLength += (16 * Pn); + } + } + + //高级绘制文字(带换行) + function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc, hl) { + local strarr = []; + if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc); + else { + local Bpos = 0; + while (true) { + local Npos = str.find("\n", Bpos); + if (!Npos) { + local strbuff = str.slice(Bpos, str.len()); + strarr.append(strbuff); + break; + } + local strbuff = str.slice(Bpos, Npos); + strarr.append(strbuff); + Bpos = Npos + 1; + } + for (local z = 0; z< strarr.len(); z++) { + L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc); + } + } + } + + function Show(X, Y) { + if (X< 0) X = 0; + if ((X + 211) > 800) X = (800 - 211); + if (Y< 0) Y = 0; + if (Y + PageLength > 600) Y = 600 - PageLength; + + //Item信息框一般为211的宽度 + L_sq_DrawWindow(X, Y, 211, PageLength, "interface2/popup/popup.img", 134, 6, 12, 6, 13); + + //绘制名字 和 图标 + if ("Id" in Info) L_Sq_DrawItem(X + 8 + 174, Y + 8, Info.Id, 1, 0, 0, 0); + if ("Name2" in Info) L_sq_DrawCode(Info.Name2, X + 8, Y + 9, MyRarityColor, 1, 1); + if ("Name" in Info) L_sq_DrawCode(Info.Name, X + 8, Y + 23, MyRarityColor, 1, 1); + + + //绘制线 + L_sq_DrawImg("interface2/popup/popup.img", 270, X + 7, Y + 26 + 16); + + //绘制重量 + if ("Weight" in Info) { + L_sq_DrawCode((Info.Weight).tostring() + "kg", X + 7, Y + 24 + 24, 0xFFFFFFFF, 1, 1); + } + + //绘制售价 + if ("Price" in Info) { + L_sq_DrawCode("金币", X + 186, Y + 24 + 24, 0xFFFFFFFF, 1, 1); + L_sq_DrawCode(Info.Price.tostring(), X - MyPriceLength + 186, Y + 24 + 24, 0xFFFFFFFF, 1, 1); + } + + + //绘制类型 + if ("Type" in Info) { + L_sq_DrawCode(Info.Type.tostring(), X + 7, Y + 48 + 16, 0xFFFFFFFF, 1, 1); + } + + + + //绘制冷却时间 + if ("CoolTime" in Info) { + L_sq_DrawCode("秒", X + 186 + 12, Y + 48 + 16, 0xFFFFFFFF, 1, 1); + L_sq_DrawCode((Info.CoolTime / 1000.0).tostring(), X - MyCoolTimeLength + 214 - 18, Y + 48 + 16, 0xFFFFFFFF, 1, 1); + } + + //绘制普通描述 + if ("Explain" in Info) { + local a = L_sq_GetStringDrawArray(Info.Explain, 251); + foreach(Pos, va in a) { + // Sout("文本内容嗯: %L", va); + L_sq_DrawCode(va, X + 7, Y + 48 + 16 + 24 + (Pos * 16), 0xFFEDD568, 1, 1); + } + + // Sout("A%L", a[0]); + } + } +} + + +function GetOtherPlayerAttributeLMain(Chunk) { + if (L_sq_RA(0x1A5FB4C, "0x14+0x28+") == 0) return; + local PlayerName = L_Sq_GetPlayerEachName(); + if (PlayerName) { + local T = { + op = 20231017, + realop = 2023102002, + name = PlayerName, + } + BasicsDrawTool.SendPack(T); + } + +} +if (!(getroottable().rawin("GetOtherPlayerAttributeLMainCCC"))) { + SendPackTypeTable.rawset(8, GetOtherPlayerAttributeLMain); + getroottable().rawset("GetOtherPlayerAttributeLMainCCC", 1); +} + +function GetOtherPlayerAttributeLMainCallBack(Chunk) { + // Sout("收到包内容: %L", Chunk); + local Jso = Json.Decode(Chunk); + getroottable().LenheartOtherPlayerAb <- Jso.attribute; +} +Pack_Control.rawset(2023102002, GetOtherPlayerAttributeLMainCallBack); + + + + +function Sq_L_OtherPlayerInfo(x, y, Type, Value, ImgBuf) { + if ("LenheartOtherPlayerAb" in getroottable()) { + if (sq_GetCurrentModuleType() == 1) + Value = Value + (getroottable().LenheartOtherPlayerAb[Type].tofloat() / 100.0).tointeger(); + } + local str = Value.tostring(); + if ((Type >= 12 && Type <= 16) || Type == 18 || Type == 19) { + str = format("+%d.0/", Value); + } + + + local lenght = LenheartTextClass.GetStringLength(str); + + L_sq_DrawImg(ImgBuf, x + 70 - lenght, y + 5); + return Value; +} + + + + +class LenheartWindow extends BasicsDrawTool { + //宽度 + Width = null; + //高度 + Height = null; + //标题高度 + TitleH = null; + + //X坐标 + X = null; + B_X = null; + //Y坐标 + Y = null; + B_Y = null; + + YMouseSw = true; + DeBugMode = false; + + Mobj = null; + M_Xpos = null; + M_Ypos = null; + + + constructor(gX, gY, gWidth, gHeight, gTitleH) { + //宽度 + Width = gWidth; + //高度 + Height = gHeight; + //标题高度 + TitleH = gTitleH; + + //X坐标 + X = gX; + //Y坐标 + Y = gY; + + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //设定鼠标逻辑 + function LockMouse() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { + IMouse.LockMouseClick(); + YMouseSw = false; + L_sq_WA(0x1b46898, 1); + } else { + if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { + IMouse.ReleaseMouseClick(); + YMouseSw = true; + L_sq_WA(0x1b46898, 0); + } + } + } + + //设定窗口拖动逻辑 + function MoveWindow() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { + + if (Mobj.Lb == 1) { + if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 + if (!M_Ypos) M_Ypos = IMouse.GetYPos(); + if (!B_X) B_X = X; //原始窗口位置 + if (!B_Y) B_Y = Y; + + X = B_X - (M_Xpos - IMouse.GetXPos()); + Y = B_Y - (M_Ypos - IMouse.GetYPos()); + + } else if (Mobj.Lb == 0) { + M_Xpos = null; + M_Ypos = null; + B_X = null; + B_Y = null; + } + } + } + + function Show(obj) { + if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); + + //设定鼠标逻辑 + LockMouse(); + + //设定窗口拖动逻辑 + MoveWindow(); + + } +} + + +class LenheartcommonUiC { + X = null; + Y = null; + Width = null; + Height = null; + + Mobj = null; //鼠标对象 + + constructor(x, y, width, height) { + this.X = x; + this.Y = y; + this.Width = width; + this.Height = height; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + } + + //同步坐标 + function SyncPos(x, y) { + this.X = x; + this.Y = y; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) { + State = 1; + return true; + } else return false; + } +} + + +//复选框 +class LenheartcommonSwitchButton extends LenheartcommonUiC { + State = 0; + ImgIndex = null; + + constructor(X, Y) { + LenheartcommonUiC.constructor(X, Y, 14, 15); + } + + function Show() { + //不可用 + if (State == 8) { + L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 3 : 141, X, Y + 1); + } else { + //悬停 + if (isLBDown()) { + L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y + 1); + } + //按下 + else if (isInRect()) { + if (State == 0) + L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 1 : 139, X, Y); + if (State == 1) + L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y); + } + //普通 + else { + if (State == 0) + L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex : 138, X, Y); + if (State == 1) + L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y); + + } + } + } +} + +class LenheartcommonSwitchButtonText extends LenheartcommonSwitchButton { + + TextStr = null; + TextX = 0; + TextY = 0; + TextColor = null; + TextRColor = null; + + + constructor(X, Y, Str) { + LenheartcommonSwitchButton.constructor(X, Y); + this.TextStr = Str; + TextColor = sq_RGBA(221, 197, 147, 250); + TextRColor = sq_RGBA(255, 255, 184, 250); + } + + function SetTextColor(RGBA) { + TextColor = RGBA; + } + + function SetTextPos(gX, gY) { + TextX = gX; + TextY = gY; + } + + function Show() { + LenheartcommonSwitchButton.Show(); + local Color = TextColor; + local SY = Y; + if (State != 8) { + if (isLBDown()) { + SY = Y + 1; + } + if (isInRect() || State == 1) { + Color = TextRColor; + } + } + L_sq_DrawCode(TextStr, X + 16 + TextX, SY + 1 + TextY, Color, 0, 1); + } +} + +class LenheartTabbars extends LenheartcommonUiC { + State = 0; + Path = "interface/lenheartwindowcommon.img"; + Idx = 29; + + constructor(X, Y, ...) { + if (vargc == 2) { + LenheartcommonUiC.constructor(X, Y, vargv[0], vargv[1]); + } else { + LenheartcommonUiC.constructor(X, Y, 61, 19); + } + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show() { + //不可用 + if (State == 8) { + L_sq_DrawImg(Path, Idx + 3, X, Y); + } else { + //按下 + if (isLBDown()) { + L_sq_DrawImg(Path, Idx + 1, X, Y + 1); + } + //悬停 + else if (isInRect()) { + if (State == 0) + L_sq_DrawImg(Path, Idx + 1, X, Y); + if (State == 1) + L_sq_DrawImg(Path, Idx + 2, X, Y); + } + //普通 + else { + if (State == 0) + L_sq_DrawImg(Path, Idx, X, Y); + if (State == 1) + L_sq_DrawImg(Path, Idx + 2, X, Y); + } + } + } +} + +class LenheartTabbarsText extends LenheartTabbars { + TextStr = null; + TextX = null; + TextY = null; + TextColor = null; + TextRColor = null; + + TextXoffset = null; + TextYoffset = null; + + constructor(X, Y, Str, ...) { + if (vargc == 2) { + LenheartTabbars.constructor(X, Y, vargv[0], vargv[1]); + } else { + LenheartTabbars.constructor(X, Y); + } + this.TextStr = Str; + TextColor = sq_RGBA(124, 110, 82, 255); + TextRColor = sq_RGBA(185, 172, 145, 255); + + TextXoffset = 19; + TextYoffset = 3; + } + + function SetTextColor(RGBA) { + TextColor = RGBA; + } + + function SetTextOffset(gX, gY) { + TextXoffset = gX; + TextYoffset = gY; + } + + function Show() { + LenheartTabbars.Show(); + local Color = TextColor; + local SY = Y + TextYoffset; + if (State != 8) { + if (isLBDown()) { + SY = Y + TextYoffset + 1; + } + if (isInRect() || State == 1) { + Color = TextRColor; + } + } + if (State == 1) + L_sq_DrawCode(TextStr, X + TextXoffset, SY, Color, 0, 1); + if (State == 0 || State == 8) + L_sq_DrawCode(TextStr, X + TextXoffset, SY + 2, Color, 0, 1); + } +} + + +class LenheartButton extends LenheartcommonUiC { + State = 0; + BaseIdx = 29; + DWidth = null; + Path = "interface/lenheartwindowcommon.img"; + Idx = 172; + FillWidth = 2; + FirstWidth = 28; + + + constructor(X, Y, W) { + this.DWidth = W; + LenheartcommonUiC.constructor(X, Y, W + 28 * 2, 24); + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show() { + //不可用 + if (State == 8) { + L_sq_DrawButton(X, Y + 1, this.DWidth, Path, Idx + 9,FillWidth,FirstWidth); + } else { + //按下 + if (isLBDown()) { + L_sq_DrawButton(X, Y + 1, this.DWidth, Path, Idx + 3,FillWidth,FirstWidth); + } + //悬停 + else if (isInRect()) { + L_sq_DrawButton(X, Y, this.DWidth, Path, Idx + 3,FillWidth,FirstWidth); + } + //普通 + else { + L_sq_DrawButton(X, Y, this.DWidth, Path, Idx,FillWidth,FirstWidth); + } + } + } +} + +class LenheartButtonText extends LenheartButton { + TextStr = null; + TextX = null; + TextY = null; + TextColor = null; + TextRColor = null; + + TextXoffset = null; + TextYoffset = null; + + constructor(X, Y, W, Str) { + LenheartButton.constructor(X, Y, W); + this.TextStr = Str; + TextColor = sq_RGBA(185, 148, 96, 255); + TextRColor = sq_RGBA(227, 212, 154, 255); + + TextXoffset = 19; + TextYoffset = 3; + } + + function SetTextColor(RGBA) { + TextColor = RGBA; + } + + function SetTextOffset(gX, gY) { + TextXoffset = gX; + TextYoffset = gY; + } + + function Show() { + LenheartButton.Show(); + local Color = TextColor; + local SY = Y + TextYoffset; + if (State != 8) { + if (isLBDown()) { + SY = Y + TextYoffset + 1; + } + if (isInRect() || State == 1) { + Color = TextRColor; + } + } + L_sq_DrawCode(TextStr, X + TextXoffset + 19, SY + 5, Color, 0, 1); + } +} + + + +class LenheartBaseButton extends LenheartcommonUiC { + State = 0; + BaseIdx = 29; + DWidth = null; + Path = null; + Idx = null; + + + constructor(X, Y, W, H, Path, Idx) { + this.DWidth = W; + this.Path = Path; + this.Idx = Idx; + LenheartcommonUiC.constructor(X, Y, W, H); + } + + function SetFrame(gPath, gIdx) { + if (gPath) Path = gPath; + Idx = gIdx; + } + + function Show() { + //不可用 + if (State == 8) { + L_sq_DrawImg(Path, Idx + 3, X, Y + 1); + } else { + //按下 + if (isLBDown()) { + L_sq_DrawImg(Path, Idx + 2, X, Y + 1); + } + //悬停 + else if (isInRect()) { + L_sq_DrawImg(Path, Idx + 1, X, Y); + } + //普通 + else { + L_sq_DrawImg(Path, Idx, X, Y); + } + } + } +} +class LenheartBaseButtonText extends LenheartBaseButton { + TextStr = null; + TextX = null; + TextY = null; + TextColor = null; + TextRColor = null; + + TextXoffset = null; + TextYoffset = null; + + constructor(X, Y, W, H, Path, Idx, Str) { + LenheartBaseButton.constructor(X, Y, W, H, Path, Idx); + this.TextStr = Str; + TextColor = sq_RGBA(185, 148, 96, 255); + TextRColor = sq_RGBA(227, 212, 154, 255); + + TextXoffset = 19; + TextYoffset = 3; + } + + function SetTextColor(RGBA) { + TextColor = RGBA; + } + + function SetTextOffset(gX, gY) { + TextXoffset = gX; + TextYoffset = gY; + } + + function Show() { + LenheartBaseButton.Show(); + local Color = TextColor; + local SY = Y + TextYoffset; + if (State != 8) { + if (isLBDown()) { + SY = Y + TextYoffset + 1; + } + if (isInRect() || State == 1) { + Color = TextRColor; + } + } + L_sq_DrawCode(TextStr, X + TextXoffset + 19, SY + 5, Color, 0, 1); + } +} + + +class LenheartBaseInput extends LenheartcommonUiC { + State = 0; + InputState = 0; + DWidth = null; + str = ""; + sliceCode = "|"; + BaseTime = 0; + InputController = null; + + constructor(X, Y, W, H) { + this.DWidth = W; + LenheartcommonUiC.constructor(X, Y, W, H); + } + + function sliceCodeFlicker() { + local T = Clock(); + if ((T - 500) >= BaseTime) { + BaseTime = T; + if (sliceCode.len() > 0) sliceCode = ""; + else if (sliceCode.len() == 0) sliceCode = "|"; + } + } + + //同步坐标 + function SyncPos(x, y) { + this.X = x; + this.Y = y; + } + + function Show() { + //光标闪烁 + if (InputState == 1) sliceCodeFlicker(); + else sliceCode = ""; + + L_sq_DrawImg("interface/lenheartwindowcommon.img", 63, this.X, this.Y); + for (local i = 0; i< this.Width; i++) { + L_sq_DrawImg("interface/lenheartwindowcommon.img", 64, this.X + 3 + i, this.Y); + } + L_sq_DrawImg("interface/lenheartwindowcommon.img", 65, this.X + 3 + this.Width, this.Y); + L_sq_DrawCode(str + sliceCode, this.X + 4, this.Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1); + if (this.isLBActive()) { + InputController = L_sq_NewInputBox(this.X, this.Y, this.Width, this.Height, str); + InputState = 1; + } + + + if (InputController) { + local StrBuf = L_sq_GetInputBoxStr(InputController); + if (StrBuf != "LenheartNULL") str = StrBuf; + else { + InputController = null; + InputState = 0; + } + } + } + + +} + +//在DrawMain后面调用 +function L_drawMainCustomUI_All() { + local obj = sq_GetMyMasterCharacter(); + //尝试调用百级UI + if (getroottable().rawin("Lenheart_100UI_Event_BackGround")) Lenheart_100UI_Event_BackGround(); + if (getroottable().rawin("Lenheart_100UI")) Lenheart_100UI(obj); +} + + +if (!getroottable().rawin("L_CompleteTaskTable")) L_CompleteTaskTable <- {} +//完成任务回调 +function Sq_CompleteTask(a2, a3, a4) { + foreach(Func in L_CompleteTaskTable) { + Func(a2, a3, a4); + } +} + + + + + + + + + +DIK_ESCAPE <- 0x01 +DIK_1 <- 0x02 +DIK_2 <- 0x03 +DIK_3 <- 0x04 +DIK_4 <- 0x05 +DIK_5 <- 0x06 +DIK_6 <- 0x07 +DIK_7 <- 0x08 +DIK_8 <- 0x09 +DIK_9 <- 0x0A +DIK_0 <- 0x0B +DIK_MINUS <- 0x0C /* - on main keyboard */ +DIK_EQUALS <- 0x0D +DIK_BACK <- 0x0E /* backspace */ +DIK_TAB <- 0x0F +DIK_Q <- 0x10 +DIK_W <- 0x11 +DIK_E <- 0x12 +DIK_R <- 0x13 +DIK_T <- 0x14 +DIK_Y <- 0x15 +DIK_U <- 0x16 +DIK_I <- 0x17 +DIK_O <- 0x18 +DIK_P <- 0x19 +DIK_LBRACKET <- 0x1A +DIK_RBRACKET <- 0x1B +DIK_RETURN <- 0x1C /* Enter on main keyboard */ +DIK_LCONTROL <- 0x1D +DIK_A <- 0x1E +DIK_S <- 0x1F +DIK_D <- 0x20 +DIK_F <- 0x21 +DIK_G <- 0x22 +DIK_H <- 0x23 +DIK_J <- 0x24 +DIK_K <- 0x25 +DIK_L <- 0x26 +DIK_SEMICOLON <- 0x27 +DIK_APOSTROPHE <- 0x28 +DIK_GRAVE <- 0x29 /* accent grave */ +DIK_LSHIFT <- 0x2A +DIK_BACKSLASH <- 0x2B +DIK_Z <- 0x2C +DIK_X <- 0x2D +DIK_C <- 0x2E +DIK_V <- 0x2F +DIK_B <- 0x30 +DIK_N <- 0x31 +DIK_M <- 0x32 +DIK_COMMA <- 0x33 +DIK_PERIOD <- 0x34 /* . on main keyboard */ +DIK_SLASH <- 0x35 /* / on main keyboard */ +DIK_RSHIFT <- 0x36 +DIK_MULTIPLY <- 0x37 /* * on numeric keypad */ +DIK_LMENU <- 0x38 /* left Alt */ +DIK_SPACE <- 0x39 +DIK_CAPITAL <- 0x3A +DIK_F1 <- 0x3B +DIK_F2 <- 0x3C +DIK_F3 <- 0x3D +DIK_F4 <- 0x3E +DIK_F5 <- 0x3F +DIK_F6 <- 0x40 +DIK_F7 <- 0x41 +DIK_F8 <- 0x42 +DIK_F9 <- 0x43 +DIK_F10 <- 0x44 +DIK_NUMLOCK <- 0x45 +DIK_SCROLL <- 0x46 /* Scroll Lock */ +DIK_NUMPAD7 <- 0x47 +DIK_NUMPAD8 <- 0x48 +DIK_NUMPAD9 <- 0x49 +DIK_SUBTRACT <- 0x4A /* - on numeric keypad */ +DIK_NUMPAD4 <- 0x4B +DIK_NUMPAD5 <- 0x4C +DIK_NUMPAD6 <- 0x4D +DIK_ADD <- 0x4E /* + on numeric keypad */ +DIK_NUMPAD1 <- 0x4F +DIK_NUMPAD2 <- 0x50 +DIK_NUMPAD3 <- 0x51 +DIK_NUMPAD0 <- 0x52 +DIK_DECIMAL <- 0x53 /* . on numeric keypad */ +DIK_OEM_102 <- 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ +DIK_F11 <- 0x57 +DIK_F12 <- 0x58 +DIK_F13 <- 0x64 /* (NEC PC98) */ +DIK_F14 <- 0x65 /* (NEC PC98) */ +DIK_F15 <- 0x66 /* (NEC PC98) */ +DIK_KANA <- 0x70 /* (Japanese keyboard) */ +DIK_ABNT_C1 <- 0x73 /* /? on Brazilian keyboard */ +DIK_CONVERT <- 0x79 /* (Japanese keyboard) */ +DIK_NOCONVERT <- 0x7B /* (Japanese keyboard) */ +DIK_YEN <- 0x7D /* (Japanese keyboard) */ +DIK_ABNT_C2 <- 0x7E /* Numpad . on Brazilian keyboard */ +DIK_NUMPADEQUALS <- 0x8D /* = on numeric keypad (NEC PC98) */ +DIK_PREVTRACK <- 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ +DIK_AT <- 0x91 /* (NEC PC98) */ +DIK_COLON <- 0x92 /* (NEC PC98) */ +DIK_UNDERLINE <- 0x93 /* (NEC PC98) */ +DIK_KANJI <- 0x94 /* (Japanese keyboard) */ +DIK_STOP <- 0x95 /* (NEC PC98) */ +DIK_AX <- 0x96 /* (Japan AX) */ +DIK_UNLABELED <- 0x97 /* (J3100) */ +DIK_NEXTTRACK <- 0x99 /* Next Track */ +DIK_NUMPADENTER <- 0x9C /* Enter on numeric keypad */ +DIK_RCONTROL <- 0x9D +DIK_MUTE <- 0xA0 /* Mute */ +DIK_CALCULATOR <- 0xA1 /* Calculator */ +DIK_PLAYPAUSE <- 0xA2 /* Play / Pause */ +DIK_MEDIASTOP <- 0xA4 /* Media Stop */ +DIK_VOLUMEDOWN <- 0xAE /* Volume - */ +DIK_VOLUMEUP <- 0xB0 /* Volume + */ +DIK_WEBHOME <- 0xB2 /* Web home */ +DIK_NUMPADCOMMA <- 0xB3 /* , on numeric keypad (NEC PC98) */ +DIK_DIVIDE <- 0xB5 /* / on numeric keypad */ +DIK_SYSRQ <- 0xB7 +DIK_RMENU <- 0xB8 /* right Alt */ +DIK_PAUSE <- 0xC5 /* Pause */ +DIK_HOME <- 0xC7 /* Home on arrow keypad */ +DIK_UP <- 0xC8 /* UpArrow on arrow keypad */ +DIK_PRIOR <- 0xC9 /* PgUp on arrow keypad */ +DIK_LEFT <- 0xCB /* LeftArrow on arrow keypad */ +DIK_RIGHT <- 0xCD /* RightArrow on arrow keypad */ +DIK_END <- 0xCF /* End on arrow keypad */ +DIK_DOWN <- 0xD0 /* DownArrow on arrow keypad */ +DIK_NEXT <- 0xD1 /* PgDn on arrow keypad */ +DIK_INSERT <- 0xD2 /* Insert on arrow keypad */ +DIK_DELETE <- 0xD3 /* Delete on arrow keypad */ +DIK_LWIN <- 0xDB /* Left Windows key */ +DIK_RWIN <- 0xDC /* Right Windows key */ +DIK_APPS <- 0xDD /* AppMenu key */ +DIK_POWER <- 0xDE /* System Power */ +DIK_SLEEP <- 0xDF /* System Sleep */ +DIK_WAKE <- 0xE3 /* System Wake */ +DIK_WEBSEARCH <- 0xE5 /* Web Search */ +DIK_WEBFAVORITES <- 0xE6 /* Web Favorites */ +DIK_WEBREFRESH <- 0xE7 /* Web Refresh */ +DIK_WEBSTOP <- 0xE8 /* Web Stop */ +DIK_WEBFORWARD <- 0xE9 /* Web Forward */ +DIK_WEBBACK <- 0xEA /* Web Back */ +DIK_MYCOMPUTER <- 0xEB /* My Computer */ +DIK_MAIL <- 0xEC /* Mail */ +DIK_MEDIASELECT <- 0xED /* Media Select */ + + + +//Json类 +class Json { + constructor() { + + } + + + + function Encode(Table) { + local Size = Table.len(); + local Pos = 0; + local Str = "{"; + foreach(Key, Value in Table) { + + ++Pos; + Str += "\""; + Str += Key.tostring(); + Str += "\""; + Str += ":"; + + if (typeof(Value) == "string") { + print(Value.len()); + Sout("中文字符串為: %L",Value); + Str += "\""; + Str += Value; + Str += "\""; + } else if (typeof(Value) == "table") { + Str += Json.Encode(Value); + } else if (typeof(Value) == "array") { + Str += "["; + foreach(ArrObj in Value) { + if(typeof(ArrObj) == "table")Str += Json.Encode(Value); + else{ + Str += ArrObj; + Str += ","; + } + } + Str = Str.slice(0,Str.len() - 1); + Str += "]"; + }else Str += Value; + if (Pos != Size) Str += ","; + } + Str += "}"; + return Str; + } + + function Decode(Str) + { + Str = L_sq_DecondeJson(Str); + local Str = "local _M = " + Str + ";\n return _M;\n"; + local Func = compilestring(Str); + return Func(); + } +} \ No newline at end of file diff --git a/Tool/DebugInfo.nut b/Tool/DebugInfo.nut new file mode 100644 index 0000000..4b73e4b --- /dev/null +++ b/Tool/DebugInfo.nut @@ -0,0 +1,71 @@ +/* +文件名:DebugInfo.nut +路径:Tool/DebugInfo.nut +创建日期:2022-09-06 19:08 +文件用途:输出必要信息在屏幕上 +*/ + +function DebugInfo() { + local obj = sq_GetMyMasterCharacter(); + local stage = sq_GetGlobaludpModuleStage(); + local dungeon = sq_GetDungeonByStage(stage); + local dungeonIndex = sq_GetDuegonIndex(dungeon); + local MapIndex = sq_GetMapIndex(stage); + //if(dungeonIndex != 6000)return; + local Color = 0xFF00B1FF; + local Color1 = 0xFFACFF08; + local X = 0; + local Y = 0; + + L_Code_STL("副本编号 : ", X + 15, Y + 155, Color, 2); + L_Code_STL("" + dungeonIndex, X + 80, Y + 155, Color1, 2); + + L_Code_STL("地图编号 : ", X + 115, Y + 155, Color, 2); + L_Code_STL("" + MapIndex, X + 180, Y + 155, Color1, 2); + + L_Code_STL("世界类型 : ", X + 215, Y + 155, Color, 2); + L_Code_STL("未完成", X + 275, Y + 155, Color1, 2); + + L_Code_STL("------------------------------------------", X + 15, Y + 180, Color, 2); + + L_Code_STL("主状态 : ", X + 15, Y + 200, Color, 2); + L_Code_STL("" + Chr_State_Table[15], X + 62, Y + 200, Color1, 2); + + L_Code_STL("转职编号 : ", X + 83, Y + 200, Color, 2); + L_Code_STL("" + sq_getGrowType(obj), X + 143, Y + 200, Color1, 2); + + L_Code_STL("技能编号 : ", X + 156, Y + 200, Color, 2); + L_Code_STL("" + obj.getCurrentSkillIndex(), X + 216, Y + 200, Color1, 2); + + L_Code_STL("动画编号 : ", X + 240, Y + 200, Color, 2); + for (local i = 0; i < 200; i++) { + if (obj.isCurrentCutomAniIndex(i) == true) L_Code_STL("" + i, X + 300, Y + 200, Color1, 2); + //else L_Code_STL("无", X + 300, Y + 200, Color1, 2); + } + + for (local z = 0; z < 12; z++) { + L_Code_STL("子状态" + z + " : ", X + 15, Y + 223 + (z * 20), 0xFF9AFA00, 2); + L_Code_STL("" + Chr_State_Table[z], X + 85, Y + 223 + (z * 20), 0xFF0045FF, 2); + + } + + L_Code_STL("人物坐标X : ", X + 165, Y + 260, Color, 2); + L_Code_STL("" + obj.getXPos(), X + 235, Y + 260, Color1, 2); + + L_Code_STL("人物坐标Y : ", X + 165, Y + 280, Color, 2); + L_Code_STL("" + obj.getYPos(), X + 235, Y + 280, Color1, 2); + + L_Code_STL("人物坐标Z : ", X + 165, Y + 300, Color, 2); + L_Code_STL("" + obj.getZPos(), X + 235, Y + 300, Color1, 2); + + L_Code_STL("鼠标坐标X : ", X + 165, Y + 340, Color, 2); + //L_Code_STL("" + Chr_State_Table[13], X + 235, Y + 340, Color1, 2); + + L_Code_STL("鼠标坐标Y : ", X + 165, Y + 360, Color, 2); + //L_Code_STL("" + Chr_State_Table[14], X + 235, Y + 360, Color1, 2); +} + +function SyncMousePos() { + Chr_State_Table.rawset(13, sq_GetMouseXPos()); + Chr_State_Table.rawset(14, sq_GetMouseYPos()); +} \ No newline at end of file diff --git a/Tool/Tool.nut b/Tool/Tool.nut new file mode 100644 index 0000000..fa4091b --- /dev/null +++ b/Tool/Tool.nut @@ -0,0 +1,1615 @@ +// function sq_GetIntData(obj, SkillId, Idx) { +// local ret = L_sq_GetIntData(obj, SkillId, Idx); +// return ret + HookIntData(obj, SkillId, Idx); +// } + +// function sq_getIntData(obj, SkillId, Idx) { +// local ret = L_sq_GetIntData(obj, SkillId, Idx); +// return ret + HookIntData(obj, SkillId, Idx); +// } + +// function sq_GetLevelData(obj, SkillId, Idx, SkillLevel) { +// local ret = L_sq_GetLevelData(obj, SkillId, Idx, SkillLevel); +// return ret + HookLevelData(obj, SkillId, Idx); +// } + +// function sq_getLevelData(obj, SkillId, Idx, SkillLevel) { +// local ret = L_sq_GetLevelData(obj, SkillId, Idx, SkillLevel); +// return ret + HookLevelData(obj, SkillId, Idx); +// } + + +function getReversalASCII(string) +{ + local ASCII; + switch(string){ + case 10 :ASCII = "\n" ;break; + case 32 :ASCII = " " ;break; + case 33 :ASCII = "!" ;break; + case 35 :ASCII = "#" ;break; + case 36 :ASCII = "$" ;break; + case 37 :ASCII = "%" ;break; + case 38 :ASCII = "&" ;break; + case 39 :ASCII = "'" ;break; + case 40 :ASCII = "(" ;break; + case 41 :ASCII = ")" ;break; + case 42 :ASCII = "*" ;break; + case 43 :ASCII = "+" ;break; + case 44 :ASCII = "," ;break; + case 45 :ASCII = "-" ;break; + case 46 :ASCII = "." ;break; + case 47 :ASCII = "/" ;break; + case 58 :ASCII = ":" ;break; + case 59 :ASCII = ";" ;break; + case 60 :ASCII = "<" ;break; + case 61 :ASCII = "=" ;break; + case 62 :ASCII = ">" ;break; + case 63 :ASCII = "?" ;break; + case 64 :ASCII = "@" ;break; + case 91 :ASCII = "[" ;break; + case 93 :ASCII = "]" ;break; + case 94 :ASCII = "^" ;break; + case 95 :ASCII = "_" ;break; + case 96 :ASCII = "`" ;break; + case 123 :ASCII = "{" ;break; + case 124 :ASCII = "|" ;break; + case 125 :ASCII = "}" ;break; + case 126 :ASCII = "~" ;break; + case 48 :ASCII = "0" ;break; + case 49 :ASCII = "1" ;break; + case 50 :ASCII = "2" ;break; + case 51 :ASCII = "3" ;break; + case 52 :ASCII = "4" ;break; + case 53 :ASCII = "5" ;break; + case 54 :ASCII = "6" ;break; + case 55 :ASCII = "7" ;break; + case 56 :ASCII = "8" ;break; + case 57 :ASCII = "9" ;break; + case 65 :ASCII = "A" ;break; + case 66 :ASCII = "B" ;break; + case 67 :ASCII = "C" ;break; + case 68 :ASCII = "D" ;break; + case 69 :ASCII = "E" ;break; + case 70 :ASCII = "F" ;break; + case 71 :ASCII = "G" ;break; + case 72 :ASCII = "H" ;break; + case 73 :ASCII = "I" ;break; + case 74 :ASCII = "J" ;break; + case 75 :ASCII = "K" ;break; + case 76 :ASCII = "L" ;break; + case 77 :ASCII = "M" ;break; + case 78 :ASCII = "N" ;break; + case 79 :ASCII = "O" ;break; + case 80 :ASCII = "P" ;break; + case 81 :ASCII = "Q" ;break; + case 82 :ASCII = "R" ;break; + case 83 :ASCII = "S" ;break; + case 84 :ASCII = "T" ;break; + case 85 :ASCII = "U" ;break; + case 86 :ASCII = "V" ;break; + case 87 :ASCII = "W" ;break; + case 88 :ASCII = "X" ;break; + case 89 :ASCII = "Y" ;break; + case 90 :ASCII = "Z" ;break; + case 97 :ASCII = "a" ;break; + case 98 :ASCII = "b" ;break; + case 99 :ASCII = "c" ;break; + case 100 :ASCII = "d" ;break; + case 101 :ASCII = "e" ;break; + case 102 :ASCII = "f" ;break; + case 103 :ASCII = "g" ;break; + case 104 :ASCII = "h" ;break; + case 105 :ASCII = "i" ;break; + case 106 :ASCII = "j" ;break; + case 107 :ASCII = "k" ;break; + case 108 :ASCII = "l" ;break; + case 109 :ASCII = "m" ;break; + case 110 :ASCII = "n" ;break; + case 111 :ASCII = "o" ;break; + case 112 :ASCII = "p" ;break; + case 113 :ASCII = "q" ;break; + case 114 :ASCII = "r" ;break; + case 115 :ASCII = "s" ;break; + case 116 :ASCII = "t" ;break; + case 117 :ASCII = "u" ;break; + case 118 :ASCII = "v" ;break; + case 119 :ASCII = "w" ;break; + case 120 :ASCII = "x" ;break; + case 121 :ASCII = "y" ;break; + case 122 :ASCII = "z" ;break; + default :ASCII = "";break; + } + return ASCII; +} +function KeyInputCallBack(code) +{ + if("GlobaNtInput" in getroottable()){ + local NT = getroottable().GlobaNtInput; + foreach(Key, Value in NT) { + Value(code); + } + } +} +function RegisterInputHook(FuncName,Func) +{ + if("GlobaNtInput" in getroottable()){ + local NT = getroottable().GlobaNtInput; + NT.rawset(FuncName,Func); + }else{ + local NT = {}; + NT.rawset(FuncName,Func); + getroottable().GlobaNtInput <- NT; + } +} +function ErasesInputHook(FuncName) +{ + if("GlobaNtInput" in getroottable()){ + local NT = getroottable().GlobaNtInput; + if(NT.rawin(FuncName)){ + NT.rawdelete(FuncName); + } + } +} + + + + + + + + + + + + + + + +//基础工具类 +class BasicsDrawTool { + + function SendPack(T) { + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + function SendPackEx(T) { + local str = L_sq_EncondeJson(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + } + + //绘制简易静态Ani // obj -- ani路径 -- X -- Y -- 第几帧 -- ani名字 + function T_DrawStayAni(obj, aniFileName, x, y, index, aniname) { + local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName); + //sq_AnimationProc(SelectAni); + sq_DrawSpecificFrame(SelectAni, x, y, false, index, false, 1.0); + return SelectAni; + } + + //绘制简易静态Ani // obj -- ani路径 -- X -- Y -- 第几帧 -- ani名字 + function T_DrawStayAniRate(obj, aniFileName, x, y, index, aniname, rate) { + local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName); + SelectAni.setImageRateFromOriginal(rate, rate); + //sq_AnimationProc(SelectAni); + sq_DrawSpecificFrame(SelectAni, x, y, false, index, false, 1.0); + return SelectAni; + } + + //绘制简易动态Ani // obj -- ani路径 -- X -- Y -- ani名字 + function T_DrawDynamicAni(obj, aniFileName, x, y, aniname) { + local ani = obj.getVar().GetAnimationMap(aniname, aniFileName); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, x, y, true); + return ani; + } + + //绘制数字 // obj -- X -- Y -- 数值 -- ani路径前缀 -- 间隔 -- 数字1偏移坐标 + function T_DrawCustomNum(obj, xPos, yPos, num, str, Interval) { + local NumStr = num.tostring(); + for (local i = 0; i < NumStr.len(); ++i) { + local DrawNum = NumStr.slice(i, i + 1); + local ani = obj.getVar().GetAnimationMap(DrawNum + str, str + DrawNum + ".ani"); + sq_DrawSpecificFrame(ani, xPos + (i * Interval), yPos, false, 0, false, 1.0); + } + } + //绘制时间数字 // obj -- X -- Y -- 数值 -- ani路径前缀 -- 间隔 -- 数字1偏移坐标 + function T_DrawCustomTimeNum(obj, xPos, yPos, num, str, Interval, OneDeviation) { + local len = (num.tostring()).len(); + for (local i = len; i > 0; i--) { + local fg = 0; + local DrawNum = (num.tostring()).slice(i - 1, i); + //one += OneDeviation * abs(i - (len - 1)); + if (i < (len - 1)) fg = -10; + local ani = obj.getVar().GetAnimationMap(DrawNum + str, str + DrawNum + ".ani"); + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, xPos + ((i - len) * Interval) + fg, yPos, true); + } + } + //绘制汉字 obj -- X坐标 -- Y坐标 -- 汉字 -- RGBA + function T_DrawCode(posX, posY, char, rgba) { + L_Code_STL(char, posX, posY, rgba, 0); + } + //初始化根表成员 + function InitClass(Name) { + local RootTab = getroottable(); + if (RootTab.rawin(Name) == true) { + RootTab.rawdelete(Name); + } + } + + function T_LogError(msg) { + local f = file("Yosin.Error", "a+"); + foreach(char in msg) { + f.writen(char, 'b'); + } + f.writen('\n', 'b'); + } + //错误抛出 + function T_ErrorPrint(exception, Type) { + local allStr = ""; + allStr += "AN ERROR HAS OCCURED [" + exception + "]\n"; + allStr += "CALLSTACK\n"; + for (local i = -10; i < 20; i++) { + local tab1 = getstackinfos(i); + if (typeof tab1 != "null") { + local Write = true; + local StrBuffer = ""; + foreach(name, value in tab1) { + + if (value == "unknown" || value == "getstackinfos" || value == "errorhandler" || value == -1) { + Write = false; + break; + } + + switch (name) { + case "func": + StrBuffer += "*Function: [ " + value + " ] \n\n"; + break; + case "src": + StrBuffer += "*Src: [ " + value + " ] \n"; + break; + case "line": + StrBuffer += "*Line: [ " + value + " ] \n"; + break; + case "locals": + StrBuffer += "*Address: [ " + value + " ] \n"; + break; + default: + break; + } + + } + if (Write == true) allStr += StrBuffer; + } + } + if (Type == false) print(allStr); + else if (Type == true) BasicsDrawTool.T_LogError(allStr); + } + //获取汉字偏移 + function GetOffserFromLen(char, offset) { + return (char.len() * offset) + } +} + +//Hud按钮类 +class HudButton extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + buttonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength) { + obj = gObj; + buttonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + } + //绘制按钮 + function DrawButton() { + if (isDown()) y++; + + T_DrawDynamicAni(obj, BaseAnifile, x, y, buttonName); + if (isInRect()) { + + } + } + + function isInRect() { + local mouseX = IMouse.GetXPos(); + local mouseY = IMouse.GetYPos(); + if (sq_IsIntersectRect(mouseX, mouseY, 5, 5, x, y, width, length)) + return true; + return false; + } + + function isDown() { + if (isInRect() && IMouse.IsLBDown()) { + obj.getVar(buttonName).setBool(0, true); + return true; + } + return false; + } + + function isActive() { + if (isInRect() && IMouse.IsLBUp() && obj.getVar(buttonName).getBool(0)) { + obj.getVar(buttonName).setBool(0, false); + return true; + } + return false; + } +} +//HudPro按钮类 +class ButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if (!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, 0, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && IMouse.GetLButton() == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() { + if (isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() { + if (isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } +} +//SwitchButtonPro按钮类 +class SwitchButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 +{ + obj = null; //Obj对象 + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + SwitchState = false; //复选框是否选中 + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + BaseAnifileFrame = null; //调用的Ani帧数 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gObj, gButtonName, gX, gY, gAnifile, gBaseAnifileFrame, gWidth, gLength) { + obj = gObj; + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + BaseAnifileFrame = gBaseAnifileFrame; + width = gWidth; + length = gLength; + } + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + + if (!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseAnifileFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + + if (!isInRect() && SwitchState) { + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && IMouse.GetLButton() == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() { + if (isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() { + if (isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } +} +//设置窗口SwitchButtonPro按钮继承类 +class SettingWindowSwitchButtonPro extends SwitchButtonPro { + + SwitchStateAniName = null; + SwitchStateAniFile = null; + SwitchStateAniFrame = null; + + //绘制按钮 + function Show() { + if (ClickEnble) //是否开启点击效果 + { + if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + ++y; + } + if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + --y; + } + } + + if (CustomClickEnble) //是否开启自定义点击效果 + { + if (isLBDown()) //按下左键并且按钮处于弹起状态 + { + if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if (RectEnble) //开启悬停效果时 + { + if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble) && !SwitchState) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + + if (!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseAnifileFrame, ButtonName); + else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); + } + + if (SwitchState) { + if (!ButtonDynamic) T_DrawStayAni(obj, SwitchStateAniFile, Rectx, Recty, SwitchStateAniFrame, SwitchStateAniName); + else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + + function SetSwitchStateAni(gButtonName, gAnifile, gFrame) { + SwitchStateAniName = gButtonName; + SwitchStateAniFile = gAnifile; + SwitchStateAniFrame = gFrame; + } +} + + +//STL容器类 +class STL { + thisname = null; + Type = null; + constructor(G_thisname, G_Type) { + thisname = G_thisname; + local NameType = typeof(thisname); + if (NameType != "string") return; + Type = G_Type; + + L_New_STL(thisname, Type); + } + //设置容器值 + function Set_STL(Idx, Value) { + return L_Set_STL(thisname, Type, Idx, Value); + } + //获取容器值 + function Get_STL(Idx) { + return L_Get_STL(thisname, Type, Idx); + } +} +//STL 时间容器类 +class TimeSTL { + thisname = null; //时间容器名称 + MaxTime = null; //时间容器最大时间 + //构造时间容器 + constructor(G_thisname, G_MaxTime) { + thisname = G_thisname; + local NameType = typeof(thisname); + if (NameType != "string") return; + MaxTime = G_MaxTime; + + L_Timer_STL(thisname, MaxTime, 0); //创建时间容器 + } + //开启时间容器 非Proc环境 + function Start() { + return L_Timer_STL(thisname, MaxTime, 1); + } + //获取时间容器值 + function Get() { + return L_Timer_STL(thisname, MaxTime, 2); + } + //重置时间容器 非Proc环境 + function Reset() { + return L_Timer_STL(thisname, MaxTime, 3); + } + //暂停时间容器 非Proc环境 + function Stop() { + return L_Timer_STL(thisname, MaxTime, 4); + } + //继续时间容器 非Proc环境 + function Run() { + return L_Timer_STL(thisname, MaxTime, 5); + } + //销毁时间容器 非Proc环境 + function Delete() { + return L_Timer_STL(thisname, MaxTime, 6); + } +} +//STL Json容器类 +class Json_STL { + thisname = null; //Json容器名称 + state = null; + //构造Json容器 + constructor(G_thisname) { + thisname = G_thisname; + local NameType = typeof(thisname); + if (NameType != "string") return; + state = L_Json_STL(thisname, 0); //创建Json容器 + } + //从str构造Json包 + function Parse(Str, Type, Retain) { + return L_Json_STL(thisname, Str, Type, Retain); + } + //构造Json包 + function Put(key, value) { + return L_Json_STL(thisname, key, value); + } + //查询Json包 + function GetString() { + return L_Json_STL(thisname, 1); + } + //查询Json包 + function Get(key) { + return L_Json_STL(thisname, key); + } + //销毁Json包 + function Delete() { + return L_Json_STL(thisname, 2); + } + //通过Table构造Json字符串 + function Encode(Table) { + local Size = Table.len(); + local Pos = 0; + local Str = "{"; + foreach(Key, Value in Table) { + ++Pos; + Str += "\""; + Str += Key.tostring(); + Str += "\""; + Str += ":"; + if (typeof(Value) == "string") { + Str += "\""; + Str += Value; + Str += "\""; + } else Str += Value; + if (Pos != Size) Str += ","; + } + Str += "}"; + return Str; + } + +} +//Key 键盘按键类 +class KeyPress { + function KeyDown(obj, KeyValue) { + local KeyEvent = obj.getVar(KeyValue.tostring()); //声明储存器 + KeyEvent.clear_vector(); //清空储存器的向量位 + if (sq_IsKeyDown(KeyValue, ENUM_SUBKEY_TYPE_ALL) && KeyEvent.getInt(0) == 0) { + KeyEvent.setInt(0, 1); + return true; + } + } + + function KeyUp(obj, KeyValue) { + local KeyEvent = obj.getVar(KeyValue.tostring()); //声明储存器 + if (sq_IsKeyUp(KeyValue, ENUM_SUBKEY_TYPE_ALL)) { + KeyEvent.setInt(0, 0); + } + } + + function isKeyPress(KeyValue) { + local obj = sq_GetMyMasterCharacter(); + if (KeyPress.KeyDown(obj, KeyValue)) { + return true; + } + KeyPress.KeyUp(obj, KeyValue); + } +} + +//Key 键盘按键类 +class KeyPressNB { + function KeyDown(obj, KeyValue, VarKey) { + local KeyEvent = obj.getVar(VarKey); //声明储存器 + KeyEvent.clear_vector(); //清空储存器的向量位 + if (sq_IsKeyDown(KeyValue, ENUM_SUBKEY_TYPE_ALL) && KeyEvent.getInt(0) == 0) { + KeyEvent.setInt(0, 1); + return true; + } + } + + function KeyUp(obj, KeyValue, VarKey) { + local KeyEvent = obj.getVar(VarKey); //声明储存器 + if (sq_IsKeyUp(KeyValue, ENUM_SUBKEY_TYPE_ALL)) { + KeyEvent.setInt(0, 0); + } + } + + function isKeyPress(KeyValue, VarKey) { + local obj = sq_GetMyMasterCharacter(); + if (KeyPressNB.KeyDown(obj, KeyValue, VarKey)) { + return true; + } + KeyPressNB.KeyUp(obj, KeyValue, VarKey); + } +} + +class System { + + //将值以数组形式插入Table + function InsertArrayInTable(TableObj, Key, FlagKey, Value) { + local Tab; + if (TableObj.rawin(Key)) { + Tab = TableObj[Key]; + } else { + Tab = {}; + } + Tab.rawset(FlagKey, Value); + TableObj.rawset(Key, Tab); + } + +} +//游戏计算类 +class GameC { + //抛物线函数计算 + function getQuadraticFunction(obj, x, b, c) { + local a = (-b.tofloat() * 4) / (c.tofloat() * c.tofloat()); + return a.tofloat() * (x.tofloat() - c.tofloat() / 2) * (x.tofloat() - c.tofloat() / 2) + b.tofloat(); + } + + function RemoveObjectAppend(obj, str) { + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i += 1) { + local object = objectManager.getCollisionObject(i); + local appendage = CNSquirrelAppendage.sq_GetAppendage(object, str); + if (appendage) { + appendage.sq_DeleteAppendages(); + CNSquirrelAppendage.sq_RemoveAppendage(obj, str); + } + } + } + + //找到矩形范围敌人 + function findRoundNearAllEnemyRect(obj, Xvar, Yvar, Dct) { + local ObjTab = []; + local objectManager = obj.getObjectManager(); + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i += 1) { + local object = objectManager.getCollisionObject(i); + if (object && obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_ACTIVE)) { + switch (Dct) { + case 0: + local Distance = sq_GetDistance(obj.getXPos(), obj.getYPos(), object.getXPos(), object.getYPos(), true); + local Xoffset = obj.getXPos() - object.getXPos(); + if (Xoffset >= 0 && Xoffset <= Xvar && sqrt((Distance * Distance) - (Xoffset * Xoffset)) <= Yvar) { + ObjTab.append(object); + } + break; + case 1: + local Distance = sq_GetDistance(obj.getXPos(), obj.getYPos(), object.getXPos(), object.getYPos(), true); + local Xoffset = object.getXPos() - obj.getXPos(); + if (Xoffset >= 0 && Xoffset <= Xvar && sqrt((Distance * Distance) - (Xoffset * Xoffset)) <= Yvar) { + ObjTab.append(object); + } + break; + case 2: + local Distance = sq_GetDistance(obj.getXPos(), obj.getYPos(), object.getXPos(), object.getYPos(), true); + local Yoffset = obj.getYPos() - object.getYPos(); + if (Yoffset >= 0 && Yoffset <= Yvar && sqrt((Distance * Distance) - (Yoffset * Yoffset)) <= Xvar) { + ObjTab.append(object); + } + break; + case 3: + local Distance = sq_GetDistance(obj.getXPos(), obj.getYPos(), object.getXPos(), object.getYPos(), true); + local Yoffset = object.getYPos() - obj.getYPos(); + if (Yoffset >= 0 && Yoffset <= Yvar && sqrt((Distance * Distance) - (Yoffset * Yoffset)) <= Xvar) { + ObjTab.append(object); + } + break; + default: + break; + } + + } + } + + return ObjTab; + } + + //召唤怪物 -- obj -- 怪物ID -- 怪物等级 -- 怪物存在时间 -- 出现X坐标 -- 出现Y坐标 -- 出现Z坐标 + function sendSummonMonsterPacketWithFriend(obj, monsterID, level, summonTime, posx, posy, posz, camp) { + sq_BinaryStartWrite(); + sq_BinaryWriteByte(0); //出现方式 + sq_BinaryWriteDword(monsterID); //怪物编号 + sq_BinaryWriteWord(camp); //阵营 + sq_BinaryWriteByte(level); //等级 + sq_BinaryWriteWord(-1); //未知 + sq_BinaryWriteWord(0); //未知 + sq_BinaryWriteByte(1); //未知 + sq_BinaryWriteByte(2); //未知 + sq_BinaryWriteByte(0); //未知 + sq_BinaryWriteDword(summonTime); //存在时间 + sq_BinaryWriteDword(-1); //未知 + sq_BinaryWriteByte(2); //未知 + sq_SendCreatePassiveObjectPacketPos(obj, 30562, 0, posx, posy, posz); + sq_SendCreatePassiveObjectPacketPos(obj, 48024, 0, posx, posy, posz); + } + + //销毁特效 + function DestroyPassiveObject(obj, Index) { + local ballCount = obj.getMyPassiveObjectCount(Index); + for (local i = 0; i < ballCount; ++i) { + local magicBall = obj.getMyPassiveObject(Index, i) + if (!magicBall) + continue; + if (obj.sq_IsMyControlObject()) { + sq_SendDestroyPacketPassiveObject(magicBall); + } + } + } + + //获取通用Ap + function getCurrencyAppendage(obj) { + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/currency.nut")) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 174, false, "appendage/currency.nut", true); + return appendage; + } else { + return obj.GetSquirrelAppendage("appendage/currency.nut"); + } + } +} + + +//活动图标类 +class EventIcon extends BasicsDrawTool { + //Key + Key = null; + //活动图标文字 + EventStr = null; + //活动图标Ani编号 + EventFrame = null; + //鼠标对象 + Mobj = null; + //绑定对象 + BandObject = null; + + x = null; + y = null; + + constructor(gEventStr, gEventFrame, gKey, gBandObject) { + this.EventStr = gEventStr; + this.EventFrame = gEventFrame; + this.Key = gKey; + this.BandObject = gBandObject; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + + local RootTab = getroottable(); + if (RootTab.rawin("YosinEventSystem")) { + local Arr = RootTab["YosinEventSystem"]; + local TryAppend = true; + local wpos; + foreach(pos , value in Arr) { + if (value.Key == this.Key) { + TryAppend = false; + wpos = pos; + } + } + if (TryAppend) { + Arr.append(this); + RootTab.rawset("YosinEventSystem", Arr); + } + else{ + Arr[wpos] = this; + RootTab.rawset("YosinEventSystem", Arr); + } + } else { + local Arr = []; + Arr.append(this); + RootTab.rawset("YosinEventSystem", Arr); + } + } + + function Show(obj, X, Y) { + x = X; + y = Y; + + //绘制框 + T_DrawDynamicAni(obj, "common/yosinevent/eventsystemeff.ani", X, Y, "YosinEventIconEffA"); + + try { + if (isLBDown()) { + //绘制活动图标 + L_sq_DrawImg("interface2/yosin/eventsystemlist.img", EventFrame, X, Y + 1); + //T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y + 1, EventFrame, "YosinEventIconKey" + Key); + } else { + //绘制活动图标 + L_sq_DrawImg("interface2/yosin/eventsystemlist.img", EventFrame, X, Y); + } + } catch (exception) { + if (isLBDown()) { + //绘制活动图标 + T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y + 1, EventFrame, "YosinEventIconKey" + Key); + } else { + //绘制活动图标 + T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y, EventFrame, "YosinEventIconKey" + Key); + } + } + } + + function StrShow(obj, X, Y) { + //悬停 + if (isInRect() && EventStr) { + local count = EventStr.len() / 3; + T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7), Y - 24, 0, "YosinEventIconStrEffL"); + for (local i = 0; i < count; i++) { + T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7) + 5 + (i * 15), Y - 24, 1, "YosinEventIconStrEffZ"); + } + T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7) + 5 + (count * 15), Y - 24, 2, "YosinEventIconStrEffR"); + L_sq_DrawCode(EventStr, X - (count * 4), Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1); + } + if (isLBActive()) { + BandObject.MainState = true; + BandObject.OpenClassCallBack(); + } + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, x, y, 20, 20)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + +function YosinEventIconInfoCallBack(Chunk) { + local Buffer = Json_STL("YosinEventIconInfoCallBack_Json"); + Buffer.Parse(Chunk, 0, false); + + local RootTab = getroottable(); + local X = Buffer.Get("YosinEventIconInfoXpos"); + local Y = Buffer.Get("YosinEventIconInfoYpos"); + RootTab.rawset("YosinEventIconInfoXpos", X); + RootTab.rawset("YosinEventIconInfoYpos", Y); +} + +Pack_Control.rawset(30002, YosinEventIconInfoCallBack); +//绘制娱心活动图标 +function DrawYosinEventIconSystem(obj) { + + local X = 600; + local Y = 527; + local RootTab = getroottable(); + if (!RootTab.rawin("YosinGetUserInfo") && L_sq_RA(0x1A5FB4C, "0x14+0x28+") >= 1) { + local T = { + op = 30000 + } + local str = Json.Encode(T); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + RootTab.rawset("YosinGetUserInfo", true); + } + if (RootTab.rawin("YosinEventIconInfoXpos")) X = RootTab["YosinEventIconInfoXpos"]; + if (RootTab.rawin("YosinEventIconInfoYpos")) Y = RootTab["YosinEventIconInfoYpos"]; + + local BaseEventCount = L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c); + local DrawCount = BaseEventCount; + local StrDrawCount = BaseEventCount; + if (RootTab.rawin("YosinEventSystem")) { + local EventArr = RootTab["YosinEventSystem"]; + local OneLineOffset = BaseEventCount * 20; + local Draw = true; + //先遍历一遍看看有没有窗口被打开 + foreach(E in EventArr) { + if (E.BandObject.MainState == true) { + Draw = false; + } + } + + foreach(V in EventArr) { + V.Show(obj, X + ((DrawCount % 8) * 20), Y - ((DrawCount / 8) * 20)); + DrawCount++; + } + //如果窗口被打开就不再显示悬停文字 + if (Draw) { + foreach(SV in EventArr) { + SV.StrShow(obj, X + ((StrDrawCount % 8) * 20), Y - ((StrDrawCount / 8) * 20)); + StrDrawCount++; + } + } + } + +} + + + + + +class PlayerEachIcon extends BasicsDrawTool { + Name = null; + X = null; + Y = null; + //鼠标对象 + Mobj = null; + + PlayerName = null; + DrawSwitch = false; + Func = null; + + constructor(gName, gFunc) { + Name = gName; + Func = gFunc; + if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; + + local RootTab = getroottable(); + if (RootTab.rawin("YosinPlayerEachSystem")) { + local Arr = RootTab["YosinPlayerEachSystem"]; + local TryAppend = true; + foreach(value in Arr) { + if (value.Name == this.Name) { + TryAppend = false; + } + } + if (TryAppend) { + Arr.append(this); + RootTab.rawset("YosinPlayerEachSystem", Arr); + } + } else { + local Arr = []; + Arr.append(this); + RootTab.rawset("YosinPlayerEachSystem", Arr); + } + } + + function Show(x, y) { + X = x; + Y = y; + DrawSwitch = true; + + PlayerName = L_Sq_GetPlayerEachName(); + } + + function DrawShow(obj) { + if (DrawSwitch) { + //如果悬停 + if (isInRect()) { + + if (isLBDown()) { + T_DrawStayAni(obj, "common/yosinevent/playersystemeff.ani", X, Y, 1, "PlayerEachIconKey2a"); + L_sq_DrawCode(Name, X + 24, Y + 5, sq_RGBA(255, 161, 31, 250), 0, 1); + } else { + T_DrawStayAni(obj, "common/yosinevent/playersystemeff.ani", X, Y, 1, "PlayerEachIconKey1a"); + L_sq_DrawCode(Name, X + 24, Y + 4, sq_RGBA(255, 161, 31, 250), 0, 1); + } + } else { + T_DrawStayAni(obj, "common/yosinevent/playersystemeff.ani", X, Y, 0, "PlayerEachIconKey0a"); + L_sq_DrawCode(Name, X + 24, Y + 4, sq_RGBA(255, 161, 31, 250), 0, 1); + } + if (isLBActive()) { + Func(PlayerName); + local RootTab = getroottable(); + if (RootTab.rawin("YosinPlayerEachSystem")) { + local PlayerEachArr = RootTab["YosinPlayerEachSystem"]; + foreach(pos, V in PlayerEachArr) { + V.DrawSwitch = false; + } + } + } + } + } + function DrawShowMouse(obj){ + if (DrawSwitch) { + if (!isInRect()){ + if (Mobj.LbEvent || Mobj.RbEvent) { + local RootTab = getroottable(); + if (RootTab.rawin("YosinPlayerEachSystem")) { + local PlayerEachArr = RootTab["YosinPlayerEachSystem"]; + foreach(pos, V in PlayerEachArr) { + V.DrawSwitch = false; + } + } + } + } + } + } + + //悬停状态 + function isInRect() { + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 100, 21)) return true; + else return false; + } + //左键按下状态 + function isLBDown() { + if (isInRect() && Mobj.Lb == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() { + if (isInRect() && Mobj.Lb == 0) return true; + else return false; + } + + //左键单击状态 + function isLBActive() { + if (isInRect() && Mobj.LbEvent) return true; + else return false; + } +} + + +function Sq_PlayerEachPos(x, y) { + local RootTab = getroottable(); + if (RootTab.rawin("YosinPlayerEachSystem")) { + local PlayerEachArr = RootTab["YosinPlayerEachSystem"]; + local obj = sq_GetMyMasterCharacter(); + + foreach(pos, V in PlayerEachArr) { + if (x < 600) V.Show(x + 100, y + (pos * 21)); + else V.Show(x - 100, y + (pos * 21)); + + } + } +} + +//绘制娱心玩家交互功能 +function DrawYosinPlayerEachSystem(obj) { + local RootTab = getroottable(); + if (RootTab.rawin("YosinPlayerEachSystem")) { + local PlayerEachArr = RootTab["YosinPlayerEachSystem"]; + local obj = sq_GetMyMasterCharacter(); + foreach(pos, V in PlayerEachArr) { + V.DrawShow(obj); + } + foreach(npos, nV in PlayerEachArr) { + nV.DrawShowMouse(obj); + } + } +} + +class ControllerC { + Value = null; + MaxValue = null; + + constructor(gMaxValue) { + this.MaxValue = gMaxValue; + Value = 0; + } + + //+ + function A() { + if (Value < MaxValue) Value++; + } + + //- + function M() { + if (Value > 0) Value--; + } +} + +class ScrollControl extends BasicsDrawTool { + Controller = null; + List = null; + SliceCount = null; + FocusCount = null; + FocusList = null; + + //重置FocusList + function SliceList() { + FocusList = null; + FocusList = []; + for (local i = 0; i < (this.List.len() / SliceCount) + 1; i++) { + if (i >= Controller.Value && i < (Controller.Value + FocusCount)) { + local slen = (i + 1) * SliceCount; + local buflist; + if (slen > this.List.len()) buflist = this.List.slice(i * SliceCount); + else buflist = this.List.slice(i * SliceCount, slen); + FocusList.append(buflist); + } + } + } + + constructor(gList, gSliceCount, gFocusCount) { + //克隆List + this.List = gList; + this.SliceCount = gSliceCount; + this.FocusCount = gFocusCount; + + + //初始化控制器 + local CMax = this.List.len() / this.SliceCount; + //取模一下判断是否整除 + if ((this.List.len() % this.SliceCount) > 0) CMax++; + Controller = ControllerC(CMax - FocusCount); + + SliceList(); + } + + //+ + function A() { + Controller.A(); + SliceList(); + } + + //- + function M() { + Controller.M(); + SliceList(); + } +} + + + +//技能类 +{ + function Sq_Get_Ex_IntData(SkillAddress, Idx, objAddress) { + local RetData = 0; + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local Key = "LJ" + objAddress + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + return RetData; + } + + function Sq_Get_Ex_LevelData(SkillAddress, Idx, objAddress) { + local RetData = 0; + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local Key = "EX_LJ" + "SkillAddress" + SkillAddress + "Idx" + Idx; + + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + return RetData; + } + + function Sq_Get_Ex_SkillCoolTime(SkillAddress, Idx, objAddress) { + local RetData = 0; + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local Key = "CT_LJ" + "SkillAddress" + SkillAddress; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + return RetData; + } + + function AddSkillCoolTime(obj, SkillId, Value) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "CT_LJ" + "SkillAddress" + SkillAddress; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + basedata += Value; + RootTab.rawset(Key, basedata); + } else RootTab.rawset(Key, Value); + } + + function ClearSkillCoolTime(obj, SkillId) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "CT_LJ" + "SkillAddress" + SkillAddress; + if (RootTab.rawin(Key)) { + RootTab.rawset(Key, 0); + } else RootTab.rawset(Key, 0); + } + + function AddIntData(obj, SkillId, Idx, Value) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "LJ" + objAddress + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + basedata += Value; + RootTab.rawset(Key, basedata); + } else RootTab.rawset(Key, Value); + } + + function ClearIntData(obj, SkillId, Idx) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "LJ" + objAddress + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + RootTab.rawset(Key, 0); + } else RootTab.rawset(Key, 0); + } + + function HookIntData(obj, SkillId, Idx) { + local RetData = 0; + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "LJ" + objAddress + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + return RetData; + } + + function AddLevelData(obj, SkillId, Idx, Value) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "EX_LJ" + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + local basedata = RootTab[Key]; + basedata += Value; + RootTab.rawset(Key, basedata); + } else RootTab.rawset(Key, Value); + } + + function ClearLevelData(obj, SkillId, Idx) { + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "EX_LJ" + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + RootTab.rawset(Key, 0); + } else RootTab.rawset(Key, 0); + } + + function HookLevelData(obj, SkillId, Idx) { + local RetData = 0; + local Root = getroottable(); + local RootTab; + if (!Root.rawin("LenheartSkillManager")) { + local T = {}; + Root.rawset("LenheartSkillManager", T); + } + RootTab = Root["LenheartSkillManager"]; + local objAddress = L_Sq_GetObjectAddress(obj); + local SkillAddress = L_Sq_GetSkillAddress(SkillId); + local Key = "EX_LJ" + "SkillAddress" + SkillAddress + "Idx" + Idx; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + if (!Root.rawin("LenheartTalismanSkillManager")) { + local T = {}; + Root.rawset("LenheartTalismanSkillManager", T); + } + RootTab = Root["LenheartTalismanSkillManager"]; + if (RootTab.rawin(Key)) { + RetData += RootTab[Key]; + } + + return RetData; + } +} \ No newline at end of file diff --git a/UI/HOOK_UI/CreatChr.nut b/UI/HOOK_UI/CreatChr.nut new file mode 100644 index 0000000..edb27e9 --- /dev/null +++ b/UI/HOOK_UI/CreatChr.nut @@ -0,0 +1,343 @@ +class UnderBaseDraw +{ + //绘制函数 + function T_DrawDynamicAni(AniFileName, Xpos, Ypos, AniName) + { + if(CreatChrTable.rawin(AniName) == false) CreatChrTable.rawset(AniName, sq_CreateAnimation("", AniFileName)); + else + { + sq_AnimationProc(CreatChrTable[AniName]); + sq_drawCurrentFrame(CreatChrTable[AniName], Xpos, Ypos, true); + } + } + + function T_DrawStayAni(AniFileName, Xpos, Ypos, Index, AniName) + { + if(CreatChrTable.rawin(AniName) == false) CreatChrTable.rawset(AniName, sq_CreateAnimation("", AniFileName)); + else + { + sq_DrawSpecificFrame(CreatChrTable[AniName], Xpos, Ypos, false, Index, false, 1.0); + } + } + + function T_DrawStayAniAlpha(AniFileName, Xpos, Ypos, Index, AniName, Alpha) + { + if(CreatChrTable.rawin(AniName) == false) CreatChrTable.rawset(AniName, sq_CreateAnimation("", AniFileName)); + else + { + CreatChrTable[AniName].setRGBA(255, 255, 255, Alpha); + sq_DrawSpecificFrame(CreatChrTable[AniName], Xpos, Ypos, false, Index, false, 1.0); + } + } +} + +class UnderButton extends UnderBaseDraw +{ + State = 0; //按钮状态 + ClickEnble = false; //点击效果 + ButtonDynamic = false; //动态按钮效果 + + CustomClickEnble = false; //自定义点击效果 + CustomClickAnifile = null; //自定义点击效果Ani路径 + CustomButtonName = null; //自定义点击效果名称 + CustomClickFrame = null; //自定义点击效果Ani编号 + CustomClickx = null; //自定义点击效果X坐标 + CustomClicky = null; //自定义点击效果Y坐标 + + + RectEnble = false; //悬停效果 + RectButtonName = null; //悬停名称 + RectBaseAnifile = null; //悬停Ani路径 + RectFrame = null; //非动态按钮的悬停调用Ani编号 + Rectx = null; //悬停X坐标 + Recty = null; //悬停Y坐标 + + + ButtonName = null; //按钮名称 + x = null; //X坐标 + y = null; //Y坐标 + BaseAnifile = null; //调用Ani路径 + width = null; //可点击宽度 + length = null; //可点击高度 + //构造函数 + constructor(gButtonName, gX, gY, gAnifile, gWidth, gLength) + { + ButtonName = gButtonName; + x = gX; + y = gY; + BaseAnifile = gAnifile; + width = gWidth; + length = gLength; + } + //绘制按钮 + function Show() + { + if(ClickEnble) //是否开启点击效果 + { + if(isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 + { + State = 1; //按键进入按下状态 + //++y; + } + if(!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 + { + State = 0; //按键进入弹起状态 + //--y; + } + } + + if(CustomClickEnble) //是否开启自定义点击效果 + { + if(isLBDown()) //按下左键并且按钮处于弹起状态 + { + if(!ButtonDynamic) T_DrawStayAni(CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); + else T_DrawDynamicAni(CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); + } + } + + if(RectEnble) //开启悬停效果时 + { + if((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 + { + //IMouse.SetMouseTask(44); + if(!ButtonDynamic) T_DrawStayAni(RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); + else T_DrawDynamicAni(RectBaseAnifile, Rectx, Recty, RectButtonName); + } + } + if(!isInRect()) //如果鼠标没有悬停的时候 + { + //IMouse.SetMouseTask(0); + if(!ButtonDynamic) T_DrawStayAni(BaseAnifile, x, y, 0, ButtonName); + else T_DrawDynamicAni(BaseAnifile, x, y, ButtonName); + } + } + + //设置自定义点击效果 + function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) + { + CustomClickEnble = bool; //自定义点击效果 + CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 + CustomButtonName = gButtonName; //自定义点击效果名称 + CustomClickFrame = gFrame; //自定义点击效果Ani编号 + CustomClickx = gX; //自定义点击效果X坐标 + CustomClicky = gY; //自定义点击效果Y坐标 + } + + //设置悬停效果 + function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) + { + RectEnble = bool; //悬停效果 + RectButtonName = gButtonName; //悬停名称 + RectBaseAnifile = gAnifile; //悬停Ani路径 + RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 + Rectx = gX; //悬停X坐标 + Recty = gY; //悬停Y坐标 + } + + //设置动态按钮 + function SetClickEnble(bool) + { + ButtonDynamic = bool; + } + + //设置点击效果 + function SetClickEnble(bool) + { + ClickEnble = bool; + } + + //悬停状态 + function isInRect() + { + if(sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; + else return false; + } + //左键按下状态 + function isLBDown() + { + if(isInRect() && IMouse.GetLButton() == 1) return true; + else return false; + } + //左键弹起状态 + function isLBUp() + { + if(isInRect() && IMouse.GetLButton() == 0) return true; + else return false; + } + //左键双击状态 + function IsLBDoubleClick() + { + if(isInRect() && IMouse.GetLButton() == 64) return true; + else return false; + } + //左键单击状态 + function isLBActive() + { + if(isInRect() && IMouse.isButtonUpEvent()) return true; + else return false; + } +} + + +class CreatChrC extends UnderBaseDraw +{ + Job = 0; //当前职业 + ChrJobDrawState = 0; //职业绘制状态 + DrawChrAniEffTimer = null; //职业绘制Timer + ChrJobDrawAlpha = []; //职业绘制Alpha数组 + SelectSwitch = false; //选择职业开关 + + NowChrSelectPos = 0; //当前角色职业选择位置 + + constructor() + { + ChrJobDrawAlpha.resize(16); //初始化职业绘制Alpha数组 + for(local i = 0; i < 16; ++i) + { + ChrJobDrawAlpha[i] = 0; + } + DrawChrAniEffTimer = TimeSTL("DrawChrAniEffTimer", 3000); //初始化职业绘制Timer + } + + //同步角色职业选择位置 + function SyncChrSelectPos() + { + NowChrSelectPos = L_sq_RA(0x1A5E258, "0xA8+0xC0+"); + } + + //绘制角色信息 + function DrawChrJobInfo() + { + T_DrawStayAni("common/creatchr/chrbackground/background.ani", 0, 0, NowChrSelectPos, "BMain0"); + T_DrawDynamicAni("common/creatchr/chrjobani/" + NowChrSelectPos + ".ani", -160, 0, "DrawChrJobInfo" + NowChrSelectPos); + T_DrawDynamicAni("common/creatchr/base/0.ani", 0, 0, "BackGround0"); + + T_DrawDynamicAni("common/creatchr/base/" + (NowChrSelectPos % 2 + 1) + ".ani", 0, 0, "BackGround1" + (NowChrSelectPos % 2 + 1)); + //T_DrawDynamicAni( "common/creatchr/base/1.ani", 0, 0,"BackGround1"); + //T_DrawDynamicAni( "common/creatchr/base/2.ani", -267, 0,"BackGround2"); + T_DrawDynamicAni("common/creatchr/base/3.ani", -267, 0, "BackGround3"); + } + + function DrawSelectButton() + { + for(local i = 0; i < 16; ++i) + { + if(i == NowChrSelectPos) continue; + local SelectButton = UnderButton("SelectChrJob" + i, 40 + (i % 4 * 70), 40 + (i / 4 * 70), "common/creatchr/jobbutton/0.ani", 66, 66); + SelectButton.SetRectEnble(true, "SelectChrJob" + i, 40 + (i % 4 * 70), 40 + (i / 4 * 70), "common/creatchr/jobbutton/0.ani", 1); + SelectButton.SetCustomClickEnble(true, "SelectChrJob" + i, 40 + (i % 4 * 70), 40 + (i / 4 * 70), "common/creatchr/jobbutton/0.ani", 1); + SelectButton.Show(); + if(SelectButton.isLBActive()) + { + L_sq_WA(0x1A5E258, "0xA8+0xC0+", i); + } + } + //角色职业按钮动画完毕以后才显示当前选中 + if(ChrJobDrawAlpha[15] == 250) T_DrawStayAni("common/creatchr/jobbutton/0.ani", 40 + (NowChrSelectPos % 4 * 70), 40 + (NowChrSelectPos / 4 * 70), 2, "DrawChrJobInfoSelectPos"); + } + + function DrawJobButton() + { + DrawChrJobInfo(); + for(local i = 0; i < 16; ++i) + { + T_DrawStayAniAlpha("common/creatchr/jobbutton/0.ani", 40 + (i % 4 * 70), 40 + (i / 4 * 70), 3 + (i * 2), "JobAni" + i, ChrJobDrawAlpha[i]); + } + + local MainButton = UnderButton("MainButton", 50, 530, "common/training/main/maintab.ani", 38, 35); + MainButton.SetRectEnble(true, "MainButton", 50, 530, "common/training/main/maintab.ani", 0); + MainButton.SetCustomClickEnble(true, "MainButton", 50, 530 + 1, "common/training/main/maintab.ani", 0); + MainButton.Show(); + + if(MainButton.isLBActive()) + { + DrawChrAniEffTimer.Reset(); + DrawChrAniEffTimer.Start(); + if(ChrJobDrawState == 0) ++ChrJobDrawState; + else ChrJobDrawState = ChrJobDrawState * -1; + } + + //绘制阶段 + if(ChrJobDrawState == 1) + { + //最后一个角色头像的Alpha值等于250之前 + if(ChrJobDrawAlpha[15] < 250) + { + if(DrawChrAniEffTimer.Get() >= 15) + { + DrawChrAniEffTimer.Reset(); + DrawChrAniEffTimer.Start(); + for(local i = 0; i < 16; ++i) + { + local AddAlpha = (20 - i) * 1; + if(ChrJobDrawAlpha[i] + AddAlpha < 250) ChrJobDrawAlpha[i] += AddAlpha; + else ChrJobDrawAlpha[i] = 250; + } + } + } + else + { + SelectSwitch = true; + } + } + if(ChrJobDrawState == -1) + { + //第一个角色的Alpha值等于0之前 + if(ChrJobDrawAlpha[0] > 0) + { + if(DrawChrAniEffTimer.Get() >= 15) + { + DrawChrAniEffTimer.Reset(); + DrawChrAniEffTimer.Start(); + for(local i = 0; i < 16; ++i) + { + local AddAlpha = (4 + i) * 1; + if(ChrJobDrawAlpha[i] - AddAlpha > 0) ChrJobDrawAlpha[i] -= AddAlpha; + else ChrJobDrawAlpha[i] = 0; + } + } + } + else + { + SelectSwitch = false; + } + } + //绘制选择角色职业按钮 + if((SelectSwitch == true && ChrJobDrawAlpha[0] >= 35) || ChrJobDrawState == 1) DrawSelectButton(); + } + + function Run() + { + SyncChrSelectPos(); + DrawJobButton(); + } +} + +CreatChrTable <- {} +function CreatChr() +{ + /* + if(sq_IsKeyDown(7, ENUM_SUBKEY_TYPE_ALL)) + { + if(CreatChrTable.rawin("CreatChrCObject") == true) CreatChrTable.rawdelete("CreatChrCObject"); + } + */ + if(CreatChrTable.rawin("CreatChrCObject") == false) CreatChrTable.rawset("CreatChrCObject", CreatChrC()); + else CreatChrTable["CreatChrCObject"].Run(); + + //CreatChrC.T_DrawDynamicAni("BackGround0", "common/creatchr/base/0.ani", -267, 0); + /* + if(CreatChrTable.rawin("BackGround0") == false) CreatChrTable.rawset("BackGround0", sq_CreateAnimation("", "common/creatchr/base/0.ani")); + if(CreatChrTable.rawin("BackGround1") == false) CreatChrTable.rawset("BackGround1", sq_CreateAnimation("", "common/creatchr/base/0.ani")); + if(CreatChrTable.rawin("BackGround2") == false) CreatChrTable.rawset("BackGround2", sq_CreateAnimation("", "common/creatchr/base/0.ani")); + if(CreatChrTable.rawin("BackGround3") == false) CreatChrTable.rawset("BackGround3", sq_CreateAnimation("", "common/creatchr/base/0.ani")); + sq_AnimationProc(CreatChrTable["Test"]); + sq_drawCurrentFrame(CreatChrTable["Test"], -267, 0, true); + //T_DrawDynamicAni(obj, "common/dps/maintop.ani", 0, 0, "maintop"); //绘制Dps上边栏 + //print(666); + //local mouseX = IMouse.GetXPos(); + //local mouseY = IMouse.GetYPos(); + //print(mouseX); + //print(mouseY); + */ +} \ No newline at end of file diff --git a/UI/Init_CodeDraw/Init_CodeDraw.nut b/UI/Init_CodeDraw/Init_CodeDraw.nut new file mode 100644 index 0000000..0db20a0 --- /dev/null +++ b/UI/Init_CodeDraw/Init_CodeDraw.nut @@ -0,0 +1,9 @@ +/* +文件名:Init_CodeDraw.nut +路径:UI/Init_CodeDraw/Init_CodeDraw.nut +创建日期:2022-11-14 07:25 +文件用途:修改文字颜色 +*/ +L_RegisterCodeDraw_STL("权御九界 - 最终伤害+20%",sq_RGBA(255,177,0,250),"最终伤害+20%"); +L_RegisterCodeDraw_STL("权御九界 - 冷却-6%",sq_RGBA(255,177,0,250),"冷却-6%"); +L_RegisterCodeDraw_STL("权御九界 - 强化增幅几率+30%",sq_RGBA(255,177,0,250),"强化增幅几率+30%"); \ No newline at end of file diff --git a/UI/Init_ItemColor/Init_ItemColor.nut b/UI/Init_ItemColor/Init_ItemColor.nut new file mode 100644 index 0000000..88fb2f5 --- /dev/null +++ b/UI/Init_ItemColor/Init_ItemColor.nut @@ -0,0 +1,314 @@ +/* +文件名:Init_ItemColor.nut +路径:UI/Init_ItemColor/Init_ItemColor.nut +创建日期:2022-11-01 02:06 +文件用途:修改Item颜色 +*/ + +//权御九界称号 +L_RegisterItemColor_STL(2019185, 0xFF0055FF); +L_RegisterItemColor_STL(2022110703, 0xFF0055FF); +L_RegisterItemColor_STL(2022110704, 0xFF0055FF); +//特殊物品 +L_RegisterItemColor_STL(2022111302, 0xFFACFF08); +L_RegisterItemColor_STL(2022111301, 0xFFACFF08); +L_RegisterItemColor_STL(2022111311, 0xFF00008B); +L_RegisterItemColor_STL(2022111312, 0xFF00008B); +L_RegisterItemColor_STL(2022111313, 0xFF00008B); +L_RegisterItemColor_STL(2022111314, 0xFF00008B); +L_RegisterItemColor_STL(2022111315, 0xFF00008B); +L_RegisterItemColor_STL(2022111316, 0xFF00008B); +L_RegisterItemColor_STL(2022111317, 0xFF00008B); +//传说 +L_RegisterItemColor_STL(100300079, 0xFF0055FF); +L_RegisterItemColor_STL(100300080, 0xFF0055FF); +L_RegisterItemColor_STL(100300081, 0xFF0055FF); +L_RegisterItemColor_STL(100300082, 0xFF0055FF); +L_RegisterItemColor_STL(100300083, 0xFF0055FF); +L_RegisterItemColor_STL(100300329, 0xFF0055FF); +L_RegisterItemColor_STL(100300330, 0xFF0055FF); +L_RegisterItemColor_STL(100300331, 0xFF0055FF); +L_RegisterItemColor_STL(100300333, 0xFF0055FF); +L_RegisterItemColor_STL(100300334, 0xFF0055FF); +L_RegisterItemColor_STL(100300497, 0xFF0055FF); +L_RegisterItemColor_STL(100300505, 0xFF0055FF); +L_RegisterItemColor_STL(100300506, 0xFF0055FF); +L_RegisterItemColor_STL(100300507, 0xFF0055FF); +L_RegisterItemColor_STL(100310804, 0xFF0055FF); +L_RegisterItemColor_STL(100310805, 0xFF0055FF); +L_RegisterItemColor_STL(100310806, 0xFF0055FF); +L_RegisterItemColor_STL(100310807, 0xFF0055FF); +L_RegisterItemColor_STL(100310813, 0xFF0055FF); +L_RegisterItemColor_STL(100310814, 0xFF0055FF); +L_RegisterItemColor_STL(100200490, 0xFF0055FF); +L_RegisterItemColor_STL(100230410, 0xFF0055FF); +L_RegisterItemColor_STL(100220442, 0xFF0055FF); +L_RegisterItemColor_STL(100210442, 0xFF0055FF); +L_RegisterItemColor_STL(100050074, 0xFF0055FF); +L_RegisterItemColor_STL(100080019, 0xFF0055FF); +L_RegisterItemColor_STL(100080435, 0xFF0055FF); +L_RegisterItemColor_STL(100080437, 0xFF0055FF); +L_RegisterItemColor_STL(100070023, 0xFF0055FF); +L_RegisterItemColor_STL(100060029, 0xFF0055FF); +L_RegisterItemColor_STL(100060476, 0xFF0055FF); +L_RegisterItemColor_STL(100090020, 0xFF0055FF); +L_RegisterItemColor_STL(100350107, 0xFF0055FF); +L_RegisterItemColor_STL(100350108, 0xFF0055FF); +L_RegisterItemColor_STL(100350109, 0xFF0055FF); +L_RegisterItemColor_STL(100350110, 0xFF0055FF); +L_RegisterItemColor_STL(100350111, 0xFF0055FF); +L_RegisterItemColor_STL(100350112, 0xFF0055FF); +L_RegisterItemColor_STL(100350696, 0xFF0055FF); +L_RegisterItemColor_STL(100350697, 0xFF0055FF); +L_RegisterItemColor_STL(100350698, 0xFF0055FF); +L_RegisterItemColor_STL(100350699, 0xFF0055FF); +L_RegisterItemColor_STL(100352608, 0xFF0055FF); +L_RegisterItemColor_STL(100352611, 0xFF0055FF); +L_RegisterItemColor_STL(100352612, 0xFF0055FF); +L_RegisterItemColor_STL(100352613, 0xFF0055FF); +L_RegisterItemColor_STL(100352614, 0xFF0055FF); +L_RegisterItemColor_STL(100352615, 0xFF0055FF); +L_RegisterItemColor_STL(100352616, 0xFF0055FF); +L_RegisterItemColor_STL(100352617, 0xFF0055FF); +L_RegisterItemColor_STL(100352618, 0xFF0055FF); +L_RegisterItemColor_STL(100352619, 0xFF0055FF); +L_RegisterItemColor_STL(100100138, 0xFF0055FF); +L_RegisterItemColor_STL(100100533, 0xFF0055FF); +L_RegisterItemColor_STL(100130135, 0xFF0055FF); +L_RegisterItemColor_STL(100130427, 0xFF0055FF); +L_RegisterItemColor_STL(100120153, 0xFF0055FF); +L_RegisterItemColor_STL(100110122, 0xFF0055FF); +L_RegisterItemColor_STL(100110465, 0xFF0055FF); +L_RegisterItemColor_STL(100140071, 0xFF0055FF); +L_RegisterItemColor_STL(100320084, 0xFF0055FF); +L_RegisterItemColor_STL(100320085, 0xFF0055FF); +L_RegisterItemColor_STL(100320086, 0xFF0055FF); +L_RegisterItemColor_STL(100320087, 0xFF0055FF); +L_RegisterItemColor_STL(100320088, 0xFF0055FF); +L_RegisterItemColor_STL(100320089, 0xFF0055FF); +L_RegisterItemColor_STL(100320090, 0xFF0055FF); +L_RegisterItemColor_STL(100320091, 0xFF0055FF); +L_RegisterItemColor_STL(100320618, 0xFF0055FF); +L_RegisterItemColor_STL(100320619, 0xFF0055FF); +L_RegisterItemColor_STL(100320620, 0xFF0055FF); +L_RegisterItemColor_STL(100320625, 0xFF0055FF); +L_RegisterItemColor_STL(100320626, 0xFF0055FF); +L_RegisterItemColor_STL(100322054, 0xFF0055FF); +L_RegisterItemColor_STL(100322055, 0xFF0055FF); +L_RegisterItemColor_STL(100322056, 0xFF0055FF); +L_RegisterItemColor_STL(100322057, 0xFF0055FF); +L_RegisterItemColor_STL(100322058, 0xFF0055FF); +L_RegisterItemColor_STL(100322059, 0xFF0055FF); +L_RegisterItemColor_STL(100322060, 0xFF0055FF); +L_RegisterItemColor_STL(100322061, 0xFF0055FF); +L_RegisterItemColor_STL(100322062, 0xFF0055FF); +L_RegisterItemColor_STL(100322063, 0xFF0055FF); +L_RegisterItemColor_STL(100322064, 0xFF0055FF); +L_RegisterItemColor_STL(100322065, 0xFF0055FF); +L_RegisterItemColor_STL(100322066, 0xFF0055FF); +L_RegisterItemColor_STL(100322067, 0xFF0055FF); +L_RegisterItemColor_STL(100322068, 0xFF0055FF); +L_RegisterItemColor_STL(100322069, 0xFF0055FF); +L_RegisterItemColor_STL(100322070, 0xFF0055FF); +L_RegisterItemColor_STL(100322071, 0xFF0055FF); +L_RegisterItemColor_STL(100250113, 0xFF0055FF); +L_RegisterItemColor_STL(100280112, 0xFF0055FF); +L_RegisterItemColor_STL(100270136, 0xFF0055FF); +L_RegisterItemColor_STL(100260113, 0xFF0055FF); +L_RegisterItemColor_STL(100260449, 0xFF0055FF); +L_RegisterItemColor_STL(100290067, 0xFF0055FF); +L_RegisterItemColor_STL(100290300, 0xFF0055FF); +L_RegisterItemColor_STL(100150515, 0xFF0055FF); +L_RegisterItemColor_STL(100180411, 0xFF0055FF); +L_RegisterItemColor_STL(100170449, 0xFF0055FF); +L_RegisterItemColor_STL(100190287, 0xFF0055FF); +L_RegisterItemColor_STL(100340349, 0xFF0055FF); +L_RegisterItemColor_STL(100340350, 0xFF0055FF); +L_RegisterItemColor_STL(100340351, 0xFF0055FF); +L_RegisterItemColor_STL(100340352, 0xFF0055FF); +L_RegisterItemColor_STL(100340353, 0xFF0055FF); +L_RegisterItemColor_STL(100340354, 0xFF0055FF); +L_RegisterItemColor_STL(100340355, 0xFF0055FF); +L_RegisterItemColor_STL(100340356, 0xFF0055FF); +L_RegisterItemColor_STL(100341603, 0xFF0055FF); +L_RegisterItemColor_STL(100341604, 0xFF0055FF); +L_RegisterItemColor_STL(100341605, 0xFF0055FF); +L_RegisterItemColor_STL(100341606, 0xFF0055FF); +L_RegisterItemColor_STL(100341607, 0xFF0055FF); +L_RegisterItemColor_STL(100341608, 0xFF0055FF); +L_RegisterItemColor_STL(100341613, 0xFF0055FF); +L_RegisterItemColor_STL(100341614, 0xFF0055FF); +L_RegisterItemColor_STL(100341619, 0xFF0055FF); +L_RegisterItemColor_STL(100344252, 0xFF0055FF); +L_RegisterItemColor_STL(100344253, 0xFF0055FF); +L_RegisterItemColor_STL(100344254, 0xFF0055FF); +L_RegisterItemColor_STL(100344255, 0xFF0055FF); +L_RegisterItemColor_STL(100344256, 0xFF0055FF); +L_RegisterItemColor_STL(100344257, 0xFF0055FF); +L_RegisterItemColor_STL(100344258, 0xFF0055FF); +L_RegisterItemColor_STL(100344259, 0xFF0055FF); +L_RegisterItemColor_STL(100344260, 0xFF0055FF); +L_RegisterItemColor_STL(100344262, 0xFF0055FF); +L_RegisterItemColor_STL(100310072, 0xFF0055FF); +L_RegisterItemColor_STL(100310073, 0xFF0055FF); +L_RegisterItemColor_STL(100310074, 0xFF0055FF); +L_RegisterItemColor_STL(100310546, 0xFF0055FF); +L_RegisterItemColor_STL(100310547, 0xFF0055FF); +L_RegisterItemColor_STL(100310548, 0xFF0055FF); +L_RegisterItemColor_STL(100310553, 0xFF0055FF); +L_RegisterItemColor_STL(100310554, 0xFF0055FF); +L_RegisterItemColor_STL(100312195, 0xFF0055FF); +L_RegisterItemColor_STL(100312196, 0xFF0055FF); +L_RegisterItemColor_STL(100312198, 0xFF0055FF); +L_RegisterItemColor_STL(100312199, 0xFF0055FF); +L_RegisterItemColor_STL(100312200, 0xFF0055FF); +L_RegisterItemColor_STL(100312201, 0xFF0055FF); +L_RegisterItemColor_STL(100312202, 0xFF0055FF); +L_RegisterItemColor_STL(100312204, 0xFF0055FF); +L_RegisterItemColor_STL(100312205, 0xFF0055FF); +L_RegisterItemColor_STL(102030398, 0xFF0055FF); +L_RegisterItemColor_STL(102030399, 0xFF0055FF); +L_RegisterItemColor_STL(102040048, 0xFF0055FF); +L_RegisterItemColor_STL(102020052, 0xFF0055FF); +L_RegisterItemColor_STL(102020368, 0xFF0055FF); +L_RegisterItemColor_STL(102020371, 0xFF0055FF); +L_RegisterItemColor_STL(102010229, 0xFF0055FF); +L_RegisterItemColor_STL(102010463, 0xFF0055FF); +L_RegisterItemColor_STL(102010464, 0xFF0055FF); +L_RegisterItemColor_STL(102000176, 0xFF0055FF); +L_RegisterItemColor_STL(102000399, 0xFF0055FF); +L_RegisterItemColor_STL(102000400, 0xFF0055FF); +L_RegisterItemColor_STL(102030048, 0xFF0055FF); +L_RegisterItemColor_STL(102040435, 0xFF0055FF); +L_RegisterItemColor_STL(102040436, 0xFF0055FF); +L_RegisterItemColor_STL(104010043, 0xFF0055FF); +L_RegisterItemColor_STL(104010449, 0xFF0055FF); +L_RegisterItemColor_STL(104010452, 0xFF0055FF); +L_RegisterItemColor_STL(104040164, 0xFF0055FF); +L_RegisterItemColor_STL(104040468, 0xFF0055FF); +L_RegisterItemColor_STL(104040469, 0xFF0055FF); +L_RegisterItemColor_STL(104030155, 0xFF0055FF); +L_RegisterItemColor_STL(104030454, 0xFF0055FF); +L_RegisterItemColor_STL(104030455, 0xFF0055FF); +L_RegisterItemColor_STL(104040047, 0xFF0055FF); +L_RegisterItemColor_STL(104020232, 0xFF0055FF); +L_RegisterItemColor_STL(104020450, 0xFF0055FF); +L_RegisterItemColor_STL(104020453, 0xFF0055FF); +L_RegisterItemColor_STL(104000049, 0xFF0055FF); +L_RegisterItemColor_STL(104000468, 0xFF0055FF); +L_RegisterItemColor_STL(104000469, 0xFF0055FF); +L_RegisterItemColor_STL(106040050, 0xFF0055FF); +L_RegisterItemColor_STL(106040363, 0xFF0055FF); +L_RegisterItemColor_STL(106040366, 0xFF0055FF); +L_RegisterItemColor_STL(106010136, 0xFF0055FF); +L_RegisterItemColor_STL(106010384, 0xFF0055FF); +L_RegisterItemColor_STL(106010387, 0xFF0055FF); +L_RegisterItemColor_STL(106010046, 0xFF0055FF); +L_RegisterItemColor_STL(106020446, 0xFF0055FF); +L_RegisterItemColor_STL(106020449, 0xFF0055FF); +L_RegisterItemColor_STL(106000047, 0xFF0055FF); +L_RegisterItemColor_STL(106000357, 0xFF0055FF); +L_RegisterItemColor_STL(106000358, 0xFF0055FF); +L_RegisterItemColor_STL(106030137, 0xFF0055FF); +L_RegisterItemColor_STL(106030479, 0xFF0055FF); +L_RegisterItemColor_STL(106030482, 0xFF0055FF); +L_RegisterItemColor_STL(108030043, 0xFF0055FF); +L_RegisterItemColor_STL(108040343, 0xFF0055FF); +L_RegisterItemColor_STL(108040344, 0xFF0055FF); +L_RegisterItemColor_STL(108000112, 0xFF0055FF); +L_RegisterItemColor_STL(108000382, 0xFF0055FF); +L_RegisterItemColor_STL(108000383, 0xFF0055FF); +L_RegisterItemColor_STL(108010100, 0xFF0055FF); +L_RegisterItemColor_STL(108010352, 0xFF0055FF); +L_RegisterItemColor_STL(108010353, 0xFF0055FF); +L_RegisterItemColor_STL(108030386, 0xFF0055FF); +L_RegisterItemColor_STL(108030387, 0xFF0055FF); +L_RegisterItemColor_STL(108040044, 0xFF0055FF); +L_RegisterItemColor_STL(108020044, 0xFF0055FF); +L_RegisterItemColor_STL(108020095, 0xFF0055FF); +L_RegisterItemColor_STL(108020333, 0xFF0055FF); +L_RegisterItemColor_STL(108020336, 0xFF0055FF); +L_RegisterItemColor_STL(101040156, 0xFF0055FF); +L_RegisterItemColor_STL(101040405, 0xFF0055FF); +L_RegisterItemColor_STL(101040406, 0xFF0055FF); +L_RegisterItemColor_STL(101020543, 0xFF0055FF); +L_RegisterItemColor_STL(101020544, 0xFF0055FF); +L_RegisterItemColor_STL(101030044, 0xFF0055FF); +L_RegisterItemColor_STL(101010047, 0xFF0055FF); +L_RegisterItemColor_STL(101030598, 0xFF0055FF); +L_RegisterItemColor_STL(101030599, 0xFF0055FF); +L_RegisterItemColor_STL(101010731, 0xFF0055FF); +L_RegisterItemColor_STL(101010732, 0xFF0055FF); +L_RegisterItemColor_STL(101020049, 0xFF0055FF); +L_RegisterItemColor_STL(101000030, 0xFF0055FF); +L_RegisterItemColor_STL(101000574, 0xFF0055FF); +L_RegisterItemColor_STL(101000575, 0xFF0055FF); +L_RegisterItemColor_STL(109000045, 0xFF0055FF); +L_RegisterItemColor_STL(109000333, 0xFF0055FF); +L_RegisterItemColor_STL(109000334, 0xFF0055FF); +L_RegisterItemColor_STL(109010044, 0xFF0055FF); +L_RegisterItemColor_STL(109010318, 0xFF0055FF); +L_RegisterItemColor_STL(109010321, 0xFF0055FF); +L_RegisterItemColor_STL(109020042, 0xFF0055FF); +L_RegisterItemColor_STL(109030217, 0xFF0055FF); +L_RegisterItemColor_STL(109030220, 0xFF0055FF); + + +//以下为镇魂 释魂 +L_RegisterItemColor_STL(102040045, 0xFF0055FF); +L_RegisterItemColor_STL(102020049, 0xFF0055FF); +L_RegisterItemColor_STL(102010113, 0xFF0055FF); +L_RegisterItemColor_STL(102000056, 0xFF0055FF); +L_RegisterItemColor_STL(102030045, 0xFF0055FF); +L_RegisterItemColor_STL(104010040, 0xFF0055FF); +L_RegisterItemColor_STL(104020042, 0xFF0055FF); +L_RegisterItemColor_STL(104040044, 0xFF0055FF); +L_RegisterItemColor_STL(104030049, 0xFF0055FF); +L_RegisterItemColor_STL(104000046, 0xFF0055FF); +L_RegisterItemColor_STL(106040047, 0xFF0055FF); +L_RegisterItemColor_STL(106020041, 0xFF0055FF); +L_RegisterItemColor_STL(106010043, 0xFF0055FF); +L_RegisterItemColor_STL(106000044, 0xFF0055FF); +L_RegisterItemColor_STL(106030043, 0xFF0055FF); +L_RegisterItemColor_STL(108030040, 0xFF0055FF); +L_RegisterItemColor_STL(108000044, 0xFF0055FF); +L_RegisterItemColor_STL(108010042, 0xFF0055FF); +L_RegisterItemColor_STL(108040041, 0xFF0055FF); +L_RegisterItemColor_STL(108020041, 0xFF0055FF); +L_RegisterItemColor_STL(101040045, 0xFF0055FF); +L_RegisterItemColor_STL(101030041, 0xFF0055FF); +L_RegisterItemColor_STL(101010044, 0xFF0055FF); +L_RegisterItemColor_STL(101020046, 0xFF0055FF); +L_RegisterItemColor_STL(101000027, 0xFF0055FF); +L_RegisterItemColor_STL(109000042, 0xFF0055FF); +L_RegisterItemColor_STL(109010041, 0xFF0055FF); +L_RegisterItemColor_STL(109020039, 0xFF0055FF); +L_RegisterItemColor_STL(102040046, 0xFF0055FF); +L_RegisterItemColor_STL(102020050, 0xFF0055FF); +L_RegisterItemColor_STL(102010114, 0xFF0055FF); +L_RegisterItemColor_STL(102000057, 0xFF0055FF); +L_RegisterItemColor_STL(102030046, 0xFF0055FF); +L_RegisterItemColor_STL(104010041, 0xFF0055FF); +L_RegisterItemColor_STL(104020043, 0xFF0055FF); +L_RegisterItemColor_STL(104040045, 0xFF0055FF); +L_RegisterItemColor_STL(104030050, 0xFF0055FF); +L_RegisterItemColor_STL(104000047, 0xFF0055FF); +L_RegisterItemColor_STL(106040048, 0xFF0055FF); +L_RegisterItemColor_STL(106020042, 0xFF0055FF); +L_RegisterItemColor_STL(106010044, 0xFF0055FF); +L_RegisterItemColor_STL(106000045, 0xFF0055FF); +L_RegisterItemColor_STL(106030044, 0xFF0055FF); +L_RegisterItemColor_STL(108030041, 0xFF0055FF); +L_RegisterItemColor_STL(108000045, 0xFF0055FF); +L_RegisterItemColor_STL(108010043, 0xFF0055FF); +L_RegisterItemColor_STL(108040042, 0xFF0055FF); +L_RegisterItemColor_STL(108020042, 0xFF0055FF); +L_RegisterItemColor_STL(101040046, 0xFF0055FF); +L_RegisterItemColor_STL(101030042, 0xFF0055FF); +L_RegisterItemColor_STL(101010045, 0xFF0055FF); +L_RegisterItemColor_STL(101020047, 0xFF0055FF); +L_RegisterItemColor_STL(101000028, 0xFF0055FF); +L_RegisterItemColor_STL(109000043, 0xFF0055FF); +L_RegisterItemColor_STL(109010042, 0xFF0055FF); +L_RegisterItemColor_STL(109020040, 0xFF0055FF); +//传说 \ No newline at end of file diff --git a/UI/MonsterBloodUi/MonsterBloodUi.nut b/UI/MonsterBloodUi/MonsterBloodUi.nut new file mode 100644 index 0000000..9c91f2d --- /dev/null +++ b/UI/MonsterBloodUi/MonsterBloodUi.nut @@ -0,0 +1,237 @@ +/* +文件名:MonsterBloodUi.nut +路径:UI/MonsterBloodUi/MonsterBloodUi.nut +创建日期:2022-10-14 18:19 +文件用途: +*/ +NowHitMonsterId <- null +BOSSOpenDraw <- false +class NewMonsterBlood extends BasicsDrawTool { + Id = null; + OldHp = null; + NowHp = null; + + HpArr = null; + MonsterBloodUiEffTimer = null; + + constructor(id) { + HpArr = []; + Id = id; + //构造血条Timer + MonsterBloodUiEffTimer = TimeSTL("MonsterBloodUiEffTimerid" + id, 2000); + } + + function Delete() { + MonsterBloodUiEffTimer.Delete(); + } + + function SetDate(MonObject, Hp) { + if (!MonObject || MonObject.isDead()) return; + //if(MonsterBloodUiEffTimer.Get() >= 300 || MonsterBloodUiEffTimer.Get() == 0) + //{ + if (MonObject.getHp() > Hp) + HpArr.append(Hp); + //} + } + + function Run(object) { + if (!object || object.isDead()) return; + if (!OldHp) { + OldHp = object.getHp(); + HpArr.append(OldHp); + HpArr.append(OldHp); + //重置时间容器 + MonsterBloodUiEffTimer.Reset(); + //开始计时 + MonsterBloodUiEffTimer.Start(); + } + + } + + + //绘制简易静态Ani // obj -- ani路径 -- X -- Y -- 第几帧 -- ani名字 + function DrawStayAni(obj, aniFileName, x, y, index, aniname, R, G, B, A) { + if (!obj) return; + local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName); + if (SelectAni) { + SelectAni.setRGBA(R, G, B, A); + //sq_AnimationProc(SelectAni); + sq_DrawSpecificFrame(SelectAni, x, y, false, index, false, 1.0); + } + } + + //绘制跟随血条 + function DrawF_MonsterHp(obj, OldRate, BloodRate, Time, ArrCount, Xpos, Ypos, MonObject) { + + local color = 0xFFffffff; + if (MonObject.isObjectType(OBJECTTYPE_CHARACTER) && MonObject.getTeam() == 0) color = 0xFF4990aa; //角色对象 + else if (MonObject.isObjectType(OBJECTTYPE_CHARACTER) && MonObject.getTeam() != 0) color = 0xFF0000CC; //敌对角色对象 + else if (!MonObject.isObjectType(OBJECTTYPE_CHARACTER) && MonObject.getTeam() == 0) color = 0xFF00ff00; //友方对象 + + L_sq_DrawCode("Lv." + MonObject.GetLevel().tostring(), Xpos - 49, Ypos + 16, color, 0, 1); + L_sq_DrawCode(MonObject.GetName(), Xpos - 17, Ypos + 16, color, 0, 1); + + local R = 0xff; + local G = 0x00; + local B = 0x00; + if (MonObject.getTeam() == 0) { + R = 0x00; + G = 0xff; + } else if (MonObject.getTeam() == 200) { + R = 0xFF; + G = 0x66; + } + + local MR = 0x00; + local MG = 0x99; + local MB = 0xFF; + + T_DrawStayAni(obj, "common/monsterbloodui/new/normain.ani", Xpos - 47, Ypos + 30, 0, "怪物血槽nor底"); + + //绘制血槽特效 + local v = sq_GetUniformVelocity((OldRate * 96.0).tointeger(), (BloodRate * 96.0).tointeger(), Time * (ArrCount - 1), 300); + local av = sq_GetUniformVelocity(250, 100, Time * (ArrCount - 1), 300); + if (v < 0) v = 0; + setClip(Xpos - 47 + 2, Ypos + 30 + 1, Xpos - 47 + 3 + v, Ypos + 30 + 1 + 6); + DrawStayAni(obj, "common/monsterbloodui/new/noreff.ani", Xpos - 47 + 3, Ypos + 30 + 2, 0, "怪物血槽nor", 255, 255, 255, av); + releaseClip(); //裁切结束 + //绘制血槽 + setClip(Xpos - 47 + 2, Ypos + 30 + 1, Xpos - 47 + 3 + (BloodRate * 96.0).tointeger(), Ypos + 30 + 1 + 6); + DrawStayAni(obj, "common/monsterbloodui/new/noreff.ani", Xpos - 47 + 3, Ypos + 30 + 2, 0, "怪物血槽norEFf", R, G, B, 250); + releaseClip(); + + + //如果需要绘制蓝槽 + if (MonObject.isObjectType(OBJECTTYPE_CHARACTER) /*|| sq_IsMyControlObject(MonObject)*/ ) { + T_DrawStayAni(obj, "common/monsterbloodui/new/normain.ani", Xpos - 47, Ypos + 38, 0, "怪物蓝槽nor底"); + local m = ((MonObject.getMp().tofloat() / MonObject.getMpMax().tofloat()) * 96.0).tointeger(); + setClip(Xpos - 47 + 2, Ypos + 38 + 1, Xpos - 47 + 3 + m, Ypos + 30 + 1 + 6); + DrawStayAni(obj, "common/monsterbloodui/new/noreff.ani", Xpos - 47 + 3, Ypos + 38 + 2, 0, "怪物蓝槽nor", MR, MG, MB, 250); + releaseClip(); //裁切结束 + } + } + + //绘制固定血条 基础坐标 血槽框补全坐标 血条偏移坐标 血条高度 + function DrawFX_MonsterHp(obj, OldRate, BloodRate, Time, ArrCount, Type, X, Y, XF, YF, XS, YS, YM) { + + local v = sq_GetUniformVelocity((OldRate * 538.0).tointeger(), (BloodRate * 538.0).tointeger(), Time * (ArrCount - 1), 1000); + local av = sq_GetUniformVelocity(250, 100, Time * (ArrCount - 1), 1000); + if (v < 0) v = 0; + + + //绘制血槽底 + T_DrawStayAni(obj, "common/monsterbloodui/zh/normain.ani", X, Y, 0, 0 + "BOSSNewMonsterBloodUi_Main"); + + + //绘制生命值 + setClip(X, Y, X + v, Y + YM); + local BloodEffAni = obj.getVar().GetAnimationMap(2 + "_NewMonsterBloodUi_BloodEff", "common/monsterbloodui/zh/normain.ani"); + BloodEffAni.setRGBA(255, 255, 255, av); + sq_DrawSpecificFrame(BloodEffAni, X, Y, false, 2, false, 1.0); + releaseClip(); + + setClip(X, Y, X + (BloodRate * 538).tointeger(), Y + YM); + T_DrawStayAni(obj, "common/monsterbloodui/zh/normain.ani", X, Y, 1, 1 + "_NewMonsterBloodUi_Blood"); + releaseClip(); + + } + + + function Draw(obj, MonObject) { + if (!MonObject || !obj || MonObject.isDead() || obj.isDead()) return; + + local Xpos = sq_GetScreenXPos(MonObject); + local Ypos = sq_GetScreenYPos(MonObject); + //local Zpos = sq_GetHeightObject(MonObject); + + //Ypos -= (Zpos * 1.50).tointeger(); + + local ArrCount = HpArr.len(); + if (ArrCount > 1) { + ///print(11111); + local Time = MonsterBloodUiEffTimer.Get(); + if (Time == false) return; + if ((Time * (ArrCount - 1)) >= 300 && ArrCount > 2) { + HpArr.remove(0); + //重置时间容器 + MonsterBloodUiEffTimer.Reset(); + //开始计时 + MonsterBloodUiEffTimer.Start(); + + } + + OldHp = HpArr[0]; + NowHp = HpArr[1]; + local OldRate = OldHp.tofloat() / MonObject.getHpMax().tofloat(); + local BloodRate = NowHp.tofloat() / MonObject.getHpMax().tofloat(); + + //普通怪物血条 + //DrawFX_MonsterHp(obj, OldRate, BloodRate, Time, ArrCount, 0, 0, 110, 626, 15, 29, 17, 27); + + if (getroottable().rawin("S_MonsterBloodSB") && getroottable()["S_MonsterBloodSB"] == true) { + //Boss血条 + if (sq_IsBoss(MonObject)) { + //DrawFX_MonsterHp(obj, OldRate, BloodRate, Time, ArrCount, 8, 0, 110, 628, 0, 34, 4, 50); + } + //普通怪物血条 + else if (!sq_IsBoss(MonObject)) DrawF_MonsterHp(obj, OldRate, BloodRate, Time, ArrCount, Xpos, Ypos, MonObject); + } else { + + } + + //Boss血条 + if (sq_GetObjectId(MonObject) == NowHitMonsterId && sq_IsBoss(MonObject) && BOSSOpenDraw == true) { + DrawFX_MonsterHp(obj, OldRate, BloodRate, Time, ArrCount, 8, 34, 130, 628, 0, 34, 4, 50); + BOSSOpenDraw = false; + } + } + } +} + + +function NewMonsterBloodUi(obj) { + local RootTab = getroottable(); + + if (sq_GetCurrentModuleType() == 3 || sq_GetCurrentModuleType() == 10 || sq_GetCurrentModuleType() == 12 || sq_GetCurrentModuleType() == 13) { + if (RootTab.rawin("MonBloodUI") == false) { + local Map = {}; + RootTab.rawset("MonBloodUI", Map); + } + } +} + + + +//Hook获取是否要使用新版血条 +function Sq_GetDrawMonBloodSw() { + if (getroottable().rawin("S_MonsterBloodSB")) return getroottable()["S_MonsterBloodSB"]; + else return false; +} + +//新版怪物血条回调 +function Sq_DrawMonsterBlood(Object, X, Y) { + BOSSOpenDraw = true; + //Sout("X: %L" , X); + //Sout("Y: %L" , Y); +} + +//附加Ap +function MonsterBlood_ApAdd(obj) { + local objectManager = obj.getObjectManager(); + if (!objectManager) return; + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < CollisionObjectNumber; i += 1) { + local object = objectManager.getCollisionObject(i); + + if (object && object.isObjectType(OBJECTTYPE_ACTIVE)) { + local activeObj = sq_GetCNRDObjectToActiveObject(object); //活動類 + //沒死亡 + if (!activeObj.isDead()) { + if (!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "appendage/currency_monster.nut")) { + local append = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, true, "appendage/currency_monster.nut", false); + CNSquirrelAppendage.sq_AppendAppendageID(append, activeObj, obj, 255, false); + } + } + } + } +} \ No newline at end of file diff --git a/UI/TeamDps/TeamDps.nut b/UI/TeamDps/TeamDps.nut new file mode 100644 index 0000000..a931dd4 --- /dev/null +++ b/UI/TeamDps/TeamDps.nut @@ -0,0 +1,235 @@ +/* +文件名:TeamDps.nut +路径:UI/TeamDps/TeamDps.nut +创建日期:2023-01-26 05:15 +文件用途:团队DPS +*/ + + + + + +function onSetHp_appendage_dps(appendage, hp, attacker) { + if (!appendage) { + return hp; + } + local parentObj = appendage.getParent(); + local sourceObj = appendage.getSource(); + + local RootTab = getroottable(); + if (RootTab.rawin("TEAMDPSCONTROLOBJECT")) RootTab["TEAMDPSCONTROLOBJECT"].onSetHp(appendage, hp, attacker); + + return hp; +} + + +class TeamDps extends BasicsDrawTool { + MyDamage = 0; + TeamDpsTimer = null; + GetTeamDpsTimer = null; + PackSize = 0; + DPSSTL = {}; + + function TeamDpsPack(chunk) { + local RootTab = getroottable(); + if (RootTab.rawin("TEAMDPSCONTROLOBJECT") == false)return; + local TObj = RootTab["TEAMDPSCONTROLOBJECT"]; + + local TeamDpsPack = Json_STL("TeamDpsPack"); + TeamDpsPack.Parse(chunk, 0, false); + TObj.PackSize = TeamDpsPack.Get("PACKSIZE"); + for (local i = 0; i < TObj.PackSize; ++i) { + local tab = ["Player", "0", "0%", "0.0"]; + tab[0] = TeamDpsPack.Get("PACK->" + i + "->NAME"); + tab[1] = TeamDpsPack.Get("PACK->" + i + "->DAMAGE"); + tab[2] = TeamDpsPack.Get("PACK->" + i + "->RATE"); + tab[3] = TeamDpsPack.Get("PACK->" + i + "->RATENUM"); + if (tab[0] != false && tab[1] != false && tab[2] != false && tab[3] != false) + TObj.DPSSTL.rawset(i, tab); + } + + TeamDpsPack.Delete(); + } + + + constructor() { + //构造同步Timer + TeamDpsTimer = TimeSTL("TeamDpsTimer", 5000); + TeamDpsTimer.Start(); + GetTeamDpsTimer = TimeSTL("GetTeamDpsTimer", 5000); + GetTeamDpsTimer.Start(); + Pack_Control.rawset(614, TeamDpsPack); + } + + //AP成员函数 + function onSetHp(Append, Hp, Attacker) { + if (!Append) return Hp; + + local MonsterObj = sq_GetCNRDObjectToActiveObject(Append.getParent()); //获取怪物 + local Chr = sq_GetCNRDObjectToSQRCharacter(sq_getMyCharacter()); //获取我自己 + if (!MonsterObj || !Chr) //如果怪物或者我自己不存在设置AP销毁 + { + Append.setValid(false); + return Hp; + } + + + //if(!MonsterObj.isMyControlObject()) return Hp; //如果怪物对象是我的角色直接返回 + local MonsterHp = MonsterObj.getHp(); //获取怪物当前生命值 + if (Attacker == null && MonsterHp > Hp) //如果攻击者为空 并且 当前生命值大于要设置的生命值 + { + if (!Chr.isEnemy(MonsterObj)) return Hp; //如果怪物和我不是敌对直接返回 + local DamageHp = MonsterHp - Hp; //得到这次掉的血 + if (DamageHp < 2147483647) { + //MyDamage += DamageHp; + return Hp; + } + } + if (Attacker != null && sq_IsMyControlObject(Attacker) && MonsterHp > Hp) //如果攻击者是我自己 并且 当前生命值大于要设置的生命值 + { + if (!Chr.isEnemy(MonsterObj)) return Hp; //如果怪物和我不是敌对直接返回 + local DamageHp = MonsterHp - Hp; //得到这次掉的血 + if (DamageHp < 2147483647) { + MyDamage += DamageHp; + return Hp; + } + } + return Hp; + } + + //绘制函数 + function DrawDpsFunc(obj) { + //print(TEAMDPSCONTROL.DPSSTL[0][0]); + //print(TEAMDPSCONTROL.DPSSTL[0][1]); + local Psize = 4; + + local Base_X = 20; + local Base_Y = 120; + T_DrawDynamicAni(obj, "common/dps/maintop.ani", Base_X, Base_Y, "maintop"); //绘制Dps上边栏 + for (local i = 0; i < PackSize; i++) { + T_DrawDynamicAni(obj, "common/dps/main.ani", Base_X, Base_Y + 41 + (i * 22), "main"); //绘制Dps中间栏 + if (DPSSTL.rawin(i)) { + T_DrawDynamicAni(obj, "common/dps/dps.ani", Base_X + 8, Base_Y + 22 + (i * 28), "mainslot" + i); //绘制Dps中间槽底 + + local Rate = DPSSTL[i][3].tofloat(); + setClip(Base_X + 8, Base_Y + 22 + (i * 28), Base_X + 8 + (160.0 * Rate).tointeger(), Base_Y + 22 + (i * 28) + 18); //开始裁切 + T_DrawDynamicAni(obj, "common/dps/dps" + (i + 1) + ".ani", Base_X + 8, Base_Y + 22 + (i * 28), "mainslotc" + i); //绘制Dps中间槽 + releaseClip(); //裁切结束 + + L_Code_STL(DPSSTL[i][0], Base_X + 10, Base_Y + 24 + (i * 28), 0xFFFFFFFF, 0); + L_Code_STL(DPSSTL[i][1].tostring(), Base_X + 94, Base_Y + 24 + (i * 28), 0xFFFFFFFF, 0); + + local RateStr = DPSSTL[i][2].tostring(); + local RateStrLen = RateStr.len(); + L_Code_STL(RateStr, Base_X + 164 - (RateStrLen * 5), Base_Y + 24 + (i * 28), 0xFFFFFFFF, 0); + } + } + T_DrawDynamicAni(obj, "common/dps/mainbotton.ani", Base_X, Base_Y + 41 + (PackSize * 22), "mainbotton"); //绘制Dps下边栏 + + + //T_DrawDynamicAni(obj, "common/dps/maintop.ani", Base_X, Base_Y, "maintop"); + + /* + for(local i = 0; i < 4; ++i) + { + if(DPSSTL.rawin(i)) + { + L_Code_STL(DPSSTL[i][0], 28, 110 + (i * 24), 0xFFFFFFFF, 1); + L_Code_STL(DPSSTL[i][1].tostring() + " " + DPSSTL[i][2].tostring(), 148, 110 + (i * 24), 0xFFFFFFFF, 1); + + } + } + */ + } + + //常规成员函数 + function exit() { + TeamDpsTimer.Reset(); + TeamDpsTimer.Delete(); + GetTeamDpsTimer.Reset(); + GetTeamDpsTimer.Delete(); + + DPSSTL.rawdelete(0); + DPSSTL.rawdelete(1); + DPSSTL.rawdelete(2); + DPSSTL.rawdelete(3); + } + + function Run(obj) { + if (TeamDpsTimer.Get() >= 1700) { + local TeamDpsBuffer = Json_STL("TeamDpsBuffer"); + TeamDpsBuffer.Put("op", 611); + TeamDpsBuffer.Put("DAMAGE", MyDamage); + local str = TeamDpsBuffer.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + TeamDpsBuffer.Delete(); + MyDamage = 0; + TeamDpsTimer.Reset(); + TeamDpsTimer.Start(); + } + + if (GetTeamDpsTimer.Get() >= 3000) { + local TeamDpsBuffer = Json_STL("GetTeamDpsBuffer"); + TeamDpsBuffer.Put("op", 613); + local str = TeamDpsBuffer.GetString(); + L_sq_SendPackType(130); + L_sq_SendPackWChar(str); + L_sq_SendPack(); + TeamDpsBuffer.Delete(); + + GetTeamDpsTimer.Reset(); + GetTeamDpsTimer.Start(); + } + + DrawDpsFunc(obj); + } +} + + + +function TeamDPS(obj) { + if (!obj) return false; //如果人物不存在则返回 + local RootTab = getroottable(); + + //建立时间容器 + if (RootTab.rawin("TeamDpsMonTimer") == false) { + local Buf = TimeSTL("TeamDpsMonTimer", 500); + Buf.Start(); + RootTab.rawset("TeamDpsMonTimer", Buf); + } + + if (sq_GetCurrentModuleType() != 3 && sq_GetCurrentModuleType() != 10 && sq_GetCurrentModuleType() != 12 && sq_GetCurrentModuleType() != 13) { + if (RootTab.rawin("TEAMDPSCONTROLOBJECT")) { + RootTab["TEAMDPSCONTROLOBJECT"].exit(); + RootTab.rawdelete("TEAMDPSCONTROLOBJECT"); + + } + return false; //如果不是处于副本中则返回 + } + + if (RootTab["TeamDpsMonTimer"].Get() >= 500) { + RootTab["TeamDpsMonTimer"].Reset(); + RootTab["TeamDpsMonTimer"].Start(); + local objectManager = obj.getObjectManager(); + if (objectManager) { + local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); + for (local i = 0; i < CollisionObjectNumber; ++i) { + local Monobject = objectManager.getCollisionObject(i); + Monobject = sq_GetCNRDObjectToActiveObject(Monobject); + if (Monobject && Monobject.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(Monobject)) { + if (!CNSquirrelAppendage.sq_IsAppendAppendage(Monobject, "appendage/teamdps/dps.nut")) { + CNSquirrelAppendage.sq_AppendAppendage(Monobject, obj, -1, false, "appendage/teamdps/dps.nut", true); + } + } + } + } + } + + if (!RootTab.rawin("TEAMDPSCONTROLOBJECT")) { + local Buffer = TeamDps(); + RootTab.rawset("TEAMDPSCONTROLOBJECT", Buffer); + } + RootTab["TEAMDPSCONTROLOBJECT"].Run(obj); +} \ No newline at end of file diff --git a/appendage/character/ap_atmage_bodyeffect.nut b/appendage/character/ap_atmage_bodyeffect.nut new file mode 100644 index 0000000000000000000000000000000000000000..a7b1f921961c8c259d54450ac12819f1833134fd GIT binary patch literal 4095 zcmcIn-EP}96wa*-_#IeZ$%vNNL9<~?JwS_P$EcAQwioP9U@SUer^u=#clFv{?FEVf z!>|F{uwlTu-R`DO4tCebHIu9lZp9Lg-?Ao5!QIDtenwc~VS>Vx2R0oqz97Sf2dBl?X*)Q?*N&w^1xqXa?K z?bd)!;7K^R*%Hiycx{n$M9iMHgypgFQQWKpdx5OD!3#%}uE+>ss~Lm@xDCDdw!x?7 zJx!E4L5dj>OXg8<1h)WgR4YYyHYnSBtz-DJ3H8bB;t^>P?bO~SO9sHiATjGl;0^w* zOrF!otnW>HMkDtLkb4G?=zNJ$IFGMVo5towrCA80jXL5EGok9TLX}ytrU&lIA4L<* z#LZeK^Tr}PK6}C7g}JI+t!gsT;Df zCeqPy(ep8fjYfE>yq4y$Zj_*L^RR&va+C!gjvcIw31!0J!$#gz4lhFVzB{xBC%t2* z({YZ+Zu_j=bu!TC@&ZgCox|=IX2T+%!gX+Xn7R+;&y`6eee^Z={a)a)r)HhBT4eOF z*YCSyr|%5ThGU?O@eD4kwMt)$G;mZ78#*=_hGC>(N&n$lhjegXgrtYc!s+);9eb#Q z0tw9r1d)hvvY3Rh8VqPg@*XyG9)=MI#j6SLKdX^lBIDR4wN+`v;-UTl5zV?V%u)sP zSecfb&VoPC(aNIgWMsi>i~q0Xdj*d>OB#RXuxzOE+O~Vn3FP=gmiCjoicW{7$(Jv! zCg1w}e|%RS%AMVSD#*5mUI(_ELlj;OM02KLpbKGLF#^2?D3QrXg1O0J(;xkyYv!Z{dR9{e9GLU{Nb2id-8<)2|yme>}V$qFk7W*}G9 zk#T>YEMNVzeEst6um6&FKmD-${%^8;{o~s|UoLZJ!r`GrG-PJq^-GqS<)3{#qE=t5ZvFfF|OVrOUPKj}uoCIA2c literal 0 HcmV?d00001 diff --git a/appendage/character/ap_atmage_buff.nut b/appendage/character/ap_atmage_buff.nut new file mode 100644 index 0000000000000000000000000000000000000000..e9855f7a8573ea6d99c869750bbfdb69550cddf5 GIT binary patch literal 1407 zcmbtU(MrQG6!o=*{zKeT3uXI&>BGQHd{M#SYl&?#DqULBY$~!Re_#kA3Mz`=^wpPr zQMdhtNmJWdx0O{IXl}Xp zxVj*@5>Vf+m>_;zX{rTTmm^pwJ&Y?Hrw{}MkfI$5&m~qGmWK4n5rdQoxMcees3vhF z5Z{!Baro^Tv9drW1}U9t2eCumUxevKo%4_@&nBP+UAI1? zMjymr+Izoxz3+tISu?ju}84ai?~h4aUuuNITzs*=aLj}fwuS-cUER?nAGSPdLfeb z&UIU@2BOhtG#*Z$zQFAMHoEx$(fDrqHjEzL!R&f8d3>3?KF>|Ziebv+TP&39cMvlX Lcb6;ob+GXbA_dd% literal 0 HcmV?d00001 diff --git a/appendage/character/ap_atmage_effect.nut b/appendage/character/ap_atmage_effect.nut new file mode 100644 index 0000000..a3b39f3 --- /dev/null +++ b/appendage/character/ap_atmage_effect.nut @@ -0,0 +1,144 @@ + +function sq_AddFunctionName(appendage) +{ + appendage.sq_AddFunctionName("proc", "proc_appendage_atmage_effect") + appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_atmage_effect") + appendage.sq_AddFunctionName("onStart", "onStart_appendage_atmage_effect") + appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_atmage_effect") + appendage.sq_AddFunctionName("drawAppend", "drawAppend_appendage_atmage_effect") + appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_atmage_effect") +} + + +function sq_AddEffect(appendage) +{ + //appendage.sq_AddEffectFront("Character/Priest/Effect/Animation/ScytheMastery/1_aura_normal.ani") +} + +function proc_appendage_atmage_effect(appendage) +{ + if(!appendage) { + return; + } + +} + + +function onStart_appendage_atmage_effect(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + +} + + +function prepareDraw_appendage_atmage_effect(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + + + + +function onEnd_appendage_atmage_effect(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + +function drawAppend_appendage_atmage_effect(appendage, isOver, x, y, isFlip) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + if(!obj) { + appendage.setValid(false); + return; + } + + local pAni = sq_GetCurrentAnimation(obj); + + if(!pAni) { + appendage.setValid(false); + return; + } + + local currentT = sq_GetCurrentTime(pAni); + + local startT = 150; + local endT = 250; + local effectT = 500; + local effectType = GRAPHICEFFECT_DODGE; + local rgb = sq_RGB(0, 90, 255); + + if(appendage.sq_GetSkillIndex() == SKILL_FLAMECIRCLE) { + startT = 50; + endT = 250; + effectT = 500; + effectType = GRAPHICEFFECT_DODGE; + rgb = sq_RGB(0, 0, 0); + } + else if(appendage.sq_GetSkillIndex() == SKILL_BROKENARROW) + { + startT = 100; + endT = 200; + effectT = 100; + effectType = GRAPHICEFFECT_LINEARDODGE; + rgb = sq_RGB(0, 75, 255); + } + + + local targetV = endT; + + local al = sq_GetUniformVelocity(startT, targetV, appendage.getTimer().Get(), effectT); + + local alpha = sq_ALPHA(al); + pAni.setEffectLayer(true, effectType, true, rgb, alpha, true, false); + + + local size = sq_AniLayerListSize(pAni); + + if(appendage.sq_GetSkillIndex() != SKILL_FLAMECIRCLE) { + if(size > 0) { + for(local i=0;ibwQVR7R#&ps~l1%-*IhH9>e1!9*85WCC2%>HuqFQDUwH!~i%Ra=28uI^77o&zb_b zNTAbjL$Ed0QlK)}2&5CHkh35gWWSJ4o;i7IwvCop5SCJ{S1PS4taG1pKTcBOdnQy*xzH^z0@mj~J__phi z_P18CTD_`Y7g>uN%=5TYWp$pL7~h;2&qVKLigDHxZY7&1^4p3`Ew;{`Iu{nZ&2DkW zcIsI`8w$leCitviw-sXadPZQ^S@D_h5mY~(8L;G36&yUA5zKCDF!^vsFz}E2Wly_` zkHY}(O^oCJiHs=KYP{kna)HuFVx0}j@Tzbf-^hN^V1iYAF6gqbdE2LIl@=Yl#W3IK zN@c@u@CDWeqYXN3v5sJtFyCjD zTU_Y+YPuEHB<_uyq(CCdW}W-XPz(@NJQLZ1OM_)7MM>BGj)#16*88zajx{W zRlHXGva~qAIA^UDznY&VpOEQXED~gLS_ea;YhL8yMM+0}nV6QmwP8fGfp=yTf=9YL zAG#l3k>J_uEAUfBJ0j{3DDb7>Av!V#>cnu>@0SZ?O0&r5p9)0s$i&;jDQZl~kVq9J zyb_iuxPeP>GNl-`|KS&Aio@-8s;S-2LY- z0!4z&UuzI`T2G90A2>%1(z9a74dC4PV31Eqhm`oo>g7MiL>`J53l=^qFB@Kq-RT^= zM#RPx%puta7ucO|JR@872|ygJ z4|c_{8d9BeZ$l!Be3rg%$X7=XY-0hb9gYu85myedJ+7@L;= zfGlw*0jgqc91Bz2q*#vY7V_~mV`a&8(Ux;2Qkr>_+L#QMh0mp~9W+3IEm6>lU>Hi8 zyro6Xnh*ztR_%^#;4y@1s6%%xXbG^mFPh+)z*%hWL{KIt4#w}Bm=nodeLItBkT`rf zfwCp|o+=eSmo753>y^y>(@Htdx4|R+=^5E4nJlx8vZ6Ao{+h9;^em7Rh!tbIL0M@y zegwqlOJlkzMVW7ulBoX~4SJ)eFEYNrjcz_jG`JhR^`eJ&GQRE)A76&A&r=4ka2l4W jPBKJX@Is7}r0&Gq+N`rR)0DDC9=5+yZ$?>HwZ&y9H7wNV2>Pg+a@-!$OfXif-o>ed-@5 z3KT^LY{P~D>-O50{vx;i7d@Ax<&SJmHm|U3OXB6ZhxZ&_sZ<<{;!w*ZX4!Y$dcWUt zmmPi~Jf5Z^?(?B2mx@nI#X^2v`J3R4R3+ht&&+=}5AE{DA|49W6@!5Y^#-7>#1Sc1 zVqftm7B0VB2Q`ULG*_As-RXL0&A4x|aIy|kAIq$pIuqRNY8_0OIdZ< zXd109=^q5Stj+;8u%(h%dmD{&u6U@03XYT%nGWn|P>gG9$|tl+Ys;@8T551&2Sk;H%8=pOO@! zB;*lGdXHF*<%}vrp^xBf)T+D-D)v}bAXQiU{R@(EbQVmJ#H&pHrN}IM;Tn5mM#X0` zJA5pZ&%XEBn66rpOyMsw#dUmg4GFD+1O}m<-DYBELZ9(S_Pqg*GEpW6UNWOgl46Iz zC}^r}p&KJb7Rfh_N8mKu5vSmFl7$xkbUERvM8`MaE}8W(nkH;}hUo1o20+5zhrOqa zzlr4ld-zOXMC!43r&{%yo98dupOPrAT){fMvJc4WbZHh<4SN>$xc#*U6go`AG--Oy zZ9x6t=w999kr^f06%^byoC7{a60JtUXYJ$q(Y^bPW~(iQS6GB32bzxeeOdv&FPmCOWh04Fc%GycLi; zI}*<{t`R07HOmuh?e)Y^#=xNgRB3KR#C>~za}%8joS)(se{#S)@0QeMcsfkt{?;CZ zF^Y6X7d_fQ1XN`=Z?a2ai~3z7#DFhpOz?|4XI@Pr36_hg|D~w3zwc~syB+Sc>2}6; zL|>pCYK#^HPEX_{1EcBGrme-fYGud8Y#gOx5U|PHzb5ZreEj(x`}F43}Own2J2(3qyPW_ literal 0 HcmV?d00001 diff --git a/appendage/character/ap_avenger_nightmare.nut b/appendage/character/ap_avenger_nightmare.nut new file mode 100644 index 0000000000000000000000000000000000000000..cddcf7b0e9e4461ccaad177cbb7e29b1cfbc010f GIT binary patch literal 1219 zcmcJNK}y3w7=^PWkod|Xx#^g_oBr|a`)rEBB1&Sb|prQy?w{Ci( zw7rEhNfh>_2)CWSaI?Zt#@1@l22IsZ^eZ(=T6(i7KXqcg z9xA4v#cZ;8`a;Y5+v4T}6|=j=+oX7SN6YK!{PAV}`uwA3t>tWUTr~%UILSfwrwVk~ YjB^;Lz--4o0GVkSXWm=cg*2K!-n*sRAe#V*V;OhP!qo^4&*mZ^4s zh1kg$Mb0j$-+___h^8qeL0+H>M{rspID-ryFnA?dYVC}qx!ZL4~;hz3!F5!b`1wMtoKv6`#jGvmnJQE7Rg%GqR?7mW19D6pn&=|(pG z$4*}`6N+F0=-D~g1Ims+!u&+kfpFLB3m@|6ZZg(Vk}W!Fy!?rYlC|a7mJ=0GuLsKM zS2>$3p1;BJ;jX;>1m*00@jfXZKfv;4I)8edzrFk_)rJnXxs^2m5lnJil|>vG<4_NA U7^j%Io_~a^B&AflJvI#E2Mm9PZ~y=R literal 0 HcmV?d00001 diff --git a/appendage/character/ap_powerofdarkness.nut b/appendage/character/ap_powerofdarkness.nut new file mode 100644 index 0000000..8161d90 --- /dev/null +++ b/appendage/character/ap_powerofdarkness.nut @@ -0,0 +1,45 @@ + +function sq_AddFunctionName(appendage) +{ + appendage.sq_AddFunctionName("proc", "proc_appendage_PowerOfDarkness") + appendage.sq_AddFunctionName("onStart", "onStart_appendage_PowerOfDarkness") + appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_PowerOfDarkness") +} + + +function proc_appendage_PowerOfDarkness(appendage) +{ + if(!appendage) { + return; + } + +} + + + +function onStart_appendage_PowerOfDarkness(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + +} + + + +function onEnd_appendage_PowerOfDarkness(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + if(obj && sq_IsMyControlObject(obj) ) { + sq_SimpleMoveToNearMovablePos(obj,200); + //obj.setObjectHeight(-1); + } + +} + diff --git a/appendage/character/executionappendage.nut b/appendage/character/executionappendage.nut new file mode 100644 index 0000000000000000000000000000000000000000..d2456a693803c3013bf69c95431993809cdde483 GIT binary patch literal 7500 zcmcIpZBrCS5YE@5ivKY9!McqL+#MhiG*<*csVG`NDB#Q0dbi?P$1T}i4ER!|A;zSl z#+Yb<0`YtUUkF-gs(j_o&7_tl#`m$FM53SnI;c#kL1lVcO(&E|RcdTF z*Vqsczqb^byh}?Dn~HAkl8N&*rp~JI8I-aJpaUpm27!H@R?d}<zgAMBeyl4$+=HN%q<^`{p8ilI+Ws z?8YMxm^@8fcNL)Nf&+@5QS=r=H3tB7hbMelE{CLUP(Etkctq^wf307yS(()+`HI+o zf3y}KM?rn|)ZheIP)vvZl%}{^c=$vPwSX1~6#NIT2=ozr@k>k6=$W2Q&GpV0rZzRC zVZsF^376Hjn@1!>k5^nzdJ-HgQC(CBzB*((rtl0B^r)pvWSi?gSvzqW%t5B~2Mi4m zkEEgmxkR4E_HB(46yzaBJaoD#K6!SpZ$)#YHtol~ghjqzuI( zmw5~!1aBdXkaU9_{9?H(3nvlT(MM*KhXVaBuS-_aIHDLPs82m!L;6G&Or%aeAl)yuQ zopXojyP(t>LC?TLV+RS&esMqQk%+Iok#PX_1?}O6L|1_Wj%!B0u1ztyo@DFllAFVF zSBNwdrU@J_xCX-jIfQHz8=+!Rl`=vj?V$pxWn{K-pm$DUJD12Ho&|K_EIFi_2a|@W zq~j`}5kw{ZpdU=?aJhi{T2PWnge689on~vXvEwt~w)fMm4A)^L#%`(b==^k*>H)r- zO8XG`3IQALYC~tj4^JMHF|&)CStdH%jFQ80WZzz%S3K)=dj2ClggVHV1diQsXM0B* z%e{b01+anlgb(6@C9}oUbEW(c4pr8$xxGVJi#m38uwY7vkhr_<; zM|v#}JkPC?A%*!tPur4pSV-n|2Tr>{cPq$ZsBGG*2+m6POxS=D0o-9lIRRHzCi{SMSMxZ@1i*1Z_ZNGFZhC`^H141+du5 zy}Sr4(&9i4s5UnETPacd_6D&p|D0dg^!B8*w696%Ug#xOfn!x8Jm9pXy1`O-*!eE* z7;p&@GkyIioC^<%5|cTzx(k51D;JZj;>|vPh1G3-X@y|P3)L}JG1z*`zW6JghudGgC~&1f5jKWp0+a&2L0^&3 z90~E(57ZaKxUY^KLR=>n$+K=h4)GmlQpI~5o1kNmd#E4%0My+XN#p2Tua<@eXo?qb ztZ@{;U6WJODfOs!Mjg=xRYiwyv{mU-p^dAFX$udF0BEz&j*%|_c+U-VD%tO%w?xoS ztZ&*@yn4}hdQxbZYtVKV(QB2nOV(Wfd=`u?iAvAj)i5_!XW@g1A*ccCE!Hja45<*=%c7v zM;BDyH;oYy*+b?aEWt+ZVGPeQ5hwAvXp~PJ<1i3+mWy**&>$EmyV(zVv&o$AxVcO) zQd&tOos-XUbCAhs7XrRevJees;1*!hqRlR%BobpXevZ@62?-hp7#J9KB9pzxr5MD& h`4#C4(;$&iEY+);>Ek$^MMyQ%CvZAMhTz06{s-UHqOAY` literal 0 HcmV?d00001 diff --git a/appendage/character/hearthings.nut b/appendage/character/hearthings.nut new file mode 100644 index 0000000000000000000000000000000000000000..c5899ba9b06fab36ab4a9b9dd9b47c6af93f9836 GIT binary patch literal 136 zcmd<(N-NDvF3HT#Qz$NscT7ofgL3^6b5k`E3kp*6QWDcsHF>$JdAT_C_2D9VSd=Se zq$U=XWMt;07c1!~C>0dtC&$Az#1|B0rWTjP7bjPiWTeLDCKi{Z7F8+%O|IqTVgLZm CB`=!* literal 0 HcmV?d00001 diff --git a/appendage/character/scythe_mastery.nut b/appendage/character/scythe_mastery.nut new file mode 100644 index 0000000000000000000000000000000000000000..4f71cf408bca545d4ba6a10c588070c593514023 GIT binary patch literal 1025 zcmb7DL2uJA812=S`X5YBt%MSB-NeD_oT@@grzY!mvrOu=fz&CEyJ(trL4)&#Gz8On zKxjfp+z=d~z^_@>{R`}*L?}fR6ibOezxVRJ_a(KeKjoebA`asx1Pun(a%H!VO=S%kqhE2K@*g< zpk;sG|BL)_t*Wn*KkWO=lWU#jFiS*SHtMYr71UF0n>(2oGe0#E55`nyXF8d=?cAGr zkI<>0ghygbLxb`_yDhh)(^_Yv+~!iHu=GEXl(j(MH|`WuYC=66)@LR6%Z$Z^hUa-367+aHJU090FHpB z0FTBDIxccCv5@0#cl#J_0AQN%dUlas&C@sUZhoAn@4w%^`gk+HfVWqlRB3T~vN(Ib zn0-!9pDoTlEM7c?>B~#~^!gjTo_|R%XX)FohEaM0>SMc&dj##F2iWe|ZMacF;Cq<)q*cceiJgu4S!2@IKk>hT^|DwUs21YB?c literal 0 HcmV?d00001 diff --git a/character/ATGunner/ATGunner13State.nut b/character/ATGunner/ATGunner13State.nut new file mode 100644 index 0000000..19274c6 --- /dev/null +++ b/character/ATGunner/ATGunner13State.nut @@ -0,0 +1,46 @@ +/* +文件名:ATGunner13State.nut +路径:character/ATGunner/ATGunner13State.nut +创建日期:2022-09-10 17:39 +文件用途:女枪手13号状态 +*/ + +if (!getroottable().rawin("onSetState_ATGunner13State_Table")) onSetState_ATGunner13State_Table <- {} + +function onSetState_ATGunner13State(obj, state, datas, isResetTimer) { + + //遍历并执行函数 + foreach(Flag, Func in onSetState_ATGunner13State_Table) { + Func(obj, state, datas, isResetTimer); + } + //return 1; +} + + +if (!getroottable().rawin("onEndCurrentAni_ATGunner13State_Table")) onEndCurrentAni_ATGunner13State_Table <- {} + +function onEndCurrentAni_ATGunner13State(obj) +{ + if(!obj) return; + + //遍历并执行函数 + foreach(Flag, Func in onEndCurrentAni_ATGunner13State_Table) { + Func(obj); + } + +} + + +if (!getroottable().rawin("onKeyFrameFlag_ATGunner13State_Table")) onKeyFrameFlag_ATGunner13State_Table <- {} + +function onKeyFrameFlag_ATGunner13State(obj, flagIndex) +{ + if (!obj) return false; + + //遍历并执行函数 + foreach(Flag, Func in onKeyFrameFlag_ATGunner13State_Table) { + Func(obj, flagIndex); + } + + return true; +} \ No newline at end of file diff --git a/character/ATGunner/ATGunner_po.nut b/character/ATGunner/ATGunner_po.nut new file mode 100644 index 0000000..8b0e2ac --- /dev/null +++ b/character/ATGunner/ATGunner_po.nut @@ -0,0 +1,132 @@ +/* +文件名:ATGunner_po.nut +路径:character/ATGunner/ATGunner_po.nut +创建日期:2022-09-10 21:59 +文件用途:女枪手PO文件 +*/ + +if (!getroottable().rawin("setCustomData_po_atgunner_po_Table")) setCustomData_po_atgunner_po_Table <- {} +function setCustomData_po_atgunner_po(obj, receiveData) +{ + if (!obj) + return; + local skillid = receiveData.readDword(); //开始读取 四字节数 数据 + obj.getVar("skill").clear_vector(); //清空 Skill 储存器 + obj.getVar("skill").push_vector(skillid); //向 Skill 储存器 push内容 + + + //根据 技能ID 判断执行函数 + if (setCustomData_po_atgunner_po_Table.rawin(skillid)) { + setCustomData_po_atgunner_po_Table[skillid](obj, receiveData); + } + +} + +if (!getroottable().rawin("setState_po_atgunner_po_Table")) setState_po_atgunner_po_Table <- {} +function setState_po_atgunner_po(obj, state, datas) +{ + if (!obj) return; + local skillid = obj.getVar("skill").get_vector(0); + + //根据 技能ID 判断执行函数 + if (setState_po_atgunner_po_Table.rawin(skillid)) { + setState_po_atgunner_po_Table[skillid](obj, state, datas); + } +} + + +if (!getroottable().rawin("procAppend_po_atgunner_po_Table")) procAppend_po_atgunner_po_Table <- {} +function procAppend_po_atgunner_po(obj) //处于obj特效状态中 +{ + + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); //获取 Skill 储存器 0号位内容 + + + //根据 技能ID 判断执行函数 + if (procAppend_po_atgunner_po_Table.rawin(skillid)) { + procAppend_po_atgunner_po_Table[skillid](obj); + } +} + +if (!getroottable().rawin("onAttack_po_atgunner_po_Table")) onAttack_po_atgunner_po_Table <- {} +function onAttack_po_atgunner_po(obj, damager, boundingBox, isStuck) +{ + if (!obj) + return; + if (!damager) + return 0; + + local skillid = obj.getVar("skill").get_vector(0); + + + //根据 技能ID 判断执行函数 + if (onAttack_po_atgunner_po_Table.rawin(skillid)) { + onAttack_po_atgunner_po_Table[skillid](obj, damager, boundingBox, isStuck); + } + + return 1; +} + + +if (!getroottable().rawin("onEndCurrentAni_po_atgunner_po_Table")) onEndCurrentAni_po_atgunner_po_Table <- {} +function onEndCurrentAni_po_atgunner_po(obj) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + + + //根据 技能ID 判断执行函数 + if (onEndCurrentAni_po_atgunner_po_Table.rawin(skillid)) { + onEndCurrentAni_po_atgunner_po_Table[skillid](obj); + } + +} + + +if (!getroottable().rawin("onKeyFrameFlag_po_atgunner_po_Table")) onKeyFrameFlag_po_atgunner_po_Table <- {} +function onKeyFrameFlag_po_atgunner_po(obj, flagIndex) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + + + //根据 技能ID 判断执行函数 + if (onKeyFrameFlag_po_atgunner_po_Table.rawin(skillid)) { + onKeyFrameFlag_po_atgunner_po_Table[skillid](obj, flagIndex); + } + + return true; +} + + + +function onTimeEvent_po_atgunner_po(obj, timeEventIndex, timeEventCount) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + +} + + +function getCustomHitEffectFileName_po_atgunner_po(obj, isAttachOnDamager) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + +} + + + +function onChangeSkillEffect_po_atgunner_po(obj, skillIndex, reciveData) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + +} \ No newline at end of file diff --git a/character/ATGunner/Ranger/Sawblade.nut b/character/ATGunner/Ranger/Sawblade.nut new file mode 100644 index 0000000..be0cf24 --- /dev/null +++ b/character/ATGunner/Ranger/Sawblade.nut @@ -0,0 +1,581 @@ +/* +文件名:Sawblade.nut +路径:character/ATGunner/Ranger/Sawblade.nut +创建日期:2022-09-09 19:17 +文件用途:技能-枪刃改良(女漫游二觉被动) +*/ +if (!getroottable().rawin("ATGunner_Sawblade_Skill")) ATGunner_Sawblade_Skill <- {} + + +function Sawblade_PassiveSkill(obj, Index, Level) { + //Sout("被动技能触发"); +} + + +if (getroottable().rawin("ProcPassiveSkill_ATGunner_Table")) + ProcPassiveSkill_ATGunner_Table.rawset(235, Sawblade_PassiveSkill); + + + + + + + + + +{ + function ProcAppend_Sawblade_6(obj) { + if (sq_GetSkillLevel(obj, 235) < 1) return; + local CoolTime = obj.sq_GetIntData(235, 0); + local CoolTimer = TimeSTL("SawbladeCoolTime_DC", CoolTime); + // 按键C 高度小于100 高度大于10(判断是否已经跳起来了) 冷却未开始计算 或者 不处于冷却状态 + if (KeyPress.isKeyPress(5) && obj.getZPos() <= 100 && obj.getZPos() >= 10 && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 67); + sq_IntVectorPush(pIntVec, 67); + obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); + CoolTimer.Reset(); + CoolTimer.Start(); + } + CoolTime = obj.sq_GetIntData(235, 1); + CoolTimer = TimeSTL("SawbladeCoolTime_KZ", CoolTime); + // 空中Z + if (KeyPress.isKeyPress(6) && obj.getZPos() >= 20 && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 69); + sq_IntVectorPush(pIntVec, 69); + obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); + CoolTimer.Reset(); + CoolTimer.Start(); + } + } + + //6号状态 枪刃改良proc声明 + if (getroottable().rawin("procAppend_ATGunner_Table")) + System.InsertArrayInTable(procAppend_ATGunner_Table, 6, "Sawblade", ProcAppend_Sawblade_6); +} + + + +{ + function ProcAppend_Sawblade_15(obj) { + if (sq_GetSkillLevel(obj, 235) < 1) return; + local CoolTime = obj.sq_GetIntData(235, 2); + local CoolTimer = TimeSTL("SawbladeCoolTime_HC", CoolTime); + // 按键C 高度小于100 高度大于10(判断是否已经跳起来了) 冷却未开始计算 或者 不处于冷却状态 + if (KeyPress.isKeyPress(6) && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 68); + sq_IntVectorPush(pIntVec, 68); + obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); + CoolTimer.Reset(); + CoolTimer.Start(); + } + } + + //15号状态 枪刃改良proc声明 + if (getroottable().rawin("procAppend_ATGunner_Table")) + System.InsertArrayInTable(procAppend_ATGunner_Table, 15, "Sawblade", ProcAppend_Sawblade_15); +} + + +{ + function ProcAppend_Sawblade_19(obj) { + if (sq_GetSkillLevel(obj, 235) < 1) return; + local CoolTime = obj.sq_GetIntData(235, 3); + local CoolTimer = TimeSTL("SawbladeCoolTime_LQ", CoolTime); + // 按键C 高度小于100 高度大于10(判断是否已经跳起来了) 冷却未开始计算 或者 不处于冷却状态 + if (KeyPress.isKeyPress(6) && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 70); + sq_IntVectorPush(pIntVec, 70); + obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); + CoolTimer.Reset(); + CoolTimer.Start(); + } + } + + //19号状态 枪刃改良proc声明 + if (getroottable().rawin("procAppend_ATGunner_Table")) + System.InsertArrayInTable(procAppend_ATGunner_Table, 19, "Sawblade", ProcAppend_Sawblade_19); +} + + +{ + function ProcAppend_Sawblade_13(obj) { + + local pAni = obj.sq_GetCurrentAni(); //当前播放的Ani + local currentT = sq_GetCurrentTime(pAni); //Ani的当前时间 + local fireT = pAni.getDelaySum(false); //总时间 + local srcX = ATGunner_Sawblade_Skill["Xpos"]; // X的起始位置 + local srcZ = ATGunner_Sawblade_Skill["Zpos"]; // Z的起始位置 + + { //双C + if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) { + local vz = sq_GetAccel(0, 100, currentT, 300, true); + local vx = GameC.getQuadraticFunction(obj, 0 + sq_GetAccel(0, 36, currentT, 300, true), 240, 100).tointeger(); + //local vz = getQuadraticFunction(obj, 0 + ccz, 40, 100).tointeger(); + local dstX = srcX + sq_GetDistancePos(0, obj.getDirection(), vx); //这是要 X 位移随时变动的值 + if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //这是判断这个值能不能到达 也就是会不会卡墙里 不会 在进行位移 + sq_setCurrentAxisPos(obj, 2, srcZ + vz); //这是位移Z轴 + } + } + + { //空Z + if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691 /*&& ccc.getInt(0) == 1*/ ) { + local Zpos = srcZ; + local MoveX = Zpos; //移动多少x距离 + local MoveZ = Zpos; //移动多少Z距离 + local v = sq_GetUniformVelocity(0, MoveX, currentT, Zpos); + local v2 = sq_GetUniformVelocity(0, MoveZ, currentT, Zpos); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + local dstZ = sq_GetDistancePos(Zpos, 0, v2); + if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标 + sq_setCurrentAxisPos(obj, 2, dstZ); //设置当前z坐标 + if (obj.getZPos() <= 1) { + local frame = sq_GetAnimationFrameIndex(pAni); + switch (frame) { + case 0: + pAni.setCurrentFrameWithChildLayer(1); + break; + case 1: + return; + break; + default: + return; + break; + } + } + } + } + + { //滑铲 + local MoveXPos = 50; + //滑铲抬手 + if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) { + local MoveX = MoveXPos; //移动多少x距离 + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); //计算平均移动值 + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); //计算出的X坐标 + if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标 + } + //滑铲冲刺 + if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) { + local MoveX = MoveXPos * 4; //移动多少x距离 + local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); //计算平均移动值 + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); //计算出的X坐标 + if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标 + } + } + + { //拉起 + if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) { + + local MoveZ = 80; //移动多少Z距离 + local v2 = sq_GetUniformVelocity(0, MoveZ, currentT, fireT); + //local dstZ = sq_GetDistancePos(srcZ, 0, v2); + sq_setCurrentAxisPos(obj, 2, v2); //设置当前z坐标 + } + } + } + + //13号状态 枪刃改良proc声明 + if (getroottable().rawin("procAppend_ATGunner_Table")) + System.InsertArrayInTable(procAppend_ATGunner_Table, 13, "Sawblade", ProcAppend_Sawblade_13); + +} + + + +{ + //设置状态时 + function onSetState_Sawblade(obj, state, datas, isResetTimer) { + ATGunner_Sawblade_Skill.rawset("Zpos", obj.getZPos()); + ATGunner_Sawblade_Skill.rawset("Xpos", obj.getXPos()); + + //双C + { + if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) { + obj.sq_SetCurrentAnimation(104); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + } + } + + //空Z + { + //如果子状态为设定的69号状态 空中z抬手 + if (Chr_State_Table[0] == 69 && Chr_State_Table[1] == 69) { + //设定ani + obj.sq_SetCurrentAnimation(109); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 6.0, 6.0); + } + //空中z 下落 + if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691) { + //设定ani + obj.sq_SetCurrentAnimation(110); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); + obj.sq_SetCurrentAttackInfo(27); + } + } + + { //滑铲 + //滑铲起手 + if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) { + + obj.sq_SetCurrentAnimation(105); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + } + //滑铲冲刺 + if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) { + obj.sq_SetCurrentAnimation(106); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_MOVE_SPEED, SPEED_TYPE_MOVE_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 2.1, 2.1); + obj.sq_SetCurrentAttackInfo(26); + } + } + + { //拉起 + //拉起第一段 + if (Chr_State_Table[0] == 70 && Chr_State_Table[1] == 70) { + //设定ani + obj.sq_SetCurrentAnimation(107); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + } + //拉起第二段 + if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) { + //设定ani + obj.sq_SetCurrentAnimation(108); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + obj.sq_SetCurrentAttackInfo(28); + } + } + } + + //13号状态 枪刃改良proc声明 + if (getroottable().rawin("onSetState_ATGunner13State_Table")) + onSetState_ATGunner13State_Table.rawset("Sawblade", onSetState_Sawblade); +} + + +//多重爆头 +{ + function setState_Sawblade_multiheadshot(obj, state, datas, isResetTimer) { + + + if (Chr_State_Table[1] == 1) { + local ShootDct = Chr_State_Table[2]; + if (obj.getDirection() == 0) { + if (ShootDct == 0) ShootDct = 1; + else if (ShootDct == 1) ShootDct = 0; + } + local montab = GameC.findRoundNearAllEnemyRect(obj, 340, 80, ShootDct); + if (montab.len() > 0) { + local AtkRate = obj.sq_GetLevelData(72, 0, sq_GetSkillLevel(obj, 72)); + local ap = sq_getNewAttackInfoPacket(); + ap.hitStunTimeAttackerDamager = 600; //僵直时间 + ap.powerRate = AtkRate; //百分比 + ap.useWeapon = true; //是否吃武器伤害 + ap.eType = ATTACKTYPE_PHYSICAL; //攻击类型 魔法还是物理 + ap.backForce = 50; //推开距离 + ap.upForce = 50; //打击高度 + + //local ballCount = obj.getMyPassiveObjectCount(24233); + //local magicBall = obj.getMyPassiveObject(24233, i) + foreach(Object in montab) { + sq_SendHitObjectPacketByAttackInfo(obj, Object, ap); //以新的攻击包发送攻击 + //sq_SendHitObjectPacket(obj, Object, 0, 0, sq_GetObjectHeight(Object) / 2); + } + } + } + } + //13号状态 枪刃改良proc声明 + if (getroottable().rawin("setState_ATGunner_Table")) + System.InsertArrayInTable(setState_ATGunner_Table, 37, "Sawblade", setState_Sawblade_multiheadshot); + +} + + +//走射 +{ + //ATGunner_Sawblade_Skill.rawset("shoot", 0); + + function ProcAppend_Sawblade_walkshoot(obj) { + //GameC.DestroyPassiveObject(obj,22001); + /* + if ((obj.isCurrentCutomAniIndex(28) || obj.isCurrentCutomAniIndex(29) || obj.isCurrentCutomAniIndex(30))) { + if (ATGunner_Sawblade_Skill["shoot"] == 0) { + local DamageRate = obj.sq_GetBonusRateWithPassive(15, 27, 0, 1.0); + obj.sq_StartWrite(); //开始写入 + obj.sq_WriteDword(671); //写入 4 字节数 技能ID + //obj.sq_WriteDword(WeaponType); //写入 4 字节数 武器类型 + //obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧 + obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率 + obj.sq_SendCreatePassiveObjectPacket(24371, 0, 0, -10, 20); + + ATGunner_Sawblade_Skill.rawset("shoot", 1); + } + } else if ((obj.isCurrentCutomAniIndex(31) || obj.isCurrentCutomAniIndex(32) || obj.isCurrentCutomAniIndex(33))) { + if (ATGunner_Sawblade_Skill["shoot"] == 0) { + local DamageRate = obj.sq_GetBonusRateWithPassive(15, 27, 0, 1.0); + obj.sq_StartWrite(); //开始写入 + obj.sq_WriteDword(671); //写入 4 字节数 技能ID + //obj.sq_WriteDword(WeaponType); //写入 4 字节数 武器类型 + //obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧 + obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率 + obj.sq_SendCreatePassiveObjectPacket(24371, 0, 0, 10, 20); + + ATGunner_Sawblade_Skill.rawset("shoot", 1); + } + } else { + ATGunner_Sawblade_Skill.rawset("shoot", 0); + } + */ + } + //27号状态 枪刃改良proc声明 + if (getroottable().rawin("procAppend_ATGunner_Table")) + System.InsertArrayInTable(procAppend_ATGunner_Table, 27, "Sawblade", ProcAppend_Sawblade_walkshoot); + +} + + +//动画结束时 +{ + function onEndCurrentAni_Sawblade(obj) { + + { //双C的结束 + if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_IntVectorPush(pIntVec, 0); + sq_IntVectorPush(pIntVec, 1); + obj.addSetStatePacket(6, pIntVec, STATE_PRIORITY_USER, false, ""); + } + } + + { //空Z + if (Chr_State_Table[0] == 69 && Chr_State_Table[1] == 69) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 691); + sq_IntVectorPush(pIntVec, 691); + obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); + } + + if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_IntVectorPush(pIntVec, 0); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(0, pIntVec, STATE_PRIORITY_USER, false, ""); + } + } + + { //滑铲 + if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 681); + sq_IntVectorPush(pIntVec, 681); + obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); + } + + if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + sq_IntVectorPush(pIntVec, 0); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(0, pIntVec, STATE_PRIORITY_USER, false, ""); + } + } + + { //拉起 + if (Chr_State_Table[0] == 70 && Chr_State_Table[1] == 70) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 701); + sq_IntVectorPush(pIntVec, 701); + obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, ""); + } + + if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 1); + sq_IntVectorPush(pIntVec, 0); + sq_IntVectorPush(pIntVec, 200); + obj.addSetStatePacket(6, pIntVec, STATE_PRIORITY_USER, false, ""); + } + } + } + if (getroottable().rawin("onEndCurrentAni_ATGunner13State_Table")) + onEndCurrentAni_ATGunner13State_Table.rawset("Sawblade", onEndCurrentAni_Sawblade); +} + + + +//关键帧时 +{ + function onKeyFrameFlag_Sawblade(obj, flagIndex) { + local WeaponType = obj.getWeaponSubType(); + local DamageRate = obj.sq_GetBonusRateWithPassive(235, 13, 0, 3.0); + //0左轮 1自动手枪 2步枪 3手炮 4手弩 + obj.sq_StartWrite(); //开始写入 + obj.sq_WriteDword(670); //写入 4 字节数 技能ID + obj.sq_WriteDword(WeaponType); //写入 4 字节数 武器类型 + obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧 + obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率 + obj.sq_SendCreatePassiveObjectPacket(24371, 0, 40, 0, 20); + + obj.sq_StartWrite(); //开始写入 + obj.sq_WriteDword(670); //写入 4 字节数 技能ID + obj.sq_WriteDword(WeaponType); //写入 4 字节数 武器类型 + obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧 + obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率 + obj.sq_SendCreatePassiveObjectPacket(24371, 0, 70, 0, 40); + + if (WeaponType != 3 && WeaponType != 4) { + obj.sq_StartWrite(); //开始写入 + obj.sq_WriteDword(670); //写入 4 字节数 技能ID + obj.sq_WriteDword(8); //写入 4 字节数 武器类型 + obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧 + obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率 + obj.sq_SendCreatePassiveObjectPacket(24371, 0, 40, 0, 50); + + obj.sq_StartWrite(); //开始写入 + obj.sq_WriteDword(670); //写入 4 字节数 技能ID + obj.sq_WriteDword(8); //写入 4 字节数 武器类型 + obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧 + obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率 + obj.sq_SendCreatePassiveObjectPacket(24371, 0, 70, 0, 70); + } + } + if (getroottable().rawin("onKeyFrameFlag_ATGunner13State_Table")) + onKeyFrameFlag_ATGunner13State_Table.rawset("Sawblade", onKeyFrameFlag_Sawblade); +} + + + + +//特效 设置自定义特效时 +{ + function setCustomData_po_atgunner_Sawblade(obj, receiveData) { + local WeaponType = receiveData.readDword(); + obj.getVar("Type").clear_vector(); + obj.getVar("Type").push_vector(WeaponType); + + local flagIndex = receiveData.readDword(); + local DamageRate = receiveData.readDword(); + + local ani; + switch (WeaponType) { + case 0: + ani = obj.getVar().GetAnimationMap("zuolun", "passiveobject/sqr_po/atgunner/animation/suncha/bulletpistol.ani"); + break; + case 1: + ani = obj.getVar().GetAnimationMap("buqiang", "passiveobject/sqr_po/atgunner/animation/suncha/bulletmusket.ani"); + break; + case 2: + ani = obj.getVar().GetAnimationMap("zidong", "passiveobject/sqr_po/atgunner/animation/suncha/bulletautomatic_31439.ani"); + break; + case 3: + ani = obj.getVar().GetAnimationMap("cannon", "passiveobject/sqr_po/atgunner/animation/suncha/cannon/attack.ani"); + break; + case 4: + ani = obj.getVar().GetAnimationMap("shounu", "passiveobject/sqr_po/atgunner/animation/suncha/bulletbowgun.ani"); + break; + case 8: + ani = obj.getVar().GetAnimationMap("EFFCT", "passiveobject/sqr_po/atgunner/animation/suncha/headshotgunner.ani"); + break; + default: + return; + break; + } + + switch (flagIndex) { + case 111: + sq_SetCustomRotate(obj, sq_ToRadian(-80.0)); + break; + case 222: + sq_SetCustomRotate(obj, sq_ToRadian(-85.0)); + break; + case 333: + sq_SetCustomRotate(obj, sq_ToRadian(-100.0)); + break; + } + + obj.setCurrentAnimation(ani); + local attackInfo = sq_GetCustomAttackInfo(obj, 0); //设置 特效 使用0号位atk + sq_SetCurrentAttackBonusRate(attackInfo, DamageRate); //给攻击信息设置百分比值 + sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息 + + } + if (getroottable().rawin("setCustomData_po_atgunner_po_Table")) + setCustomData_po_atgunner_po_Table.rawset(670, setCustomData_po_atgunner_Sawblade); + + + function setCustomData_po_atgunner_Sawblade_walkshoot(obj, receiveData) { + local DamageRate = receiveData.readDword(); + local ani = obj.getVar().GetAnimationMap("Sawblade_walkshoot", "passiveobject/sqr_po/atgunner/animation/suncha/walkshootgun.ani"); + + obj.setCurrentAnimation(ani); + local attackInfo = sq_GetCustomAttackInfo(obj, 0); //设置 特效 使用0号位atk + sq_SetCurrentAttackBonusRate(attackInfo, DamageRate); //给攻击信息设置百分比值 + sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息 + + } + if (getroottable().rawin("setCustomData_po_atgunner_po_Table")) + setCustomData_po_atgunner_po_Table.rawset(671, setCustomData_po_atgunner_Sawblade_walkshoot); +} + + +//特效 Ani播放完成时 +{ + function onEndCurrentAni_po_atgunner_Sawblade(obj) { + sq_SendDestroyPacketPassiveObject(obj); + } + + if (getroottable().rawin("onEndCurrentAni_po_atgunner_po_Table")) + onEndCurrentAni_po_atgunner_po_Table.rawset(670, onEndCurrentAni_po_atgunner_Sawblade); + + if (getroottable().rawin("onEndCurrentAni_po_atgunner_po_Table")) + onEndCurrentAni_po_atgunner_po_Table.rawset(671, onEndCurrentAni_po_atgunner_Sawblade); +} + + + +//特效 Proc中 +{ + function procAppend_po_atgunner_Sawblade(obj) { + local Type = obj.getVar("Type").get_vector(0); + + if (Type == 3 || Type == 8) return; + + local pAni = obj.getCurrentAnimation(); + local index = sq_GetAnimationFrameIndex(pAni); + + local currentT = sq_GetCurrentTime(pAni); + local fireT = pAni.getDelaySum(false); //总时间 + + local MoveZ = obj.getZPos(); //移动多少Z距离 + + if (MoveZ <= 3) { + sq_SendDestroyPacketPassiveObject(obj); + } + + + local v2 = sq_GetUniformVelocity(MoveZ, 0, currentT, MoveZ * 10); + local dstZ = sq_GetDistancePos(0, -MoveZ, v2); + + sq_setCurrentAxisPos(obj, 2, dstZ); //设置当前z坐标 + + } + if (getroottable().rawin("procAppend_po_atgunner_po_Table")) + procAppend_po_atgunner_po_Table.rawset(670, procAppend_po_atgunner_Sawblade); +} \ No newline at end of file diff --git a/character/GetCurrentModuleDamageRate.nut b/character/GetCurrentModuleDamageRate.nut new file mode 100644 index 0000000..15208fc --- /dev/null +++ b/character/GetCurrentModuleDamageRate.nut @@ -0,0 +1,137 @@ +/* +文件名:GetCurrentModuleDamageRate.nut +路径:character/GetCurrentModuleDamageRate.nut +创建日期:2022-11-12 19:42 +文件用途:提升伤害 +*/ + + + +//获取强化增幅提升率 +function SetUpgradeRate() { + local Rate = [ + [0, 1.0], + [1, 1.02], + [2, 1.03], + [3, 1.04], + [4, 1.05], + [5, 1.06], + [6, 1.07], + [7, 1.08], + [8, 1.09], + [9, 1.10], + [10, 1.10], + [11, 1.20], + [12, 1.40], + [13, 1.60], + [14, 2.20], + [15, 3.40], + ]; + local RootTable = getroottable(); + local Level = L_sq_GetCharacterAttribute(0x1054, 1); + RootTable.rawset("UpgradeRate", Rate[Level][1] - 1.0); +} + +//最终伤害 +function GetOverDamgeRate(obj) { + return (obj.sq_GetIntData(169, 1).tofloat() / 100.0); +} + +//-------------------------------------------------------------------------------------------------黄字追加伤害 +function GetYellowAddDamageRate(obj) { + local YellowAdd = obj.getVar("YellowAdd"); + YellowAdd.clear_vector(); + local YellowAddRate = YellowAdd.getInt(0); //黄字追加伤害初始值 + + //----------------------------------------------------------------------------技能栏手搓伤害增加率 + local SkillSlot = obj.getVar("SkillSlot"); + local SkillSlotRate = (12 - SkillSlot.getInt(0)) * 5; + YellowAdd.setInt(0, SkillSlotRate); + //---------------------------------------------------------------------------- + + return YellowAddRate; +} +//-------------------------------------------------------------------------------------------------黄字追加伤害 + + + +function getCurrentModuleDamageRate(obj) { + + if (!obj) + return 1.0; + local rate = 10.0; + + local UpgradeRate = getroottable()["UpgradeRate"]; + rate += (GetYellowAddDamageRate(obj).tofloat() / 100.0); //追加黄字 + + //强化增伤 //最终增伤 + //rate *= 1 + UpgradeRate + GetOverDamgeRate(obj); + return rate; +} + +if (!getroottable().rawin("DungeonIndex")) DungeonIndex <- []; +if (!getroottable().rawin("GrowType")) GrowType <- []; + + + +function L_getCurrentModuleDamageRate(obj) { + if (!obj) + return 1.0; + local rate; + if (getroottable().rawin("LenheartCurrentModuleDamageRate")) { + rate = 1.0 + getroottable()["LenheartCurrentModuleDamageRate"]; + } else { + rate = 1.0; + } + local AncientAttackHit = obj.getVar("AncientAttackHit"); + local AncientAttackRate = AncientAttackHit.getInt(10).tofloat() / 1000.0; + + local ClientRat = 1.0; + try { + ClientRat = getCurrentModuleDamageRate(obj).tofloat(); + } catch (exception) { + ClientRat = 1.0; + } + + local stage = sq_GetGlobaludpModuleStage(); + local dungeon = sq_GetDungeonByStage(stage); + local dungeonIndex = sq_GetDuegonIndex(dungeon); + local fbsh = 100; + + foreach(id in DungeonIndex) { + if (dungeonIndex == id[0]) { + fbsh = id[1]; + } + } + local nrate = fbsh.tofloat() / 100.0; + rate = rate.tofloat() * nrate; + + local LLJob = sq_getJob(obj); + local LLGrowT = sq_getGrowType(obj); + + local LLLen = GrowType.len(); + for (local i = 0; i< 11; ++i) { + if (i == LLLen) break; + if (LLJob == i) { + foreach(GR in GrowType[i]) { + if (LLGrowT == GR[0]) + rate = rate.tofloat() * GR[1].tofloat(); + } + } + + } + + return (rate * ClientRat) + AncientAttackRate; +} + + + + +function GetMyDamageRateByLenheart(Chunk) { + local Jso = Json.Decode(Chunk); + local str = Jso.sh; + + local Func = compilestring(str); + Func(); +} +Pack_Control.rawset(20058002, GetMyDamageRateByLenheart); \ No newline at end of file diff --git a/character/Swordman/Swordman13State.nut b/character/Swordman/Swordman13State.nut new file mode 100644 index 0000000..953a372 --- /dev/null +++ b/character/Swordman/Swordman13State.nut @@ -0,0 +1,46 @@ +/* +文件名:Swordman13State.nut +路径:character/Swordman/Swordman13State.nut +创建日期:2022-09-10 17:39 +文件用途:鬼剑士13号状态 +*/ + +if (!getroottable().rawin("onSetState_Swordman13State_Table")) onSetState_Swordman13State_Table <- {} + +function onSetState_Swordman13State(obj, state, datas, isResetTimer) { + + //遍历并执行函数 + foreach(Flag, Func in onSetState_Swordman13State_Table) { + Func(obj, state, datas, isResetTimer); + } + //return 1; +} + + +if (!getroottable().rawin("onEndCurrentAni_Swordman13State_Table")) onEndCurrentAni_Swordman13State_Table <- {} + +function onEndCurrentAni_Swordman13State(obj) +{ + if(!obj) return; + + //遍历并执行函数 + foreach(Flag, Func in onEndCurrentAni_Swordman13State_Table) { + Func(obj); + } + +} + + +if (!getroottable().rawin("onKeyFrameFlag_Swordman13State_Table")) onKeyFrameFlag_Swordman13State_Table <- {} + +function onKeyFrameFlag_Swordman13State(obj, flagIndex) +{ + if (!obj) return false; + + //遍历并执行函数 + foreach(Flag, Func in onKeyFrameFlag_Swordman13State_Table) { + Func(obj, flagIndex); + } + + return true; +} \ No newline at end of file diff --git a/character/Swordman/Swordman_po.nut b/character/Swordman/Swordman_po.nut new file mode 100644 index 0000000..172a550 --- /dev/null +++ b/character/Swordman/Swordman_po.nut @@ -0,0 +1,133 @@ +/* +文件名:Swordman_po.nut +路径:character/Swordman/Swordman_po.nut +创建日期:2022-09-10 21:59 +文件用途:鬼剑士PO文件 +*/ + + +if (!getroottable().rawin("setCustomData_po_swordman_po_Table")) setCustomData_po_swordman_po_Table <- {} +function setCustomData_po_swordman_po(obj, receiveData) +{ + if (!obj) + return; + local skillid = receiveData.readDword(); //开始读取 四字节数 数据 + obj.getVar("skill").clear_vector(); //清空 Skill 储存器 + obj.getVar("skill").push_vector(skillid); //向 Skill 储存器 push内容 + + + //根据 技能ID 判断执行函数 + if (setCustomData_po_swordman_po_Table.rawin(skillid)) { + setCustomData_po_swordman_po_Table[skillid](obj, receiveData); + } + +} + +if (!getroottable().rawin("setState_po_swordman_po_Table")) setState_po_swordman_po_Table <- {} +function setState_po_swordman_po(obj, state, datas) +{ + if (!obj) return; + local skillid = obj.getVar("skill").get_vector(0); + + //根据 技能ID 判断执行函数 + if (setState_po_swordman_po_Table.rawin(skillid)) { + setState_po_swordman_po_Table[skillid](obj, state, datas); + } +} + + +if (!getroottable().rawin("procAppend_po_swordman_po_Table")) procAppend_po_swordman_po_Table <- {} +function procAppend_po_swordman_po(obj) //处于obj特效状态中 +{ + + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); //获取 Skill 储存器 0号位内容 + + + //根据 技能ID 判断执行函数 + if (procAppend_po_swordman_po_Table.rawin(skillid)) { + procAppend_po_swordman_po_Table[skillid](obj); + } +} + +if (!getroottable().rawin("onAttack_po_swordman_po_Table")) onAttack_po_swordman_po_Table <- {} +function onAttack_po_swordman_po(obj, damager, boundingBox, isStuck) +{ + if (!obj) + return; + if (!damager) + return 0; + + local skillid = obj.getVar("skill").get_vector(0); + + + //根据 技能ID 判断执行函数 + if (onAttack_po_swordman_po_Table.rawin(skillid)) { + onAttack_po_swordman_po_Table[skillid](obj, damager, boundingBox, isStuck); + } + + return 1; +} + + +if (!getroottable().rawin("onEndCurrentAni_po_swordman_po_Table")) onEndCurrentAni_po_swordman_po_Table <- {} +function onEndCurrentAni_po_swordman_po(obj) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + + + //根据 技能ID 判断执行函数 + if (onEndCurrentAni_po_swordman_po_Table.rawin(skillid)) { + onEndCurrentAni_po_swordman_po_Table[skillid](obj); + } + +} + + +if (!getroottable().rawin("onKeyFrameFlag_po_swordman_po_Table")) onKeyFrameFlag_po_swordman_po_Table <- {} +function onKeyFrameFlag_po_swordman_po(obj, flagIndex) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + + + //根据 技能ID 判断执行函数 + if (onKeyFrameFlag_po_swordman_po_Table.rawin(skillid)) { + onKeyFrameFlag_po_swordman_po_Table[skillid](obj, flagIndex); + } + + return true; +} + + + +function onTimeEvent_po_swordman_po(obj, timeEventIndex, timeEventCount) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + +} + + +function getCustomHitEffectFileName_po_swordman_po(obj, isAttachOnDamager) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + +} + + + +function onChangeSkillEffect_po_swordman_po(obj, skillIndex, reciveData) +{ + if (!obj) + return; + local skillid = obj.getVar("skill").get_vector(0); + +} \ No newline at end of file diff --git a/character/Swordman/WeaponMaster/Meteorsword.nut b/character/Swordman/WeaponMaster/Meteorsword.nut new file mode 100644 index 0000000..d629577 --- /dev/null +++ b/character/Swordman/WeaponMaster/Meteorsword.nut @@ -0,0 +1,387 @@ +/* + + + + + + + +*/ + + +function checkExecutableSkill_meteorsword(obj) { + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(235); + if (isUse) { + obj.sq_IsEnterSkillLastKeyUnits(235); //允许长按 + + + obj.sq_IntVectClear(); //清除人物子状态 + obj.sq_IntVectPush(0); //向人物子状态0号位 push 数据 0 + obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态 + + return true; + } + return false; +} + + + +function checkCommandEnable_meteorsword(obj) { + if (!obj) return false; + local chrstate = obj.sq_GetState(); //获取人物主状态 + + if (chrstate == STATE_STAND) //if 人物主状态为站立 返回真 + return true; + + if (chrstate == STATE_ATTACK) //if 人物主状态为攻击中 state 8 + { + return obj.sq_IsCommandEnable(235); //返回 是否允许按下235号技能按键的 布尔值 + } + return true; +} + + + +function onProcCon_meteorsword(obj) { + local bDownKey = obj.isDownSkillLastKey(); + local stateTimer = obj.sq_GetStateTimer(); + local RootTable = getroottable(); + + if (Chr_State_Table[0] == 0) { + if (!bDownKey) { + obj.sq_IntVectClear(); //清除人物子状态 + obj.sq_IntVectPush(3); //向人物子状态0号位 push 数据 0 + obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态 + } else if (stateTimer >= 800) { + obj.sq_IntVectClear(); //清除人物子状态 + obj.sq_IntVectPush(2); //向人物子状态0号位 push 数据 0 + obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态 + } + return; + } else if (Chr_State_Table[0] == 2) { + if (!bDownKey) { + obj.sq_IntVectClear(); //清除人物子状态 + obj.sq_IntVectPush(4); //向人物子状态0号位 push 数据 0 + obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态 + } + } +} + + +function createEff_meteorsword(obj, ani, X, Y, Z, B) { + local ani = sq_CreateAnimation("", ani); + local pooledObj = sq_CreatePooledObject(ani, B); + pooledObj.setCurrentPos(X, Y, Z); + pooledObj.setCurrentDirection(obj.getDirection()); + sq_AddObject(obj, pooledObj, 2, false); + + return pooledObj; +} + + + +function onSetState_meteorsword(obj, state, datas, isResetTimer) { + + if (!obj) return; + obj.sq_StopMove(); //停止移动 + + obj.getVar("meteorsword").clear_vector(); + local RootTable = getroottable(); + + + if (Chr_State_Table[0] == 0) { + local Direction = obj.getDirection(); + obj.sq_SetCurrentAnimation(124); + + local montab = GameC.findRoundNearAllEnemyRect(obj, 340, 80, Direction); + if (montab.len() > 0) { + foreach(Monobj in montab) { + if (!CNSquirrelAppendage.sq_IsAppendAppendage(Monobj, "character/swordman/weaponmaster/ap_meteorsword.nut")) { + local append = CNSquirrelAppendage.sq_AppendAppendage(Monobj, obj, -1, true, "character/swordman/weaponmaster/ap_meteorsword.nut", false); + CNSquirrelAppendage.sq_AppendAppendageID(append, Monobj, obj, 235, false); + } + } + } + } else if (Chr_State_Table[0] == 2) { + obj.sq_SetCurrentAnimation(125); + + GameC.RemoveObjectAppend(obj, "character/swordman/weaponmaster/ap_meteorsword.nut"); + } else if (Chr_State_Table[0] == 3) { + obj.sq_SetCurrentAnimation(126); + } else if (Chr_State_Table[0] == 4) { + obj.sq_SetCurrentAnimation(126); + + obj.sq_SendCreatePassiveObjectPacket(2022100901, 0, 200, 1, 0); + createEff_meteorsword(obj, "passiveobject/sqr_po/swordman/animation/meteorsword/up_meteorsword_shock1.ani", sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 200), obj.getYPos(), obj.getZPos(), true); + createEff_meteorsword(obj, "character/swordman/animation/yosin/meteorsword/up.ani", sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 0), obj.getYPos(), obj.getZPos(), true); + sq_SetShake(obj, 6, 1000); + + } + + +} + + + + +function onEndCurrentAni_meteorsword(obj) { + if (!obj) return; + + if (Chr_State_Table[0] == 1) { + obj.sq_IntVectClear(); //清除人物子状态 + obj.sq_IntVectPush(3); //向人物子状态0号位 push 数据 0 + obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态 + } else if (Chr_State_Table[0] == 3) { + local attackBonusRate = obj.sq_GetBonusRateWithPassive(235, 235, 5, 2.0); + + obj.sq_StartWrite(); //开始写入 + obj.sq_WriteDword(235); //写入 4 字节数 技能ID + obj.sq_WriteDword(40); //写入 4 字节数 掉落范围 + obj.sq_WriteDword(20); //写入 4 字节数 掉落数量 + obj.sq_WriteDword(1); //写入 4 字节数 当前计数 + obj.sq_WriteDword(attackBonusRate); //写入 4 字节数 atk + obj.sq_WriteDword(0); //写入 4 字节数 是否满蓄力 + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_USER, true); + local POSxadd = sq_GetDistancePos(0, obj.getDirection(), 200); //设置落剑中点 + obj.sq_WriteDword(obj.getXPos() + POSxadd); //释放的时候的坐标 + obj.sq_WriteDword(obj.getYPos()); //释放的时候的坐标 + obj.sq_SendCreatePassiveObjectPacket(24370, 0, 200, 0, 0); + } else if (Chr_State_Table[0] == 4) { + local attackBonusRate = obj.sq_GetBonusRateWithPassive(235, 235, 5, 2.0); + + + obj.sq_StartWrite(); //开始写入 + obj.sq_WriteDword(235); //写入 4 字节数 技能ID + obj.sq_WriteDword(40); //写入 4 字节数 掉落范围 + obj.sq_WriteDword(20); //写入 4 字节数 掉落数量 + obj.sq_WriteDword(1); //写入 4 字节数 当前计数 + obj.sq_WriteDword(attackBonusRate); //写入 4 字节数 atk + obj.sq_WriteDword(1); //写入 4 字节数 是否满蓄力 + obj.sq_AddSetStatePacket(0, STATE_PRIORITY_USER, true); + local POSxadd = sq_GetDistancePos(0, obj.getDirection(), 200); //设置落剑中点 + obj.sq_WriteDword(obj.getXPos() + POSxadd); //释放的时候的坐标 + obj.sq_WriteDword(obj.getYPos()); //释放的时候的坐标 + obj.sq_SendCreatePassiveObjectPacket(24370, 0, 200, 0, 0); + } +} + + + +{ + function setCustomData_po_Swordman_meteorsword(obj, receiveData) { + local px = receiveData.readDword(); //掉落范围 + local downnum = receiveData.readDword(); //掉落数量 + local nowdownnum = receiveData.readDword(); //当前计数 + local atk = receiveData.readDword(); //atk + local BigSword = receiveData.readDword(); //是否满蓄力 + + local Xpos = receiveData.readDword(); + local Ypos = receiveData.readDword(); + + local size = 100; + + local SwordIndex = sq_getRandom(1, 7); + local ani; + + if (nowdownnum > downnum) { + ani = obj.getVar().GetAnimationMap("流星落蓄力一击", "passiveobject/sqr_po/swordman/animation/meteorsword/dropsword8_meteorsword_swords.ani"); + atk *= 5; + size = 200; + } else { + ani = obj.getVar().GetAnimationMap("流星落", "passiveobject/sqr_po/swordman/animation/meteorsword/dropsword" + SwordIndex + "_meteorsword_swords.ani"); // 定义一下ani + } + obj.setCurrentAnimation(ani); //设置 特效 使用定义的 ani + local attackInfo = sq_GetCustomAttackInfo(obj, 0); //设置 特效 使用6号位atk + sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息 + attackInfo = sq_GetCurrentAttackInfo(obj); //设置 attackInfo 为得到当前攻击信息 + + sq_SetCurrentAttackPower(attackInfo, atk); //给当前攻击设置 百分比 + + + local currentAni = sq_GetCurrentAnimation(obj); //得到特效当前正在播放ani + local sizeRate = size.tofloat() / 100.0; //转换浮点数运算 + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); //增加ani 宽度跟高度率 + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); //增加ani als附加 ani大小比例 + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); //攻击框,x y z比率 + + + obj.getVar("var").clear_vector(); + obj.getVar("var").push_vector(px); //掉落范围 + obj.getVar("var").push_vector(downnum); //掉落数量 + obj.getVar("var").push_vector(nowdownnum); //当前计数 + obj.getVar("var").push_vector(atk); //atk + obj.getVar("var").push_vector(BigSword); //是否满蓄力 + + obj.getVar("var").push_vector(Xpos); + obj.getVar("var").push_vector(Ypos); + } + + setCustomData_po_swordman_po_Table.rawset(235, setCustomData_po_Swordman_meteorsword); +} + + + +{ + function onKeyFrameFlag_po_swordman_meteorsword(obj, flagIndex) { + local px = obj.getVar("var").get_vector(0); //掉落范围 + local downnum = obj.getVar("var").get_vector(1); //掉落数量 + local nowdownnum = obj.getVar("var").get_vector(2); //当前计数 + local atk = obj.getVar("var").get_vector(3); //atk + local BigSword = obj.getVar("var").get_vector(4); //atk + + local Xpos = obj.getVar("var").get_vector(5); + local Ypos = obj.getVar("var").get_vector(6); + if (flagIndex == 1) { + + if (downnum > nowdownnum) //如果最大计数 大于当前计数 + { + if (!obj.isMyControlObject()) return false; //如果不是我的控制对象则返回 + + local posX = Xpos + sq_getRandom(-px * 2, px * 2); //得到坐标 + local posY = Ypos + sq_getRandom(-px, px); //得到坐标 + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(235); + + sq_BinaryWriteDword(px); //atk 百分比值 + sq_BinaryWriteDword(downnum); //最大计数 + sq_BinaryWriteDword(nowdownnum + 1); //当前计数 + sq_BinaryWriteDword(atk); // + sq_BinaryWriteDword(BigSword); + + + sq_BinaryWriteDword(Xpos); + sq_BinaryWriteDword(Ypos); + + + sq_SendCreatePassiveObjectPacketPos(obj, 24370, 0, posX, posY, obj.getZPos()); //生成 obj特效 + sq_SetMyShake(obj, 1, 100); + return true; + } + + } else if (flagIndex == 666) { + sq_SetMyShake(obj, 5, 300); + } + if (flagIndex == 222 && BigSword == 1 && downnum == nowdownnum) { + if (!obj.isMyControlObject()) return false; //如果不是我的控制对象则返回 + + local posX = Xpos; //得到坐标 + local posY = Ypos; //得到坐标 + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(235); + + sq_BinaryWriteDword(px); //atk 百分比值 + sq_BinaryWriteDword(downnum); //最大计数 + sq_BinaryWriteDword(nowdownnum + 1); //当前计数 + sq_BinaryWriteDword(atk); // + sq_BinaryWriteDword(BigSword); + + sq_BinaryWriteDword(Xpos); + sq_BinaryWriteDword(Ypos); + + sq_SendCreatePassiveObjectPacketPos(obj, 24370, 0, posX, posY, obj.getZPos()); //生成 obj特效 + return true; + } + return true; + } + onKeyFrameFlag_po_swordman_po_Table.rawset(235, onKeyFrameFlag_po_swordman_meteorsword); +} + +{ + function onEndCurrentAni_po_swordman_meteorsword(obj) { + sq_SendDestroyPacketPassiveObject(obj); + } + onEndCurrentAni_po_swordman_po_Table.rawset(235, onEndCurrentAni_po_swordman_meteorsword); +} +/* + + + +function setCustomData_po_swordman_meteorsword(obj, receiveData) +{ + local px = receiveData.readDword(); //掉落范围 + local downnum = receiveData.readDword(); //掉落数量 + local nowdownnum = receiveData.readDword(); //当前计数 + local atk = receiveData.readDword(); //atk + + local Xpos = receiveData.readDword(); + local Ypos = receiveData.readDword(); + local WeaponIndex = receiveData.readDword(); + + local size = 100; + + local SwordIndex = sq_getRandom(1, 7); + local ani = obj.getVar().GetAnimationMap("流星落", "passiveobject/sqr_po/swordman/animation/meteorsword/dropsword" + SwordIndex + "_meteorsword_swords.ani"); // 定义一下ani + if (WeaponIndex == 80000001) + { + ani = obj.getVar().GetAnimationMap("克拉丽丝流星落", "passiveobject/sqr_po/swordman/animation/meteorsword/dropsword8_meteorsword_swords.ani"); + downnum = downnum * 2; + px = px + 2; + } + obj.setCurrentAnimation(ani); //设置 特效 使用定义的 ani + local attackInfo = sq_GetCustomAttackInfo(obj, 6); //设置 特效 使用6号位atk + sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息 + attackInfo = sq_GetCurrentAttackInfo(obj); //设置 attackInfo 为得到当前攻击信息 + sq_SetCurrentAttackPower(attackInfo, atk); //给当前攻击设置 百分比 + + + local currentAni = sq_GetCurrentAnimation(obj); //得到特效当前正在播放ani + local sizeRate = size.tofloat() / 100.0; //转换浮点数运算 + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); //增加ani 宽度跟高度率 + currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); //增加ani als附加 ani大小比例 + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); //攻击框,x y z比率 + + + obj.getVar("var").clear_vector(); + obj.getVar("var").push_vector(px); //掉落范围 + obj.getVar("var").push_vector(downnum); //掉落数量 + obj.getVar("var").push_vector(nowdownnum); //当前计数 + obj.getVar("var").push_vector(atk); //atk + + obj.getVar("var").push_vector(Xpos); + obj.getVar("var").push_vector(Ypos); + +} + +function onKeyFrameFlag_po_swordman_meteorsword(obj, flagIndex) +{ + if (flagIndex == 1) + { + local px = obj.getVar("var").get_vector(0); //掉落范围 + local downnum = obj.getVar("var").get_vector(1); //掉落数量 + local nowdownnum = obj.getVar("var").get_vector(2); //当前计数 + local atk = obj.getVar("var").get_vector(3); //atk + + local Xpos = obj.getVar("var").get_vector(4); + local Ypos = obj.getVar("var").get_vector(5); + + + if (downnum > nowdownnum) //如果最大计数 大于当前计数 + { + if (!obj.isMyControlObject()) return false; //如果不是我的控制对象则返回 + + local posX = Xpos + sq_getRandom(-px * 2, px * 2); //得到坐标 + local posY = Ypos + sq_getRandom(-px, px); //得到坐标 + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(235); + + sq_BinaryWriteDword(px); //atk 百分比值 + sq_BinaryWriteDword(downnum); //最大计数 + sq_BinaryWriteDword(nowdownnum + 1); //当前计数 + sq_BinaryWriteDword(atk); // + + sq_BinaryWriteDword(Xpos); + sq_BinaryWriteDword(Ypos); + + + sq_SendCreatePassiveObjectPacketPos(obj, 24370, 0, posX, posY, obj.getZPos()); //生成 obj特效 + sq_SetMyShake(obj, 1, 100); + return true; + } + } + return true; +} +*/ \ No newline at end of file diff --git a/character/Swordman/WeaponMaster/ap_Meteorsword.nut b/character/Swordman/WeaponMaster/ap_Meteorsword.nut new file mode 100644 index 0000000..ec18df2 --- /dev/null +++ b/character/Swordman/WeaponMaster/ap_Meteorsword.nut @@ -0,0 +1,78 @@ +/* +文件名:ap_Meteorsword.nut +路径:character/Swordman/WeaponMaster/ap_Meteorsword.nut +创建日期:2022-10-09 01:03 +文件用途: +*/ +function sq_AddFunctionName(appendage) { + appendage.sq_AddFunctionName("proc", "proc_appendage_meteorsword") + appendage.sq_AddFunctionName("onStart", "onStart_appendage_meteorsword") +} + +function sq_AddEffect(appendage) { + +} + +function proc_appendage_meteorsword(appendage) { + if (!appendage) return; + + local parentObj = appendage.getParent(); //获得父对象 + local sourceObj = appendage.getSource(); //获得源对象 + + if (!sourceObj || !parentObj || sourceObj.getState() == STATE_STAND) { + appendage.setValid(false); + return; + } + + local startX = appendage.getVar().get_vector(0); + local startY = appendage.getVar().get_vector(1); + + sourceObj = sq_GetCNRDObjectToSQRCharacter(sourceObj); //将基础类对象转化为 角色对象 + + + if (sourceObj.getState() != 235) { + appendage.setValid(false); + return; + } + + local chrX = sq_GetDistancePos(sourceObj.getXPos(), sourceObj.getDirection(), 200); + local chrY = sourceObj.getYPos(); + + local currT = appendage.getTimer().Get(); + + local maxT = 500; + + + if (currT < maxT) { + local currX = sq_GetUniformVelocity(startX, chrX, currT, maxT); + local currY = sq_GetUniformVelocity(startY, chrY, currT, maxT); + + parentObj.setCurrentPos(currX, currY, parentObj.getZPos()); + + } else { + appendage.setValid(false); + return; + } + + +} + + + +function onStart_appendage_meteorsword(appendage) { + if (!appendage) { + return; + } + local parentObj = appendage.getParent(); + local sourceObj = appendage.getSource(); + + if (!sourceObj || !parentObj) { + appendage.setValid(false); + return; + } + appendage.getVar().clear_vector(); + appendage.getVar().push_vector(parentObj.getXPos()); + appendage.getVar().push_vector(parentObj.getYPos()); + + +} \ No newline at end of file diff --git a/character/atgunner_load_state.nut b/character/atgunner_load_state.nut new file mode 100644 index 0000000..782a7d5 --- /dev/null +++ b/character/atgunner_load_state.nut @@ -0,0 +1,15 @@ +/* +文件名:atgunner_load_state.nut +路径:character/atgunner_load_state.nut +创建日期:2022-09-09 19:23 +文件用途:女枪手技能声明文件 +*/ +//dofile("sqr/ProcPassiveSkill/ProcPassiveSkill_ATGunner.nut"); //女枪手被动技能 +//dofile("sqr/procAppend/procAppend_ATGunner.nut"); //女枪手Proc循环函数 + +//女枪手13号状态 +IRDSQRCharacter.pushState(5, "character/atgunner/atgunner13state.nut", "ATGunner13State", 13, -1); +//女枪手PO文件声明 +//IRDSQRCharacter.pushPassiveObj("character/atgunner/atgunner_po.nut", 24371); + +dofile("sqr/character/ATGunner/Ranger/Sawblade.nut"); //枪刃改良-女漫游-二觉被动 \ No newline at end of file diff --git a/character/atmage/atmage_buff.nut b/character/atmage/atmage_buff.nut new file mode 100644 index 0000000000000000000000000000000000000000..3f1b70f43f86640570ed6b5962f0f7a2a3d92934 GIT binary patch literal 468 zcmd<(N-NDvF3HT#Q^?PAOe;w(3QjEvE=ep&jdv)MfSUEvQ%gVwA;dK_ zt${j#C^Jn#16_-)La?`|k59a>qr0cGqffkJNQk4ecYJ67&>~KdO`Q7r3Qy7)FvzOn!uWuk#LD3O(!3N6CExIPM?YszSHBP?u#L4qWvMyEsS5b) z4Gs-(4T^UR^7Rjj_xFo;b_@ dstObj.getXPos()) + return true; + } + + return false; +} + + +// 剪葬谛 陕紫煎 颤啃击 琼嬴顶横 葬欐?朝 ?热殓栖棻. +function findAngleTarget(obj, distance, angle, targetMaxHeight) +{ + if(!obj) + return null; + + local objectManager = obj.getObjectManager(); + + + if (objectManager == null) + return null; + + local minDistance = 0; + local target = null; + + + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1) + { + local object = objectManager.getCollisionObject(i); + if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE) && + isInFrontObject(obj, object) && object.getZPos() <= targetMaxHeight) + { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + // 舱羲 顶缣怃 陛潍 陛梱遴 瞳击 坚艇棻 + + if(!activeObj.isDead()) + { + //local testAngle = CNRDObject.getAngle(0, 0, 10, 10, false); + + print( " angle:" + getObjectAngle(obj, object)); + if(sq_GetDistanceObject(obj, object, false) < distance && getObjectAngle(obj, object) < angle) + { + if (target == null || sq_GetDistanceObject(obj, object, false) < minDistance) + { + target = activeObj; + minDistance = sq_GetDistanceObject(obj, object, false); + } + } + } + } + } + + return target; +} + +// 蹂羶? 漱搅 getvar 螃粽薛? 葬蝶?寰缣 伪擎 螃粽薛?陛 毡朝虽 羹觼?朝 ?热殓栖棻. +// orgObj : 绿掖? object殓栖棻. +// sq_var get_obj_vector_size 绿掖? 葬蝶?菟 +function isSameObjectBySqVar(orgObj, sq_var) +{ + if(!orgObj || !sq_var) + return false; + + local i; + local object_num = sq_var.get_obj_vector_size(); + + for(i = 0; i < object_num; i++) + { // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻.. + local dstObj = sq_var.get_obj_vector(i); + + local isSame = isSameObject(orgObj, dstObj); + + if(isSame) // 酝犒肾朝 匙桧 毡棻贼.. + return true; + } + + return false; + +} + +function getBossTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, exceptSqVar) +{ + if(!obj) + return null; + + local objectManager = obj.getObjectManager(); + + + if (objectManager == null) + return null; + + //local minDistance = 0; + local target = null; + + + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1) + { + local object = objectManager.getCollisionObject(i); + if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE) && + isInFrontObject(obj, object) && object.getZPos() <= targetMaxHeight ) + { + if(sq_IsinMapArea(obj, object, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange)) + { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + + if(!activeObj.isDead()) + { // 避虽 强擎 + if(activeObj.isBoss()) + { // 尔蝶 + local isExist = isSameObjectBySqVar(object, exceptSqVar); + + if(!isExist || target == null) + { + target = activeObj; + } + } + } + } + } + } + + return target; + +} + +function getPriorityTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, exceptSqVar, isInFront) +{ + if(!obj) + return null; + + local objectManager = obj.getObjectManager(); + + + if (objectManager == null) + return null; + + //local minDistance = 0; + local target = null; + + + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1) + { + local object = objectManager.getCollisionObject(i); + if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE) && + object.getZPos() <= targetMaxHeight ) + { + if(isInFront == true) + { + if(isInFrontObject(obj, object) == false) + { + continue; + } + } + if(sq_IsinMapArea(obj, object, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange)) + { + local activeObj = sq_GetCNRDObjectToActiveObject(object); + + if(!activeObj.isDead()) + { // 避虽 强擎 + local isExist = isSameObjectBySqVar(object, exceptSqVar); + + if(activeObj.isBoss()) + { + if(target == null) + { + target = activeObj; + + if(!isExist) + return target; + } + } + + if(activeObj.isSuperChampion()) + { // 尔蝶 + if(target == null || !isExist) + { + target = activeObj; + + if(!isExist) + return target; + } + } + + if(activeObj.isCommonChampion()) + { + if(target == null || !isExist) + { + target = activeObj; + + if(!isExist) + return target; + } + } + + if(activeObj.isChampion()) + { + if(target == null || !isExist) + { + target = activeObj; + + if(!isExist) + return target; + } + } + + if(target == null || !isExist) + { + target = activeObj; + + if(!isExist) + return target; + } + } + } + } + } + + return target; + +} + + + +function createPaticleMap(obj, filename, x, y, z) +{ + local particleCreater = obj.getVar().GetparticleCreaterMap(filename, filename, obj); + + particleCreater.Restart(0); + particleCreater.SetPos(x, y, z); + sq_AddParticleObject(obj, particleCreater); +} + +function initGetVarTimer(obj, maxTimerNum, eventTerm, eventMaxCount) +{ + if(maxTimerNum <= 0) + return; + + local sq_var = obj.getVar(); + + sq_var.clear_timer_vector(); + + for (local i = 0;i < maxTimerNum; i+=1) + { + sq_var.push_timer_vector(); + } + + for (local i = 0;i < maxTimerNum; i+=1) + { + local t = sq_var.get_timer_vector(i); + t.setParameter(eventTerm, eventMaxCount); + t.resetInstant(i); + } + +} + + +function procParticleCreaterMap(obj, currentT, filename, x, y, z) +{ + local t = obj.getVar().get_timer_vector(0); + + if(!t) + return; + + if(t.isOnEvent(currentT) == true) + { + local particleCreater = obj.getVar().GetparticleCreaterMap(filename, filename, obj); + + particleCreater.Restart(0); + particleCreater.SetPos(x, y, z); + + sq_AddParticleObject(obj, particleCreater); + } +} + + +function createAnimationPooledObject(obj, aniFilename, isAutoDestroy, x, y, z) +{ + local ani = sq_CreateAnimation("",aniFilename); + local pooledObj = sq_CreatePooledObject(ani,isAutoDestroy); + + pooledObj.setCurrentPos(x,y,z); + sq_SetCurrentDirection(pooledObj, obj.getDirection()); + + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + + return pooledObj; +} + +function createAnimationImageRatePooledObject(obj, aniFilename, isAutoDestroy, widthRate, heightRate, x, y, z) +{ + local ani = sq_CreateAnimation("",aniFilename); + + if(!ani) + return null; + + ani.setImageRateFromOriginal(widthRate, heightRate); + + local pooledObj = sq_CreatePooledObject(ani,isAutoDestroy); + + pooledObj.setCurrentPos(x,y,z); + sq_SetCurrentDirection(pooledObj, obj.getDirection()); + + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + + return pooledObj; +} + + + + +function procSkill_IceRoad(obj) +{ + local appendage = obj.GetSquirrelAppendage("Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut"); + + if(appendage) { + local isvalid = appendage.isValid(); + if(isvalid) { + local currentT = appendage.getTimer().Get(); + local t = appendage.sq_var.get_timer_vector(0); + local t2 = appendage.sq_var.get_timer_vector(1); // 橡挤亵陕击 虏萄朝匙娄 涤紫煎 缟?模赅朝 棻艇颤桧该煎 给嬴陛怃 mp模赅蒂 卫霾栖棻. + + if (t2.isOnEvent(currentT) == true) + { + local skill = sq_GetSkill(obj, SKILL_ICEROAD); + if(skill) + { + local skill_level = obj.sq_GetSkillLevel(SKILL_ICEROAD); + local spendMp = obj.sq_GetLevelData(SKILL_ICEROAD, SKL_LV_0, skill_level); // 0.卫除渡MP 模赅榆 + if (spendMp > obj.getMp()) + { + appendage.setValid(false); + skill.setSealActiveFunction(true); + return; + } + else + { + // MP陛 醱碟?棻贼 橡挤暧 望 ?亵陕击 虏苌棻.. + print( " spendMp:" + spendMp); + obj.sendSetMpPacket(obj.getMp() - spendMp); + } + + } + } + + if (t.getEventTerm() == -1) + return; + + if (t.isOnEvent(currentT) == true) + { + if(obj.isMyControlObject()) + { + if(obj.getZPos() == 0) + { + local skill_level = sq_GetSkillLevel(obj, SKILL_ICEROAD); + local change_time = sq_GetLevelData(obj, SKILL_ICEROAD, SKL_LV_1, skill_level); // 虽楼卫除 + local rate = sq_GetLevelData(obj, SKILL_ICEROAD, SKL_LV_3, skill_level); // 桧楼 ?徽 + local movSpd = sq_GetLevelData(obj, SKILL_ICEROAD, SKL_LV_2, skill_level); // + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(change_time); // 卫除 + sq_BinaryWriteDword(rate); // ?徽 + sq_BinaryWriteDword(movSpd); // 马模纂 + + // 嬴桧蝶 煎萄 ?撩 ?卫粽 蝶鉴击 寡锡棻贼 蜃擎 瞳桧 彩念 鼻鹧桧鼻缣 勘萼棻. + local skillLevel = sq_GetSkillLevel(obj, SKILL_ICEROAD_EX); + sq_BinaryWriteWord(skillLevel); + + if (skillLevel > 0) + { + local prob = sq_GetLevelData(obj, SKILL_ICEROAD_EX, 4, skillLevel) / 10.0;// 鼻鹧桧鼻 彩念暧 ?睦 + local asLevel = sq_GetLevelData(obj, SKILL_ICEROAD_EX, 5, skillLevel); // 鼻鹧桧鼻 彩念暧 溯涟 + local validTime = sq_GetLevelData(obj, SKILL_ICEROAD_EX, 6, skillLevel); // 鼻鹧桧鼻 彩念暧 卫除 + sq_BinaryWriteFloat(prob.tofloat()); // ?睦 + sq_BinaryWriteWord(asLevel); // 溯涟 + sq_BinaryWriteDword(validTime); // 卫除 + } + + sq_SendCreatePassiveObjectPacket(obj, 24243, 0, 0, 0, 0, obj.getDirection()); + } + } + } + } + } +} + +function playMoveSound_ATMage(obj) +{ + //obj.sq_PlaySound("R_ICE_WALK"); + + if(!obj) + return; + + local result = CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut"); + + if (result == true) // 嬴桧蝶煎萄蒂 面堡击 隆 嫦濠措模葬陛 夥荸栖棻. + { + obj.sq_PlaySound("R_ICE_WALK_LOOP", SOUND_ID_MOVE); + } + else + { + obj.sq_PlayMoveSound(); + } +} + +function procDash_ATMage(obj) +{ + if(!obj) + return; + + local ani = sq_GetCurrentAnimation(obj); + + if(!ani) + return; + + local isFlag = obj.sq_IsKeyFrameFlag(ani, 1); + + + local result = CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut"); + + if (result == true) // 嬴桧蝶煎萄蒂 面堡击 隆 嫦濠措模葬陛 夥荸栖棻. + { + + if(isFlag) + { + obj.sq_PlaySound("R_ICE_WALK"); + } + + obj.sq_ClearKeyFrameFlag(ani); + } + else + { + //print(" procDash"); + + if (isFlag) + { + local stage = sq_GetGlobaludpModuleStage(); + if(!stage) + return; + + local dungeon = sq_GetDungeonByStage(stage); + + if(!dungeon) + return; + + local dungeonIndex = sq_GetDuegonIndex(dungeon); + local mapIndex = sq_GetMapIndex(stage); + + //扑肮薹 湍瞪暧 唳办 40廓, 扑肮暧 跷瞳 PVP裘暧 唳办 50019廓. + if (dungeonIndex == 40 || mapIndex == 50019) + { + obj.sq_PlaySound("R_RUN_SNOW"); + } + else + { + local weight = sq_GetObjectWeight(obj); + if (sq_GetShadowTypeByAnimation() != 0) + obj.sq_PlaySound("R_RUN_FLOOR"); + else if (weight < LIGHT_OBJECT_MAX_WEIGHT) + obj.sq_PlaySound("RUN_STONE"); + else if (weight < MIDDLE_OBJECT_MAX_WEIGHT) + obj.sq_PlaySound("RUN_SOIL"); + else + obj.sq_PlaySound("RUN_GRASS"); + } + } + obj.sq_ClearKeyFrameFlag(ani); + + } +} + + + + + +function procSkill_MagicShield(obj) +{ +} + + +function procSkill_MagicShield(obj) +{ +} + +function getImmuneTypeDamgeRate_ATMage(obj,damageRate, attacker) +{ + // 碳晦菅 锰剪葬 奢问暧 等嘐虽蒂 N%虏踯 马模卫郦坚, 唳霜击 嫡虽 强蝗栖棻. + if(obj.getVar("firepillar").size_vector() > 0) + { + if(obj.getVar("firepillar").get_vector(VECTOR_FLAG_2)) + { + if(attacker) + { + print( " damageRate:" + damageRate); + local skillLevel = obj.sq_GetSkillLevel(SKILL_FIREPILLAR); + local N = obj.sq_GetLevelData(SKILL_FIREPILLAR, 0, skillLevel); // 0.锰剪葬 ??还罹舆朝 马模纂(%) + // 锰剪葬 奢问桧塭贼.. + damageRate = damageRate - N; + //damageRate = 10; + print( " convert damageRate:" + damageRate); + } + } + } + + // 碳饵煎 ?犒卫缚 等嘐虽陛 2寡(1.5寡?) 菟横除棻. + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) // + { + //0. ?问卫 嫡朝 等嘐虽 隶陛徽(%) + local increaseDamageRate = sq_GetIntData(obj, SKILL_DIEHARD, SKL_STATIC_INT_IDX_0); + + //increaseDamageRate.tofloat() / 100.0; + damageRate = damageRate + increaseDamageRate; + } + + return damageRate; +} + +function getImmuneType_ATMage(obj,type, attacker) +{ + local immuneType = type; + + return immuneType; +} + +function procSkill_ATMage(obj) +{ + procSkill_IceRoad(obj); + procSkill_MagicShield(obj); + +} + + + +function useSkill_before_ATMage(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) +{ + local bChangedMp = false; + + print(" consumpMp:" + consumeMp + " oldSkillMpRate:" + oldSkillMpRate); + + local appendage = obj.GetSquirrelAppendage("Character/ATMage/ManaBurst/ap_ATMage_ManaBurst.nut"); + + if(appendage) + { + local isvalid = appendage.isValid(); + + if(isvalid) + { + local skillLevel = obj.sq_GetSkillLevel(SKILL_MANABURST); + local mpComsumeRate = sq_GetLevelData(obj, SKILL_MANABURST, SKL_LVL_COLUMN_IDX_0, skillLevel); + local newMpRate = oldSkillMpRate.tofloat() * (100 + mpComsumeRate.tofloat()) / 100; + + print(" newMpRate:" + newMpRate); + obj.setSkillMpRate(skillIndex, newMpRate.tofloat()); + bChangedMp = true; + } + } + + if(obj.sq_GetSkillLevel(SKILL_EXPRESSION) > 0) + { + local skillLevel = obj.sq_GetSkillLevel(SKILL_EXPRESSION); + local skillMpRate = obj.getSkillMpRate(skillIndex); + local mpComsumeRate = sq_GetLevelData(obj, SKILL_EXPRESSION, 0, skillLevel); + local newMpRate = skillMpRate.tofloat() * (100 - mpComsumeRate.tofloat()) / 100; + + //print(" expression consumeMp oldMpRate:" + skillMpRate.tofloat() + " skillIndex:" + skillIndex); + //print(" expression consumeMp newMpRate:" + newMpRate.tofloat()); + //print(" expression consumeMp mpComsumeRate:" + mpComsumeRate.tofloat()); + + obj.setSkillMpRate(skillIndex, newMpRate.tofloat()); + } + + print(" now consumpMp:" + obj.getSkillMpRate(skillIndex)); + + return true; +} + +function useSkill_after_ATMage(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) +{ + if(!obj) + return false; + + obj.setSkillMpRate(skillIndex, oldSkillMpRate.tofloat()); + print(" after set consumpMp:" + oldSkillMpRate); + + return true; +} + + + +// getAttackAni() +// ?蹂缣 评塭 ?颤赅暮桧 夥莞阳, 桧 ?热缣怃 籀葬?邀 +// 蕨) 热樯羹 蝶鉴 +function getAttackAni_ATMage(obj, index) +{ + if (!obj) + return null; + + local animation = obj.sq_GetAttackAni(index); + + // 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘 + // 葆彻掘紫 嫦饵肾虽 强挤. + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + if (skillLevel > 0) + animation = obj.sq_GetCustomAni(CUSTOM_ANI_ICE_ELEMENTAL_ATTACK1 + index); + + return animation; +} + + + +// getDashAttackAni() +// ?蹂缣 评塭 ?颤赅暮桧 夥莞阳, 桧 ?热缣怃 籀葬?邀 +// 蕨) 热樯羹 蝶鉴 +function getDashAttackAni_ATMage(obj) +{ + if (!obj) + return null; + + local animation = obj.sq_GetDashAttackAni(); + + // 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘 + // 葆彻掘紫 嫦饵肾虽 强挤. + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + if (skillLevel > 0) + animation = obj.sq_GetCustomAni(CUSTOM_ANI_ICE_ELEMENTAL_DASH_ATTACK); + + return animation; +} + + + +// getJumpAttackAni() +// ?蹂缣 评塭 ?颤赅暮桧 夥莞阳, 桧 ?热缣怃 籀葬?邀 +// 蕨) 热樯羹 蝶鉴 +function getJumpAttackAni_ATMage(obj) +{ + if (!obj) + return null; + + local animation = obj.sq_GetJumpAttackAni(); + + // 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘 + // 葆彻掘紫 嫦饵肾虽 强挤. + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + if (skillLevel > 0) + animation = obj.sq_GetCustomAni(CUSTOM_ANI_ICE_ELEMENTAL_JUMP_ATTACK); + + return animation; +} + +// 晦狱 奢问桧 譆渠 赁颤樯陛? +// 热樯羹蒂 寡办贼 譆渠 3颤梱虽 ?颤陛 桧瑞横飓 +function getAttackCancelStartFrameSize_ATMage(obj) +{ + local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize(); + + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + // 譆渠偃热尔棻 1蒙擎 热蒂 葬欐?贼 脾 + if (skillLevel > 0) + maxAttackNumber = 2; + + return maxAttackNumber; +} + +function setState_ATMage(obj, state, datas, isResetTimer) +{ + if(state == STATE_DIE) + obj.sq_RemoveSkillLoad(SKILL_HOLONG_LIGHT); // 避戏贼 ?炀碳 UI 薯剪 + return 0; +} + +function getDefaultAttackInfo_ATMage(obj, index) +{ + if (!obj) + return null; + + local attackInfo = obj.sq_GetDefaultAttackInfo(index); + + // ?颤 奢问姜尔 渗唳 + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + if (skillLevel > 0) + { + attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_ATTACK1 + index); + } + + return attackInfo; +} + +function getDashAttackInfo_ATMage(obj) +{ + if (!obj) + return null; + + local attackInfo = obj.sq_GetDashAttackInfo(); + + // ?颤 奢问姜尔 渗唳 + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + if (skillLevel > 0) + attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_DASH_ATTACK); + + return attackInfo; +} + + +function getJumpAttackInfo_ATMage(obj) +{ + if (!obj) + return null; + + local attackInfo = obj.sq_GetJumpAttackInfo(); + + // ?颤 奢问姜尔 渗唳 + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + if (skillLevel > 0) + attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_JUMP_ATTACK); + + return attackInfo; +} + + + + +function setEnableCancelSkill_ATMage(obj, isEnable) +{ + if(!obj) + return false; + + if(!obj.isMyControlObject()) + return false; + + + if(!isEnable) + return true; + + // 警蜗晦 饷薯 蒙机殓栖棻. (2012.04.12) + // 陴彻饵 - 紧屡匐擎 彩念饵煎 瞪霜?晦 瞪梱虽 濠翕警蜗桧 蒙翕寰?栖棻. + + local GROW_TYPE_AT_MAGE = 0; // 瞪霜 鼠 + local GROW_TYPE_ELEMENTAL_BOMBER = 1; // 瞪霜 县葬诠骁 夥该 + local GROW_TYPE_GLACIALMASTER = 2; // 瞪霜 彩念饵 + + //print( " growtype:" + sq_getGrowType(obj)); + + + + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + //if(sq_isPVPMode()) + { +//38 `ATMage/CancelWindStrike.skl` // 警蜗 孺萄蝶?塭桧觼 + obj.setSkillCommandEnable(SKILL_WIND_STRIKE, isEnable); +//39 `ATMage/CancelAtMagePush.skl` // 警蜗 尘横顶晦 + obj.setSkillCommandEnable(SKILL_PUSH_OUT, isEnable); +//40 `ATMage/CancelFallenBlossoms.skl` // 警蜗 钒?翱玺 + obj.setSkillCommandEnable(SKILL_FALLENBLOSSOMS, isEnable); +//41 `ATMage/CancelTurnWindmill.skl` // 警蜗 ?离给葬晦 + obj.setSkillCommandEnable(SKILL_TURNWINDMILL, isEnable); +//42 `ATMage/CancelBrokenArrow.skl` // 警蜗 粽煎赎拥煎办 + obj.setSkillCommandEnable(SKILL_BROKENARROW, isEnable); +//43 `ATMage/CancelIceCrash.skl` // 警蜗 嬴桧蝶 觼楚莲 + obj.setSkillCommandEnable(SKILL_ICE_CRASH, isEnable); +//44 `ATMage/CancelFrozenLand.skl` // 警蜗 橡横称擎 渠虽 + obj.setSkillCommandEnable(SKILL_FROZENLAND, isEnable); +//45 `ATMage/CancelIceSword.skl` // 警蜗 彩匐 + obj.setSkillCommandEnable(SKILL_ICE_SWORD, isEnable); +//46 `ATMage/CancelMultiShot.skl` // 警蜗 翱楼 葆彻掘 陈葬晦 + obj.setSkillCommandEnable(SKILL_MULTI_SHOT, isEnable); +//47 `ATMage/CancelFlameCircle.skl` // 警蜗 ?溯歜怃赝 + obj.setSkillCommandEnable(SKILL_FLAMECIRCLE, isEnable); +//170 `ATMage/CancelBackStep.skl` // 警蜗 寥蝶变 + //obj.setSkillCommandEnable(SKILL_BROKENARROW, isEnable); + +//60 `ATMage/IceOrbEx.skl` // 嬴桧蝶 螃粽 (?撩) +//SKILL_ICE_ORB_EX <- 60 // ?撩 嬴桧蝶 螃粽 + obj.setSkillCommandEnable(SKILL_ICE_ORB_EX, isEnable); +//61 `ATMage/Concentrate.skl` // 钟抚?溯桧?(?撩 挡?粽 蝶鉴) +//SKILL_CONCENTRATE_EX <- 61 // 钟抚?溯?(尧蹴) + obj.setSkillCommandEnable(SKILL_CONCENTRATE_EX, isEnable); +//62 `ATMage/ElementalStrikeEx.skl` // 县溯诠骁蝶?塭桧觼 (?撩) +//SKILL_ELEMENTAL_STRIKE_EX <- 62 // 县溯诠骁 蝶?塭桧觼 (?撩蝶鉴) +//63 `ATMage/IceFieldEx.skl` // 嬴桧蝶 ?萄 (?撩) + obj.setSkillCommandEnable(SKILL_ELEMENTAL_STRIKE_EX, isEnable); +//SKILL_ICE_FIELD_EX <- 63 // 嬴桧蝶 ?萄 + obj.setSkillCommandEnable(SKILL_ICE_FIELD_EX, isEnable); + // + + if(sq_getGrowType(obj) == GROW_TYPE_GLACIALMASTER) + { + obj.setSkillCommandEnable(SKILL_ICE_SWORD, isEnable); + } + } + //else + //{ + //} + + + + return true; + + local size = 10; // ?釭 涡 跷陛?捡? + local cancel_skill_l =[]; + local skill_l =[]; + cancel_skill_l.resize(size); + skill_l.resize(size); +//SKILL_WIND_STRIKE <- 38 // 孺萄 蝶?塭桧觼 +//SKILL_PUSH_OUT <- 39 // 尘横顶晦 +//SKILL_FALLENBLOSSOMS <- 40 // 奢鳝:钒?翱玺 +//SKILL_TURNWINDMILL <- 41 // ?离给葬晦 +//SKILL_BROKENARROW <- 42 // 橡横称擎 渠虽 +//SKILL_ICE_CRASH <- 43 // 嬴桧蝶觼楚莲 +//SKILL_FROZENLAND <- 44 // 橡横称擎 渠虽 +//SKILL_ICE_SWORD <- 45 // 彩匐 +//SKILL_FLAMECIRCLE <- 47 // ?溯歜怃赝 +//SKILL_MULTI_SHOT <- 25 // 翱楼 葆彻掘 嫦饵 + cancel_skill_l[0] = SKILL_CANCEL_WIND_STRIKE; + cancel_skill_l[1] = SKILL_CANCEL_PUSH_OUT; + cancel_skill_l[2] = SKILL_CANCEL_FALLENBLOSSOMS; + cancel_skill_l[3] = SKILL_CANCEL_TURNWINDMILL; + cancel_skill_l[4] = SKILL_CANCEL_BROKENARROW; + cancel_skill_l[5] = SKILL_CANCEL_ICE_CRASH; + cancel_skill_l[6] = SKILL_CANCEL_FROZENLAND; + cancel_skill_l[7] = SKILL_CANCEL_ICE_SWORD; + cancel_skill_l[8] = SKILL_CANCEL_FLAMECIRCLE; + cancel_skill_l[9] = SKILL_CANCEL_MULTI_SHOT; + + skill_l[0] = SKILL_WIND_STRIKE; + skill_l[1] = SKILL_PUSH_OUT; + skill_l[2] = SKILL_FALLENBLOSSOMS; + skill_l[3] = SKILL_TURNWINDMILL; + skill_l[4] = SKILL_BROKENARROW; + skill_l[5] = SKILL_ICE_CRASH; + skill_l[6] = SKILL_FROZENLAND; + skill_l[7] = SKILL_ICE_SWORD; + skill_l[8] = SKILL_FLAMECIRCLE; + skill_l[9] = SKILL_MULTI_SHOT; + + for(local i=0;i 0) + { + if(isEnable) + { + bRet = true; + } + } + + obj.setSkillCommandEnable(skill_l[i], bRet); + } + + + return true; +} + +function isUsableItem_ATMage(obj, itemIndex) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) // + { // 碳饵煎 蜗煎办? 酝桧塭贼 ?犒啗翮 嬴桧蛊击 噩 热 桡蝗栖棻. + local isRecover = sq_IsItemRecover(itemIndex); + + if(isRecover == true) + { + return false; + } + + if(itemIndex == 8) + { // 溯嘐暧 桨望 + return false; + } + } + //print( " is use itemIndex:" + itemIndex + " return true"); + + return true; +} + +function sendSetHpPacket_ATMage(obj, hp, sendInstant) +{ + if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) // + { + if(obj.getHp() < hp) + { + //print(" not send hp"); + return false; + } + } + //print( " go send hp"); + return true; +} + +function sendSetMpPacket_ATMage(obj, mp, sendInstant) +{ + return true; +} + + + +// 钟帼瞪 蝶鉴桧 瞳辨肾横捡 ? ?卫粽 螃粽薛? 樯策蝶塭贼, +// `isApplyConversionSkillPassiveObject`?热缣 跷陛蒂 ?舆紫烟 ?棻. +function isApplyConversionSkillPassiveObject_ATMage(passiveObjectIndex) +{ + if (passiveObjectIndex == 24201) + { // 孺萄 蝶?塭桧觼 + return true; + } + else if (passiveObjectIndex == 24222) + { // ?炀碳 + return true; + } + else if (passiveObjectIndex == 24217) + { // 僭渠? + return true; + } + else if (passiveObjectIndex == 24254) + { // 碳晦菅(?腻寞?) + return true; + } + + // 翱楼嫦饵 ?卫粽 螃粽薛?, 翱楼嫦饵暧 ?嫦 ?卫粽 螃粽薛? + + local idx = passiveObjectIndex; + if (idx >= 24266 && idx <= 24283) + { + return true; + } + + return false; +} + + +//湍瞪击 亿煎 卫蒙? 阳 ?轿肾朝 葬掸 ?热 +// 湍瞪缣怃 葆击煎 釭萤 阳 羲卫 ?轿腌栖棻. +function resetDungeonStart_ATMage(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount) +{ + if(!obj) return -1; + + local isReset = true; // 晦狱瞳戏烦 瞪睡 葬掸殓栖棻. + + if (sq_GetCurrentModuleType() == MODULE_TYPE_WARROOM || sq_GetCurrentModuleType() == MODULE_TYPE_DEAD_TOWER) + { + // 葬掸暧 桧嵘陛 避朝桧嵘陛 嬴栖塭贼.. + if (resetReason != REASON_DEATH) + { + isReset = false; // 葬掸卫郦虽 强蝗栖棻. + } + } + + + if(isReset) + { // 葬掸击 ?捡?棻贼.. + local appendage = obj.GetSquirrelAppendage("Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut"); + + + if(appendage) + { + local skill = sq_GetSkill(obj, SKILL_ICEROAD); + local isvalid = appendage.isValid(); + + if(skill) + { + print(" isSeal:" + skill.isSealActiveFunction()); + if(!skill.isSealActiveFunction()) + { + skill.setSealActiveFunction(true); + } + } + + if(isvalid) + { + appendage.setValid(false); + } + } + + obj.sq_RemoveSkillLoad(SKILL_HOLONG_LIGHT); // ?炀碳 UI 薯剪 + } + + return 1; + +} + + +// 陴彻饵 : 县溯诠骁 羹樯 +// parameter煎 瞪殖胀 element楼撩击 薯谖? 棻艇3楼撩击 鬼??棻. +// appendage朝 酝绘肾虽 强挤. +function addElementalChain_ATMage(obj, element) +{ + if (!obj) return; + if (element == ENUM_ELEMENT_MAX) return; + local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_CHAIN); + if (skillLevel <= 0) return; + + local skill = sq_GetSkill(obj, SKILL_ELEMENTAL_CHAIN); + if (!skill) return; + local changeValue = obj.sq_GetLevelData(SKILL_ELEMENTAL_CHAIN, 0, skillLevel); + local validTime = obj.sq_GetLevelData(SKILL_ELEMENTAL_CHAIN, 1, skillLevel); + + local apFire = null; + local apWater = null; + local apDark = null; + local apLight = null; + + if (element == ENUM_ELEMENT_FIRE) + { + apWater = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, changeValue.tofloat(), validTime); + apDark = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, changeValue.tofloat(), validTime); + apLight = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, changeValue.tofloat(), validTime); + } + else if (element == ENUM_ELEMENT_WATER) + { + apFire = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, changeValue.tofloat(), validTime); + apDark = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, changeValue.tofloat(), validTime); + apLight = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, changeValue.tofloat(), validTime); + } + else if (element == ENUM_ELEMENT_DARK) + { + apFire = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, changeValue.tofloat(), validTime); + apWater = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, changeValue.tofloat(), validTime); + apLight = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, changeValue.tofloat(), validTime); + } + else if (element == ENUM_ELEMENT_LIGHT) + { + apFire = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, changeValue.tofloat(), validTime); + apWater = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, changeValue.tofloat(), validTime); + apDark = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, changeValue.tofloat(), validTime); + } + else if (element == -1) + { + apFire = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, changeValue.tofloat(), validTime); + apWater = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, changeValue.tofloat(), validTime); + apDark = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, changeValue.tofloat(), validTime); + apLight = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, changeValue.tofloat(), validTime); + } + + if (apFire != null) + apFire.sq_Append(obj, obj, APID_SKILL_ELEMENTAL_CHAIN_FIRE); + if (apWater != null) + apWater.sq_Append(obj, obj, APID_SKILL_ELEMENTAL_CHAIN_WATER); + if (apDark != null) + apDark.sq_Append(obj, obj, APID_SKILL_ELEMENTAL_CHAIN_DARK); + if (apLight != null) + apLight.sq_Append(obj, obj, APID_SKILL_ELEMENTAL_CHAIN_LIGHT); +} + + +function onChangeSkillEffect_ATMage(obj, skillIndex, reciveData) +{ + if(!obj) + return; + + if(skillIndex == SKILL_ICEROAD) + { + local skill = sq_GetSkill(obj, SKILL_ICEROAD); + skill.resetCurrentCoolTime(); + skill.setSealActiveFunction(true); + local skill_level = sq_GetSkillLevel(obj, SKILL_ICEROAD); + obj.startSkillCoolTime(SKILL_ICEROAD, skill_level, -1); + + local appendage = obj.GetSquirrelAppendage("Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut"); + appendage.setValid(false); + } + else if(skillIndex == SKILL_DIEHARD) + { + if(reciveData.getSize() > 0) + { + local hp = reciveData.readDword(); // 翕晦?? hp + + if(hp > 0) + { + print(" onchange:" + hp); + obj.setHp(hp, null, true); + } + } + } + else if (skillIndex == SKILL_ELEMENTAL_CHANGE) + { + if (reciveData.getSize() > 0) + { + local element = reciveData.readByte(); + obj.setThrowElement(element); + + // 尔?虞?撩 籀葬 + local appendage = CNSquirrelAppendage.sq_GetAppendage(obj,"Character/ATMage/MagicShield/ap_MagicShield.nut"); + if(appendage) + setMagicShieldType(appendage, obj, obj.getThrowElement()); + } + } + else if(skillIndex == SKILL_TUNDRASOUL) + { + if (reciveData.getSize() > 0) + { + local mode = reciveData.readDword(); + + local auraAppendage = 0; + local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoul.nut"); + + if(appendage) + { + auraAppendage = appendage.sq_getSquirrelAuraMaster("AuraTundraSoul"); + + if(mode == 1) + { // 毡朝匙击 疏捡?栖棻. (嬴办塭) + appendage.sq_DeleteAppendages(); + } + else if(mode == 0) + { // 桡朝匙击 面捡?栖棻. (嬴办塭) + local range = obj.sq_GetIntData(SKILL_TUNDRASOUL , 0);// 0. 彩念 鼻鹧桧鼻缣 勘葬朝 ?娄彰嫔 + appendage.sq_AddSquirrelAuraMaster("AuraTundraSoul",obj, obj, range, 18, 5, 0); + } + } + //CNSquirrelAppendage.sq_RemoveAppendage(obj, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoul.nut"); + } + } +} + +function changeTrhowState_ATMage(obj, throwState) +{ + if (!obj) return false; + + printc("changeTrhowState_ATMage"); + if (throwState == 3 && + obj.getThrowIndex() == SKILL_ELEMENTAL_CHANGE) + { + // 陴彻饵 : 楼撩 嫦翕 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(throwState); + obj.sq_IntVectPush(-1); + obj.sq_IntVectPush(obj.getThrowElement()); + obj.sq_AddSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true); + return true; + } + + return false; +} + +function isCounterState_ATMage(obj, isCounter) +{ + if(obj.getVar("firepillar").size_vector() > 0) + { + if(obj.getVar("firepillar").get_vector(VECTOR_FLAG_2)) + { + isCounter = false; + } + } + + return isCounter; +} + + +function AppendAppendageToSimple(obj, skillIndex, appendageFileName, validTime, isBuff) +{ + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, false, appendageFileName, false); + + appendage.sq_SetValidTime(validTime); // 横?蛤虽 颤歜 撮? + + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(appendage, obj, obj, isBuff); // 帼?蚂 + +} + +function setActiveStatus_ATMage(obj, activeStatus, power) +{ + if (!obj) return 0; + + local state = sq_GetState(obj); + + if (state == STATE_ELEMENTAL_BUSTER) + { + // 陕撩橾隆 评煎 鼻鹧桧鼻桧 勘葬虽 强挤 (县溯诠骁 帼蝶搅) + //printc("state : STATE_ELEMENTAL_BUSTER"); + return 0; + } + + return 1; +} + + +function reset_ATMage(obj) +{ + if(!obj) + return; + +} \ No newline at end of file diff --git a/character/atmage/atmage_header.nut b/character/atmage/atmage_header.nut new file mode 100644 index 0000000..510f354 --- /dev/null +++ b/character/atmage/atmage_header.nut @@ -0,0 +1,341 @@ +// 桧够擎 湍?模蝶缣 桡朝 牖热 蝶觼董?煎虏 偃嫦?贼怃 ?蹂? 蝶鉴偃嫦缣 ?蹂? 鼻热,enum 跷陛高击 摹树?朝 睡碟殓栖棻. +// 湍?模蝶缣 毡朝 高击 桧够缣 厥戏卫贼 寰腌栖棻. + + +STATE_ATTACK <- 8 +STATE_WIND_STRIKE <- 20 // 孺萄 蝶?塭桧觼 +STATE_CRYSTALATTACK <- 21 // 觼葬蝶骁 横鸥 +STATE_ELEMENTAL_CHANGE <- 22 // 楼撩嫦翕 +STATE_DARK_CHANGE <- 23 // 檩瞪 +STATE_FIRE_ROAD <- 24 // ?桧横煎萄 +STATE_CHAINLIGHTNING <- 25 // 羹樯塭桧?棚 +STATE_ICEROAD <- 26 // 橡挤望 +STATE_ICE_SWORD <- 27 // 彩匐 +STATE_HOLONG_LIGHT <- 28 // ?炀碳 +STATE_PIECE_OF_ICE <- 29 // 橡挤?? +STATE_FLAMECIRCLE <- 30 // ?溯歜怃赝 +STATE_BLUEDRAGONWILL <- 31 // 热瑟暧 暧虽 +STATE_FROZENLAND <- 32 // 橡横称擎 渠虽 +STATE_ICE_AREA <- 33 // 嬴桧蝶 缣横葬横 +STATE_ICE_CRASH <- 34 // 嬴桧蝶 觼楚莲 +STATE_BROKENARROW <- 35 // 粽煎赎拥煎办 +STATE_PUSH_OUT <- 36 // 尘横顶晦 +STATE_MAGIC_CANNON <- 37 // 衙霜 议凯 +STATE_MAGIC_SHIELD <- 38 // 尔?虞 ?撩 +STATE_TELEPORT <- 39 // 萝溯?? +STATE_FALLENBLOSSOMS <- 40 // 奢鳝:钒?翱玺 +STATE_TURNWINDMILL <- 41 // ?离给葬晦 +STATE_DARKNESSMANTLE <- 42 // 棻觼栖蝶裔? +STATE_WATER_CANNON <- 43 // 僭渠? +STATE_MANABURST <- 44 // 葆釭?舆 +STATE_RESONANCE <- 45 // 奢赀 +STATE_LIGHTNING_WALL <- 46 // 塭桧?棚 错 +STATE_FIREPILLAR <- 47 // 碳晦菅 +STATE_ICEMAN <- 48 // 嬴桧蝶裔 +STATE_ELEMENTAL_RAIN <- 49 // 县溯诠骁 溯樯 +STATE_MULTI_SHOT <- 50 // 翱楼掘 嫦饵 +STATE_DIEHARD <- 51 // 碳饵 +STATE_ATMAGE_DASH_ATTACK <- 52 // 热樯羹 +STATE_ICECHAKRAM <- 53 // 彩盟? (彩念饵:陕撩挡?粽) + +STATE_ELEMENTAL_BUSTER <- 54 // 县溯诠骁 帼蝶搅 + +STATE_ICE_ORB_EX <- 60 // ?撩 嬴桧蝶 螃粽 +STATE_CONCENTRATE_EX <- 61 // 钟抚?溯桧?(尧蹴) +STATE_ELEMENTAL_STRIKE_EX <- 62 // 县溯诠骁 蝶?塭桧觼(ex) +STATE_ICE_FIELD_EX <- 63 // 嬴桧蝶 ?萄 + +// 陴彻饵 skill妇湿 睡碟殓栖棻. +// +SKILL_WIND_STRIKE <- 1 // 孺萄 蝶?塭桧觼 +SKILL_ATCHAINLIGHTNING <- 2 // 羹樯塭桧?棚 +SKILL_CRYSTALATTACK <- 3 // 觼葬蝶骁 横鸥 +SKILL_DARK_CHANGE <- 4 // 檩瞪 +SKILL_ELEMENTAL_CHANGE <- 5 // 楼撩嫦翕 +SKILL_FIRE_ROAD <- 6 // ?桧横煎萄 +SKILL_ICEROAD <- 7 // 橡挤望 +SKILL_ICE_SWORD <- 8 // 彩匐 +SKILL_HOLONG_LIGHT <- 9 // ?炀碳 +SKILL_PIECE_OF_ICE <- 10 // 橡挤?? +SKILL_FLAMECIRCLE <- 11 // ?溯歜怃赝 +SKILL_BLUEDRAGONWILL <- 12 // 热瑟暧 暧虽 +SKILL_FROZENLAND <- 13 // 橡横称擎 渠虽 +SKILL_ICE_AREA <- 14 // 嬴桧蝶缣横葬横 +SKILL_ICE_CRASH <- 15 // 嬴桧蝶觼楚莲 +SKILL_BROKENARROW <- 16 // 橡横称擎 渠虽 +SKILL_PUSH_OUT <- 17 // 尘横顶晦 +SKILL_MAGIC_CANNON <- 18 // 衙霜 议凯 +SKILL_MAGIC_SHIELD <- 19 // 尔?虞 ?撩 +SKILL_TELEPORT <- 20 // 萝溯?? +SKILL_FALLENBLOSSOMS <- 21 // 奢鳝:钒?翱玺 +SKILL_EXPRESSION <- 22 // 嫦? (?卫粽) +SKILL_TURNWINDMILL <- 23 // ?离给葬晦 +SKILL_DARKNESSMANTLE <- 24 // 棻觼栖蝶 裔? +SKILL_MULTI_SHOT <- 25 // 翱楼 葆彻掘 嫦饵 +SKILL_WATER_CANNON <- 26 // 僭渠? +SKILL_FIREPILLAR <- 27 // 碳晦菅 +SKILL_MANABURST <- 28 // 葆釭?舆 +SKILL_LIGHTNING_WALL <- 29 // 塭桧?棚错 +SKILL_ELEMENTAL_RAIN <- 30 // 县溯诡陈 溯樯 +SKILL_RESONANCE <- 31 // 奢赀 +SKILL_ICEMAN <- 32 // 嬴桧蝶裔 +SKILL_DIEHARD <- 33 // 碳饵 +SKILL_ELEMENTAL_SHIELD <- 34 // 楼撩尔? +SKILL_ICE_ELEMENTAL_ATTACK <- 35 // 热樯羹 + + +SKILL_CANCEL_WIND_STRIKE <- 38 // 孺萄 蝶?塭桧觼 +SKILL_CANCEL_PUSH_OUT <- 39 // 尘横顶晦 +SKILL_CANCEL_FALLENBLOSSOMS <- 40 // 奢鳝:钒?翱玺 +SKILL_CANCEL_TURNWINDMILL <- 41 // ?离给葬晦 +SKILL_CANCEL_BROKENARROW <- 42 // 橡横称擎 渠虽 +SKILL_CANCEL_ICE_CRASH <- 43 // 嬴桧蝶觼楚莲 +SKILL_CANCEL_FROZENLAND <- 44 // 橡横称擎 渠虽 +SKILL_CANCEL_ICE_SWORD <- 45 // 彩匐 +SKILL_CANCEL_MULTI_SHOT <- 46 // 警蜗 翱楼 葆彻掘 陈葬晦 +SKILL_CANCEL_FLAMECIRCLE <- 47 // ?溯歜怃赝 +SKILL_ICECHAKRAM <- 48 // 彩盟? (彩念饵:陕撩挡?粽) +SKILL_ELEMENTAL_BUSTER <- 49 // 县溯诠骁 帼蝶搅(陕撩晦) +SKILL_TUNDRASOUL <- 50 // 矗萄塭暧 陛? (彩念饵:陕撩?卫粽) +SKILL_ELEMENTAL_CHAIN <- 51 // 县溯诠骁 羹樯 (县溯诠骁夥该:陕撩?卫粽) + +SKILL_ICE_ORB_EX <- 60 // ?撩 嬴桧蝶 螃粽 +SKILL_CONCENTRATE_EX <- 61 // 钟抚?溯?(尧蹴) +SKILL_ELEMENTAL_STRIKE_EX <- 62 // 县溯诠骁 蝶?塭桧觼 (?撩蝶鉴) +SKILL_ICE_FIELD_EX <- 63 // 嬴桧蝶 ?萄 + + +//211 `ATMage/WindStrikeEx.skl` // 孺萄蝶?塭桧觼 鬼? +//212 `ATMage/ChainLightningEx.skl` // 羹樯塭桧?棚 鬼? +SKILL_CRYSTALATTACK_EX <- 213 //觼葬蝶骁 横鸥 鬼? +//214 `ATMage/DarkChangeEx.skl` // 檩瞪 鬼?// +SKILL_FIRE_ROAD_EX <- 216 // ?桧横煎萄 鬼? +SKILL_ICEROAD_EX <- 217 // 橡挤望 鬼? +SKILL_ICE_SWORD_EX <- 218 // 彩寥匐 鬼? +//219 `ATMage/HolongLightEx.skl` // ?炀碳(敝扑?) 鬼? +//220 `ATMage/PieceOfIceEx.skl` // ?横蝶 螃粽 嬴桧蝶 鬼? +//221 `ATMage/FlameCircleEx.skl` // ?溯歜怃赝 鬼? +//222 `ATMage/BlueDragonWillEx.skl` // 热瑟暧 暧虽(嬴桧蝶 紧?该) 鬼? +//223 `ATMage/FrozenLandEx.skl` // 橡横称擎 渠虽(斛?暧 僭晦菅) 鬼? +SKILL_ICE_AREA_EX <- 224 // 嬴桧蝶缣横葬横(嬴桧蝶觼葬蝶骁凛表) 鬼? +//225 `ATMage/IceCrashEx.skl` // 嬴桧蝶觼楚莲 鬼? +//226 `ATMage/BrokenArrowEx.skl` // 粽煎赎缣煎办 鬼? +SKILL_PUSH_OUT_EX <- 227 // 尘横顶晦(旎釭潍) 鬼? +//228 `ATMage/MagicCannonEx.skl` // 衙霜议凯 鬼? +//229 `ATMage/MagicShieldEx.skl` // 尔?虞?撩 鬼? +// +//231 `ATMage/FallenBlossomsEx.skl` // 钒?翱玺(扑?翱玺) 鬼? +// +//233 `ATMage/TurnWindmillEx.skl` // ?离给葬晦(?瞪瘫玺) 鬼? +//234 `ATMage/DarknessMantleEx.skl` // 棻觼栖蝶 裔? 鬼? +//235 `ATMage/MultiShotEx.skl` // 翱楼嫦饵 鬼? +//236 `ATMage/WaterCannonEx.skl` // 僭渠? 鬼? +//237 `ATMage/FirePillarEx.skl` // 碳晦菅 鬼? +// +SKILL_LIGHTNING_WALL_EX <- 239 // 塭桧?棚 错 鬼? +// +//240 `ATMage/ElementalRainEx.skl` // 县溯诠骁 溯樯 鬼? +//241 `ATMage/ResonanceEx.skl` // 奢赀 鬼? +//242 `ATMage/IceManEx.skl` // 嬴桧蝶裔 鬼? + + + +SKILL_BASIC_ATTACK_UP <- 174 // 晦狱晦 鬼? + + +// 陴彻饵 animation 妇湿 睡碟殓栖棻. +// +CUSTOM_ANI_WIND_STRIKE <- 0 // 孺萄 蝶?塭桧觼 +CUSTOM_ANI_CRYSTALATTACK <- 1 // 觼葬蝶骁 横鸥 +CUSTOM_ANI_DARK_CHANGE_READY <- 2 // 檩瞪 : 议蝶? +CUSTOM_ANI_DARK_CHANGE_START <- 3 // 檩瞪 : 嫦翕 +CUSTOM_ANI_ELEMENTAL_CHANGE <- 4 // 楼撩嫦翕 +CUSTOM_ANI_FIRE_ROAD_CAST1 <- 5 // ?桧横煎萄 - 议蝶?1 +CUSTOM_ANI_FIRE_ROAD_CAST2 <- 6 // ?桧横煎萄 - 议蝶?2 +CUSTOM_ANI_CHAINLIGHTNING_CAST <- 7 // 7.羹樯塭桧?棚 +CUSTOM_ANI_CHAINLIGHTNING <- 8 // 8.羹樯塭桧?棚 +CUSTOM_ANI_CHAINLIGHTNING_END <- 9 // 9.羹樯塭桧?棚 +CUSTOM_ANI_ICE_SWORD <- 10 // 彩匐 +CUSTOM_ANI_HOLONG_LIGHT <- 11 // ?炀碳 +CUSTOM_ANI_PIECE_OF_ICE <- 12 // 橡挤?? +CUSTOM_ANI_ICEROAD <- 13 // 橡挤望 +CUSTOM_ANI_FLAMECIRCLE1 <- 14 // ?溯歜怃赝1 - 卫翕 +CUSTOM_ANI_FLAMECIRCLE2 <- 15 // ?溯歜怃赝2 - 遽绿 +CUSTOM_ANI_FLAMECIRCLE3 <- 16 // ?溯歜怃赝3 - 嫦饵 +CUSTOM_ANI_BLUEDRAGONWILL1 <- 17 // 热瑟暧 暧虽1 +CUSTOM_ANI_BLUEDRAGONWILL2 <- 18 // 热瑟暧 暧虽2 +CUSTOM_ANI_BLUEDRAGONWILL3 <- 19 // 热瑟暧 暧虽3 +CUSTOM_ANI_FROZENLAND1 <- 20 // 橡横称擎 渠虽1 +CUSTOM_ANI_FROZENLAND2 <- 21 // 橡横称擎 渠虽2 + +CUSTOM_ANI_ICE_AREA <- 22 // 嬴桧蝶 缣横葬横 +CUSTOM_ANI_ICE_CRASH_START <- 23 // 嬴桧蝶 觼楚莲 卫蒙 +CUSTOM_ANI_ICE_CRASH_LOOP <- 24 // 嬴桧蝶 觼楚莲 奁犒 +CUSTOM_ANI_ICE_CRASH_LOOP_ATTACK <- 25 // 嬴桧蝶 觼楚莲 奁犒 奢问卫 +CUSTOM_ANI_ICE_CRASH_END <- 26 // 嬴桧蝶 觼楚莲 虞颤 +CUSTOM_ANI_FROZENLAND3 <- 27 // 橡横称擎 渠虽3 +CUSTOM_ANI_BROKENARROW1 <- 28 // 粽煎赎缣煎办 1 +CUSTOM_ANI_BROKENARROW_LOOP1 <- 29 // 粽煎赎缣煎办 1 loop +CUSTOM_ANI_PUSH_OUT_GRAB <- 30 // 尘横顶晦 : 尘晦瞪 濩晦 + +CUSTOM_ANI_PUSH_OUT <- 31 // 尘横顶晦 +CUSTOM_ANI_BROKENARROW_DASH1 <- 32 // 粽煎赎缣煎办 2 +CUSTOM_ANI_BROKENARROW_DASH2 <- 33 // 粽煎赎缣煎办 3 +CUSTOM_ANI_AT_MAGIC_CANNON_1 <- 34 // 衙霜 议凯 热? +CUSTOM_ANI_AT_MAGIC_SHIELD <- 35 // 尔?虞 ?撩 +CUSTOM_ANI_TELEPORT1 <- 36 // 萝溯??1 +CUSTOM_ANI_TELEPORT2 <- 37 // 萝溯??2 +CUSTOM_ANI_FALLENBLOSSOMS1 <- 38 // 钒?翱玺1 +CUSTOM_ANI_FALLENBLOSSOMS2 <- 39 // 钒?翱玺2 +CUSTOM_ANI_FALLENBLOSSOMS3 <- 40 // 钒?翱玺3 + +CUSTOM_ANI_AT_MAGIC_CANNON_2 <- 41 // 衙霜 议凯 渠陕摹 +CUSTOM_ANI_AT_MAGIC_CANNON_3 <- 42 // 衙霜 议凯 热霜 +CUSTOM_ANI_TURNWINDMILL1 <- 43 // ?离 给葬晦1 +CUSTOM_ANI_TURNWINDMILL2 <- 44 // ?离 给葬晦2 +CUSTOM_ANI_DARKNESSMANTLE <- 45 // 棻觼栖蝶裔? +CUSTOM_ANI_AT_MAGIC_CANNON_READY <- 46 // 衙霜 议凯 遽绿 +CUSTOM_ANI_WATER_CANNON <- 47 // 僭渠? +CUSTOM_ANI_ICE_ELEMENTAL_ATTACK1 <- 48 // 热樯羹 奢问1 +CUSTOM_ANI_ICE_ELEMENTAL_ATTACK2 <- 49 // 热樯羹 奢问2 +CUSTOM_ANI_ICE_ELEMENTAL_ATTACK3 <- 50 // 热樯羹 奢问3 + +CUSTOM_ANI_ICE_ELEMENTAL_DASH_ATTACK <- 51 // 热樯羹 渠莲 奢问 +CUSTOM_ANI_ICE_ELEMENTAL_JUMP_ATTACK <- 52 // 热樯羹 薄? 奢问 +CUSTOM_ANI_LIGHTNING_WALL <- 53 // 塭桧?棚 错 +CUSTOM_ANI_RESONANCE <- 54 // 奢赀 +CUSTOM_ANI_FIREPILLAR1 <- 55 // 碳晦菅1 +CUSTOM_ANI_FIREPILLAR2 <- 56 // 碳晦菅2 +CUSTOM_ANI_FIREPILLAR3 <- 57 // 碳晦菅3 +CUSTOM_ANI_ICEMAN1 <- 58 // 58. 嬴桧蝶裔1 (颤啃?) +CUSTOM_ANI_ICEMAN2 <- 59 // 59. 嬴桧蝶裔2 (议蝶?) +CUSTOM_ANI_ICEMAN3 <- 60 // 60. 嬴桧蝶裔3 (桧翕) + +CUSTOM_ANI_ICEMAN4 <- 61 // 61. 嬴桧蝶裔4 (陪颤) +CUSTOM_ANI_ICEMAN5 <- 62 // 62. 嬴桧蝶裔5 (鬼颤) +CUSTOM_ANI_ELEMENTAL_RAIN_CAST <- 63 // 63. 县溯诠骁 溯樯 议蝶? 卫蒙 +CUSTOM_ANI_ELEMENTAL_RAIN_JUMP <- 64 // 64. 县溯诠骁 溯樯 薄? +CUSTOM_ANI_ELEMENTAL_RAIN_JUMP_STAY <- 65 // 65. 县溯诠骁 溯樯 薄? 渠晦 +CUSTOM_ANI_ELEMENTAL_RAIN_SHOOT <- 66 // 66. 县溯诠骁 溯樯 楼撩 嫦饵. +CUSTOM_ANI_ELEMENTAL_RAIN_CHARGE_SHOOT <- 67 // 67. 县溯诠骁 溯樯 离虽螂 嫦饵. +CUSTOM_ANI_MULTI_SHOT <- 68 // 68. 翱楼 葆彻掘 嫦饵. +CUSTOM_ANI_ICEMAN6 <- 69 // 69. 嬴桧蝶裔6 (铮桧?) +CUSTOM_ANI_DIEHARD1 <- 70 // 70. 碳饵1 + +CUSTOM_ANI_DIEHARD2 <- 71 // 71. 碳饵2 +CUSTOM_ANI_DIEHARD3 <- 72 // 72. 碳饵3 +CUSTOM_ANI_FROZENLAND_CASTING <- 73 // 73. 橡横称擎 渠虽 议蝶? +CUSTOM_ANI_FLAMECIRCLE_CASTING <- 74 // 74. ?溯歜怃赝 议蝶? +CUSTOM_ANI_DARKNESSMANTLE_CASTING <- 75 // 75. 棻觼栖蝶裔? 议蝶? +CUSTOM_ANI_ICEROAD_CASTING <- 76 // 76. 橡挤望 议蝶? +CUSTOM_ANI_PUSH_OUT_ATTACK <- 77 // 77. 尘横顶晦 尘晦 +CUSTOM_ANI_AT_MAGIC_CANNON_4 <- 78 // 78. 衙霜议凯 虽鼻颤 +CUSTOM_ANI_ICECHAKRAM_1 <- 79 // 79. 彩盟?1 + +CUSTOM_ANI_ICECHAKRAM_2 <- 80 // 80. 彩盟?2 +CUSTOM_ANI_ICECHAKRAM_3 <- 81 // 81. 彩盟?3 +CUSTOM_ANI_ICECHAKRAM_4 <- 82 // 82. 彩盟?4 +CUSTOM_ANI_ICECHAKRAM_5 <- 83 // 83. 彩盟?5 +CUSTOM_ANI_ICECHAKRAM_6 <- 84 // 84. 彩盟?6 +CUSTOM_ANI_ELEMENTAL_BUSTER_FIRE_CAST <- 85 // 85. 县溯诠骁 帼蝶搅 (?楼撩 嫦翕) +CUSTOM_ANI_ELEMENTAL_BUSTER_FIRE <- 86 // 86. 县溯诠骁 帼蝶搅 +CUSTOM_ANI_ELEMENTAL_BUSTER_WATER_CAST <- 87 // 87. 县溯诠骁 帼蝶搅 (热楼撩 嫦翕) +CUSTOM_ANI_ELEMENTAL_BUSTER_WATER <- 88 // 88. 县溯诠骁 帼蝶搅 +CUSTOM_ANI_ELEMENTAL_BUSTER_LIGHT_CAST <- 89 // 89. 县溯诠骁 帼蝶搅 (赀楼撩 嫦翕) +CUSTOM_ANI_ELEMENTAL_BUSTER_LIGHT <- 90 // 90. 县溯诠骁 帼蝶搅 +CUSTOM_ANI_ELEMENTAL_BUSTER_DARK_CAST <- 91 // 91. 县溯诠骁 帼蝶搅 (檩楼撩 嫦翕) + +CUSTOM_ANI_ELEMENTAL_BUSTER_DARK <- 92 // 92. 县溯诠骁 帼蝶搅 +CUSTOM_ANI_ICE_ORB_EX <- 93 // 93. 嬴桧蝶 螃粽 拥栖(?撩) 樯策蝶 +CUSTOM_ANI_CONCENTRATE_EX <- 94 // 94. 钟抚?溯桧?(?撩) +CUSTOM_ANI_ELEMENTAL_STRIKE_EX <- 95 // 95. 县溯诠骁 蝶?塭桧觼(?撩) +CUSTOM_ANI_ICE_FIELD_EX <- 96 // 96. 嬴桧蝶 ?萄(?撩) + + +// 陴彻饵 atk?橾 妇湿 睡碟殓栖棻. +// +CUSTOM_ATTACK_INFO_DARK_CHANGE <- 0 // 檩瞪 : 奢问姜尔 +CUSTOM_ATTACK_INFO_ICE_SWORD <- 1 // 彩匐 : 奢问姜尔 +CUSTOM_ATTACK_INFO_ICE_SWORD_LAST <- 2 // 彩匐虞颤 : 奢问姜尔 +CUSTOM_ATTACK_INFO_PIECE_OF_ICE <- 3 // 橡挤?? : 奢问姜尔 +CUSTOM_ATTACK_INFO_FLAMECIRCLE <- 4 // ?溯歜怃赝 : 奢问姜尔 +CUSTOM_ATTACK_INFO_ICE_CRASH <- 5 // 嬴桧蝶觼楚莲 +CUSTOM_ATTACK_INFO_ICE_CRASH_LAST <- 6 // 嬴桧蝶觼楚莲 +CUSTOM_ATTACK_INFO_PUSH_OUT_GRAB<- 7 // 尘横顶晦 濩晦 +CUSTOM_ATTACK_INFO_PUSH_OUT <- 8 // 尘横顶晦 +CUSTOM_ATTACK_INFO_AT_MAGE_BROKENARROW <- 9 // 粽煎赎拥煎办 虞颤 `ATAttackInfo/BrokenArrow.atk` +CUSTOM_ATTACK_INFO_FALLENBLOSSOMS <- 10 // 钒?翱玺 `ATAttackInfo/FallenBlossoms.atk` +CUSTOM_ATTACK_INFO_AT_MAGE_MAGIC_SHIELD_FIRE <- 11 // 尔?虞 ?撩 ?楼撩 +CUSTOM_ATTACK_INFO_AT_MAGE_MAGIC_SHIELD_LIGHT <- 12 // 尔?虞 ?撩 赀楼撩 +CUSTOM_ATTACK_INFO_TURN_WINDMILL <- 13 // 1ATAttackInfo/TurnWindmill.atk` +CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_ATTACK1 <- 14 // 热樯羹 奢问1 +CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_ATTACK2 <- 15 // 热樯羹 奢问1 +CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_ATTACK3 <- 16 // 热樯羹 奢问1 +CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_DASH_ATTACK <- 17 // 热樯羹 渠莲 奢问 +CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_JUMP_ATTACK <- 18 // 热樯羹 薄? 奢问 +CUSTOM_ATTACK_INFO_RESONANCE <- 19 // 奢赀 +CUSTOM_ATTACK_INFO_ICEMAN <- 20 // 嬴桧蝶裔 +CUSTOM_ATTACK_INFO_ICE_CHAKRAM <- 21 // 嬴桧蝶裔 + + +ENUM_ELEMENT_FIRE <- 0 /// ? +ENUM_ELEMENT_WATER <- 1 /// 热 +ENUM_ELEMENT_DARK <- 2 /// 檩 +ENUM_ELEMENT_LIGHT <- 3 /// 赀 +ENUM_ELEMENT_NONE <- 4 /// 鼠 +ENUM_ELEMENT_MAX <- 4 /// 楼撩 譆渠 高 + +VECTOR_FLAG_0 <- 0 +VECTOR_FLAG_1 <- 1 +VECTOR_FLAG_2 <- 2 +VECTOR_FLAG_3 <- 3 +VECTOR_FLAG_4 <- 4 +VECTOR_FLAG_5 <- 5 + +SKL_STATIC_INT_IDX_0 <- 0 +SKL_STATIC_INT_IDX_1 <- 1 +SKL_STATIC_INT_IDX_2 <- 2 +SKL_STATIC_INT_IDX_3 <- 3 +SKL_STATIC_INT_IDX_4 <- 4 +SKL_STATIC_INT_IDX_5 <- 5 +SKL_STATIC_INT_IDX_6 <- 6 +SKL_STATIC_INT_IDX_7 <- 7 +SKL_STATIC_INT_IDX_8 <- 8 + +SKL_LVL_COLUMN_IDX_0 <- 0 +SKL_LVL_COLUMN_IDX_1 <- 1 +SKL_LVL_COLUMN_IDX_2 <- 2 +SKL_LVL_COLUMN_IDX_3 <- 3 +SKL_LVL_COLUMN_IDX_4 <- 4 +SKL_LVL_COLUMN_IDX_5 <- 5 +SKL_LVL_COLUMN_IDX_6 <- 6 + +PASSIVEOBJ_SUB_STATE_0 <- 10 +PASSIVEOBJ_SUB_STATE_1 <- 11 +PASSIVEOBJ_SUB_STATE_2 <- 12 +PASSIVEOBJ_SUB_STATE_3 <- 13 +PASSIVEOBJ_SUB_STATE_4 <- 14 +PASSIVEOBJ_SUB_STATE_5 <- 15 +PASSIVEOBJ_SUB_STATE_6 <- 16 +PASSIVEOBJ_SUB_STATE_7 <- 17 + +BROKENARROW_UNIQUE_ID <- 9001 + + + +VECTOR_I_STATE <- 0 +VECTOR_I_FLAG <- 1 +VECTOR_I_REBIRTH_STATE <- 2 +VECTOR_I_REBIRTH_TIME <- 3 + + +GHOST_TIME <- 2000 +ANGEL_DOWN_TIME <- 1000 +DOWN_PAUSE_TIME <- 100 + + + + + + + \ No newline at end of file diff --git a/character/atmage/atmage_throw.nut b/character/atmage/atmage_throw.nut new file mode 100644 index 0000000..48a85c8 --- /dev/null +++ b/character/atmage/atmage_throw.nut @@ -0,0 +1,121 @@ + +function onAfterSetState_ElementalChange(obj, state, datas, isResetTimer) +{ + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + + local throwState = obj.getThrowState(); + + if (throwState == 1) + { + // 楼撩嫦翕 appendage 勘横舆晦 + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_ELEMENTAL_CHANGE, false, "Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut", false); + local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_CHANGE); + local validTime = sq_GetLevelData(obj, SKILL_ELEMENTAL_CHANGE, 0, skillLevel); + + if (appendage != null) + { + // 帼? UI 轿溘 横?萄蒂 勘横舆晦 瞪缣 ?轿肾横捡 ?栖棻. + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_ELEMENTAL_CHANGE, skillLevel); + appendage.sq_SetValidTime(validTime); + appendage.setBuffIconImage(55); + appendage.setEnableIsBuff(true); + CNSquirrelAppendage.sq_AppendAppendageID(appendage, obj, obj, APID_SKILL_ELEMENTAL_CHANGE, false); + } + + // 楼撩 尔?暧 楼撩击 夥脯 遽棻. + local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_SHIELD); + if(skillLevel > 0) + { + sq_RemoveChangeStatus(obj, APID_AT_MAGE_ELEMENT_SHIELD); + + local elementalType = obj.getThrowElement(); + local upValue = sq_GetIntData(obj, SKILL_ELEMENTAL_SHIELD, 0); + local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_FIRE + elementalType, false, upValue.tofloat() , 0); + if (ap) + { + ap.getAppendageInfo().setValidTime(validTime); + ap.sq_Append(obj, obj, APID_AT_MAGE_ELEMENT_SHIELD, 0, null); + } + } + + local element = obj.getThrowElement(); + local x = obj.getXPos(); + local y = obj.getYPos() + 1; + local z = obj.getZPos(); + + if (element == ENUM_ELEMENT_FIRE) + createAnimationPooledObject(obj, "Character/Mage/Effect/Animation/ATElementalChange/00_fire_dodge.ani", true, x, y, z); + else if (element == ENUM_ELEMENT_WATER) + createAnimationPooledObject(obj, "Character/Mage/Effect/Animation/ATElementalChange/00_ice_dodge.ani", true, x, y, z); + else if (element == ENUM_ELEMENT_DARK) + createAnimationPooledObject(obj, "Character/Mage/Effect/Animation/ATElementalChange/01_dark_dodge.ani", true, x, y, z); + else if (element == ENUM_ELEMENT_LIGHT) + createAnimationPooledObject(obj, "Character/Mage/Effect/Animation/ATElementalChange/00_light_dodge.ani", true, x, y, z); + } + else if (throwState == 3) + { + obj.sq_PlaySound("PCHANGE"); + } +} + +function onAfterSetState_ManaBurst(obj, state, datas, isResetTimer) +{ + local throwState = obj.getThrowState(); + + if (throwState == 1) + { + obj.sq_PlaySound("MW_FLOODMANA"); + obj.sq_PlaySound("FLOODMANA_CAST"); + + // 葆釭?舆 + local skillLevel = obj.sq_GetSkillLevel(SKILL_MANABURST); + local change_time = sq_GetLevelData(obj, SKILL_MANABURST, SKL_LVL_COLUMN_IDX_2, skillLevel); + + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_MANABURST, false, + "Character/ATMage/ManaBurst/ap_ATMage_ManaBurst.nut", false); + + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_MANABURST, skillLevel); + appendage.sq_SetValidTime(change_time); // 横?蛤虽 颤歜 撮? + + // 罹晦怃 append 蒙机 + //CNSquirrelAppendage.sq_Append(appendage, obj, obj); + CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); // 帼?蚂 + } +} + + + + +function onAfterSetState_Throw(obj, state, datas, isResetTimer) +{ + local skillIndex = obj.getThrowIndex(); + + if (skillIndex == SKILL_ELEMENTAL_CHANGE) + { + onAfterSetState_ElementalChange(obj, state, datas, isResetTimer); + + if (obj.getThrowState() == 0) + { + // 醴蝶签 UI蒂 ?撩? 卫监棻. + obj.setIsCustomSelectSkill(true); + } + else if (obj.getThrowState() == 1) + { + obj.sq_PlaySound("PCHANGE_SELECT"); + + + if (obj.isMyControlObject()) + { + sq_BinaryStartWrite(); + sq_BinaryWriteByte(obj.getThrowElement()); + sq_SendChangeSkillEffectPacket(obj, SKILL_ELEMENTAL_CHANGE); + } + } + } + else if(skillIndex == SKILL_MANABURST) + { + onAfterSetState_ManaBurst(obj, state, datas, isResetTimer); + } +} diff --git a/character/atmage/atmagedashattack/atmagedashattack.nut b/character/atmage/atmagedashattack/atmagedashattack.nut new file mode 100644 index 0000000..2ad11c3 --- /dev/null +++ b/character/atmage/atmagedashattack/atmagedashattack.nut @@ -0,0 +1,82 @@ + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_ATMageDashAttack(obj, state, datas, isResetTimer) +{ + if (!obj) + return; + + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + + // 热樯羹蒂 寡锡挤. + if (skillLevel > 0) + { + local isPress = sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL); + + // 渠卫 奢问卫, 擅戏煎 瞪霞 籀葬 + if(!isPress) + obj.sq_SetStaticMoveInfo(0, 450, 450, false, -500, true); + + // 晦狱晦 熨湿 瞳辨 + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + } + else + { + // 渠卫 奢问卫, 擅戏煎 瞪霞 籀葬 + obj.sq_SetStaticMoveInfo(0, 450, 450, false, -500, true); + } +} + +// 渠卫 奢问卫 葆彻 掘羹蒂 当撩?棻. +function onKeyFrameFlag_ATMageDashAttack(obj, flagIndex) +{ + if(!obj) + return false; + if (flagIndex == 1) + { + // 葆彻掘羹蒂 当撩?棻. + if (obj.sq_IsMyControlObject()) + { + // 当撩? ?卫粽 螃粽薛?暧 樯策蝶 + local passiveObjectIndex = 24261; + local power = -25; + // 热樯羹 蝶鉴暧 溯涟 + local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_CHANGE); + + // 楼撩嫦翕 appendage缣 勘溥毡朝虽 羹觼?. + local element = obj.getThrowElement(); + + // 楼撩嫦翕缣 勘溥毡虽 强棻贼 鼠楼撩 ?颤陛 嫦饵脾 + local appendage = obj.GetSquirrelAppendage("Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut"); + if (!appendage || !appendage.isValid()) + element = ENUM_ELEMENT_NONE; + + if (element != ENUM_ELEMENT_NONE) + { + if (element == ENUM_ELEMENT_FIRE) + passiveObjectIndex = 24262; + else if (element == ENUM_ELEMENT_WATER) + passiveObjectIndex = 24263; + else if (element == ENUM_ELEMENT_DARK) + passiveObjectIndex = 24264; + else if (element == ENUM_ELEMENT_LIGHT) + passiveObjectIndex = 24265; + } + else + { + //晦狱晦 熨湿 + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),power); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + power = sq_GetCurrentAttackBonusRate(obj); + } + + obj.sq_StartWrite(); + obj.sq_WriteWord(80); // ?嫦暧 饵桧锷(%) + obj.sq_WriteWord(power); // ?嫦暧 奢问溘(%) + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndex, 0, 100, 1, 55); + } + } + + return true; +} diff --git a/character/atmage/attack/attack.nut b/character/atmage/attack/attack.nut new file mode 100644 index 0000000..45215e4 --- /dev/null +++ b/character/atmage/attack/attack.nut @@ -0,0 +1,323 @@ + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_Attack(obj, state, datas, isResetTimer) +{ + if (!obj) + return; + + local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + + // 热樯羹蒂 寡锡挤. + if (skillLevel > 0) + { + // 橾奁 奢问卫, 擅戏煎 瞪霞 籀葬 + obj.setAttackXVelocity(250); + obj.setAttackXAccel(-1000); + obj.setAttackXVelocityFast(400); + obj.setAttackXAccelFast(-1000); + + // 晦狱晦 熨湿 瞳辨 + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + } + else + { + // 热樯羹蒂 寡办虽 强懊棻贼 薯濠葬缣怃 葆彻掘 卫瞪 + obj.setAttackXVelocity(0); + obj.setAttackXAccel(0); + obj.setAttackXVelocityFast(0); + obj.setAttackXAccelFast(0); + local element = obj.getThrowElement(); + local attackIndex = obj.getAttackIndex(); + playSoundForAtmageAttack(obj, element, attackIndex); + } +} + + +function onAfterSetState_Attack(obj, state, datas, isResetTimer) +{ + if (!obj) return; + + // 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘 + // 葆彻掘紫 嫦饵肾虽 强挤. + local iceElementalAttackSkillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK); + + + if (state == STATE_ATTACK && iceElementalAttackSkillLevel <= 0) + { + // ?颤 桧??蒂 称樯棻. + // 勘溥毡朝 帼? 蝶鉴 樯策蝶 塽 怃粽 蝶才桧?缣 评塭怃 尔罹虽朝 桧??陛 棻荤 (楼撩缣评塭怃 称朝 桧??陛 棻荤) + local element = obj.getThrowElement(); + local attackIndex = obj.getAttackIndex(); + + // 楼撩嫦翕 appendage缣 勘溥毡朝虽 羹觼?. + // 楼撩嫦翕缣 勘溥毡虽 强棻贼 鼠楼撩 ?颤陛 嫦饵脾 + local appendage = obj.GetSquirrelAppendage("Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut"); + if (!appendage || !appendage.isValid()) + element = ENUM_ELEMENT_NONE; + + if (attackIndex == 0) + { + if (element == ENUM_ELEMENT_FIRE) + { // ?楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack1_fire_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack1_fire_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_WATER) + { // 热楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack1_water_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack1_water_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_DARK) + { // 檩楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack1_dark_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack1_dark_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_LIGHT) + { // 赀楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack1_light_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack1_light_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_NONE) + { // 鼠楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack1_none_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack1_none_dodge.ani"), 0, 0); + } + } + else if (attackIndex == 1) + { + if (element == ENUM_ELEMENT_FIRE) + { // ?楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack2_fire_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack2_fire_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_WATER) + { // 热楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack2_water_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack2_water_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_DARK) + { // 檩楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack2_dark_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack2_dark_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_LIGHT) + { // 赀楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack2_light_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack2_light_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_NONE) + { // 鼠楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack2_none_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack2_none_dodge.ani"), 0, 0); + } + } + else if (attackIndex == 2) + { + if (element == ENUM_ELEMENT_FIRE) + { // ?楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack3_fire_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack3_fire_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_WATER) + { // 热楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack3_water_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack3_water_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_DARK) + { // 檩楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack3_dark_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack3_dark_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_LIGHT) + { // 赀楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack3_light_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack3_light_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_NONE) + { // 鼠楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack3_none_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack3_none_dodge.ani"), 0, 0); + } + } + else if (attackIndex == 3) + { + if (element == ENUM_ELEMENT_FIRE) + { // ?楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack4_fire_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack4_fire_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_WATER) + { // 热楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack4_water_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack4_water_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_DARK) + { // 檩楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack4_dark_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack4_dark_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_LIGHT) + { // 赀楼撩 + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack4_light_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack4_light_dodge.ani"), 0, 0); + } + else if (element == ENUM_ELEMENT_NONE) + { + obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack4_none_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack4_none_dodge.ani"), 0, 0); + } + } + } +} + +function createMiniMagicCircle(obj, xPos, zPos, shotDirection, bonusDamage) // direction 0:姜贼 1:渠陕摹 2:?钦) +{ + if(!obj) + return; + if (obj.sq_IsMyControlObject()) { + + // 葆彻掘羹 当撩嫔纂 + local direction = sq_GetDirection(obj); + local x = sq_GetDistancePos(obj.getXPos(), direction, xPos); + local y = sq_GetDistancePos(obj.getYPos(), ENUM_DIRECTION_DOWN, 1); + local z = sq_GetDistancePos(obj.getZPos(), ENUM_DIRECTION_UP, zPos); + // 擒除暧 嵘紫晦栋桧 毡挤. + // 奢问濠 + // 嫦饵 嫔纂(x,y,z) + // 陛煎 嫦饵陕 (0桧贼 擅戏煎 嫦饵, 30桧贼 螃艇薹 30紫煎 嫦饵) + // 撮煎 嫦饵陕 (0桧贼 擅戏煎 嫦饵, -30桧贼 嬴楚薹 30紫煎 嫦饵) + // 陛煎 譆渠 尔姜陕 (?薹 寞?) + // 撮煎 譆渠 尔姜陕 (?薹 寞?) + // 瞳娄暧 譆渠 剪葬. -1桧贼 薯? 桡挤 + // x蹴 譆渠 饵姜剪葬 + // 奢问 梦蝶暧 x蹴 觼晦 + // 奢问 梦蝶暧 y蹴 觼晦 + // 奢问 梦蝶暧 z蹴 觼晦 + + local activeObject; + local searchAngleH = 0; + local searchAngleV = 0; + local passiveObjectIndex = 0; + + if(shotDirection == 0) + { // 姜贼 + //activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 10, 10, -1, 1000, 1000, 250, 100); + local distance = 1000; + local angle = 20; + activeObject = findAngleTarget(obj, distance, angle, 100); // 睡瓣笛 赅晔暧 瞳 匐仪 + searchAngleH = 30; + searchAngleV = 15; + passiveObjectIndex = 24202; + + // 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥) + if (obj.getState() == STATE_MULTI_SHOT) + passiveObjectIndex = 24266; + } + else if(shotDirection == 1) {// 渠陕摹 + activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 4, 4, -1, 300, 100, 50, 100); + searchAngleH = 5; + searchAngleV = 5; + passiveObjectIndex = 24207; + + // 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥) + if (obj.getState() == STATE_MULTI_SHOT) + passiveObjectIndex = 24271; + } + else if(shotDirection == 2) { // ?钦 + activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 4, 4, -1, 300, 100, 50, 100); + searchAngleH = 5; + searchAngleV = 5; + passiveObjectIndex = 24228; + + // 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥) + if (obj.getState() == STATE_MULTI_SHOT) + passiveObjectIndex = 24276; + } + else { + printc("error! magic ball create shotDirection error"); + return; + } + + // 楼撩嫦翕 appendage缣 勘溥毡朝虽 羹觼?. + // 楼撩嫦翕缣 勘溥毡虽 强棻贼 鼠楼撩 ?颤陛 嫦饵脾 + local horizonAngle = 0.0; + local verticalAngle = 0.0; + if (activeObject != NULL) { + local maxDistance = abs(activeObject.getXPos() - x); + horizonAngle = sq_GetShootingHorizonAngle(activeObject, y, 0, searchAngleH, maxDistance); + verticalAngle = sq_GetShootingVerticalAngle(activeObject, z, 0, searchAngleV, maxDistance, 300); + } + + local appendage = obj.GetSquirrelAppendage("Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut"); + if (appendage && appendage.isValid()) { + local element = obj.getThrowElement(); + passiveObjectIndex = passiveObjectIndex + 1 + element; + } + + obj.sq_StartWrite(); + obj.sq_WriteFloat(horizonAngle); + obj.sq_WriteFloat(verticalAngle); + obj.sq_WriteDword(bonusDamage); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndex, 0, xPos, 1, zPos); + } +} + +// 奢问卫 葆彻 掘羹蒂 当撩?棻. +function onKeyFrameFlag_Attack(obj, flagIndex) +{ + if(!obj) + return false; + local isMyControlObject = obj.sq_IsMyControlObject(); + + // 奢问?阳葆棻 葆彻 掘羹蒂 当撩?棻. + // 勘溥毡朝 帼?缣 评塭怃 当撩 肾横螳捡 ? ?卫粽 螃粽薛?陛 棻荤(楼撩) + // + local xPos = 0, zPos = 0; + + local attackIndex = obj.getAttackIndex(); + if (attackIndex == 0) + { + xPos = 65, zPos = 59; + } + else if (attackIndex == 1) + { + xPos = 60, zPos = 71; + } + else if (attackIndex == 2) + { + xPos = 55, zPos = 58; + } + else if (attackIndex == 3) + { + xPos = 65, zPos = 36; + } + + if (flagIndex == 1) + { + // 葆彻掘羹蒂 当撩?棻. + createMiniMagicCircle(obj, xPos, zPos, 0, 0); // direction 0:姜贼 1:渠陕摹 2:?钦 + } + + + return true; +} + +function playSoundForAtmageAttack(obj, elementalType, attackCount) +{ + if(!obj) + return; + + local elementalName = "MWSHOT_0"; + if (elementalType == ENUM_ELEMENT_FIRE) + elementalName = "FIRESHOT_0"; + else if (elementalType == ENUM_ELEMENT_WATER) + elementalName = "ICESHOT_0"; + else if (elementalType == ENUM_ELEMENT_DARK) + elementalName = "DARKSHOT_0"; + else if (elementalType == ENUM_ELEMENT_LIGHT) + elementalName = "LIGHTSHOT_0"; + + obj.sq_PlaySound(elementalName + (attackCount+1)); +} \ No newline at end of file diff --git a/character/atmage/attack/po_magic_ball.nut b/character/atmage/attack/po_magic_ball.nut new file mode 100644 index 0000000..132e088 --- /dev/null +++ b/character/atmage/attack/po_magic_ball.nut @@ -0,0 +1,440 @@ +function setCustomData_po_ATMagicBallLightMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallLight(obj, receiveData); +} + +function setCustomData_po_ATMagicBallDarkMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallDark(obj, receiveData); +} + +function setCustomData_po_ATMagicBallWaterMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallWater(obj, receiveData); +} + +function setCustomData_po_ATMagicBallFireMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallFire(obj, receiveData); +} + +function setCustomData_po_ATMagicBallNoneMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallNone(obj, receiveData); +} + + + + + +// 葆彻掘羹 - 赀楼撩 +function setCustomData_po_ATMagicBallLight(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallLightMove.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallLight", "PassiveObject/Character/Mage/Particle/ATMagicBallLightTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTail1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTail2.ptl"); + obj.sq_SetObjectParticlePos(0, -1, 0); +} + + +// 葆彻掘羹 - 檩楼撩 +function setCustomData_po_ATMagicBallDark(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + local attackBonusRate = 0; + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + local mage = obj.getTopCharacter(); + if (!mage) + return; + + local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE); + local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE); + //attackBonusRate = sq_GetAttackBonusRate(skill, 6, 1.0) + attackBonusRate; + attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 6, 1.0) + attackBonusRate; + + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackBonusRate); + + // 檩楼撩暧 唳办缚 ?嫦桧 嫦当?虽 强晦阳侥缣 鼻鹧桧鼻击 掘羹缣 夥煎 勘横遽棻. + local changeStatusLevel = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 7, skillLevel);// 7.荡舆 溯涟 + local changeStatusProb = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 8, skillLevel);// 8.荡舆 ?睦(0.1%) + changeStatusProb /= 10; + local changeStatusDuration = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 9, skillLevel);// 9.荡舆 虽楼卫除 + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, changeStatusProb, changeStatusLevel, changeStatusDuration); + + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallDarkMove.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallDark", "PassiveObject/Character/Mage/Particle/ATMagicBallDarkTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTail1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTail2.ptl"); + obj.sq_SetObjectParticlePos(0, -1, 0); +} + + +// 葆彻掘羹 - 热楼撩 +function setCustomData_po_ATMagicBallWater(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + + obj.sq_SetMoveParticle("Particle/ATMagicBallWaterMove.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallWaterTail", "PassiveObject/Character/Mage/Particle/ATMagicBallWaterTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTail1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTail2.ptl"); + obj.sq_SetObjectParticlePos(0, -1, 0); +} + + +// 葆彻掘羹 - ?楼撩 +function setCustomData_po_ATMagicBallFire(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + + obj.sq_SetMoveParticle("Particle/ATMagicBallFireMove.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallFireTail", "PassiveObject/Character/Mage/Particle/ATMagicBallFireTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTail1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTail2.ptl"); + obj.sq_SetObjectParticlePos(0, -1, 0); +} + +// 葆彻掘羹 - 鼠楼撩 +function setCustomData_po_ATMagicBallNone(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallNoneMove.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallNoneTail.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallNoneTail.ptl"); + obj.sq_SetObjectParticlePos(0, -1, 0); + + local mage = obj.getTopCharacter(); + if (!mage) + return; + + // 晦狱晦 熨湿 瞳辨 + mage.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),mage.getState()); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); +} + + +function onAttack_po_ATMagicBallNone(obj, damager, boundingBox, isStuck) +{ // ?颤 鼠楼撩 + if (!obj) + return 0; + return 0; +} + + + + +// ?楼撩 ?嫦 螃粽薛? 当撩 +function createFireExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex) +{ + if (!obj) + return 0; + + if(!damager) + return 0; + + local mage = obj.getTopCharacter(); + + if (!mage) + return 0; + + if (obj.isMyControlObject()) + { + // 嬴桧蛊 翱翕 偃嫦 + // 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾 + local var = obj.getVar(); + local bonusRate = 1.0; + if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0) + { + local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3); + bonusRate = rate.tofloat() / 100.0; + } + + + local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE); + local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE); + local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 1, bonusRate); + local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 0); + local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate; + + local x = sq_GetCenterXPos(boundingBox); + local y = damager.getYPos() + 1; + local z = sq_GetCenterZPos(boundingBox); + + sq_BinaryStartWrite() + sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦 + sq_BinaryWriteWord(totalDamage); // 等嘐虽 + //sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL); + print(" x:" + x + " y:" + y + " z:" + z); + sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z); + + //sq_SendDestroyPacketPassiveObject(obj); + + } +} + + +// 瞳桧 翱楼 葆彻掘(?楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallFireMultiShot(obj, damager, boundingBox, isStuck) +{ // 翱楼 葆彻掘 ?楼撩 + createFireExplosion(obj, damager, boundingBox, isStuck, 24281); + return 0; +} + + +// 瞳桧 ?颤 葆彻掘(?楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallFire(obj, damager, boundingBox, isStuck) +{ // ?颤 ?楼撩 + createFireExplosion(obj, damager, boundingBox, isStuck, 24214); + return 0; +} + + +// 热楼撩 ?嫦 螃粽薛? 当撩 +function createWaterExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex) +{ + if (!obj) + return 0; + + if(!damager) + return 0; + + local mage = obj.getTopCharacter(); + if (!mage) + return 0; + + if (obj.isMyControlObject()) + { + // 嬴桧蛊 翱翕 偃嫦 + // 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾 + local var = obj.getVar(); + local bonusRate = 1.0; + if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0) + { + local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3); + bonusRate = rate.tofloat() / 100.0; + } + + local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE); + local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE); + //local attackBonusRate = sq_GetAttackBonusRate(skill, 2, 1.0); + local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 2, bonusRate); + local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 1); + + local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate; + + local power = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 3, skillLevel); + local prob = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 4, skillLevel); + local validTime = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 5, skillLevel); + + local x = sq_GetCenterXPos(boundingBox); + local y = damager.getYPos() + 1; + local z = sq_GetCenterZPos(boundingBox); + + + sq_BinaryStartWrite() + sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦 + sq_BinaryWriteWord(totalDamage); // 等嘐虽 + sq_BinaryWriteByte(ACTIVESTATUS_FREEZE);// 彩念 鼻鹧桧鼻 + prob = prob / 10.0; + sq_BinaryWriteFloat(prob.tofloat()); // ?睦 (0.1%) + sq_BinaryWriteFloat(power.tofloat()); // 溯涟 + sq_BinaryWriteDword(validTime); // 虽楼卫除 + //sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL); + + sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z); + } +} + + +// 瞳桧 翱楼 葆彻掘(热楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallWaterMultiShot(obj, damager, boundingBox, isStuck) +{ // 翱楼 葆彻掘 ?楼撩 + createWaterExplosion(obj, damager, boundingBox, isStuck, 24282); + return 0; +} + + +// 瞳桧 ?颤 葆彻掘(热楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallWater(obj, damager, boundingBox, isStuck) +{ + // ?颤 热楼撩 + createWaterExplosion(obj, damager, boundingBox, isStuck, 24215); + return 0; +} + +function onAttack_po_ATMagicBallDark(obj, damager, boundingBox, isStuck) +{ // ?颤 檩楼撩 + if (!obj) + return 0; + + return 0; +} + + +// 赀楼撩 ?嫦 螃粽薛? 当撩 +function createLightExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex) +{ + if(!damager) + return 0; + + if (!obj) + return 0; + + local mage = obj.getTopCharacter(); + if (!mage) + return 0; + + if (obj.isMyControlObject()) + { + // 嬴桧蛊 翱翕 偃嫦 + // 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾 + local var = obj.getVar(); + local bonusRate = 1.0; + if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0) + { + local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3); + bonusRate = rate.tofloat() / 100.0; + } + + local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE); + local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE); + //local attackBonusRate = sq_GetAttackBonusRate(skill, 10, 1.0); + local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 10, bonusRate); + local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 2); + + // 鼻鹧桧鼻 溯涟, ?睦, 虽楼卫除 + local power = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 11, skillLevel); + local prob = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 12, skillLevel); + local validTime = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 13, skillLevel); + local damage = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 14, skillLevel); + local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate; + + local x = sq_GetCenterXPos(boundingBox); + local y = damager.getYPos() + 1; + local z = sq_GetCenterZPos(boundingBox); + + + sq_BinaryStartWrite() + sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦 + sq_BinaryWriteWord(totalDamage); // 等嘐虽 + sq_BinaryWriteByte(ACTIVESTATUS_LIGHTNING); // 马瞪 鼻鹧桧鼻 + prob = prob / 10.0; + sq_BinaryWriteFloat(prob.tofloat()); // ?睦 (0.1%) + sq_BinaryWriteFloat(power.tofloat()); // 溯涟 + sq_BinaryWriteDword(validTime); // 虽楼卫除 + sq_BinaryWriteDword(damage); // 马瞪 等嘐虽 + //sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL); + + print(" x:" + x + " y:" + y + " z:" + z); + sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z); + + + } +} + + +// 瞳桧 ?颤 葆彻掘(赀楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallLight(obj, damager, boundingBox, isStuck) +{ + createLightExplosion(obj, damager, boundingBox, isStuck, 24216); + return 0; +} + + +// 瞳桧 翱楼 葆彻掘(赀楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallLightMultiShot(obj, damager, boundingBox, isStuck) +{ + createLightExplosion(obj, damager, boundingBox, isStuck, 24283); + return 0; +} + + +function procAppend_po_ATMagicBallNone(obj) +{ +} + + \ No newline at end of file diff --git a/character/atmage/bluedragonwill/bluedragonwill.nut b/character/atmage/bluedragonwill/bluedragonwill.nut new file mode 100644 index 0000000..4d976ae --- /dev/null +++ b/character/atmage/bluedragonwill/bluedragonwill.nut @@ -0,0 +1,471 @@ + +SUB_STATE_BLUEDRAGONWILL_0 <- 0 +SUB_STATE_BLUEDRAGONWILL_1 <- 1 +SUB_STATE_BLUEDRAGONWILL_2 <- 2 +SUB_STATE_BLUEDRAGONWILL_3 <- 3 +SUB_STATE_BLUEDRAGONWILL_4 <- 4 + +function checkExecutableSkill_BlueDragonWill(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_BLUEDRAGONWILL); + + if(b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; + +} + +function checkCommandEnable_BlueDragonWill(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) + { + return obj.sq_IsCommandEnable(SKILL_BLUEDRAGONWILL); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + return true; + +} + +function onSetState_BlueDragonWill(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + + if(substate == SUB_STATE_BLUEDRAGONWILL_0) { + + obj.sq_PlaySound("MW_ICEHAMMER_READY"); + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL1); + + local pAni = obj.sq_GetCurrentAni(); + + //local chargeT = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 0); // 晦遴 醱瞪卫除 + //local delaySum = sq_GetDelaySum(pAni); + // + //local rate = delaySum.tofloat() * 100.0 / chargeT.tofloat(); + // + //obj.sq_SetAnimationSpeedRate(pAni, rate); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_BLUEDRAGONWILL); + // 议蝶? 楼紫蒂 评塭陛紫烟 扑姜 + // 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻. + // 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻. + local castTime = sq_GetCastTime(obj, SKILL_BLUEDRAGONWILL, skillLevel); + local animation = sq_GetCurrentAnimation(obj); + local startTime = sq_GetFrameStartTime(animation, 16); + local speedRate = startTime.tofloat() / castTime.tofloat(); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + + sq_StartDrawCastGauge(obj, startTime, true); + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_1) { + + local group = obj.sq_GetVectorData(datas, 1); + local uniqueId = obj.sq_GetVectorData(datas, 2); + + local targetObj = sq_GetObject(obj, group, uniqueId); + + obj.getVar().push_vector(posX); // ?营 x : i: 2 + obj.getVar().push_vector(posY); // ?营 y : i: 3 + + if(targetObj) { + local disX = sq_Abs(targetObj.getXPos() - posX); + local disY = targetObj.getYPos() - posY; + + disX = disX - 40; + + if(disX <= 0) + disX = 0; + + obj.getVar().push_vector(disX); // x蹴 桧翕剪葬 : i: 4 + obj.getVar().push_vector(disY); // y蹴 桧翕剪葬 : i: 5 + } + else { // 蛤?? 桧翕剪葬 + local defaultDistance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 1); // 除蕾 奢问 (虽霞 ?渠徽) (100~) + obj.getVar().push_vector(defaultDistance); // x蹴 桧翕剪葬 + obj.getVar().push_vector(0); // y蹴 桧翕剪葬 + } + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL2); + + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_2) { + obj.sq_PlaySound("MW_ICEHAMMER"); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL3); + sq_setCurrentAxisPos(obj, 2, 0); + + if(obj.isMyControlObject()) { + obj.sq_SetShake(obj,3,300); + + local distanceL = 90; + local h = 0; + + local spin_radius = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 2); // 除蕾 奢问 (虽霞 ?渠徽) (100~) + local spin_r = spin_radius.tofloat() / 100.0; + + local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_BLUEDRAGONWILL, STATE_BLUEDRAGONWILL, 0, 1.0); //2.奢问溘(%) + local power = obj.sq_GetPowerWithPassive(SKILL_BLUEDRAGONWILL, STATE_BLUEDRAGONWILL, 1,-1,1.0); // 除蕾奢问溘 + local pow = obj.sq_GetSkillPower(SKILL_BLUEDRAGONWILL, 1); + + local l_data = obj.sq_GetLevelData(SKILL_BLUEDRAGONWILL, 1, 1); + + print("power:" + power + " pow:" + pow + " l_data:" + l_data); + + sq_BinaryStartWrite(); + sq_BinaryWriteFloat(spin_r); // + sq_BinaryWriteDword(power); // 除蕾奢问溘 + + obj.sq_SendCreatePassiveObjectPacket(24246, 0, distanceL, -1, h); // 虽霞桧嘐虽 除蕾 奢问 + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(firstAttackRate); // 奢问溘(%) + + obj.sq_SendCreatePassiveObjectPacket(24245, 0, distanceL, 5, h); + } + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_3) { + // SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_4) { + // SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机 + } + + //obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + // SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function prepareDraw_BlueDragonWill(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BLUEDRAGONWILL_0) { + // SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_1) { + // SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_2) { + // SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_3) { + // SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_4) { + // SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProc_BlueDragonWill(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local sq_var = obj.getVar(); + local currentT = sq_GetCurrentTime(pAni); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + if(substate == SUB_STATE_BLUEDRAGONWILL_0) { + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_1) { + //local dash_t = pAni.getDelaySum(false); // + local dash_t = pAni.getDelaySum(0, 2) + 60; // + + + local srcX = obj.getVar().get_vector(2); // 卫蒙x + local srcY = obj.getVar().get_vector(3); // 卫蒙y + + local dis_x_len = sq_var.get_vector(4); // 识 桧翕剪葬 + local dis_y_len = obj.getVar().get_vector(5); // y蹴 桧翕剪葬 + + local v = sq_GetAccel(0, dis_x_len, currentT, dash_t, true); + + local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t); + + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + local dstY = srcY + my; + + if(sq_var.get_vector(0)) { // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼.. + if(sq_var.get_vector(1) != posY) { // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼.. + sq_var.set_vector(0, 0); // 桧翕?楚斜蒂 off?鄹栖棻.. + sq_var.set_vector(1, posY); + } + } + + if(obj.isMovablePos(dstX, dstY) && !sq_var.get_vector(0)) { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕 + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, dstY); + } + else { // 桧翕? 热 桡朝 虽羲击 虏陬棻.. + sq_var.set_vector(0,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻.. + local offset = dstX - posX; + + if(offset != 0) { + if(offset < 0) + offset = -offset; + + local totalLen = sq_var.get_vector(4); // 识桧翕剪葬 + sq_var.set_vector(4, totalLen - offset); + } + } + + + + if(frmIndex == 2){ + sq_setCurrentAxisPos(obj, 2, 30); + } + else if(frmIndex == 3) { + sq_setCurrentAxisPos(obj, 2, 60); + } + else if(frmIndex == 4){ + sq_setCurrentAxisPos(obj, 2, 50); + } + else if(frmIndex == 5){ + sq_setCurrentAxisPos(obj, 2, 40); + } + + + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_2) { + // SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_3) { + // SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_4) { + // SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_BlueDragonWill(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BLUEDRAGONWILL_0) { + // SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_1) { + // SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_2) { + // SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_3) { + // SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_4) { + // SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_BlueDragonWill(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) { + return; + } + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BLUEDRAGONWILL_0) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_1); // substate撮? + + // 500 // x蹴 颤啃? 彰嫔 + // 120 // y蹴 颤啃? 彰嫔 + // 10 // z蹴 颤啃? 彰嫔 + + //local x_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 3); // 晦遴 醱瞪卫除 + //local y_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 4); // 晦遴 醱瞪卫除 + //local z_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 5); // 晦遴 醱瞪卫除 + + //local targetObj = sq_FindTarget(obj, 0, x_range, y_range, z_range); + // + //if(targetObj) { + //local group = sq_GetGroup(targetObj); + //local uniqueId = sq_GetUniqueId(targetObj); + // + //obj.sq_IntVectPush(group); // + //obj.sq_IntVectPush(uniqueId); // + //} + //else { + //obj.sq_IntVectPush(-1); // + //obj.sq_IntVectPush(-1); // + //} + local distance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, SKL_STATIC_INT_IDX_3); // 瞳娄暧 剪葬 + local angle = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, SKL_STATIC_INT_IDX_4); // 瞳娄暧 陕紫 + + local targetObj = findAngleTarget(obj, distance, angle, 100); + if(targetObj) { + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + + obj.sq_IntVectPush(group); // + obj.sq_IntVectPush(uniqueId); // + } + else { + obj.sq_IntVectPush(-1); // + obj.sq_IntVectPush(-1); // + } + + + obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_1) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_2); // substate撮? + obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_2) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_3) { + // SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_4) { + // SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_BlueDragonWill(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BLUEDRAGONWILL_0) { + // SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_1) { + // SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_2) { + // SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_3) { + // SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_4) { + // SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_BlueDragonWill(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BLUEDRAGONWILL_0) { + // SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_1) { + // SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_2) { + // SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_3) { + // SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_4) { + // SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机 + } + + sq_EndDrawCastGauge(obj); + +} + +function onAfterSetState_BlueDragonWill(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BLUEDRAGONWILL_0) { + // SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_1) { + // SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_2) { + // SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_3) { + // SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BLUEDRAGONWILL_4) { + // SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机 + } + + +} + +function getHitDirection_BlueDragonWill(obj, damager) +{ + if(!obj) return 0; + + print("getHitDirection_BlueDragonWill"); + + return sq_GetOppositeDirection(obj.getDirection()); + +} + \ No newline at end of file diff --git a/character/atmage/bluedragonwill/po_atbluedragonwillexp.nut b/character/atmage/bluedragonwill/po_atbluedragonwillexp.nut new file mode 100644 index 0000000000000000000000000000000000000000..7b2b5b7cfa0f00dfa600339f51f71017b5e5f3c7 GIT binary patch literal 1104 zcmb7D!A^rf5cLWP|A4oWG{(E}P>WS#jK-RHY_>4q7CM8wgW4GX-B}8i_JEq~1@_IG zdGGB6epX|`nlQA$)7mnvW5sGw(PHv+QPvO}l@mVevb_ALMzmawLj#F^0|$!&|1$&lCLo0DnPP+ehi^VB`KE4Z~O9%L(=zn6tnK#ao9MhpDKy zgYx&eD?`bossPgg_J8o@z}K2%Em^qq21wnkYn6l9vL8kjp6;1nO<#<-FD{=*izkwA zWmLjob}5PN4kf<3%)D*lZC>|PMOHKH25X>>>gP|?x$nx`YBxk5Vze3-|c4 zOq34Fv<`QJDSZ6-iSB1a7=vX)oBQSJw`O9HK>iUJ;Vo=tMy+91s(esLCV)mqM}Iix zC8phCpdO&=>JKv)v&DMJ(Z#Io-DXNCy34KZQPf{4Oj}bPWQ&0xl(n+_EmG>cFq{02 Fz5$jeH$S5lhg@q34mhX5H^*5l6c14^D zB)rC~n{HGC0=ovCD`QIUxLbc^zV8==Y;5U`4Ws@ZVb;37=9@{{H5kJeUyJ1UuH>f5 GcmDzQDzI1p literal 0 HcmV?d00001 diff --git a/character/atmage/brokenarrow/brokenarrow.nut b/character/atmage/brokenarrow/brokenarrow.nut new file mode 100644 index 0000000..f028847 --- /dev/null +++ b/character/atmage/brokenarrow/brokenarrow.nut @@ -0,0 +1,667 @@ + +SUB_STATE_BROKENARROW_0 <- 0 +SUB_STATE_BROKENARROW_1 <- 1 +SUB_STATE_BROKENARROW_2 <- 2 +SUB_STATE_BROKENARROW_3 <- 3 +SUB_STATE_BROKENARROW_4 <- 4 + +BrokenArrow_state_0 <- 10 +BrokenArrow_state_1 <- 11 +BrokenArrow_state_2 <- 12 + +function checkExecutableSkill_BrokenArrow(obj) +{ + + if(!obj) return false; + + //local targetObj = sq_GetObjectByObjectId(obj, BROKENARROW_UNIQUE_ID); + local flag = obj.getVar("brokenarrow").get_vector(VECTOR_FLAG_0); + local targetObj = sq_GetPassiveObjectByState(obj, 24250, BrokenArrow_state_1); // 24250 `Character/Mage/ATBrokenArrow.obj` // 陴彻饵 - 粽煎赎拥煎办 (?髦) + + local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) + + // 觼煎栖赝 嬴桧蛊 蒙机.. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) + // 0塭贼 渠莲蒂 ?虽 强朝棻.. + + if(!targetObj || flag == 0 || expTime == 0) + { + local b_useskill = obj.sq_IsUseSkill(SKILL_BROKENARROW); + + if(b_useskill) { + obj.getVar("arrow").clear_vector(); + obj.getVar("arrow").push_vector(0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_BROKENARROW_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + } + else + { + print( " checkExecutableSkill_BrokenArrow targetObj:" + targetObj); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_BROKENARROW_2); // substate撮? + + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + + obj.sq_IntVectPush(group); // substate撮? + obj.sq_IntVectPush(uniqueId); // substate撮? + obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + + + return false; + +} + + +//local arr=["one","two","three"] +// +//::print("FOREACH\n"); +// +//foreach(i,val in arr) +//{ + //::print("index ["+i+"]="+val+"\n"); +//} +// +//::print("FOR\n"); +// +//for(local i=0;i posX) + { + obj.setDirection(ENUM_DIRECTION_RIGHT); + } + else + { + obj.setDirection(ENUM_DIRECTION_LEFT); + } + + disX = disX - 60; + + if(disX <= 0) + disX = 0; + + obj.getVar().push_vector(disX); // x蹴 桧翕剪葬 : i: 5 + obj.getVar().push_vector(disY); // y蹴 桧翕剪葬 : i: 6 + } + else { // 蛤?? 桧翕剪葬 + local defaultDistance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 1); // 除蕾 奢问 (虽霞 ?渠徽) (100~) + obj.getVar().push_vector(defaultDistance); // x蹴 桧翕剪葬 + obj.getVar().push_vector(0); // y蹴 桧翕剪葬 + } + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_DASH1); + } + else if(substate == SUB_STATE_BROKENARROW_3) { + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_AT_MAGE_BROKENARROW); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_DASH2); + + obj.sq_PlaySound("MW_BARROW_FIN"); + + local atk = sq_GetCurrentAttackInfo(obj); + local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_BROKENARROW, STATE_BROKENARROW, 1, 1.0); //1.?萃楝纂晦 奢问溘(%) + sq_SetCurrentAttackBonusRate(atk, attackRate); + + } + else if(substate == SUB_STATE_BROKENARROW_4) { + // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 + } +} + +function prepareDraw_BrokenArrow(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BROKENARROW_0) { + } + else if(substate == SUB_STATE_BROKENARROW_1) { + } + else if(substate == SUB_STATE_BROKENARROW_2) { + } + else if(substate == SUB_STATE_BROKENARROW_3) { + } + else if(substate == SUB_STATE_BROKENARROW_4) { + } + + +} + + +function getAngleArrow(obj, pTargetChr) +{ + if(!obj) return; + if(!pTargetChr) return; + + local offsetX = 58; // ?践朝 嫔纂 + local offsetZ = 75; // ?践朝 嫔纂 + + + local X = obj.getXPos() + sq_GetDistancePos(0, obj.getDirection(), offsetX); + local Y = obj.getYPos(); + local Z = obj.getZPos() + offsetZ; + + local posX = pTargetChr.getXPos(); + local posY = pTargetChr.getYPos(); + local posZ = pTargetChr.getZPos() + (sq_GetObjectHeight(pTargetChr) / 2); + + local offset = posX - X; + + local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true); + + local w = posX - X; + if(w < 0) w = -w; + // ?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻. + + local h = (posY - posZ) - (Y - Z); + local width = sq_Abs(posX - X); + local angle = sq_Atan2( h.tofloat(), width.tofloat()); + + //if((posY - posZ) < (Y - Z)) + { + angle = -angle; + } + + local nRevision = distance; + + local cos = nRevision.tofloat() * sq_Cos(angle); + local sin = nRevision.tofloat() * sq_Sin(angle); + + local nX = sq_Abs( cos.tointeger() ); + local nY = sq_Abs( sin.tointeger() ); + + return angle; + //sq_SetfRotateAngle(pAni, angle); + +} + + +function onProc_BrokenArrow(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local sq_var = obj.getVar(); + local currentT = sq_GetCurrentTime(pAni); + + local posX = sq_GetXPos(obj); + local posY = sq_GetYPos(obj); + local posZ = sq_GetZPos(obj); + + if(substate == SUB_STATE_BROKENARROW_0) { + // SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_1) { + // SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_2) { + local dash_t = pAni.getDelaySum(false); // + //obj.getVar().push_vector(posX); // ?营 x : i: 3 + //obj.getVar().push_vector(posY); // ?营 y : i: 4 + + local srcX = obj.getVar().get_vector(3); // 卫蒙x + local srcY = obj.getVar().get_vector(4); // 卫蒙y + + local dis_x_len = sq_var.get_vector(5); // 识 桧翕剪葬 + local dis_y_len = obj.getVar().get_vector(6) + 1; // y蹴 桧翕剪葬 + + local v = sq_GetAccel(0, dis_x_len, currentT, dash_t, true); + + local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t); + + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + local dstY = srcY + my; + + if(sq_var.get_vector(1)) + { // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼.. + if(sq_var.get_vector(2) != posY) + { // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼.. + sq_var.set_vector(1, 0); // 桧翕?楚斜蒂 off?鄹栖棻.. + sq_var.set_vector(2, posY); + } + } + + if(obj.isMovablePos(dstX, dstY) && !sq_var.get_vector(1)) + { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕 + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, dstY); + } + else + { // 桧翕? 热 桡朝 虽羲击 虏陬棻.. + sq_var.set_vector(1,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻.. + local offset = dstX - posX; + + if(offset != 0) { + if(offset < 0) + offset = -offset; + + local totalLen = sq_var.get_vector(5); // 识桧翕剪葬 + sq_var.set_vector(5, totalLen - offset); + } + } + } + else if(substate == SUB_STATE_BROKENARROW_3) { + // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_4) { + // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_BrokenArrow(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BROKENARROW_0 || substate == SUB_STATE_BROKENARROW_1) + { + local pAni = obj.getCurrentAnimation(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + + //local x_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 3); // 晦遴 醱瞪卫除 + //local y_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 4); // 晦遴 醱瞪卫除 + //local z_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 5); // 晦遴 醱瞪卫除 + + if(frmIndex >= 3) + { + if(obj.getVar("flag").get_vector(0) == 0) + { + local x_range = 400; // 匐仪彰嫔 x + local y_range = 200; // 匐仪彰嫔 y + local z_range = 50; // 匐仪彰嫔 z + + x_range = obj.sq_GetIntData(SKILL_BROKENARROW, 3); // 3. x彰嫔 + y_range = obj.sq_GetIntData(SKILL_BROKENARROW, 4); // 4. y彰嫔 + z_range = obj.sq_GetIntData(SKILL_BROKENARROW, 5); // 5. z彰嫔 + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_BROKENARROW, STATE_BROKENARROW, 0, 1.0); //2.奢问溘(%) + + local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) + local stunTime = obj.sq_GetIntData(SKILL_BROKENARROW, 2); // 2. 瞳 唳霜卫除 + + local targetObj = sq_FindTarget(obj, 80, x_range, y_range, z_range); + + + //local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t); + local xLen = 400; + local yLen = 0; + local zLen = 75; + local angle = -1.0; + + if(targetObj) + { + xLen = obj.getXDistance(targetObj); + yLen = sq_GetYPos(targetObj) - sq_GetYPos(obj); + zLen = sq_GetZPos(targetObj) + (sq_GetObjectHeight(targetObj) / 2); + + angle = getAngleArrow(obj, targetObj); + + print(" angle:" + angle); + } + + //local fireOffsetX = 56; + + if(obj.isMyControlObject()) + { + local fireOffsetX = 65; + local fireOffsetY = 0; + local fireOffsetZ = 73; + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(xLen); // + sq_BinaryWriteDword(yLen); // + sq_BinaryWriteDword(zLen); // + sq_BinaryWriteDword(attackRate); // + sq_BinaryWriteDword(expTime); // + sq_BinaryWriteDword(stunTime); // + sq_BinaryWriteFloat(angle); // + obj.sq_SendCreatePassiveObjectPacket(24250, 0, fireOffsetX, fireOffsetY + 1, fireOffsetZ); // ?髦 + } + + obj.getVar("flag").set_vector(0, 1); + } + } + + if(obj.getVar("dash").get_vector(0) == 0) + { + obj.setSkillCommandEnable(SKILL_BROKENARROW, true); + + local iEnterSkill = obj.sq_IsEnterSkill(SKILL_BROKENARROW); + + if(iEnterSkill != -1) + { + obj.getVar("dash").set_vector(0, 1); + } + } + + + + + //local particleCreater = null; + + //particleCreater = obj.getVar().GetparticleCreaterMap("BrokenArrowDownAttack", "Character/Mage/Particle/BrokenArrowDownAttack.ptl", obj); + // + //particleCreater = obj.getVar().GetparticleCreaterMap("BrokenArrowUpAttack", "Character/Mage/Particle/BrokenArrowUpAttack.ptl", obj); + // + //particleCreater.Restart(0); + //particleCreater.SetPos(x + dx, y + dy, z + dz); + // + //sq_AddParticleObject(obj, particleCreater); + } + else if(substate == SUB_STATE_BROKENARROW_2) { + // SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_3) { + // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_4) { + // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_BrokenArrow(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(!obj.isMyControlObject()) { + return; + } + + local arrowNum = obj.getVar().get_vector(0); + + if(substate == SUB_STATE_BROKENARROW_0 || substate == SUB_STATE_BROKENARROW_1) + { + + local arrowIndex = obj.getVar("arrow").get_vector(0); + + arrowIndex = arrowIndex + 1; + + obj.getVar("arrow").set_vector(0, arrowIndex); + + if(arrowIndex < arrowNum) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_BROKENARROW_1); // substate撮? + obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); + } + else + { + local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) + + // 觼煎栖赝 嬴桧蛊 蒙机.. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) + // 0塭贼 渠莲蒂 ?虽 强朝棻.. + + if(obj.getVar("dash").get_vector(0) == 1 && expTime > 0) + { + local targetObj = sq_GetPassiveObjectByState(obj, 24250, BrokenArrow_state_1); // 24250 `Character/Mage/ATBrokenArrow.obj` // 陴彻饵 - 粽煎赎拥煎办 (?髦) + + + if(!targetObj) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else + { + local group = sq_GetGroup(targetObj); + local uniqueId = sq_GetUniqueId(targetObj); + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_BROKENARROW_2); // substate撮? + obj.sq_IntVectPush(group); // substate撮? + obj.sq_IntVectPush(uniqueId); // substate撮? + + obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); + } + + } + else + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + + //obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + + } + else if(substate == SUB_STATE_BROKENARROW_2) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_BROKENARROW_3); // substate撮? + obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_BROKENARROW_3) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(substate == SUB_STATE_BROKENARROW_4) { + // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_BrokenArrow(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BROKENARROW_0) { + // SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_1) { + // SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_2) { + // SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_3) { + // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_4) { + // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_BrokenArrow(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BROKENARROW_0) { + // SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_1) { + // SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_2) { + // SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_3) { + // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_4) { + // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onAfterSetState_BrokenArrow(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BROKENARROW_0) { + // SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_1) { + // SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_2) { + // SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_3) { + // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_BROKENARROW_4) { + // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onAttack_BrokenArrow(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_BROKENARROW_3) + { + + } + +} + + \ No newline at end of file diff --git a/character/atmage/brokenarrow/po_atbrokenarrow.nut b/character/atmage/brokenarrow/po_atbrokenarrow.nut new file mode 100644 index 0000000..9c0184b --- /dev/null +++ b/character/atmage/brokenarrow/po_atbrokenarrow.nut @@ -0,0 +1,358 @@ + +BrokenArrow_START_X <- 0 +BrokenArrow_START_Y <- 1 +BrokenArrow_START_Z <- 2 + +BrokenArrow_MOV_X <- 3 +BrokenArrow_MOV_Y <- 4 +BrokenArrow_MOV_Z <- 5 + + + +function setCustomData_po_ATBrokenArrow(obj, reciveData) +{ + if(!obj) return; + + + local xLen = reciveData.readDword(); + local yLen = reciveData.readDword(); + local zLen = reciveData.readDword(); + local attackRate = reciveData.readDword(); + local expTime = reciveData.readDword(); + local stunTime = reciveData.readDword(); + local angle = reciveData.readFloat() * 100; + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + obj.getVar("dis").clear_vector(); + + obj.getVar("dis").push_vector(x); + obj.getVar("dis").push_vector(y); + obj.getVar("dis").push_vector(z); + + obj.getVar("dis").push_vector(xLen); + obj.getVar("dis").push_vector(yLen); + obj.getVar("dis").push_vector(zLen); + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(BrokenArrow_state_0); + + local expT = expTime; // 唳霜卫除 + + obj.getVar("fire").clear_vector(); // state vector + obj.getVar("fire").push_vector(expT); + + local current100Angle = angle.tointeger(); + obj.getVar("angle").clear_vector(); + obj.getVar("angle").push_vector(current100Angle); + + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + //sq_SetAttackInfoForceHitStunTime( + + local atk = sq_GetCurrentAttackInfo(obj); + + if(atk) + { + sq_SetCurrentAttackBonusRate(atk, attackRate); + sq_SetAttackInfoForceHitStunTime(atk, stunTime); + } + + + + if(obj.isMyControlObject()) + { + obj.addSetStatePacket(BrokenArrow_state_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + +} + +function setState_po_ATBrokenArrow(obj, state, datas) +{ + if(!obj) return; + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + if(passiveState == BrokenArrow_state_0) + { + obj.sq_PlaySound("BARROW_SHOT"); + } + else if(passiveState == BrokenArrow_state_1) + { + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + } + else if(passiveState == BrokenArrow_state_2) + { + local ani = obj.getCustomAnimation(1); + obj.setCurrentAnimation(ani); + } + + local current100Angle = obj.getVar("angle").get_vector(0); + + if(current100Angle != -100) + { + local pAni = obj.getCurrentAnimation(); + local angle = current100Angle.tofloat() / 100.0; + print(" set angle:" + angle); + //sq_SetfRotateAngle(pAni, angle); + //sq_SetfRotateAngle(pAni, 5.0); + //obj.void CNRDObject::setCustomRotate(bool isApply, float rotateAnlge) + obj.setCustomRotate(true, angle); + + } + +} + +function procAppend_po_ATBrokenArrow(obj) +{ + + if(!obj) return; + +//BrokenArrow_START_X <- 0 +//BrokenArrow_START_Y <- 1 +//BrokenArrow_START_Z <- 2 +// +//BrokenArrow_MOV_X <- 3 +//BrokenArrow_MOV_Y <- 4 +//BrokenArrow_MOV_Z <- 5 + local passiveState = obj.getVar("state").get_vector(0); + +//BrokenArrow_state_0 <- 10 +//BrokenArrow_state_1 <- 11 + local pAni = obj.getCurrentAnimation(); + local currentT = sq_GetCurrentTime(pAni); + + if(passiveState == 0) + { + return; + } + + if(passiveState == BrokenArrow_state_0) + { + + local fireT = 200; + local srcX = obj.getVar("dis").get_vector(BrokenArrow_START_X); // 卫蒙x + local srcY = obj.getVar("dis").get_vector(BrokenArrow_START_Y); // 卫蒙y + local srcZ = obj.getVar("dis").get_vector(BrokenArrow_START_Z); // 卫蒙z + + local dis_x_len = obj.getVar("dis").get_vector(BrokenArrow_MOV_X); // 识 桧翕剪葬 + local dis_y_len = obj.getVar("dis").get_vector(BrokenArrow_MOV_Y); // y蹴 桧翕剪葬 + local endZ = obj.getVar("dis").get_vector(BrokenArrow_MOV_Z); // z蹴 桧翕剪葬 + + local v = sq_GetUniformVelocity(0, dis_x_len, currentT, fireT); + local my = sq_GetUniformVelocity(0, dis_y_len, currentT, fireT); + local mz = sq_GetUniformVelocity(srcZ, endZ, currentT, fireT); + + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + local dstY = srcY + my; + + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, dstY); + sq_setCurrentAxisPos(obj, 2, mz); + + if(currentT >= fireT) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + } + else if(passiveState == BrokenArrow_state_1) + { + local fireT = obj.getVar("fire").get_vector(0); + + + if(obj.isMyControlObject()) + { + + local moveParent = sq_GetMoveParent(obj); + + local changeState = false; + + if(!moveParent) + changeState = true; + + if(moveParent) + { + local isSmashing = false; // ?溥纂朝 挡暮樯虽 + local parentState = obj.sq_GetParentState(); + local subState = obj.sq_GetParentSkillSubState(); + + if(parentState == STATE_BROKENARROW && subState >= SUB_STATE_BROKENARROW_3) + isSmashing = true; + + if(moveParent.getState() == STATE_DOWN && isSmashing == true) + { + changeState = true; + } + } + + if(currentT >= fireT) + changeState = true; + + if(changeState == true) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(BrokenArrow_state_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + else if(passiveState == BrokenArrow_state_2) + { + local isEnd = sq_IsEnd(pAni); + + if(isEnd == true) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + } + +} + +function onChangeSkillEffect_po_ATBrokenArrow(obj, skillIndex, reciveData) +{ + + if(!obj) return; + +} + +function onDestroyObject_po_ATBrokenArrow(obj, object) +{ + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATBrokenArrow(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATBrokenArrow(obj) +{ + + if(!obj) return; + +} + +function onAttack_po_ATBrokenArrow(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + + local pChr = obj.getTopCharacter(); + + if(!pChr) + return 0; + + // ?髦缣 蜃懊击 阳 ?髦 ?瞳 + + local x = sq_GetXPos(pChr); + local y = sq_GetYPos(pChr); + local z = sq_GetZPos(pChr); + + local damagerX = sq_GetXPos(damager); + local damagerY = sq_GetYPos(damager); + local damagerZ = sq_GetZPos(damager); + + local direction = ENUM_DIRECTION_LEFT; + + if(x < damagerX) + { + direction = ENUM_DIRECTION_RIGHT; + } + + //local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, + //SKILL_BROKENARROW, true, "Character/ATMage/BrokenArrow/ap_ATBrokenArrow.nut", true); + // + + //local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATBrokenArrow/hiteffect/00_arrow_normal.ani"); + //local arrowObj = sq_CreatePooledObject(ani,true); + //sq_AddObjectTarget(obj, arrowObj, damager, OBJECTTYPE_DRAWONLY, BROKENARROW_UNIQUE_ID); + + //arrowObj.setCurrentDirection(direction); + + //local hitX = (sq_GetCenterXPos(boundingBox) - 5);// + sq_getRandom(0, 2); + local hitX = sq_GetXPos(damager) + sq_getRandom(0, 2); + local hitY = sq_GetYPos(damager) + 1; + local hitZ = (sq_GetCenterZPos(boundingBox) - 5) + sq_getRandom(0, 5); + + //arrowObj.setCurrentPos(hitX,hitY,hitZ); + //sq_moveWithParent(damager, arrowObj); + + obj.setCurrentPos(hitX,hitY,hitZ); + sq_moveWithParent(damager, obj); + + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(damager, damager, SKILL_BROKENARROW, + true, "Appendage/Character/ap_atmage_effect.nut", true); + + print(" onattack"); + + + if(obj.isMyControlObject()) + { + local passiveState = obj.getVar("state").get_vector(0); + + print(" onattack:" + passiveState); + if(passiveState == BrokenArrow_state_0) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(BrokenArrow_state_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + else if(passiveState == BrokenArrow_state_1) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(BrokenArrow_state_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + //sq_SendDestroyPacketPassiveObject(obj); + } + + //local group = sq_GetGroup(damager); + //local uniqueId = sq_GetUniqueId(damager); + // + //sq_BinaryStartWrite(); + //sq_BinaryWriteWord(group); + //sq_BinaryWriteWord(uniqueId); + // + //sq_SendChangeSkillEffectPacket(pChr, SKILL_BROKENARROW); + + + //sq_SendDestroyPacketPassiveObject(obj); + } + + return 0; +} + + +function getCustomHitEffectFileName_po_ATBrokenArrow(obj, isAttachOnDamager) +{ + return "PassiveObject/Character/Mage/Animation/ATBrokenArrow/02_arrowboom_dodge.ani"; +} + + + \ No newline at end of file diff --git a/character/atmage/chainlightning/chainlightning.nut b/character/atmage/chainlightning/chainlightning.nut new file mode 100644 index 0000000..3186053 --- /dev/null +++ b/character/atmage/chainlightning/chainlightning.nut @@ -0,0 +1,385 @@ + +SUB_STATE_ATCHAINLIGHTNING_0 <- 0 +SUB_STATE_ATCHAINLIGHTNING_1 <- 1 +SUB_STATE_ATCHAINLIGHTNING_2 <- 2 +SUB_STATE_ATCHAINLIGHTNING_3 <- 3 +SUB_STATE_ATCHAINLIGHTNING_4 <- 4 + +SKL_CL_SD_0 <- 0 //200 // 10.籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??) +SKL_CL_SD_1 <- 1 //0 // 11.籀挤 颤啃?卫 X蹴 卫蒙 剪葬 +SKL_CL_SD_2 <- 2 //400 // 12.籀挤 颤啃?卫 X蹴 部 剪葬 +SKL_CL_SD_3 <- 3 //320 // 13.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬 +SKL_CL_SD_4 <- 4 //300 // 14.颤问? 瞳暧 譆渠 堪桧 + +// 0.葭觼 譆渠 偎热 1.虽楼卫除 2.奢问溘(%) 3.棻钦?? ?热 4.棻钦?? 除问 +SKL_CL_LI_0 <- 0 // 0.葭觼 譆渠 偎热 +SKL_CL_LI_1 <- 1 // 1.虽楼卫除 +SKL_CL_LI_2 <- 2 // 2.奢问溘(%) +SKL_CL_LI_3 <- 3 // 3.棻钦?? ?热 +SKL_CL_LI_4 <- 4 // 4.棻钦?? 除问 + +function checkExecutableSkill_ChainLightning(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_ATCHAINLIGHTNING); + + print("b_useskill : %d" + b_useskill); + + if(b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ATCHAINLIGHTNING_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_CHAINLIGHTNING, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; + +} + +function checkCommandEnable_ChainLightning(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) + { + return obj.sq_IsCommandEnable(SKILL_ATCHAINLIGHTNING); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + return true; + +} + +function onSetState_ChainLightning(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_0) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_CHAINLIGHTNING_CAST); + local pAni = obj.sq_GetCurrentAni(); + + // 议蝶? 楼紫蒂 评塭陛紫烟 扑姜 + // 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻. + // 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻. + local skillLevel = sq_GetSkillLevel(obj, SKILL_ATCHAINLIGHTNING); + + local castTime = sq_GetCastTime(obj, SKILL_ATCHAINLIGHTNING, skillLevel); + local animation = sq_GetCurrentAnimation(obj); + local startTime = sq_GetFrameStartTime(animation, 16); + local speedRate = startTime.tofloat() / castTime.tofloat(); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + + sq_StartDrawCastGauge(obj, startTime, true); + addElementalChain_ATMage(obj, ENUM_ELEMENT_LIGHT); + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_CHAINLIGHTNING); + obj.sq_PlaySound("MW_CHAINLIGHT"); + + if(obj.isMyControlObject()) { + ///////////////////////////////////////////// + local firstTargetYRange = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_SD_0); // 0.籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??) + local firstTargetXStartRange = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_1); // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬 + local firstTargetXEndRange = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_SD_2); // 2.籀挤 颤啃?卫 X蹴 部 剪葬 + local nextTargetRange = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_SD_3); // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬 + local targetMaxHeight = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_SD_4); // 4.颤问? 瞳暧 譆渠 堪桧 + + local skill_level = obj.sq_GetSkillLevel(SKILL_ATCHAINLIGHTNING); + + local link_num = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_0, skill_level); // 0.葭觼 譆渠 偎热 + local attack_time = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_1, skill_level); // 1.虽楼卫除 + local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_ATCHAINLIGHTNING, STATE_CHAINLIGHTNING, SKL_CL_LI_2, 1.0); //2.奢问溘(%) + local multi_hit_num = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_3, skill_level); // 3.棻钦?? ?热 + //local multi_hit_term = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_4, skill_level); // 4.棻钦?? 除问 + //////////////////////////////////////////////// + sq_BinaryStartWrite(); + sq_BinaryWriteWord(firstTargetYRange); + sq_BinaryWriteWord(firstTargetXStartRange); + sq_BinaryWriteWord(firstTargetXEndRange); + sq_BinaryWriteWord(nextTargetRange); + sq_BinaryWriteWord(targetMaxHeight); + + sq_BinaryWriteWord(link_num); + sq_BinaryWriteWord(attack_time); + sq_BinaryWriteDword(firstAttackRate); + sq_BinaryWriteWord(multi_hit_num); + //sq_BinaryWriteWord(multi_hit_term); + + + //local ropeX = sq_GetDistancePos(posX, obj.getDirection(), offsetLen); + local distanceL = 50; + local h = 88; + obj.sq_SendCreatePassiveObjectPacket(24241, 0, distanceL, 0, h); + + obj.sq_PlaySound("CHAINLIGHT_ELEC_LOOP", 7576); + } + + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_CHAINLIGHTNING_END); + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) { + // SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) { + // SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机 + } + + +} + +function prepareDraw_ChainLightning(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_0) { + // SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) { + // SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + // SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) { + // SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) { + // SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProc_ChainLightning(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_0) { + // SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) { + // SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机 + if(obj.isMyControlObject()) { + //if(!obj.sq_GetPassiveObject(24241)) { + + local skill_level = obj.sq_GetSkillLevel(SKILL_ATCHAINLIGHTNING); + local attack_time = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_1, skill_level); // 1.虽楼卫除 + + local passiveobj_cl = obj.sq_GetPassiveObject(24241); + + + if(passiveobj_cl) { + local flag = passiveobj_cl.getVar("nograb").get_vector(0); + + if(flag) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ATCHAINLIGHTNING_2); + obj.sq_AddSetStatePacket(STATE_CHAINLIGHTNING, STATE_PRIORITY_USER, true); + return; + } + else + { + if(obj.getVar().get_vector(0) == 0) { + obj.sq_SetShake(obj,1,attack_time); + obj.getVar().set_vector(0, 1); + } + } + + } + + if(currentT > attack_time) { + //obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ATCHAINLIGHTNING_2); + obj.sq_AddSetStatePacket(STATE_CHAINLIGHTNING, STATE_PRIORITY_USER, true); + } + } + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + // SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) { + // SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) { + // SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_ChainLightning(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_0) { + // SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) { + // SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + // SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) { + // SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) { + // SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_ChainLightning(obj) +{ + + if(!obj) return; + + //local pSickleObj = obj.sq_GetPassiveObject(24101); // sickle + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_0) { + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ATCHAINLIGHTNING_1); + obj.sq_AddSetStatePacket(STATE_CHAINLIGHTNING, STATE_PRIORITY_USER, true); + } + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) { + // SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机 + //if(obj.isMyControlObject()) { + //obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + //} + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + if(obj.isMyControlObject()) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) { + // SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) { + // SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_ChainLightning(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_0) { + // SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) { + // SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + // SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) { + // SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) { + // SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_ChainLightning(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_0) { + // SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) { + // SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + // SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) { + // SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) { + // SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机 + } + // 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据 + sq_EndDrawCastGauge(obj); + obj.stopSound(7576); + +} + +function onAfterSetState_ChainLightning(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_0) { + // SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) { + // SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + // SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) { + // SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) { + // SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机 + } + + +} + + \ No newline at end of file diff --git a/character/atmage/chainlightning/po_atchainlightning.nut b/character/atmage/chainlightning/po_atchainlightning.nut new file mode 100644 index 0000000..1cda74c --- /dev/null +++ b/character/atmage/chainlightning/po_atchainlightning.nut @@ -0,0 +1,745 @@ + +S_PO_ATCL_0 <- 10 +S_PO_ATCL_1 <- 11 + +VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??) +VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬 +VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬 +VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬 +VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧 + +VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热 +VI_SKL_6 <- 6 // 6.虽楼卫除 +VI_SKL_7 <- 7 // 7.奢问溘(%) +VI_SKL_8 <- 8 // 8.棻钦?? ?热 +VI_SKL_9 <- 9 // 9.棻钦?? 除问 + + +function setAnimationEmptyLightning(obj) +{ + if(!obj) + return; + + local i = 0; + local object_num = obj.getVar("cl").get_obj_vector_size(); + + for(i = 0; i < object_num; i++) + { // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻.. + local pObj = obj.getVar("cl").get_obj_vector(i); + if(pObj) + { + local currentAni = sq_GetCurrentAnimation(pObj); + if(currentAni) + { + if(currentAni.isLoop()) + { + local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge_empty.ani"); + + pObj.setCurrentAnimation(ani); + } + } + } + } +} + + +function setAnimationDiableLightning(obj) +{ + if(!obj) + return; + + local i = 0; + local object_num = obj.getVar("cl").get_obj_vector_size(); + + for(i = 0; i < object_num; i++) + { // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻.. + local pObj = obj.getVar("cl").get_obj_vector(i); + if(pObj) + { + pObj.setValid(false); + } + } +} + + +function setCustomData_po_ATChainLightning(obj, reciveData) +{ + if(!obj) return; + + print("\n create chainlightning"); + + local firstTargetYRange = reciveData.readWord(); + local firstTargetXStartRange = reciveData.readWord(); + local firstTargetXEndRange = reciveData.readWord(); + local nextTargetRange = reciveData.readWord(); + local targetMaxHeight = reciveData.readWord(); + + local link_sum_num = reciveData.readWord() + 1; + local attack_time = reciveData.readWord(); + local firstAttackRate = reciveData.readDword(); + local multi_hit_num = reciveData.readWord(); + //local multi_hit_term = reciveData.readWord(); + + obj.getVar("skl").clear_vector(); // 蝶鉴?橾 妇湿 姜尔 渗热菟 + obj.getVar("skl").push_vector(firstTargetYRange); // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??) + obj.getVar("skl").push_vector(firstTargetXStartRange); // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬 + obj.getVar("skl").push_vector(firstTargetXEndRange); // 2.籀挤 颤啃?卫 X蹴 部 剪葬 + obj.getVar("skl").push_vector(nextTargetRange); // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬 + obj.getVar("skl").push_vector(targetMaxHeight); // 4.颤问? 瞳暧 譆渠 堪桧 + + obj.getVar("skl").push_vector(link_sum_num); // 5.葭觼 譆渠 偎热 + obj.getVar("skl").push_vector(attack_time); // 6.虽楼卫除 + obj.getVar("skl").push_vector(firstAttackRate); // 7.奢问溘(%) + obj.getVar("skl").push_vector(multi_hit_num); // 8.棻钦?? ?热 + //obj.getVar("skl").push_vector(multi_hit_term); // 9.棻钦?? 除问 + + + obj.getVar("nograb").clear_vector(); + obj.getVar("nograb").push_vector(0); + + + + local link_num = link_sum_num; + + obj.sq_var.clear_vector(); + obj.sq_var.push_vector(link_num); // 偎热 + + local x = obj.getXPos(); + local y = obj.getYPos(); + local z = obj.getZPos(); + + + + + + obj.sq_var.push_vector(0); // 苹遴? + obj.getVar("cl").clear_obj_vector(); + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(0); + + // ?卫粽螃粽薛? 嫦当 ?楚斜 + obj.getVar("cl").clear_vector(); + obj.getVar("target").clear_vector(); + + local i = 0; + for(i = 0; i < link_num; i++) { + obj.getVar("cl").push_vector(0); + obj.getVar("target").push_vector(-1); // x + obj.getVar("target").push_vector(-1); // y + obj.getVar("target").push_vector(-1); // z + } + // + + + local isMyControl = obj.isMyControlObject(); + + if(isMyControl) { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, x); + sq_IntVectorPush(pIntVec, y); + sq_IntVectorPush(pIntVec, z); + +//VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??) +//VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬 +//VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬 +//VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬 +//VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧 +// +//VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热 +//VI_SKL_6 <- 6 // 6.虽楼卫除 +//VI_SKL_7 <- 7 // 7.奢问溘(%) +//VI_SKL_8 <- 8 // 8.棻钦?? ?热 +//VI_SKL_9 <- 9 // 9.棻钦?? 除问 + + local start_x = obj.getVar("skl").get_vector(VI_SKL_1); + local start_end_x = obj.getVar("skl").get_vector(VI_SKL_2); + + local y_range = obj.getVar("skl").get_vector(VI_SKL_0); + local z_range = obj.getVar("skl").get_vector(VI_SKL_4); + + local pTargetChr = obj.sq_FindFirstTarget(start_x, start_end_x, y_range, z_range); + + print( " pTargetChr:" + pTargetChr); + //print( " start_x:" + start_x + " start_end_x:" + start_end_x + " y_range:" + y_range + " z_range:" + z_range); + + local id = sq_GetObjectId(pTargetChr); + + sq_IntVectorPush(pIntVec, id); + + if(id == -1) { + //print("nograb"); + obj.getVar("nograb").set_vector(0, 1); + } + + obj.addSetStatePacket(S_PO_ATCL_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + +function destroy_po_ATChainLightning(obj) +{ + setAnimationDiableLightning(obj); + //setAnimationEmptyLightning(obj); +} + + +function setState_po_ATChainLightning(obj, state, datas) +{ + + if(!obj) return; + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + print( " setstate:" + passiveState); + + if(passiveState == S_PO_ATCL_0) + { + ////////////////////////////////////////// + // 苹遴? 萤葬晦 + local cnt = obj.sq_var.get_vector(1); + cnt = cnt + 1; + obj.sq_var.set_vector(1, cnt); // 苹遴? + ////////////////////////////////////////// + print(" setState_po_ATChainLightning S_PO_ATCL_0:" + obj.sq_var.get_vector(1)); + + + if(obj.sq_var.get_vector(0) > obj.sq_var.get_vector(1)) // 绮 葭觼 偎热 薯? + { + + local x = sq_GetVectorData(datas, 0); // x pos + local y = sq_GetVectorData(datas, 1); // y pos + local z = sq_GetVectorData(datas, 2); // z pos + local id = sq_GetVectorData(datas, 3); // id + + + local target_chr = sq_GetObjectByObjectId(obj, id); + + if(target_chr) + { + // 绮 葬模蝶 煎注 + local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge.ani"); + local lightObj = sq_CreatePooledObject(ani,true); + + + lightObj.setCurrentPos(x,y + 5,z); + lightObj.setCurrentDirection(obj.getDirection()); + obj.getVar("cl").push_obj_vector(lightObj); // 罹晦怃 + sq_AddObject(obj, lightObj, OBJECTTYPE_DRAWONLY, false); + /////////////////////////////////////////////////// + + obj.sq_var.remove_obj_vector(target_chr); + obj.sq_var.push_obj_vector(target_chr); + + local pActiveTarget = sq_GetCNRDObjectToActiveObject(target_chr); + + procChainLightning(obj, lightObj, pActiveTarget, obj.sq_var.get_vector(1)); + } + else + { // 蜃朝拥陛 桡击阳.. + print(" obj.sq_var.get_vector(1):" + obj.sq_var.get_vector(1)); + if(obj.sq_var.get_vector(1) == 1) + { + // 绮 葬模蝶 煎注 + local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge_empty.ani"); + local lightObj = sq_CreatePooledObject(ani,true); + + lightObj.setCurrentPos(x,y + 5,z); + lightObj.setCurrentDirection(obj.getDirection()); + obj.getVar("cl").push_obj_vector(lightObj); // 罹晦怃 + sq_AddObject(obj, lightObj, OBJECTTYPE_DRAWONLY, false); + /////////////////////////////////////////////////// + } + } + } + } + else if(passiveState == S_PO_ATCL_1) + { + local object_num = obj.getVar("cl").get_obj_vector_size(); + + local i = 0; + for(i = 0; i < object_num; i++) + { // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻.. + local pObj = obj.getVar("cl").get_obj_vector(i); + local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge_empty.ani"); + + pObj.setCurrentAnimation(ani); + } + + for(i = 0; i < object_num; i++) + { + local target_obj_num = obj.sq_var.get_obj_vector_size(); + local pObj = obj.getVar("cl").get_obj_vector(i); + + if(target_obj_num > i) + { + local pTargetObj = obj.sq_var.get_obj_vector(i); + local pActiveTarget = sq_GetCNRDObjectToActiveObject(pTargetObj); + + local target_x = sq_GetXPos(pActiveTarget); + local target_y = sq_GetYPos(pActiveTarget) + 5; + local target_z = sq_GetZPos(pActiveTarget) + (sq_GetObjectHeight(pActiveTarget) / 2); + + if((i + 1) < object_num) + { + local next_obj = obj.getVar("cl").get_obj_vector(i + 1); + sq_SetCurrentPos(next_obj, target_x, target_y, target_z); + } + + procChainLightning(obj, pObj, pActiveTarget, i); + } + else + { + procChainLightning(obj, pObj, null, i); + } + } + } + +} + + +// 羹樯塭桧?棚 ?亵陕 籀葬 +function procChainLightning(thisObj, obj, pTargetChr, targetIndex) +{ + if(!obj) return; + //if(!pTargetChr) return; + + local X = obj.getXPos(); + local Y = obj.getYPos(); + local Z = obj.getZPos(); + + + local pAni = obj.getCurrentAnimation(); + local frameIndex = pAni.GetCurrentFrameIndex(); + + local targetI = targetIndex * 3; + + local posX = thisObj.getVar("target").get_vector(targetI); + local posY = thisObj.getVar("target").get_vector(targetI + 1); + local posZ = thisObj.getVar("target").get_vector(targetI + 2); + + if(pTargetChr) + { + posX = pTargetChr.getXPos(); + posY = pTargetChr.getYPos(); + posZ = pTargetChr.getZPos() + (sq_GetObjectHeight(pTargetChr) / 2); + + thisObj.getVar("target").set_vector(targetI, posX); + thisObj.getVar("target").set_vector(targetI + 1, posY); + thisObj.getVar("target").set_vector(targetI + 2, posZ); + } + + if(posX == -1) + return; + + local offset = posX - X; + + if(offset < 0) { + //print(" ENUM_DIRECTION_LEFT"); + obj.setCurrentDirection(ENUM_DIRECTION_LEFT); + } + else { + //print(" ENUM_DIRECTION_RIGHT"); + obj.setCurrentDirection(ENUM_DIRECTION_RIGHT); + } + + + local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true); + + local w = posX - X; + if(w < 0) w = -w; + // ?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻. + + local h = (posY - posZ) - (Y - Z); + local width = sq_Abs(posX - X); + local angle = sq_Atan2( h.tofloat(), width.tofloat()); + + if((posY - posZ) > (Y - Z)) { + angle = -angle; + } + + local nRevision = distance; + + local cos = nRevision.tofloat() * sq_Cos(angle); + local sin = nRevision.tofloat() * sq_Sin(angle); + + local nX = sq_Abs( cos.tointeger() ); + local nY = sq_Abs( sin.tointeger() ); + + sq_SetfRotateAngle(pAni, angle); + + pAni.setImageRate(1.0, 1.0); + + + local dis = 246; + + + local cos_x = dis.tofloat() * sq_Cos(angle); + local sin_y = dis.tofloat() * sq_Sin(angle); + + //print("angle:" + angle); + + local nW = sq_Abs( cos_x.tointeger() ); + local nH = sq_Abs( sin_y.tointeger() ); + + //print(" nW:" + nX + "nH:" + nY); + + local wRate = width.tofloat() / nW.tofloat(); + local hRate = h.tofloat() / nH.tofloat(); + + // + pAni.setImageRate(wRate.tofloat(), hRate.tofloat()); +} + + + +function procAppend_po_ATChainLightning(obj) +{ + if(!obj) + return; + + local pChr = obj.getTopCharacter(); + + local state = obj.getVar("state").get_vector(0); + + if(!pChr) + { + //sq_SendDestroyPacketPassiveObject(obj); + if(state == S_PO_ATCL_0) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + return; + } + else + { + if(obj.isMyControlObject()) + sq_SendDestroyPacketPassiveObject(obj); + + return; + } + } + + + + local lightNum = obj.getVar("cl").get_obj_vector_size(); + //print(" chain:" + lightNum); + if(pChr.getState() != STATE_CHAINLIGHTNING) + { + //sq_SendDestroyPacketPassiveObject(obj); + if(state == S_PO_ATCL_0) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + //print(" setstaet:" + S_PO_ATCL_1); + obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + return; + } + else if(state == S_PO_ATCL_1) + { + local clNum = obj.getVar("cl").get_obj_vector_size(); + print(" state == S_PO_ATCL_1"); + print(" clNum:" + clNum); + if(clNum == 0) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + else + { + setAnimationEmptyLightning(obj); + } + } + } + + + local i = 0; + local object_num = obj.getVar("cl").get_obj_vector_size(); // 绮 螃粽薛? + + for(i = 0; i < object_num; i++) + { + local pObj = obj.getVar("cl").get_obj_vector(i); + + local target_obj_num = obj.sq_var.get_obj_vector_size(); + + if(target_obj_num > i) + { + local pTargetObj = obj.sq_var.get_obj_vector(i); + local pActiveTarget = sq_GetCNRDObjectToActiveObject(pTargetObj); + + local target_x = sq_GetXPos(pActiveTarget); + local target_y = sq_GetYPos(pActiveTarget) + 5; + local target_z = sq_GetZPos(pActiveTarget) + (sq_GetObjectHeight(pActiveTarget) / 2); + + if((i + 1) < object_num) { + local next_obj = obj.getVar("cl").get_obj_vector(i + 1); + sq_SetCurrentPos(next_obj, target_x, target_y, target_z); + } + + local pAni = pObj.getCurrentAnimation(); + + if(state == S_PO_ATCL_0) { + + procChainLightning(obj, pObj, pActiveTarget, i); + if(pAni.GetCurrentFrameIndex() >= 2) + { // ?营 绮 螃粽薛?暧 ?溯歜樯策蝶陛 2?溯歜击 剩横除棻贼.. + if(obj.getVar("cl").get_vector(i) == 0) + { // ?营 绮 颤啃?桧 棻挤戏煎 葭觼肾虽 强懊棻贼.. + + if(obj.isMyControlObject()) + { + local id = sq_GetObjectId(pTargetObj); + if(id != -1) { +//VI_SKL_6 <- 6 // 6.虽楼卫除 +//VI_SKL_7 <- 7 // 7.奢问溘(%) +//VI_SKL_8 <- 8 // 8.棻钦?? ?热 +//VI_SKL_9 <- 9 // 9.棻钦?? 除问 + local attack_time = obj.getVar("skl").get_vector(VI_SKL_6); + local attack_rate = obj.getVar("skl").get_vector(VI_SKL_7); + local multi_hit_num = obj.getVar("skl").get_vector(VI_SKL_8); + //local multi_hit_term = obj.getVar("skl").get_vector(VI_SKL_9); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(id); + sq_BinaryWriteDword(attack_time); + sq_BinaryWriteDword(attack_rate); + sq_BinaryWriteDword(multi_hit_num); + //sq_BinaryWriteDword(multi_hit_term); + + sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24242, 0, target_x, target_y - 1, target_z); + } + + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, target_x); + sq_IntVectorPush(pIntVec, target_y + 1); + sq_IntVectorPush(pIntVec, target_z); + + //VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??) + //VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬 + //VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬 + //VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬 + //VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧 + local next_x_range = obj.getVar("skl").get_vector(VI_SKL_3); + local z_range = obj.getVar("skl").get_vector(VI_SKL_4); + + local pTargetChr = obj.sq_FindNextTarget(pActiveTarget, next_x_range, z_range); + + local id = sq_GetObjectId(pTargetChr); + sq_IntVectorPush(pIntVec, id); + + obj.addSetStatePacket(S_PO_ATCL_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + + obj.getVar("cl").set_vector(i, 1); // + return; + } + } + } + else if(state == S_PO_ATCL_1) { + procChainLightning(obj, pObj, pActiveTarget, i); + } + } + else + { + if(state == S_PO_ATCL_1) + { + //print(" procChainLightning(obj, pObj, pActiveTarget, i):" + pObj); + procChainLightning(obj, pObj, null, i); + } + } + } + + + local substate = pChr.getSkillSubState(); + + if(substate == SUB_STATE_ATCHAINLIGHTNING_2) { + if(state == S_PO_ATCL_0) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + print(" ln546 setstate"); + obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + return; + } + } + + + if(object_num <= 0) + { + if(obj.sq_var.get_vector(1) > 0) + { + if(obj.getVar("cl").get_obj_vector_size() == 0) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + } + } +} + +function onChangeSkillEffect_po_ATChainLightning(obj, skillIndex, data, dataSize) +{ + + if(!obj) return; + +} + +function getDestroyObjectByCIObjectIndex(obj, diedObject) +{ // 饵塭虽朝 螃粽薛?煎 饵塭螳捡?朝 绮螃粽薛?蒂 葬欐?栖棻. + + if(!diedObject || !obj) + return null; + + local objectNum = obj.sq_var.get_obj_vector_size(); + + local index = obj.sq_var.get_obj_vector_index(diedObject); + + return index; +} + +function setDiableAnimationCIObject(obj, index) +{ // 饵塭螳捡? ?蹂陛 毡朝 绮 螃粽薛?蒂 饵塭虽紫烟 撮??栖棻. + if(!obj) + return; + + //local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge_empty.ani"); + + local destroyIndex = index + 1; + + if(destroyIndex >= obj.getVar("cl").get_obj_vector_size()) + destroyIndex = index; + + local clObject = obj.getVar("cl").get_obj_vector(destroyIndex); + + //print( " setDiableAnimationCIObject:" + (destroyIndex); + + if(clObject) + { + if(destroyIndex < obj.getVar("cl").get_obj_vector_size()) + { // ?卫粽螃粽薛? ?桧横 ?楚斜蒂 樯策蝶翕晦? ?晦嫔?..觊 蜀缣 寰萄朝 翕晦? 寞彻 姜热漱搅朝 erase?晦缚 伞鼠 睑隶陪棻.. + for (local i = destroyIndex;i < obj.getVar("cl").size_vector(); i+=1) + { + if( (i + 1) < obj.getVar("cl").size_vector()) + { + local flagValue = obj.getVar("cl").get_vector(i + 1); + obj.getVar("cl").set_vector(i, flagValue); + } + } + } + + obj.getVar("cl").remove_obj_vector(clObject); // 绮 + + clObject.setValid(false); + } + //clObject.setCurrentAnimation(ani); +} + + +function onDestroyObject_po_ATChainLightning(obj, object) +{ + + if(!obj) return; + + if(!obj.isValid()) + return; + + local state = obj.getVar("state").get_vector(0); + + if(state != S_PO_ATCL_1 && state != S_PO_ATCL_0) + { + return; + } + + if(obj.getVar("cl").get_obj_vector_size() == 0) + { // + //print(" nograb on"); + obj.getVar("nograb").set_vector(0, 1); + } + + local index = getDestroyObjectByCIObjectIndex(obj, object); + + if(index != -1) + { + setDiableAnimationCIObject(obj, index); + } + + obj.sq_var.remove_obj_vector(object); // 蜃坚毡朝 跪 + + + //sq_SendDestroyPacketPassiveObject(obj); + + obj.getVar("cl").remove_obj_vector(object); // 绮 + + + //print(" ondestroy"); + + if(obj.isMyControlObject()) + { + + if(state == S_PO_ATCL_0) + { + if(!obj.sq_var.get_obj_vector_size()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + print(" ln671 setstate"); + obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + //print(" obj.addSetStatePacket(S_PO_ATCL_1 "); + } + + + //obj.setValid(false); + + +} + +function onKeyFrameFlag_po_ATChainLightning(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATChainLightning(obj) +{ + if(!obj) return; + + //print("onEndCurrentAni_po_ATChainLightning"); + + //if(obj.isMyControlObject()) { + //sq_SendDestroyPacketPassiveObject(obj); + //} + +} + \ No newline at end of file diff --git a/character/atmage/chainlightning/po_atchainlightningtarget.nut b/character/atmage/chainlightning/po_atchainlightningtarget.nut new file mode 100644 index 0000000000000000000000000000000000000000..aab6ce2615d5c4a55a58e8209df0248ae324841e GIT binary patch literal 5928 zcmeHLQB&JS5YDTa;XfRH$jB4NvNO|{COkNXfTuL}fRhP%(FpqhwL)^GGc8T}-}~+D zo^%4+K;Al2kFoLH-rnxF-|pRNcjqjcPNLy#bTW(j>fLKK=p=h z>|w5hIkPIVw-~}Z&F68dl7-s$*7OP;FAo09i$&0B$i>FQ^WP(r+~}?LBIs`I5qM`UIXpnk}bP@Hy zy=h#;HyWz~TG>^v2bFgsRA`8ev(m%>F>(8P#*4k5<05E7%IJ1SAgSO`VW{ks;vty3 zZk5GJ7WLf@z90wiq5gaNDluOn4_4j*VQcYPSq9;rR-G*#-I-ZOwTfdd z%64>|UFJkGYb3~ZRMv zv;)qlUcgS9-YId1)4}x4Ok9{?(5F|of(7-9^d;r5ccVNrMV?MrbJVrdegD+`~!V>voCYbu$kmgJ>eN6?s_B6 zJV_^4gguFlvSv%b$C>%8=T*Ru()=P$d9bP#v^BX|4Ued#1WW#HEpJRuQBd4$S231W z2ORFjiv@@Sw2c;|{9~!BL~B=_&4#nXXnH!HoQ`Mb(eTr3(p8snTI#N9w>`XecYs^- z%(ChqJFYA_x@v**s_bk&u&RJ8e(H*Bq@6TB|f5)q09jC46(Rr2M~fh)***e;8FK3pzQ zNVcQPcviSQLhUi`VQm zaa96T7}h3*q2%7iMK52<8PU`>fTzB1_{DE1+JifV`u^RPB;*gB#$+jg7i*(3`CA7a z1)Wxr%}lJM(0D03aW#iimtbAz8Qa2DspSxULV}YAk0y9iU`>j%7P5S6iVvQb;xMd^ zQp@Io{iwrbQKl$72A(xgs`Y^`QOxhS0!=wL1!Z_(x!0mVdYj9RLR`N0*7RK)-k>^1 zpb9}FJ`e-WsC01Hxyp@>hvSbY~bn40Z{P}P+o18`;PKHO3 zTtt{obK4<5XF2ylHem=Pkb-o)<1U*G>d?eDPAZ|qb9w}KipsMG>SYlN`+?nz)!u5! ztmz%Oc0y#T*4~52w)fs|)Q7f$-F6(`a`q&b%2Hg~+@zdjhqq|B0~+YiRnZhH%?8+5 zI8$%qbVW}-egMc;%Pr>bS8DK9JZUt#KvZLL(zzK!iv zE#kFQ2p1jPYi|zgO3ah4VWf~jXX+*;F2wgR=U&?*zL4Fa;c{e++?uHRgn3?U-L}I1 zAI>tr1bNmxkE~irWOj4nh2fVHf+RCu$ zxM0I72098p>3-;_wSi#|yQe%8y%T$(-`+xXDTV3zz~Zw=)asX$SJQY%(KI6QTLJCwXq6HgN;vy-L-;z lb9rLN&{jXlC}03x>vNg=C0`Avn^(BdoAWsWm+*e^;$LiG&nN%@ literal 0 HcmV?d00001 diff --git a/character/atmage/concentrate/concentrate.nut b/character/atmage/concentrate/concentrate.nut new file mode 100644 index 0000000000000000000000000000000000000000..077fa6dc97515724158567d364cb0eefd9b267b9 GIT binary patch literal 2833 zcmcImZBN@)6zy9FGZC~8B@Eq z(59m$3|d&r%b$2l9M<&#n0ko&XC3xEKbRa zk_c;R603$T8JN??Z?=2e=DlqmIgPl_=wGB`Bd4nO^FBM)_HK`dI(FhW^c)S}a|agTr!K2I zbg>?(u$IY4YKm7WSS@jC4ii1v#wkm4sX#Q~WXCZuz)DVYj!BP`RVW@0g$G?^oKRhe zYr<-QGXi#)m#4+GLvr!Bc>bE)T_hWuC}{3&*xaxRE694cYi+y$>Y!5L7qay*NVcAn z*B|}J$`{DS8M)m066{MGFN=%s(6@n(&Vaw8%OB|Yu2Sx1vGfYDK|UH1gxDC%kzrc~ z+$lpn-kLh1Ysr=v*K)BNz;zrznhZQEe-DxTQ7~w3uA}1bcgdqSWc%JwVpdBPT~M>z~4^^?nywPv4ULZNSC#QU;=m5t>@&Wqp)BI|Ls}Nrsg5L1PFw zi;cLP!8#Oio>HN{ohTFGacb&#mXpKUG>)igjqC6s`(bUzU~FmI*=TEfryN+m1a+{E zw@L>K6@8#o=psAkB>x+-PM56vd1O9Z1DHw+7nA_7-R3Ss#iVsT@OiO&oaljIw3D+ha&gnY152Kfi| zW^h1NZ|AhMaAH0A0XfQ7<#a@m=0q*0rnsxaW7R&c(hw@7p)IlX+&bO{_LKD^)&q>D!x&B^(8z(we(XJ3I$EYv`I18^4K@2G%!*vBuW2IK7>3kfb%Pmxv?Pg!J)!ys?Ey*AI*1b7pDCPR3V(vu$$6DTAubfJ8qWS(hC&f2$D5I6 zdnwbSxy(4$YXXm`MjvQV)2Kl#>~5qOduTsVwSTq@v*B=;tnVSa>f~&#>a1)=QWSpn zRc2U#~APr zcm{lkaiX=>c7*T9JbnbeA iuD}=9**LrLIn>C9x^CFpL6ki715fRJ&QYr?SN;ZykM5%Y literal 0 HcmV?d00001 diff --git a/character/atmage/concentrate/po_atconcentrateexp.nut b/character/atmage/concentrate/po_atconcentrateexp.nut new file mode 100644 index 0000000000000000000000000000000000000000..13d77425877eeb9a73bc153b30c441df31777700 GIT binary patch literal 5471 zcmeHL-A~(A6z4Ta`5$hPDkWW(4@#v;ZH1CxJ|q$%!b-cB=#pH(;Mke%ux8aB)@^-T zwYFOa?S|B?tliKyX)UTWVEbzlod2Td+-p0wV-P`V`%)6!VEdeN&pG#Zz8oEn4yP^* z_y;U0V%^{BJh)57+q=IJYx}FCe-5pOkH@3K1IoIPiViO~)v76LDlwRuZyKgnpP(kK zG_*=~A+M=brkXl6nRK&Ju2V&cX-jJfqO&TKHyBdJqr(Mr(_jUW>(hq|`KNbv>u4P2(7jiO&KoOks6UF+_N-Wilb$ zRYl03QI|EKH$JUQp~<=q{8_#;K0yPyN@!7!0nCgwzhMG1F6Peyv1CgDsZVPLGE9{qLi-hL9>BVeusxm1R^E2=(T`#>)ei+LGB|r2mFf1$7SS?p|##9j_ z=>!=agC#SH%OzNVYJMsgODEt1Ie2P5TbiE9OOumQUX;9qsDcyo*~QuH4QalTn_F0z zEAWI2yTDh}B&y1F%A1s6*>)bdnUD7&E`4}6g2mr%N|L6wtZ3AX#Yu`}(&;46Z7x3+ z;2F$?*p5u!=9jrEKrYxj7$C>2~*# z!@4Z1D>?0^OX$iKdwEwkpAJ%p?2L9yW=AZ%>oVl#+&5i>uq`@kDeCMTbngF7tb2Fb zhx?ton{TNJ&kfjsV>=-bR?s$>)7-?MEfYPSzw@%&E{K5yfu%1B>+~jvXt7ye;*FuF zDu%Z61`Z4`IJh+=$GV`v#~fa6S7Hg&Twi{|3u;r4Q}q)purv(qXh0Ip-HBC zWdk}Y4LW1zZlh_eIyZ$6k=A?H@5fNaKF`H3V>S#*3iv8il%R2(6H4Nl7I@d_844S^ zR?RjVOs(~`j1Cw*xdibBou+83$(5@l4G+aoBNBPIGwm#26{DCRV`wsn^n281@H-OD zJwTihUIP_)Rtu5;0m+an#4iU`7CJ{@(r!Q9>3;dL^WwR6`@hcfKZy0+)Ao};yIb4c z%@>_V&q#OcF(iYdm%F69yNR5(ZfnhY;~E32WwQmET^vnchG(3BFQ_UM7uT)?30IFF zm@|2bdBCX?qU?G%vWfWy$G#=7?%yWu!v~PR#yh|6Cpqy+NuLwk;w#qu9F#x3RmKTy zQHPcvkPn6l%g|w-R}=gdMfYGI3+s8(-P!9rdDi{@)zLSij~^F%_k?nJJXV3hwk05v zw0C~#{`gnt-_7#@jX1N&CN>PO@qyI?o>4x7pti0ZoQntjaZH!IOl1fJF&O*iE-{LU z^B5f){b&plDF1$#;Xk(Qz%b-<+qm`ep!?JI(f>cVcEKcDXq8v#I)$+r;Xhm^`Q7{`nE&CO+g5$EvhP{ zJ`_r6X-iAg3#BboRiSFtKz~ha=U?{yCjzA`mFw*I^V)2v?4>e&^&p2}tQ+$0|G zouUWEG8xwY{k`7D-?QG0huiO8?R|NVZ9n<6cjG>r8Qgx-`|{!VSYr6Eo|@EOgMvvt zMPE>&=O;)Z2IwKWc!X6UHbD-N7#>!zouQ5J)A-n0*J^sEZL#J#-aKEr$eUe(QT4pp zZZ{$*Y4+;d$?>tv<6}@~u4xD9ojKg=Iu=_q+AfD3OttN%(PpcSuFGB0!loHkrrmcM zWp~NtLbFyqRi2-36f0+|wZeR%Rx1=wCCN?b9ZDt{j3p9Ey3lG>xmWe*sBmc9(;!QmMXgRPgqDOk3FYL4kxZ8@Ud$bS7<9CcxFQrgE$-T1W%^IGu*BR+77go@98~`Hr47&jc zLS-ta&NDj9j=D~qE=^p7(MXpgl%=*3Ibr+^v*3Bu4`W4d$}1zK_tL*mWBW6 zY-k6D$p7jF=PgnjG4@Otgp%M0Hf%SM7!7>A83Jl$3K7|LBn1Gx*C**4ngov<9}`!+By@003RFEEYK&5S(o-I(Bn+@*)I@Wz01e zVYDf74nOiJE*OrA4b+7<4F{OhBocarV)L_CoEGPHYVIukDG ztOWvfb!NI1j3km232dVxKyp3S!fha zm!suRh9wj#26+j3qvHj{v2F&(H8ZD{E6o!ch78U*qkHxle zsfr5P(he;w4|jU%kichTYC=ymX;jcs)(q}#4X*zR`q}yUeb)Qw=bgWPpsYg{_W%8i z4L-cy`}z);l5Ic!VrT1an)Uwrynpop8+`k;cl*bgG*sg!lkpEsHY8?KY`bi&*;;k6 zRGMwn&Mu-eDO76>@s6%!&tah}k&u&b7Uq{qjoH#%VQIeROT-3IzElk(Ka5tZ)aD)3 zV540;XP8!_P+Kt8IbpA}(&?pzMrppZP&!>}ETdJb5Ny=%(ElJ~HyplUIDFPI-rXJ0 z$q@~o3|n~uZg(}Ds~|ej<5jz>!-N$)5i)99B@n)3OvJ?~!xVwxJ`-kX-wORv9U(fv z)3f_Ef{3(ChJFJeZ0i)iB3p;*RZW!O3{LDD{DawfxZEnsn1CZ5|B_6n1Ir@K?Ku_+|Wy?cQ?gBmv_z@Qa8Hd=KPf4-Ha5%GXZx~w|Y7b*gVQk^( zzA&~>G(bKX6C2OaO_<2|+9SodI3NhgPk%=*-5UlPrQWFF?T`Ke{okAk=JqHNZ0Fal znZb<@Snuw&8QGpiDhZX4qqyI*-k+Q5fjRC^r#u(U}0G_)+z*@e}5Ha&@^IgP&#uv9jk zM?t~YQF-$it`Cx0$fR-;v@QpRV5!&X=ZNEF?JMRM~;XMVU52dVG!?rfW$+d zcA@6>5Bm7xP}sY5b0r@7@#Q0eU)=Eo{9#8#0>~CVF*^Q3CZ6|Rl#kwv$nntKh!heZ Ut1t1Q$R+xB2pUwg2M!$g4+ym?7XSbN literal 0 HcmV?d00001 diff --git a/character/atmage/crystalattack/po_crystalcore.nut b/character/atmage/crystalattack/po_crystalcore.nut new file mode 100644 index 0000000..3074ab1 --- /dev/null +++ b/character/atmage/crystalattack/po_crystalcore.nut @@ -0,0 +1,59 @@ + +function setCustomData_po_ATCrystalCore(obj,receiveData) +{ + if(!obj) + return; + local dmg = receiveData.readDword(); + local angle = receiveData.readFloat(); + local attackSpeedRate = receiveData.readWord(); + local index = receiveData.readWord(); + + if(index >= 3 && index <= 6) + setCurrentAnimationFromCutomIndex(obj,0); + else if(index > 6) + setCurrentAnimationFromCutomIndex(obj,1); + + + angle = sq_ToRadian(angle); + obj.sq_var.setInt(0,dmg); + sq_SetCustomRotate(obj,angle); + + if(attackSpeedRate != 100) { + local ani = sq_GetCurrentAnimation(obj); + if(ani) { + ani.setSpeedRate(attackSpeedRate.tofloat()); + } + } +} + + +function onKeyFrameFlag_po_ATCrystalCore(obj,flagIndex) +{ + if(!obj) + return false; + + local parentObj = obj.getParent(); + + if(parentObj) { + sq_SetCurrentAttackInfo(obj,obj.getDefaultAttackInfo()); + + local dmg = obj.sq_var.getInt(0); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, dmg); + + sq_SetMyShake(parentObj,3,120); + } + return true; +} + +function onEndCurrentAni_po_ATCrystalCore(obj) +{ + if(!obj) + return; + + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } +} + diff --git a/character/atmage/darkchange/dark_change.nut b/character/atmage/darkchange/dark_change.nut new file mode 100644 index 0000000000000000000000000000000000000000..a1fda328043855fc86feb4be036016c6f9e106e5 GIT binary patch literal 5731 zcmc&&ZEqXL5$;zC(0^DPNI(`>no^vgh-(l>@}w{lU%)%bFpA=EB3BZl)17*El&u&6 zf;b5fI4_Os##SrGa#JU$UCRNYq_Ha}zlNvNzv#^F-V2W>Id(r(vH{(`%+Ag{^UTan zPN)kNUDaew(Q9&NPOrWpH)j>SqsX<3x!?VUlqQc^0ed=hqoU1Pd_<4_{x9xs=sral!xE! z1h;=U`e;Ac{)_|#+W4=gY&Z z56SPROHzb2ZmiG|=vQoO;C6t4y+G z!S+)!{QlO_!EO$I@P7Cof-KnEgMca%|K7pj{)6E9dn9=D{_yTY*bU!@SML!2qt79V zGMBR>e!Mxn@m=uVPr?3yL@-o$zX%@P1x5V7?g_CV2~~o1B>3QC5v3`K!@t~zJ)kEp zE)PFpx|EOJf1FsJz&FD(_~m)vEqvNFTo!&L+FlhS$HWGNa1=h=9b6G31Z6BJjaG<` z9GQ)gD;A{OQI8y~c~C)67=D$vF!7 zn_xzICgZRw>V+AH?`8&ut1O#_yQ+2_N-c(>l2np@TPjIYuR_ejd}p=-Q47BXiOhE7 z_8ax8GBcx8HNDwtDiTqe3k|*2kuS{47nP1)X=%W6-2Z4S4!EA-tmzIGbP;-3957Y} z4}%xd)d&!dfUnLn0v9zD&sxL0QET|tNUt(A&>S?#|~F%Wl^tWM*{Q+FP+w@a z3~kIN; zGyzRV+yCG)`OR3a;K7zvenom^1S`M+O`8bz4f_&xA~A8WpCm;h)2Wajlj_(@Slxj& zp|bm>QeR0)O{wZZ;(30dXETJNU{H2ts4Ybr0=bDaCC(Q_A1d%ndWTB+%s9p4F=!A$^hlf`&84Ug z91^FiB-tUaFkf)Hrd~l{Q1~M%AQ{htdD_U{|KbVbIC(FaDvlF(LXyBPpFMH%1Od;IHZK@iZxcg- z_1-7uiDY(2qykR=0`eoJ)EwPnz1xgwtc*b)`hk_Gcw)#LL3#9y2U7y-){2Q`eF>{? oAm&H_zL-pf)B!yc^%`61s*Qq-^h3$*)y>i_@% literal 0 HcmV?d00001 diff --git a/character/atmage/darknessmantle/ap_atdarknessmantle_effect.nut b/character/atmage/darknessmantle/ap_atdarknessmantle_effect.nut new file mode 100644 index 0000000000000000000000000000000000000000..3cc859ef8e34bdce2214a4aad5e5a854f4a497e7 GIT binary patch literal 2187 zcmcIlL2uJA6z(;Z`X5YBsT3vU!Ugq!M&UG8F*E^}$V=RjkvPG2%Qm#r{=kHU5J-SP zNDQuA_KULZU+|utC0RPL1{Kv(?E2+!r`Mg%c%Y(`6Zy)&7lsdtCnvUiVF}Yn5yFn&5sW(xC4U{q)OFpQ;29{E&*5oJpBbu43l1>68Vk55PB~vWyCL zU(nYEyj-p>N6I%96$*kFc1u)&_Wuh zij_=l(Krh2DUBu5@%1$LG7OVPMG0#rdIJ9md*D7~RW=j72ceJ?PxEw=N^=&owO?&L zYiu1geR-MlCNPhAwKRrJG{F_{Sc$dHZN%GV8=iiU>k3Y!8(aG7T euV>%B)V>&PzBmgd82ZemPxSo^9eLR4bp8N4>dGAe literal 0 HcmV?d00001 diff --git a/character/atmage/darknessmantle/ap_atdarknessmantle_suck.nut b/character/atmage/darknessmantle/ap_atdarknessmantle_suck.nut new file mode 100644 index 0000000000000000000000000000000000000000..a1bc44e7d7c1d76a36e0cfadc438716a6db16a9c GIT binary patch literal 1612 zcmcIkT}#|R6y4V>?0>k;Qx+utfKrN}Exxn`rBA{#O(qhJlXPabEr>6>_)rcclY zc2JUF;-gjEZZ$VsO{<){{{hb`bXwT_>2a4(odBw&a>fgcC&ZJVmb! zUpbwMHYQ6PQLZS9a7wxb;u|sk_jib5X(6ftb;!mipK^XF>W(aU<(++PZ$qB zh{1OdC!g|z9r5`P#{HvglxBNhuXMgNdfmG->F}nPjZam7%3)e`x!Rq};RdEo+kK3= NX=MqmWN$SZjlTmqE#v?I literal 0 HcmV?d00001 diff --git a/character/atmage/darknessmantle/darknessmantle.nut b/character/atmage/darknessmantle/darknessmantle.nut new file mode 100644 index 0000000..d355a0a --- /dev/null +++ b/character/atmage/darknessmantle/darknessmantle.nut @@ -0,0 +1,347 @@ + +SUB_STATE_DARKNESSMANTLE_0 <- 0 +SUB_STATE_DARKNESSMANTLE_1 <- 1 +SUB_STATE_DARKNESSMANTLE_2 <- 2 +SUB_STATE_DARKNESSMANTLE_3 <- 3 +SUB_STATE_DARKNESSMANTLE_4 <- 4 +SUB_STATE_DARKNESSMANTLE_CASTING <- 5 + +function checkExecutableSkill_DarknessMantle(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_DARKNESSMANTLE); + + if(b_useskill) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_DARKNESSMANTLE_CASTING); // substate撮? + obj.sq_AddSetStatePacket(STATE_DARKNESSMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; + +} + +function checkCommandEnable_DarknessMantle(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) + { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_DARKNESSMANTLE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + + return true; + +} + +function onSetState_DarknessMantle(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + obj.getVar("flag").clear_vector(); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + + if(substate == SUB_STATE_DARKNESSMANTLE_CASTING) + { + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_DARKNESSMANTLE_CASTING); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_DARKNESSMANTLE); + // 议蝶? 楼紫蒂 评塭陛紫烟 扑姜 + // 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻. + // 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻. + local castTime = sq_GetCastTime(obj, SKILL_DARKNESSMANTLE, skillLevel); + local animation = sq_GetCurrentAnimation(obj); + local startTime = sq_GetFrameStartTime(animation, 16); + local speedRate = startTime.tofloat() / castTime.tofloat(); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + + sq_StartDrawCastGauge(obj, startTime, true); + + addElementalChain_ATMage(obj, ENUM_ELEMENT_DARK); + } + else if(substate == SUB_STATE_DARKNESSMANTLE_0) + { + obj.sq_PlaySound("MW_DMANTLE_READY"); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_DARKNESSMANTLE); + } + else if(substate == SUB_STATE_DARKNESSMANTLE_1) { + // SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_2) { + // SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_3) { + // SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_4) { + // SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function prepareDraw_DarknessMantle(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DARKNESSMANTLE_0) { + // SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_1) { + // SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_2) { + // SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_3) { + // SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_4) { + // SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProc_DarknessMantle(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + if(substate == SUB_STATE_DARKNESSMANTLE_0) { + // SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_1) { + // SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_2) { + // SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_3) { + // SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_4) { + // SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_DarknessMantle(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + + if(substate == SUB_STATE_DARKNESSMANTLE_0) { + if(!obj.getVar("flag").get_vector(0)) + { + if(frmIndex >= 4) + { + local skillLevel = obj.sq_GetSkillLevel(SKILL_DARKNESSMANTLE); + + local suckVel = obj.sq_GetIntData(SKILL_DARKNESSMANTLE, 0); // 0. 庄横渡晦朝 ? + // 0.匐擎晦遴 彰嫔 (<-100%->) 1.裔?奢问溘(%) 2.菩?溯涟 3.菩?虽楼溯涟 + local darkCircleRate = obj.sq_GetLevelData(SKILL_DARKNESSMANTLE, SKL_LVL_COLUMN_IDX_0, skillLevel); + local expAtkRate = obj.sq_GetBonusRateWithPassive(SKILL_DARKNESSMANTLE, STATE_DARKNESSMANTLE, SKL_LVL_COLUMN_IDX_1, 1.0); // 1.裔?奢问溘(%) + local slowLevel = obj.sq_GetLevelData(SKILL_DARKNESSMANTLE, SKL_LVL_COLUMN_IDX_2, skillLevel); + local slowTime = obj.sq_GetLevelData(SKILL_DARKNESSMANTLE, SKL_LVL_COLUMN_IDX_3, skillLevel); + + // 觼煎栖赝 嬴桧蛊 跷陛蒙机 + // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) + local sizeRate = obj.sq_GetIntData(SKILL_DARKNESSMANTLE, 0); // 0. 庄横渡晦朝 ? + + if(obj.isMyControlObject()) + { + local fireOffsetX = 200; + sq_BinaryStartWrite(); + sq_BinaryWriteDword(suckVel); // + sq_BinaryWriteDword(darkCircleRate); // + sq_BinaryWriteDword(expAtkRate); // + sq_BinaryWriteDword(slowLevel); // + sq_BinaryWriteDword(slowTime); // + // 觼煎栖赝 嬴桧蛊 跷陛蒙机 + // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) + local expSizeRate = obj.sq_GetIntData(SKILL_DARKNESSMANTLE, 1); // 1. 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%~) + sq_BinaryWriteDword(expSizeRate); // + obj.sq_SendCreatePassiveObjectPacket(24252, 0, fireOffsetX, 1, 0); + } + obj.getVar("flag").set_vector(0, 1); + } + + } + } + else if(substate == SUB_STATE_DARKNESSMANTLE_1) { + // SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_2) { + // SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_3) { + // SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_4) { + // SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_DarknessMantle(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) { + return; + } + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DARKNESSMANTLE_CASTING) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_DARKNESSMANTLE_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_DARKNESSMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_DARKNESSMANTLE_0) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(substate == SUB_STATE_DARKNESSMANTLE_1) { + // SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_2) { + // SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_3) { + // SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_4) { + // SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_DarknessMantle(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DARKNESSMANTLE_0) { + // SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_1) { + // SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_2) { + // SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_3) { + // SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_4) { + // SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_DarknessMantle(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + if(substate == SUB_STATE_DARKNESSMANTLE_0) { + // SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_1) { + // SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_2) { + // SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_3) { + // SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_4) { + // SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机 + } + // 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据 + sq_EndDrawCastGauge(obj); + +} + +function onAfterSetState_DarknessMantle(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DARKNESSMANTLE_0) { + // SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_1) { + // SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_2) { + // SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_3) { + // SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DARKNESSMANTLE_4) { + // SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机 + } + + +} + \ No newline at end of file diff --git a/character/atmage/darknessmantle/po_atdarknessmantle.nut b/character/atmage/darknessmantle/po_atdarknessmantle.nut new file mode 100644 index 0000000..1d318a9 --- /dev/null +++ b/character/atmage/darknessmantle/po_atdarknessmantle.nut @@ -0,0 +1,891 @@ + +function createBlackCrackPaticle(obj, x, y, z) +{ + if(!obj) + return; + + local particleCreater = obj.getVar().GetparticleCreaterMap("CrackBlackPtl", "PassiveObject/Character/Mage/Particle/ATDarknessMantleCrack.ptl", obj); + + particleCreater.Restart(0); + particleCreater.SetPos(x, y, z); + sq_AddParticleObject(obj, particleCreater); +} + + +function createCrackPiece(obj, index, x, y, z) +{ + if(!obj) + return null; + + local pooledObj = null; + + local cx = 0; + local cy = 0; + local cz = 0; + + + //obj.getVar("crackpos").push_vector(0); + //obj.getVar("crackpos").push_vector(0); + //obj.getVar("crackpos").push_vector(0); + //obj.getVar("crackpos").push_vector(0); + //obj.getVar("crackpos").push_vector(0); + //obj.getVar("crackpos").push_vector(0); + + if(index == 0) + { + //pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge.ani", false, x, y, z); + cx = x - 30; + cy = y + 2; + cz = z + 174; + pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz); + } + else if(index == 1) + { + //pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_1.ani", false, x, y, z); + cx = x + 45; + cy = y + 1; + cz = z + 118; + pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz); + } + else if(index == 2) + { + //pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_2.ani", false, x, y, z); + cx = x + 8; + cy = y + 1; + cz = z + 50; + pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz); + } + + local vectorIndex = index * 2; + obj.getVar("crackpos").set_vector(vectorIndex + 0, cx); + obj.getVar("crackpos").set_vector(vectorIndex + 1, cz); + + + + return pooledObj; +} + +function createDarkBall(obj, x, y, z) +{ + local pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/darkball/09_darkball_0.ani", false, x, y, z); + + return pooledObj; +} + + +function createFrontFirstDarknessArea(obj, x, y, z, widthRate, heightRate) +{ + local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/05_aura_front_normal_1.ani", false, widthRate, heightRate, x, y, z); + + return pooledObj; +} + +function createBackFirstDarknessArea(obj, x, y, z, widthRate, heightRate) +{ + local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/01_aura_back_normal_1.ani", false, widthRate, heightRate, x, y, z); + + return pooledObj; +} + +function createFrontFirstSDarknessArea(obj, x, y, z, widthRate, heightRate) +{ + local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/05_aura_front_normal_2.ani", false, widthRate, heightRate, x, y, z); + + return pooledObj; +} + +function createBackFirstSDarknessArea(obj, x, y, z, widthRate, heightRate) +{ + local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/01_aura_back_normal_2.ani", false, widthRate, heightRate, x, y, z); + + return pooledObj; +} + + + +function createFrontLoopDarknessArea(obj, x, y, z, widthRate, heightRate) +{ + local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/05_aura_front_normal_1.ani", false, widthRate, heightRate, x, y, z); + + return pooledObj; +} + +function createBackLoopDarknessArea(obj, x, y, z, widthRate, heightRate) +{ + local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/01_aura_back_normal_1.ani", false, widthRate, heightRate, x, y, z); + + return pooledObj; +} + +function createFrontLoopSDarknessArea(obj, x, y, z, widthRate, heightRate) +{ + local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/05_aura_front_normal_2.ani", false, widthRate, heightRate, x, y, z); + + return pooledObj; +} + +function createBackLoopSDarknessArea(obj, x, y, z, widthRate, heightRate) +{ + local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/01_aura_back_normal_2.ani", false, widthRate, heightRate, x, y, z); + + return pooledObj; +} + + +function destroyCrackObject(obj) +{ + if(!obj) + return; + + local objListSize = obj.getVar("crack").get_obj_vector_size(); + + print(" crack objListSize:" + objListSize); + for(local i =0;i= 1) + { + local expVectorIndex = i - 1; + + if(!obj.getVar("crackexp").get_vector(expVectorIndex)) + { + sq_SetMyShake(obj, 2, 100); + + local ox = sq_GetXPos(obj); + local oy = y + 1; + local oz = sq_GetZPos(obj); + + local crackPooledObj = null; + + if(expVectorIndex == 0) + crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge.ani", false, ox, oy, oz); + else if(expVectorIndex == 1) + crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_1.ani", false, ox, oy, oz); + else if(expVectorIndex == 2) + crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_2.ani", false, ox, oy, oz); + + obj.getVar("crack").push_obj_vector(crackPooledObj); + + local vectorIndex = (expVectorIndex) * 2; + // + local cx = obj.getVar("crackpos").get_vector(vectorIndex + 0); + local cz = obj.getVar("crackpos").get_vector(vectorIndex + 1); + // + local particleCreater = obj.getVar().GetparticleCreaterMap("ATDarknessMantlePtl", "PassiveObject/Character/Mage/Particle/Appear.ptl", obj); + // + particleCreater.Restart(0); + particleCreater.SetPos(cx, y + 5, cz); + + sq_AddParticleObject(obj, particleCreater); + // + createBlackCrackPaticle(obj, cx, y + 4, cz); + // + obj.getVar("crackexp").set_vector(expVectorIndex, 1); + } + } + + if(frmIndex >= 1 && frmIndex < 4) + { + vib = true; + } + } + + + + + local cx = obj.getVar("darkcircle").get_vector(0); + + if(vib) + { + if(x <= cx) + { + sq_setCurrentAxisPos(circle_obj, 0, cx + 2); + setPosXCrackObject(obj, cx + 2); + } + else + { + sq_setCurrentAxisPos(circle_obj, 0, cx - 2); + setPosXCrackObject(obj, cx - 2); + } + } + else + { + if(x != cx) + { + sq_setCurrentAxisPos(circle_obj, 0, cx); + setPosXCrackObject(obj, cx); + } + } + + +} + +function setCustomData_po_ATDarknessMantle(obj, reciveData) +{ + + if(!obj) return; + + local suckVel = reciveData.readDword(); // 0. 庄横渡晦朝 ? + // 0.匐擎晦遴 彰嫔 (<-100%->) 1.裔?奢问溘(%) 2.菩?溯涟 3.菩?虽楼溯涟 + local darkCircleRate = reciveData.readDword(); // 横菸怃赝 彰嫔 (100%) + local expAtkRate = reciveData.readDword(); // 1.裔?奢问溘(%) + local slowLevel = reciveData.readDword(); // 菩? 溯涟 + local slowTime = reciveData.readDword(); // 菩? 虽楼卫除 + local sizeRate = reciveData.readDword(); // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) + + + // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) + obj.getVar("sizerate").clear_vector(); + obj.getVar("sizerate").push_vector(sizeRate); + + obj.getVar("attack").clear_vector(); + obj.getVar("attack").push_vector(suckVel); + obj.getVar("attack").push_vector(darkCircleRate); + obj.getVar("attack").push_vector(expAtkRate); + obj.getVar("attack").push_vector(slowLevel); + obj.getVar("attack").push_vector(slowTime); + + obj.getVar("flag").clear_vector(); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(PASSIVEOBJ_SUB_STATE_0); + + + obj.getVar("state").clear_ct_vector(); + obj.getVar("state").push_ct_vector(); + + obj.getVar("crackexp").clear_vector(); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + + obj.getVar("crackpos").clear_vector(); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + + obj.getVar("crack").clear_obj_vector(); + + obj.getVar("create").clear_vector(); + obj.getVar("create").push_vector(1); + + + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); +} + +function setState_po_ATDarknessMantle(obj, state, datas) +{ + if(!obj) return; + + local passiveState = state; + + obj.getVar("flag").clear_vector(); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + + obj.getVar("crackexp").clear_vector(); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + obj.getVar("crackexp").push_vector(0); + + obj.getVar("crackpos").clear_vector(); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + obj.getVar("crackpos").push_vector(0); + + obj.getVar("state").set_vector(0, passiveState); + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + + local t = obj.getVar("state").get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + + //obj.getVar("attack").push_vector(suckVel); + //obj.getVar("attack").push_vector(darkCircleRate); + //obj.getVar("attack").push_vector(expAtkRate); + //obj.getVar("attack").push_vector(slowLevel); + //obj.getVar("attack").push_vector(slowTime); +//.tointeger() +//.tofloat() + + local area100Rate = obj.getVar("attack").get_vector(VECTOR_FLAG_1); + + local areaRate = area100Rate.tofloat() / 100.0; + + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + local po1 = createBackFirstDarknessArea(obj, x, y - 25, 0, areaRate, areaRate); + local po2 = createFrontFirstDarknessArea(obj, x, y + 50, 0, areaRate, areaRate); + local po3 = createBackFirstSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate); + local po4 = createFrontFirstSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate); + + destroyObject(obj); + + + + obj.getVar().push_obj_vector(po1); + obj.getVar().push_obj_vector(po2); + obj.getVar().push_obj_vector(po3); + obj.getVar().push_obj_vector(po4); + + local currentAni = sq_GetCurrentAnimation(obj); + + if(currentAni) + { + //currentAni.setImageRateFromOriginal(areaRate, areaRate); + currentAni.applyBoundingBoxRate(areaRate,0,0); // + } + + initGetVarTimer(obj, 1, 30, -1); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + //local po1 = createBackLoopDarknessArea(obj, x, y - 25, 0, areaRate, areaRate); + //local po2 = createFrontLoopDarknessArea(obj, x, y + 50, 0, areaRate, areaRate); + //local po3 = createBackLoopSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate); + //local po4 = createFrontLoopSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate); + + local ani = obj.getCustomAnimation(0); + + if(ani) + obj.setCurrentAnimation(ani); + + //destroyObject(obj); +// + //local loopAni = po2.getCurrentAnimation(); + //local size = sq_GetAniRealImageSize(loopAni, ENUM_DIRECTION_RIGHT); + // + //obj.getVar("attack").push_vector(size); +// + //obj.getVar().push_obj_vector(po1); + //obj.getVar().push_obj_vector(po2); + //obj.getVar().push_obj_vector(po3); + //obj.getVar().push_obj_vector(po4); + + local currentAni = sq_GetCurrentAnimation(obj); + + if(currentAni) + { + currentAni.applyBoundingBoxRate(areaRate,0,0); // + } + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + local po1 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/01_aura_back_normal_1.ani", true, areaRate, areaRate, x, y - 25, 0); + local po2 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/05_aura_front_normal_1.ani", true, areaRate, areaRate, x, y + 50, 0); + local po3 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/01_aura_back_normal_2.ani", true, areaRate, areaRate, x, y - 22, 0); + local po4 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/05_aura_front_normal_2.ani", true, areaRate, areaRate, x, y + 20, 0); + + destroyObject(obj); + + local ani = obj.getCustomAnimation(1); + + if(ani) + obj.setCurrentAnimation(ani); + + + + local p5 = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Suck/07_absorb_normal_50r.ani", false, x + 3, y + 10, 110); + obj.getVar().push_obj_vector(p5); + + local parentObj = obj.getParent(); + + // 庄横菟桧朝 横?蛤虽 陛翕 + local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_DARKNESSMANTLE, false, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut", false); + + + local suckVel = obj.getVar("attack").get_vector(VECTOR_FLAG_0); + local range = obj.getVar("attack").get_vector(VECTOR_FLAG_5); + + if(appendage) + { + //appendage.sq_SetValidTime(3000); + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(appendage, parentObj, obj); + + local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); + // + if(!auraAppendage) + auraAppendage = appendage.sq_AddAuraMaster("auraMaster", parentObj, obj, 1200, 18, 5, 0); + + if(auraAppendage) + { + auraAppendage.setAttractionInfo(suckVel, suckVel, range, 100); + } + // + } + + + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_3) + { + local cx = x + 3; + local cy = y + 10; + local cz = 110; + + local poBall = createDarkBall(obj, cx, cy, cz); + + destroyObject(obj); + + //4183 + //6515 + + obj.getVar().push_obj_vector(poBall); // 0 + + obj.getVar("darkcircle").clear_vector(); + + obj.getVar("darkcircle").push_vector(cx); + obj.getVar("darkcircle").push_vector(cy); + obj.getVar("darkcircle").push_vector(cz); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_4) + { + local cx = x; + local cy = y + 12; + local cz = 0; + + local expStartObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/16_exp_start.ani", false, cx, cy, cz); + obj.getVar().push_obj_vector(expStartObj); // 4 + } + + local atk = sq_GetCurrentAttackInfo(obj); + + if(atk) + { + local slowLevel = obj.getVar("attack").get_vector(VECTOR_FLAG_3); + local slowTime = obj.getVar("attack").get_vector(VECTOR_FLAG_4); + + sq_SetChangeStatusIntoAttackInfo(atk, 0, ACTIVESTATUS_SLOW, 100, slowLevel, slowTime); + } + + +} + + +function allDestroy(obj) +{ + if(!obj) + return; + + destroyObject(obj); + destroyCrackObject(obj); + + local parentObj = obj.getParent(); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut"); + + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } +} + +function destroy_po_ATDarknessMantle(obj) +{ + destroyObject(obj); + destroyCrackObject(obj); + + local parentObj = obj.getParent(); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut"); +} + +function reset_po_ATDarknessMantle(obj) +{ +} + +function procAppend_po_ATDarknessMantle(obj) +{ + if(!obj) return; + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + local passiveState = obj.getVar("state").get_vector(0); + + local objListSize = obj.getVar().get_obj_vector_size(); + + local pAni = sq_GetCurrentAnimation(obj); + local frmIndex = sq_GetAnimationFrameIndex(pAni); + //local currentT = sq_GetCurrentTime(pAni); + //local currentT = obj.getStateTimer().Get(); + + + local t = obj.getVar("state").get_ct_vector(0); + local currentT = 0; + + if(t) + { + currentT = t.Get(); + } + + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + if(frmIndex > 1) + procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/mmagic_dark.ptl", x, y, z); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + if(objListSize > 0) + { + local p1 = obj.getVar().get_obj_vector(0); + local p2 = obj.getVar().get_obj_vector(1); + local p3 = obj.getVar().get_obj_vector(2); + local p4 = obj.getVar().get_obj_vector(3); + } + + if(currentT > 1000) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + else + { + procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/mmagic_dark.ptl", x, y, z); + } + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + local darkCircleObj = obj.getVar().get_obj_vector(0); // 2 + + local ani = sq_GetCurrentAnimation(darkCircleObj); + + if(sq_IsEnd(ani)) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_3, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_3) + { + if(currentT > 20) + { + local crack0 = obj.getVar().get_obj_vector(1); + local crack1 = obj.getVar().get_obj_vector(2); + local crack2 = obj.getVar().get_obj_vector(3); + + local cy = y + 11; + + if(!obj.getVar("flag").get_vector(0)) + { + local p6 = createCrackPiece(obj, 0, x, cy, 0); + obj.getVar().push_obj_vector(p6); // 1 + obj.getVar("flag").set_vector(0, 1); + } + + if(obj.getVar("flag").get_vector(0) == 1) + { + if(!obj.getVar("flag").get_vector(1)) + { + local ani = sq_GetCurrentAnimation(crack0); + local frmIndex = sq_GetAnimationFrameIndex(ani); + + if(frmIndex >= 3) + { + local p6 = createCrackPiece(obj, 1, x, cy, 0); + obj.getVar().push_obj_vector(p6); // 2 + obj.getVar("flag").set_vector(1, 1); + } + } + } + + if(obj.getVar("flag").get_vector(1) == 1) + { + if(!obj.getVar("flag").get_vector(2)) + { + local ani = sq_GetCurrentAnimation(crack1); + local frmIndex = sq_GetAnimationFrameIndex(ani); + + if(frmIndex >= 3) + { + local p6 = createCrackPiece(obj, 2, x, cy, 0); + obj.getVar().push_obj_vector(p6); //3 + obj.getVar("flag").set_vector(2, 1); + } + } + } + + if(!obj.getVar("flag").get_vector(3)) + { + local ani = sq_GetCurrentAnimation(crack2); + local frmIndex = sq_GetAnimationFrameIndex(ani); + + if(frmIndex >= 3) + { + obj.getVar("flag").set_vector(3, 1); + } + } + + procCrackDarknessCircle(obj); + + local objListSize = obj.getVar().get_obj_vector_size(); + + if(objListSize >= 4) + { + local isEndAnimation = true; // 敕翮 拥栖诡桧暮桧 部陬朝虽 羹觼 + + for(local i =1;i= 2) + { + local fScreen = sq_flashScreen(obj,0,100,0,200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.getVar("flag").set_vector(1, 1); + } + } + + if(isEnd) + { + print(" exp:" + obj.getVar("flag").get_vector(0)); + if(!obj.getVar("flag").get_vector(0)) + { + destroyCrackObject(obj); + + if(obj.isMyControlObject()) + { + local expAtkRate = obj.getVar("attack").get_vector(VECTOR_FLAG_2); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(expAtkRate); // + // 觼煎栖赝 嬴桧蛊 跷陛蒙机 + // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) + local size100Rate = 100; + + if(obj.getVar("sizerate").get_vector(0) > 0) + { + size100Rate = obj.getVar("sizerate").get_vector(0); + } + + sq_BinaryWriteDword(size100Rate); // + /////////////////////////////////// + + + sq_SendCreatePassiveObjectPacket(obj, 24253, 0, 0, 1, 0, obj.getDirection()); + } + obj.getVar("flag").set_vector(0, 1); + allDestroy(obj); + } + } + } + else + { + allDestroy(obj); + } + + } + +} + +function onChangeSkillEffect_po_ATDarknessMantle(obj, skillIndex, reciveData) +{ + + if(!obj) return; + +} + +function onDestroyObject_po_ATDarknessMantle(obj, object) +{ + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATDarknessMantle(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATDarknessMantle(obj) +{ + if(!obj) return; + + local passiveState = obj.getVar("state").get_vector(0); + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + local area100Rate = obj.getVar("attack").get_vector(VECTOR_FLAG_1); + + local areaRate = area100Rate.tofloat() / 100.0; + + local po1 = createBackLoopDarknessArea(obj, x, y - 25, 0, areaRate, areaRate); + local po2 = createFrontLoopDarknessArea(obj, x, y + 50, 0, areaRate, areaRate); + local po3 = createBackLoopSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate); + local po4 = createFrontLoopSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate); + + destroyObject(obj); + + local loopAni = po2.getCurrentAnimation(); + local size = sq_GetAniRealImageSize(loopAni, ENUM_DIRECTION_RIGHT); + + obj.getVar("attack").push_vector(size); + + obj.getVar().push_obj_vector(po1); + obj.getVar().push_obj_vector(po2); + obj.getVar().push_obj_vector(po3); + obj.getVar().push_obj_vector(po4); + + + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + } + + +} + +function onAttack_po_ATDarknessMantle(obj, damager, boundingBox, isStuck) +{ + if(!obj) return 0; + + local pChr = obj.getTopCharacter(); + + if(!pChr) return 0; + + local active_damager = sq_GetCNRDObjectToActiveObject(damager); + + if(!active_damager) + return 0; + + CNSquirrelAppendage.sq_AppendAppendage(damager, damager, SKILL_DARKNESSMANTLE, + false, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_effect.nut", true); + + + + return 0; +} diff --git a/character/atmage/darknessmantle/po_atdarknessmantleexp.nut b/character/atmage/darknessmantle/po_atdarknessmantleexp.nut new file mode 100644 index 0000000..b4dcbb0 --- /dev/null +++ b/character/atmage/darknessmantle/po_atdarknessmantleexp.nut @@ -0,0 +1,91 @@ + + +function setCustomData_po_ATDarknessMantleExp(obj, reciveData) +{ + if(!obj) return; + + local expAttackRate = reciveData.readDword(); // 横菸怃赝 ?湘 + local sizeRate = reciveData.readDword(); // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) + + + obj.getVar("flag").clear_vector(); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, expAttackRate); + + local pooledObj = null; + + pooledObj = sq_CreateDrawOnlyObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/exp/3_exp_shock_normal_1.ani", ENUM_DRAWLAYER_BOTTOM, true); + + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + + local fScreen = sq_flashScreen(obj,0,80,0,80, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_addFlashScreen(fScreen, 0, 240, 240, 150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + + sq_SetMyShake(obj,4,200); + obj.sq_PlaySound("MW_DMANTLE"); + + // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) + local currentAni = sq_GetCurrentAnimation(obj); + + if(currentAni) + { + sizeRate = sizeRate.tofloat() / 100.0; + currentAni.Proc(); + currentAni.setImageRateFromOriginal(sizeRate, sizeRate); + + sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); + } + + +} + +function setState_po_ATDarknessMantleExp(obj, state, datas) +{ + + if(!obj) return; + +} + +function procAppend_po_ATDarknessMantleExp(obj) +{ + + if(!obj) return; + +} + +function onChangeSkillEffect_po_ATDarknessMantleExp(obj, skillIndex, reciveData) +{ + + if(!obj) return; + +} + +function onDestroyObject_po_ATDarknessMantleExp(obj, object) +{ + + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATDarknessMantleExp(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATDarknessMantleExp(obj) +{ + if(!obj) return; + + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } +} diff --git a/character/atmage/diehard/ap_atmage_diehard.nut b/character/atmage/diehard/ap_atmage_diehard.nut new file mode 100644 index 0000000..0c50966 --- /dev/null +++ b/character/atmage/diehard/ap_atmage_diehard.nut @@ -0,0 +1,472 @@ + + +STATE_SLOW_HEAL <- 0 /// 茧茧? ?犒酝 +STATE_REBIRTH_READY_DOWN <- 1 /// HP 0桧 脾. 斜楝釭 嬴霜 DOWN 擎 寰腑挤 +STATE_REBIRTH_DOWN <- 2 /// HP 0桧 肾坚 棻遴腑挤. +STATE_REBIRTH_DELAY <- 3 /// 睡? 裁溯桧 +STATE_DIEHARD_DIE <- 4 // 棻桧 + +REBIRTH_STATE_NONE <- 0 +REBIRTH_STATE_ANGEL_DOWN <- 1 +REBIRTH_STATE_EFFECT <- 2 +REBIRTH_STATE_END <- 3 + +VECTOR_I_STATE <- 0 +VECTOR_I_FLAG <- 1 +VECTOR_I_REBIRTH_STATE <- 2 +VECTOR_I_REBIRTH_TIME <- 3 + + +GHOST_TIME <- 2000 +ANGEL_DOWN_TIME <- 1000 +DOWN_PAUSE_TIME <- 100 + + +function sq_AddFunctionName(appendage) +{ + appendage.sq_AddFunctionName("proc", "proc_appendage_atmage_diehard") + appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_atmage_diehard") + appendage.sq_AddFunctionName("onStart", "onStart_appendage_atmage_diehard") + appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_atmage_diehard") + appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_atmage_diehard") + appendage.sq_AddFunctionName("onSetHp", "onSetHp_appendage_atmage_diehard") +} + + +function sq_AddEffect(appendage) +{ +} + +function pushSlowHeal(appendage) +{ + if(!appendage) + { + return; + } + + local parentObj = appendage.getParent(); + + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + + if(sqrChr) + { + local moduleType = sq_GetCurrentModuleType(); + + local recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_2); // 橾奁湍瞪 + + //print(" moduleType:" + moduleType); + + local stage = sq_GetGlobaludpModuleStage(); + + local dungeon = sq_GetDungeonByStage(stage); + + local isDimensionDungeon = sq_IsDimensionDungeon(dungeon); // 桧啗湍瞪樯虽 + local isDespairTower = sq_IsDespairTower(dungeon); // 瞰蜂暧 鳖樯虽 + local isAncientDungeon = sq_IsAncientDungeon(dungeon); // 坚渠湍瞪樯虽 + + if(isDimensionDungeon) + { // 桧啗湍瞪桧塭贼.. + //print( " DimensionDungeon"); + recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_3); + } + else if(isDespairTower) + { // 瞰蜂暧 鳖桧塭贼.. + //print( " DespairTower"); + recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_4); + } + else if(isAncientDungeon) + {// 坚渠湍蟒 + recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_LVL_COLUMN_IDX_6); + } + else + { + if(moduleType == MODULE_TYPE_WARROOM) + { // 瞪爵虽羲 + //print( " WARROOM"); + recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_5); + } + else if(moduleType == MODULE_TYPE_DEAD_TOWER) + { // 饵鳖 + //print( " DEAD_TOWER"); + recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_4); + } + } + + // 鼻鹧桧鼻桧 勘溜棻贼 鼻鹧桧鼻击 ?横鄹栖棻. 酝絮, 轿? + if(parentObj.isMyControlObject()) + { + sq_ReleaseActiveStatus(parentObj, ACTIVESTATUS_POISON); + sq_ReleaseActiveStatus(parentObj, ACTIVESTATUS_BLEEDING); + } + + //print(" recoverTime:" + recoverTime); + sq_SendMessage(parentObj, OBJECT_MESSAGE_GHOST, 1, 0); + sq_PostDelayedMessage(parentObj, OBJECT_MESSAGE_GHOST, 0, 0, 8000); + + appendage.getVar("diehard").set_vector(0, 1); // 碳饵蒂 ?廓 橾横陬历朝虽 羹觼?朝 ?楚斜殓栖棻. + local t = appendage.sq_var.get_ct_vector(0); + + if(t) + { + t.Reset(); + t.Start(10000,0); + } + + + local healAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, SKILL_DIEHARD, + true, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut", false); + + if(healAppendage) + { + local skillLevel = sqrChr.sq_GetSkillLevel(SKILL_DIEHARD); + healAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_DIEHARD, skillLevel); + + print( " recoverTime:" + recoverTime); + healAppendage.sq_SetValidTime(recoverTime); + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(healAppendage, sqrChr, sqrChr); + + // + healAppendage.getVar("changehp").clear_vector(); + healAppendage.getVar("changehp").push_vector(sqrChr.getHpMax()); + healAppendage.getVar("changehp").push_vector(sqrChr.getMpMax()); + //print(" recoverTime:" + recoverTime); + healAppendage.getVar("changehp").push_vector(recoverTime); + healAppendage.getVar("changehp").push_vector(0); + healAppendage.getVar("changehp").push_vector(0); + + //local change_appendage = healAppendage.sq_GetCNChangeHp("changehp"); + + //if(!change_appendage) + { + //2. 橾钦湍瞪 ?犒卫除 (1/1000蟾) + //3. 桧啗湍瞪 ?犒卫除 (1/1000蟾) + //4. 鳖 ?犒卫除 (1/1000蟾) + //5. 瞪爵虽羲 ?犒卫除 (1/1000蟾) + // MODULE_TYPE_WARROOM // 瞪爵虽羲 + // MODULE_TYPE_MAIN_GAME // 橾奁湍瞪(桧啗 ??) + // MODULE_TYPE_PVP // 念潍 + // MODULE_TYPE_FAIR_PVP // 奢念 + + //local recoverHp_ = sqrChr.getHpMax(); + + //4000 //2. 橾钦湍瞪 ?犒卫除 (1/1000蟾) + //4000 //3. 桧啗湍瞪 ?犒卫除 (1/1000蟾) + //4000 //4. 鳖 ?犒卫除 (1/1000蟾) + //4000 //5. 瞪爵虽羲 ?犒卫除 (1/1000蟾) + + //change_appendage = healAppendage.sq_AddCNChangeHp("changehp",parentObj, parentObj, 0, + //recoverHp_.tofloat(), recoverTime); + } + } + } + +} + + + + +function proc_appendage_atmage_diehard(appendage) +{ + if(!appendage) { + return; + } + + local parentObj = appendage.getParent(); + if(!parentObj) + { + appendage.setValid(false); + return; + } + + local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE); + + + if(state_ == STATE_SLOW_HEAL) + { + if(parentObj.isGhostMode()) + { // 鼠瞳虽楼 鼻鹧塭贼.. + if (parentObj.getState() != STATE_DIEHARD) + { + if(appendage.getVar("diehard").get_vector(0) == 1) + { + local t = appendage.sq_var.get_ct_vector(0); + + local ghostCurrentTime = t.Get(); + + if(ghostCurrentTime > 8000) + { + sq_SendMessage(parentObj, OBJECT_MESSAGE_GHOST, 0, 0); + appendage.getVar("diehard").set_vector(0, 0); + } + } + } + } + return; + } + + + local currentT = appendage.getTimer().Get(); + local rebirthTime_ = appendage.sq_var.get_vector(VECTOR_I_REBIRTH_TIME); + + + //print(" proc_appendage_atmage_diehard Ln:" + 163); + ////////////////////////////////////////////////////////////////////////////// + if (state_ == STATE_REBIRTH_READY_DOWN) + { + // 棻遴 渠晦酝 + ////print(" state_ == STATE_REBIRTH_READY_DOWN"); + if (parentObj.getState() == STATE_DIEHARD) + { + appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_DOWN); + // 陈嬴陛朝 翕寰 棻艇 蹂模缣 暧?怃 寞?嫡虽强紫烟 鼠瞳卫除 籀葬 + } + else if (parentObj.getSendState() != STATE_DIEHARD && + parentObj.getSendState() != STATE_HOLD && parentObj.getState() != STATE_HOLD && + parentObj.getSendState() != STATE_DOWN && parentObj.getState() != STATE_DOWN && + parentObj.getSendState() != STATE_DAMAGE && parentObj.getState() != STATE_DAMAGE + ) + { + if (parentObj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, SUB_STATE_DIEHARD_0); + parentObj.addSetStatePacket(STATE_DIEHARD, pIntVec, STATE_PRIORITY_FORCE, false, ""); + + parentObj.flushSetStatePacket(); + } + } + else + { + ////print(" it is hold died"); + ////print(" state_hold"); + } + } + else if (state_ == STATE_REBIRTH_DOWN) + { + //print(" proc_appendage_atmage_diehard Ln:" + 201); + ////print(" state_ == STATE_REBIRTH_DOWN"); + // 棻遴 鼻鹧 + if (parentObj.getState() == STATE_DIEHARD) + { + local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + + if(sqrChr) + { + if(sqrChr.getSkillSubState() == SUB_STATE_DIEHARD_1) + { + // 棻遴缣怃 ?犒腑棻贼 : 唳霜 籀葬 + // 鼠瞳卫除 籀葬 + // 橾姜卫除 唳霜 + //sq_SetPause(parentObj, PAUSETYPE_OBJECT, DOWN_PAUSE_TIME); + + + // 睡? 卫除 荡潍 + local rebirthTime = appendage.getTimer().Get() + GHOST_TIME; + appendage.sq_var.set_vector(VECTOR_I_REBIRTH_TIME, rebirthTime); + + appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_DELAY); + appendage.sq_var.set_vector(VECTOR_I_REBIRTH_STATE, REBIRTH_STATE_END); + } + } + } + } + else if (state_ == STATE_REBIRTH_DELAY) + { + // 睡? 裁溯桧 + if (currentT >= rebirthTime_) + { + // HP ?犒 + // ?廓 ?犒腑棻贼 夥煎 谦猿 + + print(" go rebirth"); + appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_SLOW_HEAL); + appendage.sq_var.set_vector(VECTOR_I_REBIRTH_STATE, STATE_SLOW_HEAL); // state + + } + } + + ////////////////////////////////////////////////////////////////////////////// + + +} + + +function onStart_appendage_atmage_diehard(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + + appendage.sq_var.clear_timer_vector(); + appendage.sq_var.push_timer_vector(); + appendage.sq_var.push_timer_vector(); + + //VECTOR_I_STATE <- 0 + //VECTOR_I_REBIRTH_STATE <- 1 + //VECTOR_I_REBIRTH_TIME <- 2 + appendage.sq_var.clear_vector(); + appendage.sq_var.push_vector(STATE_SLOW_HEAL); // state + appendage.sq_var.push_vector(STATE_SLOW_HEAL); // state + appendage.sq_var.push_vector(0); // state + appendage.sq_var.push_vector(0); // state + + local t = appendage.sq_var.get_timer_vector(0); + t.setParameter(400, -1); + t.resetInstant(0); + + local t2 = appendage.sq_var.get_timer_vector(1); + t2.setParameter(500, -1); + t2.resetInstant(0); + + appendage.sq_var.clear_ct_vector(); + appendage.sq_var.push_ct_vector(); + + local time = appendage.sq_var.get_ct_vector(0); + time.Reset(); + time.Start(10000,0); + + appendage.getVar("diehard").clear_vector(); + appendage.getVar("diehard").push_vector(0); // 碳饵蒂 ?廓 橾横陬历朝虽 羹觼?朝 ?楚斜殓栖棻. + + local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); + + if(sqrObj) + { + } +} + + +function prepareDraw_appendage_atmage_diehard(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + + +function onSetHp_appendage_atmage_diehard(appendage, hp, attacker) +{ + if(!appendage) + return hp; + + + local obj = appendage.getParent(); + + if(!obj) + return hp; + + local org_hp = -1; + + + if (hp <= 0) + { + // 湍瞪? 蹂羶饵? 12.03.16 + // 碳饵蒂 鼠卫?坚 钦寞缣 避横帼溥捡 ?朝 牖除桧 毡棻. 桧匙缣 渠? 籀葬蒂 嫔? + // attacker (奢问濠)暧 getCurrentAttackInfo 掘亵羹缣 + // bool isIgnoreDieHard_; /// 碳饵 ?卫粽 蝶鉴 鼠卫 罹睡 (?问卫 夥煎 阔饵) + // 渗热蒂 跷陛?艘棻. + // 桧匙桧 true塭贼.. 夥煎 避横捡?匙 + if(attacker) + { + local attackInfo = sq_GetCurrentAttackInfo(attacker); + + if(attackInfo) + { + if(attackInfo.isIgnoreDieHard_) + return 0; + } + } + + local isRelayTimeOut = sq_isSendTimeOutPacket(); // 念潍 莴溯桧 颤歜嬴醒桧塭贼 夥煎 避横捡 ?栖棻. + + // 念潍 莴溯桧 颤歜嬴醒桧塭贼 夥煎 避横捡 ?栖棻. + if (isRelayTimeOut) + return 0; + + + + + + // HP蒂 1煎 坚姜?坚 STATE 渗? + local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj); + + if(!sqrChr) + return hp; + + + if(!sq_IsInBattle()) + { // 瞪瘫酝桧 嬴栖塭贼 + return hp; + } + + + local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE); + + if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) // + { + //1. 饵蜂卫 蟾晦 ?犒肾朝 HP绿徽(%) + local recoverHpRate = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_1); + local maxHp = obj.getHpMax(); + + local currentHp = maxHp.tofloat() * (recoverHpRate.tofloat() / 100); + + //print(" hp:" + currentHp); + org_hp = currentHp.tointeger(); + + pushSlowHeal(appendage); + + appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_READY_DOWN); + + print(" convert hp:" + org_hp); + } + else + { + if(state_ == STATE_REBIRTH_READY_DOWN || sqrChr.getState() == STATE_DIEHARD) + { + //print( " state_:" + state_ + " sqrChr.getState():" + sqrChr.getState() + " org_hp:" + org_hp); + org_hp = 1; + } + } + } + + //print(" hp:" + org_hp); + return org_hp; +} + + + + + +function onEnd_appendage_atmage_diehard(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); + + if(sqrObj) + { + } + +} + +// 横渐螳 陕撩 渗褐暧 部睡碟 +function isEnd_appendage_atmage_diehard(appendage) +{ + if(!appendage) + return false; + + local T = appendage.getTimer().Get(); + + return false; +} \ No newline at end of file diff --git a/character/atmage/diehard/ap_atmage_diehardslowheal.nut b/character/atmage/diehard/ap_atmage_diehardslowheal.nut new file mode 100644 index 0000000..646e021 --- /dev/null +++ b/character/atmage/diehard/ap_atmage_diehardslowheal.nut @@ -0,0 +1,250 @@ + + + +function sq_AddFunctionName(appendage) +{ + appendage.sq_AddFunctionName("proc", "proc_appendage_atmage_diehard_heal") + appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_atmage_diehard_heal") + appendage.sq_AddFunctionName("onStart", "onStart_appendage_atmage_diehard_heal") + appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_atmage_diehard_heal") + appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_atmage_diehard_heal") + appendage.sq_AddFunctionName("onSetHp", "onSetHp_appendage_atmage_diehard_heal") +} + + +function sq_AddEffect(appendage) +{ + if(!appendage) + return; + appendage.sq_AddEffectFront("Character/Mage/Effect/Animation/ATDieHard/02_looping_dodge.ani"); +} + + + + +function proc_appendage_atmage_diehard_heal(appendage) +{ + if(!appendage) { + return; + } + + //print(" proc"); + + local parentObj = appendage.getParent(); + + local currentT = appendage.getTimer().Get(); + local t = appendage.sq_var.get_timer_vector(0); + // + local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE); + local rebirthTime_ = appendage.sq_var.get_vector(VECTOR_I_REBIRTH_TIME); + + if(!parentObj) + { + appendage.setValid(false); + return; + } + + local changeHp_ = appendage.getVar("changehp").get_vector(0); + local changeTime_ = appendage.getVar("changehp").get_vector(2); + local changedHp_ = appendage.getVar("changehp").get_vector(3); + + //print( " changeTime_:" + currentT); + local currentChangeHp = sq_GetUniformVelocity(0, changeHp_, currentT, changeTime_); + + local sqrObj = sq_GetCNRDObjectToSQRCharacter(parentObj); + + if(sqrObj.getHp() <= 0) + { + appendage.setValid(false); + return; + } + + if (currentChangeHp != changedHp_) + { + // 涡 渗?卫鉴 晔桧 毡戏贼 籀葬 + local hp = currentChangeHp - changedHp_; + changedHp_ = currentChangeHp; + appendage.getVar("changehp").set_vector(3, changedHp_); + + if(sqrObj) + { + //print(" sqrObj.getHp():" + sqrObj.getHp() + " hp:" + hp); + if(sqrObj.isMyControlObject()) + { + sqrObj.sq_SendSetHpPacket(sqrObj.getHp() + hp, true, parentObj); + } + } + } + + if(changeTime_ <= currentT) + { + if(parentObj) + { + if(parentObj.isMyControlObject()) + { // hp翕晦? + //local parentHp = parentObj.getHp(); + //sq_BinaryStartWrite(); + //sq_BinaryWriteDword(parentHp); // + //sq_SendChangeSkillEffectPacket(parentObj, SKILL_DIEHARD); + } + } + appendage.setValid(false); + } + + if(parentObj.getHp() >= parentObj.getHpMax()) + { + if(parentObj) + { + if(parentObj.isMyControlObject()) + { // hp翕晦? + //local parentHp = parentObj.getHp(); + //sq_BinaryStartWrite(); + //sq_BinaryWriteDword(parentHp); // + //sq_SendChangeSkillEffectPacket(parentObj, SKILL_DIEHARD); + } + } + appendage.setValid(false); + } + + //print(" changeTime_:" + changeTime_ + " currentT:" + currentT); + +} + + +function onStart_appendage_atmage_diehard_heal(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + + appendage.sq_var.clear_timer_vector(); + appendage.sq_var.push_timer_vector(); + appendage.sq_var.push_timer_vector(); + + appendage.sq_var.clear_vector(); + appendage.sq_var.push_vector(0); + appendage.sq_var.push_vector(0); + + local t = appendage.sq_var.get_timer_vector(0); + t.setParameter(400, -1); + t.resetInstant(0); + + local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); + + if(sqrObj) + { + } +} + + +function prepareDraw_appendage_atmage_diehard_heal(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + + + + +function onEnd_appendage_atmage_diehard_heal(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); + + if(sqrObj) + { + } + +} + +function onSetHp_appendage_atmage_diehard_heal(appendage, hp, attacker) +{ + if(!appendage) + return hp; + + local obj = appendage.getParent(); + + //local dst_hp = hp; + local org_hp = -1; + + local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE); + + if(obj.getHp() > hp) + { // 等嘐虽塭贼.. + //local damage = obj.getHp() - hp; // 殓擎 等嘐虽虏踯 隶陛?罹捡? ?犒譆渠热纂蒂 梗嬴鄹栖棻. + //local maxHp = appendage.getVar("changehp").get_vector(0); + //print(" damage:" + damage + " obj.getHp():" + obj.getHp()); + //appendage.getVar("changehp").set_vector(0, maxHp - damage); + + //0. ?问卫 嫡朝 等嘐虽 隶陛徽(%) + local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); + if(sqrObj) + { + local isConvert = true; + + local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(sqrObj, "Character/ATMage/DieHard/ap_ATMage_DieHard.nut"); + + if(dieHardAppendage) + { + local dieHardState = dieHardAppendage.sq_var.get_vector(VECTOR_I_STATE); + + if(dieHardState != STATE_SLOW_HEAL) + { + isConvert = false; + if(hp < 0) + { + hp = 1; + print( " heal hp:" + hp); + + if(sqrObj.isMyControlObject()) + { + sq_ReleaseActiveStatus(sqrObj, ACTIVESTATUS_POISON); + sq_ReleaseActiveStatus(sqrObj, ACTIVESTATUS_BLEEDING); + } + + } + } + } + + if(isConvert) + { + if(sqrObj.isMyControlObject()) + { + //local increaseDamageRate = sq_GetIntData(sqrObj, SKILL_DIEHARD, SKL_STATIC_INT_IDX_0); + //local damage = sqrObj.getHp() - hp; // 殓擎 等嘐虽虏踯 隶陛?罹捡? ?犒譆渠热纂蒂 梗嬴鄹栖棻. + //increaseDamageRate.tofloat() / 100.0; + //local addDamage = damage.tofloat() * increaseDamageRate.tofloat() / 100.0; + //hp = hp - addDamage; + + } + } + } + return hp; + } + + return -1; +} + + + + +// 横渐螳 陕撩 渗褐暧 部睡碟 +function isEnd_appendage_atmage_diehard_heal(appendage) +{ + if(!appendage) + return false; + local T = appendage.getTimer().Get(); + + return false; +} \ No newline at end of file diff --git a/character/atmage/diehard/diehard.nut b/character/atmage/diehard/diehard.nut new file mode 100644 index 0000000..c793fdb --- /dev/null +++ b/character/atmage/diehard/diehard.nut @@ -0,0 +1,203 @@ + +SUB_STATE_DIEHARD_0 <- 0 +SUB_STATE_DIEHARD_1 <- 1 +SUB_STATE_DIEHARD_2 <- 2 + +function onSetState_DieHard(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + + obj.sq_StopMove(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + if(substate == SUB_STATE_DIEHARD_0) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_DIEHARD1); + } + else if(substate == SUB_STATE_DIEHARD_1) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_DIEHARD2); + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_DIEHARD, true, "Appendage/Character/ap_atmage_bodyeffect.nut", true); + obj.sq_PlaySound("IMMORTAL"); + } + else if(substate == SUB_STATE_DIEHARD_2) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_DIEHARD3); + } + + +} + +function prepareDraw_DieHard(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DIEHARD_0) { + // SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_1) { + // SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_2) { + // SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机 + } + + +} + +function onProc_DieHard(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + if(substate == SUB_STATE_DIEHARD_0) + { + } + else if(substate == SUB_STATE_DIEHARD_1) + { + } + else if(substate == SUB_STATE_DIEHARD_2) + { + } + + +} + +function onProcCon_DieHard(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DIEHARD_0) { + // SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_1) { + // SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_2) { + // SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_DieHard(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(!obj.isMyControlObject()) + return; + + if(substate == SUB_STATE_DIEHARD_0) { + print(" end"); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_DIEHARD_1); // substate撮? + obj.sq_AddSetStatePacket(STATE_DIEHARD, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_DIEHARD_1) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_DIEHARD_2); // substate撮? + obj.sq_AddSetStatePacket(STATE_DIEHARD, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_DIEHARD_2) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + + +} + +function onKeyFrameFlag_DieHard(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DIEHARD_0) { + // SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_1) { + // SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_2) { + // SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_DieHard(obj, new_state) +{ + + if(!obj) return; + + if(new_state != STATE_DIEHARD) + { + print(" ghost go"); + //sq_SendMessage(obj, OBJECT_MESSAGE_INVINCIBLE, 1, 0); + sq_SetCustomDamageType(obj, false, 1); + sq_SendMessage(obj, OBJECT_MESSAGE_GHOST, 0, 0); + sq_SendMessage(obj, OBJECT_MESSAGE_GHOST, 1, 0); + sq_PostDelayedMessage(obj, OBJECT_MESSAGE_GHOST, 0, 0, 1500); + } + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DIEHARD_0) { + // SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_1) { + // SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_2) { + // SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机 + } + + +} + +function onAfterSetState_DieHard(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_DIEHARD_0) { + // SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_1) { + // SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_DIEHARD_2) { + // SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机 + } + + +} + diff --git a/character/atmage/elementalbuster/elementalbuster.nut b/character/atmage/elementalbuster/elementalbuster.nut new file mode 100644 index 0000000..4447942 --- /dev/null +++ b/character/atmage/elementalbuster/elementalbuster.nut @@ -0,0 +1,483 @@ +/************************************************ +************************************************ +// 议葛搅 嫔纂缣怃 当撩肾朝 赎 ?嫦 螃粽薛? +************************************************ +************************************************/ + +// ?热赀檩 牖怃煎 嫦翕脾 +// 楼撩嫦翕缣 暧?怃 摹鸥胀 楼撩桧 陛潍 葆虽虞缣 嫦翕腌栖棻. +SUB_STATE_ELEMENTAL_BUSTER_START <- 0 + +VAR_ELEMENTAL_BUSTER_COUNT <- 0; +VAR_ELEMENTAL_BUSTER_TYPE <- 1; +VAR_ELEMENTAL_BUSTER_IS_LAST <- 2; + +function isElementalBusterCastingState(subState) +{ + return subState%2 == 0; +} + +function isLastElementalBusterAttack(obj) +{ + local var = obj.getVar(); + local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT); + local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4); + + if(count+1 >= maxCount) + return true; + return false; +} + +function getStartElementalBuster(element, totalCount) +{ + if(element == ENUM_ELEMENT_NONE) + return ENUM_ELEMENT_FIRE; + + if (element == ENUM_ELEMENT_FIRE) + element = ENUM_ELEMENT_LIGHT; + else if (element == ENUM_ELEMENT_WATER) + element = ENUM_ELEMENT_FIRE; + else if (element == ENUM_ELEMENT_DARK) + element = ENUM_ELEMENT_WATER; + else if (element == ENUM_ELEMENT_LIGHT) + element = ENUM_ELEMENT_DARK; + + totalCount = totalCount-1; + if(totalCount <= 1) + return element; + + return getStartElementalBuster(element, totalCount) +} + +// 县溯诠骁 帼蝶搅 蝶鉴嫦翕 +function checkExecutableSkill_ElementalBuster(obj) +{ + if (!obj) return false; + + local isUseSkill = obj.sq_IsUseSkill(SKILL_ELEMENTAL_BUSTER); + if (isUseSkill) + { + // ?营 摹鸥胀 楼撩擎, 陛潍 葆虽虞缣 嫦翕?棻. + local element = obj.getThrowElement(); + local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4); + element = getStartElementalBuster(element, maxCount); + + printc("element : "+ element); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_BUSTER_START); + obj.sq_IntVectPush(element); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_BUSTER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; +} + +function checkCommandEnable_ElementalBuster(obj) +{ + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) + { + return obj.sq_IsCommandEnable(SKILL_ELEMENTAL_BUSTER); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + return true; +} + + +function onProc_ElementalBuster(obj) +{ + if (!obj) return; +} + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_ElementalBuster(obj, state, datas, isResetTimer) +{ + if (!obj) return; + + local var = obj.getVar(); + local subState = obj.sq_GetVectorData(datas, 0); + + local count = 0; + local isLast = false; + local element = ENUM_ELEMENT_FIRE; + if (subState == SUB_STATE_ELEMENTAL_BUSTER_START) + { + element = obj.sq_GetVectorData(datas, 1); + var.setInt(VAR_ELEMENTAL_BUSTER_COUNT,0); + var.setInt(VAR_ELEMENTAL_BUSTER_TYPE, element); + var.setBool(VAR_ELEMENTAL_BUSTER_IS_LAST, false); + } + else + { + element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE); + count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT); + isLast = var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST); + } + + local isCast = isElementalBusterCastingState(subState); + + obj.setSkillSubState(subState); + obj.sq_SetStaticMoveInfo(0, 0, 0, false); + obj.sq_SetStaticMoveInfo(1, 0, 0, false); + + + + local animationIndex = 0; + local soundTag = ""; + local passiveObjectIndex = 0; + if (element == ENUM_ELEMENT_FIRE) + { + animationIndex = isCast ? 85 : 86; + passiveObjectIndex = 24290; + soundTag = "EBUSTER_FIRE"; + } + else if (element == ENUM_ELEMENT_WATER) + { + animationIndex = isCast ? 87 : 88; + passiveObjectIndex = 24293; + soundTag = "EBUSTER_ICE"; + } + else if (element == ENUM_ELEMENT_DARK) + { + animationIndex = isCast ? 91 : 92; + passiveObjectIndex = 24299; + soundTag = "EBUSTER_DARK"; + } + else if (element == ENUM_ELEMENT_LIGHT) + { + animationIndex = isCast ? 89 : 90; + passiveObjectIndex = 24296; + soundTag = "EBUSTER_LIGHT"; + } + + + if (subState != SUB_STATE_ELEMENTAL_BUSTER_START) + { + // 县溯诠骁 帼蝶搅朝 4楼撩 赅舒 勘横遽棻. + addElementalChain_ATMage(obj, -1); + } + + local animation = obj.sq_GetCurrentAni(); + local flashTime = 0; + + // 议蝶? + //animationIndex = ANIMATION_TABLE[animationIndex]; + obj.sq_SetCurrentAnimation(animationIndex); + + + + if (subState == SUB_STATE_ELEMENTAL_BUSTER_START) + { + local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_BUSTER); + local castTime = sq_GetCastTime(obj, SKILL_ELEMENTAL_BUSTER, skillLevel); + local animation = sq_GetCurrentAnimation(obj); + local castAniTime = animation.getDelaySum(false); + + local speedRate = castAniTime.tofloat() / castTime.tofloat(); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + sq_StartDrawCastGauge(obj, castAniTime, true); + obj.sq_PlaySound("MW_EBUSTER_READY"); + } + else + { + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CONST, SPEED_TYPE_CONST, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); + } + + if (!isCast) // 嫦饵 + { + animation = obj.sq_GetCurrentAni(); + flashTime += animation.getDelaySum(false); + obj.sq_PlaySound(soundTag); + + // 议葛搅 嫔纂缣 当撩肾朝 醴棻坞 ?嫦 螃粽薛? + local powerIndex = count%3; + local sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 5); + + local time = 640; + local shake = 3; + if (isLastElementalBusterAttack(obj)) + { // 虞颤朝 饵桧锷陛 觼棻 + sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 6); + time = 800 + shake = 5; + powerIndex = 3; // ?表紫 ? + + print("isLast"); + // 虞颤 饵遴萄 + obj.sq_PlaySound("MW_EBUSTER"); + } + + local power = obj.sq_GetBonusRateWithPassive(SKILL_ELEMENTAL_BUSTER, STATE_ELEMENTAL_BUSTER, powerIndex, 1.0); + + + // 虽姜胀 嫔纂缣 ?卫粽 螃粽薛?菟击 当撩?棻 + if (obj.sq_IsMyControlObject()) + { + obj.sq_StartWrite(); + obj.sq_WriteDword(power); + obj.sq_WriteWord(sizeRate); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndex, 0, 0, 1, 0); + + sq_flashScreen(obj, 0, flashTime, 240, 200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_SetShake(obj, shake, time); + } + } + else + { + if (element == ENUM_ELEMENT_FIRE) + obj.sq_PlaySound("EBUSTER_CAST_01"); + else if (element == ENUM_ELEMENT_WATER) + obj.sq_PlaySound("EBUSTER_CAST_02"); + else if (element == ENUM_ELEMENT_DARK) + obj.sq_PlaySound("EBUSTER_CAST_04"); + else if (element == ENUM_ELEMENT_LIGHT) + obj.sq_PlaySound("EBUSTER_CAST_03"); + } +} + + +// 缣栖诡桧暮桧 部陬挤. +function onEndCurrentAni_ElementalBuster(obj) +{ + if (!obj) return; + local subState = obj.getSkillSubState(); + + local nextAnimationIndex = obj.getVar().get_vector(0) + 1; + local nextSubState = subState + 1; + local isLast = false; + if(!isElementalBusterCastingState(subState)) // 奢问 拥栖陛 部陬棻贼 + { + setNextElementalType(obj); // 怃粽蝶才桧?陛 奢问桧历棻贼 棻挤 锰模煎 渗? + + local var = obj.getVar(); + local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT); + local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4); + + count = count + 1; + if(count >= maxCount) + { + var.setBool(VAR_ELEMENTAL_BUSTER_IS_LAST, true); + isLast = true; + } + + var.setInt(VAR_ELEMENTAL_BUSTER_COUNT, count); + } + + if (subState == SUB_STATE_ELEMENTAL_BUSTER_START) + { + sq_EndDrawCastGauge(obj); + } + + + if (!isLast) + { + if (obj.sq_IsMyControlObject()) + { + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(nextSubState); + obj.sq_IntVectPush(nextAnimationIndex); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_BUSTER, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else + { + if (obj.sq_IsMyControlObject()) + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } +} + + +function onEndState_ElementalBuster(obj, newState) +{ + if (!obj) return; + +} + +function createElementalBusterCircle(obj, element, isLast, flagIndex) +{ + if (obj.sq_IsMyControlObject()) + { + local passiveObjectIndexBig = 24291; // ? + local passiveObjectIndexSmall = 24292; + if (element == ENUM_ELEMENT_FIRE) + { + passiveObjectIndexBig = 24291; // ? + passiveObjectIndexSmall = 24292; + } + else if (element == ENUM_ELEMENT_WATER) + { + passiveObjectIndexBig = 24294; // 热 + passiveObjectIndexSmall = 24295; + } + else if (element == ENUM_ELEMENT_LIGHT) + { + passiveObjectIndexBig = 24297; // 赀 + passiveObjectIndexSmall = 24298; + } + else if (element == ENUM_ELEMENT_DARK) + { + passiveObjectIndexBig = 24300; // 檩 + passiveObjectIndexSmall = 24301; + } + + + // 议葛搅 嫔纂缣 当撩肾朝 醴棻坞 ?嫦 螃粽薛? + local var = obj.getVar(); + local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT); + local powerIndex = count%3; + local sizeIndex = 5; + if (isLastElementalBusterAttack(obj)) + { + powerIndex = 3; // 虞颤辨 ?表 + sizeIndex = 6; + } + + local power = obj.sq_GetBonusRateWithPassive(SKILL_ELEMENTAL_BUSTER, + STATE_ELEMENTAL_BUSTER, powerIndex, 1.0); + local sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, sizeIndex); + + + obj.sq_StartWrite(); + obj.sq_WriteDword(power); + obj.sq_WriteWord(sizeRate); + + local isLastAttack = isLastElementalBusterAttack(obj); + if (flagIndex == 1) + { // 赎 ?嫦 螃粽薛? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 150, 2, 110); + if (isLastAttack && element != ENUM_ELEMENT_MAX) + { // 葆虽虞 桧塭贼 涡 当撩? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 100, 0, 110); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 80, 0, 110); + } + } + else if (flagIndex == 2) + { + // 蒙擎 ?嫦 螃粽薛? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 187, 2, 229); + + // 赎 ?嫦 螃粽薛? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 308, 2, 208); + + if (isLastAttack && element != ENUM_ELEMENT_MAX) + { // 葆虽虞 桧塭贼 涡 当撩? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, -4, 2, 239); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 157, 0, 229); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 157, 0, 229); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 208, 0, 208); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 208, 0, 208); + } + } + else if (flagIndex == 3) + { // 蒙擎 ?嫦 螃粽薛? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 310, 2, 98); + + if (isLastAttack && element != ENUM_ELEMENT_MAX) + { // 葆虽虞 桧塭贼 涡 当撩? + // 赎 ?嫦 螃粽薛? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 278, 2, 328); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 250, 0, 98); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 250, 0, 98); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 278, 2, 110); + } + } + else if (flagIndex == 4) + { + // 赎 ?嫦 螃粽薛? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 468, 2, 91); + + if (isLastAttack && element != ENUM_ELEMENT_MAX) + { // 葆虽虞 桧塭贼 涡 当撩? + // 蒙擎 ?嫦 螃粽薛? + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 569, 2, 242); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 358, 0, 200); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 418, 0, 150); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 550, 0, 250); + obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 620, 0, 150); + + } + } + } +} + +function setNextElementalType(obj) +{ + print("setNextElementalType"); + local var = obj.getVar(); + local element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE); + + if(element == ENUM_ELEMENT_NONE) + return element; + + local newElement; + + switch(element) + { + case ENUM_ELEMENT_FIRE : newElement = ENUM_ELEMENT_WATER; break; + case ENUM_ELEMENT_WATER : newElement = ENUM_ELEMENT_DARK; break; + case ENUM_ELEMENT_DARK : newElement = ENUM_ELEMENT_LIGHT; break; + case ENUM_ELEMENT_LIGHT : newElement = ENUM_ELEMENT_FIRE; break; + } + + var.setInt(VAR_ELEMENTAL_BUSTER_TYPE, newElement); + + return element; +} + +// 奢问卫 葆彻 掘羹蒂 当撩?棻. +function onKeyFrameFlag_ElementalBuster(obj, flagIndex) +{ + if (!obj) return false; + local var = obj.getVar(); + local subState = obj.getSkillSubState(); + local element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE); + local isLast = (var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST)) && (obj.getThrowElement() != ENUM_ELEMENT_NONE); + + createElementalBusterCircle(obj, element, isLast, flagIndex); + return true; +} + + +function getScrollBasisPos_ElementalBuster(obj) +{ + if (!obj) return; + local subState = obj.getSkillSubState(); + + if (obj.isMyControlObject()) + { + local destX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 300); + local xPos = obj.getXPos(); + local var = obj.getVar(); + local isLast = var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST); + + if (subState == SUB_STATE_ELEMENTAL_BUSTER_START) + { + // 蝶鉴 卫瞪 : 蝶觼煤 卫蒙 + local stateTimer = obj.sq_GetStateTimer(); + xPos = sq_GetUniformVelocity(xPos, destX, stateTimer, 300); + } + else if (isLast) + { + // 蝶鉴 谦猿 : 蝶觼煤 谦猿 + local stateTimer = obj.sq_GetStateTimer(); + xPos = sq_GetUniformVelocity(destX, xPos, stateTimer, 300); + } + else + { + xPos = destX; + } + + obj.sq_SetCameraScrollPosition(xPos, obj.getYPos(), 0); + return true; + } + + return false; +} diff --git a/character/atmage/elementalbuster/po_atelementalbusterexpbody.nut b/character/atmage/elementalbuster/po_atelementalbusterexpbody.nut new file mode 100644 index 0000000000000000000000000000000000000000..81488bd1dfb96007dad23306d3ac7eeb21a7e779 GIT binary patch literal 6608 zcmeHKT}vB56zyvQ`ya+WB~}vq+9HyeXhSVZBKRm{c9M>6X42V7HI+h9e3e#9L9Bgg zu@u3FLSKsZ-x$|_(V6Vt&4-(sL>g>OFc5a<-ZOLVz2}TZ*a*i*d;A#T9s@=dNE|sQ zC(gTr+S_e(e*FI8=jO%f=h~Ysbbhv1+x_Nj{;GXEM9z;LGm!W%|7Wbr(< z5S9|>S2L`@(FC$zEX@!(RS`l(Cj2)#Hu_kF&;p7y0#u$*NQLCuLXw@1d~X)QqO zEFtxc$IF5;nUCDBZwWm@_t67yduq*VLzTDrU^)7V=#+mro9!)WJszVaTxX~Kbnv3( za3dHVN0A`1BADK=`g6$w2u+oT7L&YSaV#TI6h{xo$7AC#Ux+%7yG#z zm_fgEt}6wYQeDJLDJ*ed3DWE3BsZ(mR1mk*1j!TnlIQ?k5LIwAoyn#ZH@b;NbVoHY z?9%JD!i0M6$HoM~W@?QKGvXex+aB*!xAxqM*+yz$D)5Nzxu9$}AZbzcu{V!Ry8)IK z)#zr2G?~>|T6``$Hq&fo=E=g4CbOEtVznbnsYLeae@qf*X=Z|5G1_r#JxjQvJX+cH zL#0MBYCo$^aV7<~=9X7TUMYGMZKwsV#W6EQZ1u7_uk2EZ5Vmb4Z{A9+W?FERYPJez zHydn|PS62QExXB}_wVVE@0s1idC0yV0W?TZH#u&I?GHI%!(0yl8zu*!y$?&vlmknGIA`7~nf?J$0UZc?skRv}VW? tC}AK?LzC7f-J(w57=yCu)}aS26_f8hnb z=QbAipup!e^m(OEObl|4T43Vcm4@w+*W<>GfvZ9=r$r1YG{Ri@lIQU`>`nCNK#fJ{s z%RyCe4>Y$QMyO}$jrb0Jc}WhOPE0P0nVnV-`jm23M-AmYSiM`T2)x>JYmNvS#bbpw zu#1Jv-@HBEP(>>ZD%yz{*J#4vZS5vlpi;3>@;n{SSd?b(R%QAsU8Px3W+z!1kImUi zCJFid^Xt*gx9g)nU%r#Szdqf3{^7de3P3-{S$;M!rGPJQ?*eo5UxIeIwK5N#*JN3& z&{Kj7tMUy4UMI9GC+R{AI<)P;LY$hd1`C-0i;vyp5}K11dB@fK$GwW<{7MkEl$4jn?3bxAIe;@GLK>am#l7F#tuk9oTLMyG5h}?V6d7krrdV6N8THY+`8p_X; z{DQbh@>LVhs6<*Qs;VNYq(n3mtMPfP%@IzYxfAT|`L?&Gwsf>>nT7wXG0}4%+{$ zHfpErOKi~ke%XGzZ>{du*LSGuK)+8mf*8tllqz)v*IuILZ*S~(zaUN=&!rt`MV`ut zOu=-_|JMF{qj_>{Ki@_GRNs5rc=;FN;G?;6*m0s8$ok{Zezo0r@vwdDDEyQvbWH$o zAlt0HVYUv?8*6u~xp~xie7%D~Z423tHtmh4jr~`k-hTeB#Xf=nHR@n|)`3AqHc#q@ zyY5Q{^?3)>`P(lp6z8n{1M8Qo$Jvc_zlRvG8>u}SkJ!U?NdTeMgAfezBIpIeWGj~YdM9ISW9E&-K{XDCdfL9xu zISCSRm0*Jl-Uz@yD(b(@R4embgx&&Qljb~2`Hy)hFO^A`cin2S1(MVXWU-6z^$6wT z(ScTB%n`X*>W1ZiF3sz@dC6;^se)E4VcM=Pqch+-C(npTWkL#yh!EJ#vAeRYUi@Ii%iBZutXu-H*W@#7hh=NckNW^3bkiq!{Vsag=G355i zOg1@@P0CYBP7<>rWExchs;L$y`*_~Xux{GUw&*U3S^sD4+e_JuikBq4suj4t^erXh zH26N}3B`8@2W3RN{(bm8H%s8q`SDMxxLzt@tsrW2SaqLMFiAczq$+G+wC2;O>rSXY zU<3a_f%|00^`{`qLVPR;cWfxRjJ+zY_?UGaatO-BdVf@ZwriiRI-SObMn7zAuQ`JP z8VqXeZ8g?@g-(W=wHNlrqhaXj_Uq#?YW!TY*Z#HNZw$iw=GuCFc@Is;BGFhlG7yfz zIJ}h2SJ{a%aa_p4_+(Zx7ki$k!RYN_M=g)*nwMo4c{+rcgF>i)OSMOhB#htB_yE6tA+s^NUQLVc>gh zE)JFUR@x=c{F-!4)C%o*{BLbzWNE~}B{HJoxr>y6yWxfntnSsox-ygmO*?;Aynp4& Ef5Q|eivR!s literal 0 HcmV?d00001 diff --git a/character/atmage/elementalrain/elementalrain.nut b/character/atmage/elementalrain/elementalrain.nut new file mode 100644 index 0000000..0b90b67 --- /dev/null +++ b/character/atmage/elementalrain/elementalrain.nut @@ -0,0 +1,386 @@ +getroottable()["ElementalRainCreatePos"] <- {}; +getroottable()["ElementalRainCreatePos"] = [[-76,27],[-108,44],[-129,67],[-79,57],[-50,66], + [-93,83],[-120,118],[-58,109],[-121,152],[-82,145], + [-92,180],[39,143],[-49,180],[-5,128],[-7,171], + [-24,221],[25,184],[-5,128],[43,113],[58,143]]; + +// 县溯诠骁 溯樯 怃粽 蝶才桧? +SUB_STATE_ELEMENTAL_RAIN_CAST <- 0 // 议蝶? +SUB_STATE_ELEMENTAL_RAIN_JUMP <- 1 // 薄? +SUB_STATE_ELEMENTAL_RAIN_CHARGE <- 2 // 醱瞪(薄? 渠晦) +SUB_STATE_ELEMENTAL_RAIN_FIRE <- 3 // 葆彻掘 嫦饵 +SUB_STATE_ELEMENTAL_RAIN_LAST <- 4 // 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽 + + +// 县溯诠骁 溯樯 蝶鉴嫦翕 +function checkExecutableSkill_ElementalRain(obj) +{ + if (!obj) return false; + + local isUseSkill = obj.sq_IsUseSkill(SKILL_ELEMENTAL_RAIN); + if (isUseSkill) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CAST); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; +} + +function checkCommandEnable_ElementalRain(obj) +{ + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) + { + return obj.sq_IsCommandEnable(SKILL_ELEMENTAL_RAIN); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + return true +} + + +function onProc_ElementalRain(obj) +{ + if (!obj) return; + local subState = obj.getSkillSubState(); + + // 橾姜 堪桧桧鼻 薄??棻贼 夸辞 + if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP) + { + local zPos = obj.sq_GetIntData(SKILL_ELEMENTAL_RAIN, 2); + + if (sq_GetZPos(obj) >= zPos) + { + obj.sq_SetCurrentPos(obj, obj.getXPos(), obj.getYPos(), zPos); + + if (obj.sq_IsMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CHARGE); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + } +} + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_ElementalRain(obj, state, datas, isResetTimer) +{ + if (!obj) return; + + local var = obj.getVar(); + local oldSubState = obj.getSkillSubState(); + local subState = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + obj.sq_SetStaticMoveInfo(0, 0, 0, false); + obj.sq_SetStaticMoveInfo(1, 0, 0, false); + + if (subState == SUB_STATE_ELEMENTAL_RAIN_CAST) + { + obj.sq_ZStop(); + // 议蝶? + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_CAST); + + // 桧?? 缣栖诡桧暮 + obj.sq_AddStateLayerAnimation(1, + obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Cast/1_under_dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, + obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Cast/20_body_dodge.ani"), 0, 0); + + // 议蝶? 楼紫蒂 评塭陛紫烟 扑姜 + // 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻. + // 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻. + local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN); + local castTime = sq_GetCastTime(obj, SKILL_ELEMENTAL_RAIN, skillLevel); + local animation = sq_GetCurrentAnimation(obj); + local castAniTime = animation.getDelaySum(false); + + local speedRate = castAniTime.tofloat() / castTime.tofloat(); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + + sq_StartDrawCastGauge(obj, castAniTime, true); + obj.sq_PlaySound("MW_ERAIN_READY"); + + // 县溯诠骁 溯樯擎 4楼撩 赅舒 勘横遽棻. + addElementalChain_ATMage(obj, -1); + } + else if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_JUMP); + + sq_SetZVelocity(obj, 750, -1200); + } + else if (subState == SUB_STATE_ELEMENTAL_RAIN_CHARGE) + { + local zPos = obj.sq_GetIntData(SKILL_ELEMENTAL_RAIN, 2); + obj.sq_SetCurrentPos(obj, obj.getXPos(), obj.getYPos(), zPos); + obj.sq_PlaySound("MW_ERAIN"); + + obj.sq_ZStop(); + // 醱瞪 + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_JUMP_STAY); + + + // 桧?? 缣栖诡桧暮 + obj.sq_AddStateLayerAnimation(1, + obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Charge/26_handup_dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, + obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Charge/25_shoot_dodge.ani"), 0, 0); + + + local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN); + local maxNumber = obj.sq_GetLevelData(SKILL_ELEMENTAL_RAIN, 0, skillLevel); + + // 譆模高娄 譆渠高 饵桧暧 楠浑? 璋濠蒂 陛螳褥. + // 钦, ?廓 陛螳蚂 高擎 罗廓箪 ?塭嘐搅陛 true陛 肾虽 强朝 ?擎 舒廓 棻卫 釭螃虽 强挤. + // -1桧 釭螃贼 谦猿. 涡桧鼻 高桧 桡挤. + // min 高挤 0 桧?陛 腆热 桡挤. + local index = sq_getRandomUnique(true, 0, ::ElementalRainCreatePos.len()); // 蟾晦? + + if (obj.sq_IsMyControlObject()) + { + for (local i = 0; i < maxNumber; ++i) + { + if (index < 0) + break; + + local pos = ::ElementalRainCreatePos[index]; + local x = pos[0]; + local y = sq_getRandom(0, 2)-1; + local z = pos[1]; + + local randElementalType = sq_getRandom(ENUM_ELEMENT_FIRE, ENUM_ELEMENT_MAX); + obj.sq_StartWrite(); + obj.sq_WriteWord(randElementalType); + obj.sq_SendCreatePassiveObjectPacket(24233, 0, x, y, z); + + index = sq_getRandomUnique(false, 0, i % ::ElementalRainCreatePos.len()); + } + } + } + else if (subState == SUB_STATE_ELEMENTAL_RAIN_FIRE) + { + // 葆彻掘 嫦饵 + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_SHOOT); + + // 桧?? 缣栖诡桧暮 + local angle = sq_GetIntData(obj, SKILL_ELEMENTAL_RAIN, 5); + local animation = obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Shoot/25_shoot_dodge.ani"); + sq_SetfRotateAngle(animation, sq_ToRadian(-angle.tofloat())); + obj.sq_AddStateLayerAnimation(1, animation, 0, 0); + sq_SetCustomRotate(obj, sq_ToRadian(-angle.tofloat())); + + } + else if (subState == SUB_STATE_ELEMENTAL_RAIN_LAST) + { + // 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽 + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_CHARGE_SHOOT); + + + // 桧?? 缣栖诡桧暮 + obj.sq_AddStateLayerAnimation(1, + obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/21_circle_normal.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(2, + obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/22_circle_dodge.ani"), 0, 0); + obj.sq_AddStateLayerAnimation(3, + obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/23_circle1_normal.ani"), -62, -188); + obj.sq_AddStateLayerAnimation(4, + obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/24_circle1_dodge.ani"), -62, -188); + + obj.sq_PlaySound("MW_ERAIN_FIN"); + } +} + + +// 缣栖诡桧暮桧 部陬挤. +function onEndCurrentAni_ElementalRain(obj) +{ + if (!obj) return; + local subState = obj.getSkillSubState(); + + if (subState == SUB_STATE_ELEMENTAL_RAIN_CAST) + { + // 议蝶? -> 醱瞪 + if (obj.sq_IsMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_JUMP); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true); + } + sq_EndDrawCastGauge(obj); + } + else if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP) + { + if (obj.sq_IsMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CHARGE); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if (subState == SUB_STATE_ELEMENTAL_RAIN_CHARGE) + { + // 醱瞪 -> 葆彻掘 嫦饵 + if (obj.sq_IsMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_FIRE); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if (subState == SUB_STATE_ELEMENTAL_RAIN_FIRE) + { + // 葆彻掘 嫦饵 + local var = obj.getVar(); + local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN); + local maxNumber = obj.sq_GetLevelData(SKILL_ELEMENTAL_RAIN, 0, skillLevel); + + // 嫦饵?啪 陴懊挤. + local fireEnd = true; + local ballCount = obj.getMyPassiveObjectCount(24233); + for (local i = 0; i < ballCount ; ++i) + { + local magicBall = obj.getMyPassiveObject(24233,i) + if (!magicBall || magicBall.getState() != SUBSTATE_PO_ELEMENTAL_CREATOR_FIRE) { + fireEnd = false; + break; + } + } + + if (!fireEnd) + { + if (obj.sq_IsMyControlObject()) + { + // 葆彻掘 啗楼 嫦饵 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_FIRE); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else + { + if (obj.sq_IsMyControlObject()) + { + // 葆彻掘 嫦饵 -> 醱瞪 塽 ?嫦掘 当撩, 阶戏煎 杂虽 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_LAST); + obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + } + else if (subState == SUB_STATE_ELEMENTAL_RAIN_LAST) + { + // 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽 + if (obj.sq_IsMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + } + } +} + + +function onEndState_ElementalRain(obj, newState) +{ + if (!obj) return; + + if (newState != STATE_ELEMENTAL_RAIN) + { + sq_SetCustomRotate(obj, 0.0); + + if (obj.sq_IsMyControlObject()) + { + local ballCount = obj.getMyPassiveObjectCount(24233); + for (local i = 0; iF$Q`*466PceSus`|%a_L%4oP zt!%2>uRA*mWzUw5@F3u_zZ^(0J-{T(l|(L;9d!9L_at-2nB%3LVw$;bTuhv{z~?r1 zW;iYF>g>4C*%5OJ@x3^OU$L0aW!d)*;cK^s4l7$>yM%O?z3864VSLh zHlG95JE<dS-b-B02CkEoWrDa>A789bNfK}WlpS9Gba z<`9NFNgC0WvLJJ8Xm~g`I6OEqcs!dL&W)vpj$3fBnFI1qCXqNv1Busu-UD^*R(16e z2B%{(^&Am1e3bdpv0WbD*L>^#vsx1+>F%?jC(&cUeoZYQMZpzJ#`QT}?CfZcg^n z^tcg6t&v;sXZm8`oac=mYO>pnArG{3Z|mXubnrB4AGgB$OG)BV-MWJ}Nm4!ko-oje zly*Gk&t@e0bli6&H!T%uMRR)C^l{V8qPjQH+n0`0$8V<7vLu6U>Bl=kVpGs(Wn?&t zHwc&Jvg$j~*N6T$|6ct<`p2$6;NV3@x1Z?-$PX=vPyL|0qeMZyS`OFe^#l?l)Bzr# TcV-Pz8+dfn=x`WP8-33&S}n2H literal 0 HcmV?d00001 diff --git a/character/atmage/elementalrain/po_elementalrainbigballexp.nut b/character/atmage/elementalrain/po_elementalrainbigballexp.nut new file mode 100644 index 0000000000000000000000000000000000000000..ad8ea3aa7f685725e4e7c998acab3f57a4d60d5c GIT binary patch literal 1478 zcmcIkU279T6zyvY`47{#4J_%lpcIOPO`6m~+ei{AK85M-B-v&&6K5y3ReY)9gMy$` zYPA+Cv=y|9Sh0xOUz2U}FT698Y+_LqM3UW|-MROi`*kKhT4_;7c#NWeh)gRGtTBTH zE;m`(E@gevAXH$#fIXV_s%h-|*|ny@mRC%~i9@^_L|P}}qqpLtF|T5b!4|y5Vw{K; zr_-<;A4i=>_d46(I@`M_)qZmjK08G1{a4+scj1?(D13O50xO?6*hg3h?9|hYwt@l{ z1YH_tNpgbSnN`MJBO!scOW@rkzp-74Oe1SeFh?s4u!HO6S(!BFkfg1s<&I2G5x{=& z+ws| zOsTw>U(A{)yLfe>JX5fj=Iv|QLOGo;mGTRk7QC_R<_5IJ5Tl8DMDQ5qn!Iqq>|Oth zQPE9W|C--zsJ#9|%i3>`!@a}K^ZV`BchTAD2k2dA<9oRC0)^WL;mZeL_)Fn*_dkJO zck^@S@dgS{w%VH?Q|Ro@5enb$4ZOpn9RTQQih2#K6n=i<`y0`~%h4Ib{m%&yUth!n zt;td7NiHc^#b+1>3yq@*%Su{OmXW`l;W;_mQl2@^8hP$jJ&Jup0>H4qT{ZqE54$DU zJYFXp)LXavvDmI#?6E3u<)^1u3pdSL)b(gJ&DJ8r2v>6r-=#nFBR)9(7}Y?3aq_uX zX2ngkJRmiZ7ZgRyse{I(#8fHeK?3XEVTe?DbWPP-1uzsslQYL|HVJkA7=&g~IgE^q F`~cW%`DOqB literal 0 HcmV?d00001 diff --git a/character/atmage/elementalrain/po_elementalraincreator.nut b/character/atmage/elementalrain/po_elementalraincreator.nut new file mode 100644 index 0000000000000000000000000000000000000000..ece92650976bfc1392fb5b3ca1fb7cf54b159cbc GIT binary patch literal 2976 zcma)8TTdHT5YFo&`9DnFY;`e)5H%`AmI2csfsL>s&=+g5Phb;!*Igf{kf>7A7Sbrq zJwi}I1r3+9gi=)`N&``Ujn}*XqBH00nl%@lTBokxzThkIh-6x zrm~6QT>n@ykxh@~kTj)y-VR+o(9r?*`*nL|8{DHq_wOA#h}RzO*8low|GWeCx8LI% zIBW0h`w#7now)sS4WJ9^Ya8~H1wcmU*-G4gbr=n`Wm?)C92!fK%}c^&ZFk$})TyQ=>v6)}x?P?u$R|*Bjvex@rIMydgE3&g4dhQVRW`@=n3(JYK*D+|@;U ze}f#Z?Y^jg_zs-CMO5MLE;oxOCVla){}g|}F2qA^*Q-XJ>!tw}#`~)kZk7f#uI0*R z4zpflC1!A~*l#h7n^xGIzM+D}@=U+Qh%FLoyQ3(fHbuV<;fqL(AeC1wqlXSVI+(8j z_wVq4x2){p>f?Q#A8h z5gNL(q^dXQMikvETr;ggI3f%;WNv8|a-v_+8OA3x3+YJ1(E%aBoEa}pX&+JqU(eT5l?4A(eI8^!riEq{~oaO)nUz80nYh7!_%sA(iP zNBLIhENCTdhFL01n^mKr8#8_8oCjq57|R{63PH3&jA|p1E8d0KfZ?)b<`d;I z#&N#sb99qtd?Xys#-pT_bOTXBwMR4su<6x40IHHUcRpug(l4)6dmEu5LHY&bnb|7m zMK+-ot1OHLRX|-TAsC72=^HH1vwDe9F(WE;$6`Vkk~1_MMEwbQNN%8OQb4isIpuwl z+2aZZQi(_sSU5kC=nsKKg#u2PO6#-|gatSB_Cjk+(cF&UpjHS0E$ea4z&Tx-(+i14 zy_`Wxxv0%&2!n&BmEZ(Q3Ene0Ma5Y_I3b`kMrl;9jLi3&2Di+jEDd%%Z8dk}ox8FM zwe5S((>G#|*$=kF$(sXveaSgE0$fS%-2>;z56;SCaGq@8C?(Y%#CxQn<1`d>oatf- zh-rpc81PR76ohXQPGyaT0Q!TNLKqNMvu3$}R)w3r1e{SyIeom z#qDgbKcL}H`|PL9sB}bXMtR&SGExcHK^^DDtZ8!W;;d$&sc^$QrmXqtM!c%f-l@W+ z7!6_ib6LK~+)696rlsG;IbzHdX^F(5qV;_^FpKNBYnrKkQJNgYNtqfS9!7L35>TEB z?56=85ozQ}y*6D52gN8|vSFl8$_aO5Bl(k4W5|zOvB(7s@R128$)+)B73gsX{_}~LZ_KerJ$32cW2@$NPet=bQ=y;pD Q$%>o?#EW3S=fZ`50a&C44FCWD literal 0 HcmV?d00001 diff --git a/character/atmage/elementalstrikeex/elementalstrikeex.nut b/character/atmage/elementalstrikeex/elementalstrikeex.nut new file mode 100644 index 0000000000000000000000000000000000000000..b5eac68bcd545e0601e7575208d65f4178bde6b6 GIT binary patch literal 7672 zcmeHMUr*as6yK|n_zrhSlZ+IC4QvnXs>lS>MT7*|VRV`%*Tgr(!`PYa3{X|6Q?-Yx z>N@pdEgGHZsus0XTWM#0d;;- zQ%h1w*5tfAD;G*qUM(rP8Ckxh3EY<>NEkeFjY!srg9C#DmAYN_O~*#%DlRX}Yq(tZ z^+gM-%cf;%vV~W$?dz86yXG>M*LY{~`{BWXD`YEYR`^fJXXIkP?%JrLTOK}7Us+CB zx6qAX6V%jXjWfQUfQh`?T*PhD=WHf$TsoK ze{~Cmn|S162$Nb7)B>}ID=vh!i@6Qk;^ zZ1NPMhDsqr_jNCYOi#fc_DkjpcDrQ>3vHGkQRub!f<(3BPJu)|6f01Lsky;bB%Rdy zB8^Nwl0a90??RubzEhiZe#Ff#4Z|E=0IwcZK4LdB9r0RC@_onv1u~&U(MiXyd*tbY z=~w4;&okk`t~nhgNnEg+^G8S_F%2+DfC%Z#-m}MhkN!Nk`yzOAkN=D)#4%-Rj)hNO z8?i|nF&%6?ZruJE#R{Pojm#B&3D04-%{n>Tr#?KwATi*^_70rF(VqmYSHswNAGsnk zr1-f&>yLyKZo;X}tRLGV^xXEm(*5I$seWPIl0;^OxZp*h>Y zYp`oTmOR}P6CAFjp;t&(d)y{$)piprf z2EIj5uDc;z0P8CZBE%Ni(G%rZPn6@ax5s;XdjZOW+poK!uqO^b7SJh4q4dOEIWEqL zo;bxAr`Q|klOL-Z%@6-FKBb*x71<$?6X&Oli}bUC%nU?>ZJMpZsuBP53IYVMlZ^D~4w@aT~K1J%tz@ z;HlU)vM#1QJnc`I^}~j~y^yC6bRw}MQfOoxK8G~@Vfc-dJAxnv;AiWu3p1ExgMrDU z#%F<*inE$j$VF5p<&$PA;XW2t<#>C-@ogfLO~59}j;0t*9;TtgRioB~kKK{>or>k? zK14PRU0SyZ67ttU74QxW9&MTcZnmFo(QOk(PtbhmP+uWeD$s?D##U)>G~~5W@e55D zsf<)%a?%XPSi)Kbx{ovn9iloWs>KXShlnn15Lw}I?JZY_L$FG|9(jmRV{4)&6HX;8YU0ET8k6|4e z8cH!$Si&|{2x!vt`Z{)#wW1&hVhWzaqf~Ms0vSaDChB9OX|~slDh?ysvjbZkHOh(z zE*SRz+J&hixN!@HicENi5FSgeS>X7lOR$=YYr2c4Tz$3k#19n_PKNzZC!6oSpq#)% zX0rrER7_fDc496jAz9gLCO;Nlp$FbGV`j&mbDi?3TbQ|{1|b(x-(k*S_l9g)#a)SJ z+K_t_dYX3i6-?jqL>i5Ewkr(!63dWe2e|@@*M4-iQ-<#M)cs8^E{}c7^?%DK89Lp# z)jM5Nla?;5e_baVcCq>%l@4S>g^e5FZrAW|<6fAG?iAyT_jy%TQtW#OnxtonTpW7_ zuhUX8ZRty$T?ER*J6dYGQBC{TEJ@IRBpl*#O0PY>RdH-c7L>pKPy+(Q literal 0 HcmV?d00001 diff --git a/character/atmage/elementalstrikeex/po_atelementalstrikeex.nut b/character/atmage/elementalstrikeex/po_atelementalstrikeex.nut new file mode 100644 index 0000000..ed20664 --- /dev/null +++ b/character/atmage/elementalstrikeex/po_atelementalstrikeex.nut @@ -0,0 +1,485 @@ + +function setCustomData_po_ATElementalStrikeEx(obj, reciveData) +{ + if(!obj) return; + + local pole_attack_rate = reciveData.readDword(); + local attack_rate = reciveData.readDword(); + local imagePerRate = reciveData.readDword(); + local element = reciveData.readDword(); + local speedRate = reciveData.readDword(); + + obj.getVar("imagerate").clear_vector(); // state vector + obj.getVar("imagerate").push_vector(imagePerRate); + + obj.getVar("attack").clear_vector(); // state vector + obj.getVar("attack").push_vector(attack_rate); + obj.getVar("attack").push_vector(pole_attack_rate); + + + obj.getVar("element").clear_vector(); // state vector + obj.getVar("element").push_vector(element); + + obj.getVar("speed").clear_vector(); // state vector + obj.getVar("speed").push_vector(speedRate); + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(0); + + obj.getVar("flag").clear_vector(); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + + + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + +} + + +function setState_po_ATElementalStrikeEx(obj, state, datas) +{ + if(!obj) return; + + local pChr = obj.getTopCharacter(); + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local imagePerRate = obj.getVar("imagerate").get_vector(0); + local imageRate = imagePerRate.tofloat() / 100.0; + + + + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + local attackInfo = sq_GetCustomAttackInfo(obj, 0); + sq_SetCurrentAttackInfo(obj, attackInfo); + + local attack_rate = obj.getVar("attack").get_vector(1); + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, attack_rate); + + local element = obj.getVar("element").get_vector(0); + if(pAttack) + { + if (element != ENUM_ELEMENT_NONE) + { + pAttack.setElement(ENUM_ELEMENT_NONE); + print(" \n push element:" + element); + pAttack.setElement(element); + } + } + + + local currentAni = obj.getCurrentAnimation(); + currentAni.Proc(); + print( " setImageRate:"); + currentAni.setImageRateFromOriginal(imageRate, imageRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, imageRate, imageRate, imageRate); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + //local attackInfo = sq_GetDefaultAttackInfo(obj); + local attackInfo = sq_GetCustomAttackInfo(obj, 1); + sq_SetCurrentAttackInfo(obj, attackInfo); + + local attack_rate = obj.getVar("attack").get_vector(0); + + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, attack_rate); + + local element = obj.getVar("element").get_vector(0); + if(pAttack) + { + if(element != ENUM_ELEMENT_NONE) + pAttack.setElement(element); + } + + + sq_SetMyShake(pChr,4,320); + + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + + local currentAni = obj.getCurrentAnimation(); + currentAni.Proc(); + print( " setImageRate:"); + currentAni.setImageRateFromOriginal(imageRate, imageRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, imageRate, imageRate, imageRate); + + local element = obj.getVar("element").get_vector(0); + + if (element == ENUM_ELEMENT_FIRE) + { + obj.sq_PlaySound("ESTRIKE_FIRE"); + } + else if(element == ENUM_ELEMENT_WATER) + { + obj.sq_PlaySound("ESTRIKE_WATER"); + } + else if(element == ENUM_ELEMENT_DARK) + { + obj.sq_PlaySound("ESTRIKE_DARK"); + } + else if(element == ENUM_ELEMENT_LIGHT) + { + obj.sq_PlaySound("ESTRIKE_LIGHT"); + } + else if(element == ENUM_ELEMENT_NONE) + { + obj.sq_PlaySound("ESTRIKE_FIRE"); + } + } + + local currentAni = obj.getCurrentAnimation(); + + if(currentAni) + { + local speedRate = obj.getVar("speed").get_vector(0); + currentAni.setSpeedRate(speedRate.tofloat()); + } +} + + +function procAppend_po_ATElementalStrikeEx(obj) +{ + if(!obj) return; + + local pChr = obj.getTopCharacter(); + + local passiveState = obj.getVar("state").get_vector(0); + + + if(passiveState == 0) + { + return; + } + + + local pAni = obj.getCurrentAnimation(); + + local frameIndex = 0; + + if(pAni) + { + frameIndex = pAni.GetCurrentFrameIndex(); + } + + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + + if(frameIndex >= 10) + { + if(obj.getVar("flag").get_vector(1) == 0) + { + sq_SetMyShake(pChr,2,150); + obj.getVar("flag").set_vector(1, 1); + } + } + + if(frameIndex >= 11) + { + if(obj.getVar("flag").get_vector(3) == 0) + { + local element = obj.getVar("element").get_vector(0); + + if (element == ENUM_ELEMENT_FIRE) + { + obj.sq_PlaySound("MCANNON_FIREFALL"); + } + else if(element == ENUM_ELEMENT_WATER) + { + obj.sq_PlaySound("MCANNON_ATK"); + } + else if(element == ENUM_ELEMENT_DARK) + { + obj.sq_PlaySound("MCANNON_DARKFALL"); + } + else if(element == ENUM_ELEMENT_LIGHT) + { + obj.sq_PlaySound("MCANNON_LIGHTFALL"); + } + else if(element == ENUM_ELEMENT_NONE) + { + obj.sq_PlaySound("MCANNON_FIREFALL"); + } + + obj.getVar("flag").set_vector(3, 1); + } + } + + if(frameIndex >= 14) + { + if(obj.getVar("flag").get_vector(2) == 0) + { + if(pChr) + { + obj.sq_PlaySound("ESTRIKE_READY"); + } + + obj.getVar("flag").set_vector(2, 1); + } + } + + if(frameIndex >= 21) + { + if(obj.getVar("flag").get_vector(0) == 0) + { + local fScreen = sq_flashScreen(obj,0,80,0,80, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_addFlashScreen(fScreen, 0, 320, 320, 180, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + + obj.getVar("flag").set_vector(0, 1); + } + } + } +} + +function setCustomData_po_ATElementalStrikeFireEx(obj, reciveData) +{ + setCustomData_po_ATElementalStrikeEx(obj, reciveData); +} + +function setState_po_ATElementalStrikeFireEx(obj, state, datas) +{ + setState_po_ATElementalStrikeEx(obj, state, datas); +} + +function procAppend_po_ATElementalStrikeFireEx(obj) +{ + procAppend_po_ATElementalStrikeEx(obj); +} + + +function onEndCurrentAni_po_ATElementalStrikeFireEx(obj) +{ + if(!obj) return; + + local passiveState = obj.getVar("state").get_vector(0); + + print(" passiveState:" + passiveState); + if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + else + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + + + +/////////////////////////////////// +// 鼠楼撩 +/////////////////////////////////// + +function setCustomData_po_ATElementalStrikeNoneEx(obj, reciveData) +{ + setCustomData_po_ATElementalStrikeEx(obj, reciveData); +} + +function setState_po_ATElementalStrikeNoneEx(obj, state, datas) +{ + setState_po_ATElementalStrikeEx(obj, state, datas); +} + +function procAppend_po_ATElementalStrikeNoneEx(obj) +{ + procAppend_po_ATElementalStrikeEx(obj); +} + + +function onEndCurrentAni_po_ATElementalStrikeNoneEx(obj) +{ + if(!obj) return; + + local passiveState = obj.getVar("state").get_vector(0); + + print(" passiveState:" + passiveState); + if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + else + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////// +// 檩楼撩 +/////////////////////////////////// + +function setCustomData_po_ATElementalStrikeDarkEx(obj, reciveData) +{ + setCustomData_po_ATElementalStrikeEx(obj, reciveData); +} + +function setState_po_ATElementalStrikeDarkEx(obj, state, datas) +{ + setState_po_ATElementalStrikeEx(obj, state, datas); +} + +function procAppend_po_ATElementalStrikeDarkEx(obj) +{ + procAppend_po_ATElementalStrikeEx(obj); +} + + +function onEndCurrentAni_po_ATElementalStrikeDarkEx(obj) +{ + if(!obj) return; + + local passiveState = obj.getVar("state").get_vector(0); + + print(" passiveState:" + passiveState); + if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + else + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////// +// 热楼撩 +/////////////////////////////////// + +function setCustomData_po_ATElementalStrikeWaterEx(obj, reciveData) +{ + setCustomData_po_ATElementalStrikeEx(obj, reciveData); +} + +function setState_po_ATElementalStrikeWaterEx(obj, state, datas) +{ + setState_po_ATElementalStrikeEx(obj, state, datas); +} + +function procAppend_po_ATElementalStrikeWaterEx(obj) +{ + procAppend_po_ATElementalStrikeEx(obj); +} + + +function onEndCurrentAni_po_ATElementalStrikeWaterEx(obj) +{ + if(!obj) return; + + local passiveState = obj.getVar("state").get_vector(0); + + print(" passiveState:" + passiveState); + if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + else + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////// +// 赀楼撩 +/////////////////////////////////// + +function setCustomData_po_ATElementalStrikeLightEx(obj, reciveData) +{ + setCustomData_po_ATElementalStrikeEx(obj, reciveData); +} + +function setState_po_ATElementalStrikeLightEx(obj, state, datas) +{ + setState_po_ATElementalStrikeEx(obj, state, datas); +} + +function procAppend_po_ATElementalStrikeLightEx(obj) +{ + procAppend_po_ATElementalStrikeEx(obj); +} + + +function onEndCurrentAni_po_ATElementalStrikeLightEx(obj) +{ + if(!obj) return; + + local passiveState = obj.getVar("state").get_vector(0); + + print(" passiveState:" + passiveState); + if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + else + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// + \ No newline at end of file diff --git a/character/atmage/expressions/ap_atmage_expression.nut b/character/atmage/expressions/ap_atmage_expression.nut new file mode 100644 index 0000000000000000000000000000000000000000..b8f56890c49b99e5e7444d746860674efb1e0be0 GIT binary patch literal 1116 zcmcJN(Q3mW6ozxF;5)cnB{1>=Wfy~WyDNkBKG@_~GE%i_S)ugZt1%PinstPY2sy&Z z=O4dAFh7XKc2ZEYuOHj?dEBnp4hp6eh?Z@kB=|%yiu>wHbFQ>(@_RbG>)2YuQE4#7 z9g#cCO$I2Y;YqWPfQs9>L@C}Z)7I0*az1G(+Q4zeTuNs~%1}&F&IJ1>v9shH8k>3< zdSj>8a21<=hB{u{MNcL5hLHw)&|=|AM@0muIexmsSqGqAHms*|^G+XVOjB*azPdpW zwkQ`aMp$VWH&~z3@^^pyyFg== 0) + { + if(!obj.getVar().get_vector(0)) + { + createFallenBlossomsSpear(obj, 0, 1, 69); + obj.getVar().set_vector(0, 1); + } + } + + if(frmIndex >= 1) + { + if(!obj.getVar().get_vector(1)) + { + createFallenBlossomsSpear(obj, -12, -1, 85); + obj.getVar().set_vector(1, 1); + } + } + + if(frmIndex >= 2) + { + if(!obj.getVar().get_vector(2)) + { + createFallenBlossomsSpear(obj, -21, 2, 45); + obj.getVar().set_vector(2, 1); + } + } + + if(frmIndex >= 4) + { + if(!obj.getVar().get_vector(3)) + { + createFallenBlossomsSpearEnd(obj, 0, 3, 70); + obj.getVar().set_vector(3, 1); + } + } + + ////// + // 遗霜歜 + local sq_var = obj.getVar("flag"); + + //obj.getVar("flag").clear_vector(); + //obj.getVar("flag").push_vector(posX); + //obj.getVar("flag").push_vector(len); + //obj.getVar("flag").push_vector(delay); + local delayT = sq_var.get_vector(2); // 漱搅樯策蝶 2 识 桧翕卫除 + local len = sq_var.get_vector(1); + + local v = sq_GetAccel(0, len, currentT, delayT, true); + print(" delayT:" + delayT + " current:" + currentT); + local srcX = sq_var.get_vector(0); // 漱搅 樯策蝶 1 + + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + + if(obj.isMovablePos(dstX, posY) && !sq_var.get_vector(3)) + { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕 + sq_setCurrentAxisPos(obj, 0, dstX); + } + else + { // 桧翕? 热 桡朝 虽羲击 虏陬棻.. + sq_var.set_vector(3,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻.. + local offset = dstX - posX; + + if(offset != 0) { + if(offset < 0) + offset = -offset; + + local totalLen = sq_var.get_vector(1); + sq_var.set_vector(1, totalLen - offset); + } + } + + if (obj.sq_timer_.isOnEvent(currentT) == true) + obj.resetHitObjectList(); + + ////// + + // 试虽 ??赝 当撩 + local t = obj.getVar().get_timer_vector(0); + + if(t.isOnEvent(currentT) == true) + { + local particleCreater = sq_var.GetparticleCreaterMap("FallenBlossomsP", "Character/Fighter/Particle/ATThrowWeb.ptl", obj); + + particleCreater.Restart(0); + local dstX = sq_GetDistancePos(posX, obj.getDirection(), -20); + particleCreater.SetPos(dstX, posY + 1, posZ + 5); + + sq_AddParticleObject(obj, particleCreater); + } + + + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_2) { + // SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_3) { + // SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_4) { + // SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_FallenBlossoms(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FALLENBLOSSOMS_0) { + // SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_1) { + // SUB_STATE_FALLENBLOSSOMS_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_2) { + // SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_3) { + // SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_4) { + // SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_FallenBlossoms(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) + return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FALLENBLOSSOMS_0) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FALLENBLOSSOMS_1); // substate撮? + obj.sq_AddSetStatePacket(STATE_FALLENBLOSSOMS, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_1) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FALLENBLOSSOMS_2); // substate撮? + obj.sq_AddSetStatePacket(STATE_FALLENBLOSSOMS, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_2) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_3) { + // SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_4) { + // SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_FallenBlossoms(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FALLENBLOSSOMS_0) { + // SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_1) { + // SUB_STATE_FALLENBLOSSOMS_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_2) { + // SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_3) { + // SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_4) { + // SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_FallenBlossoms(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FALLENBLOSSOMS_0) { + // SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_1) { + // SUB_STATE_FALLENBLOSSOMS_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_2) { + // SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_3) { + // SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_4) { + // SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onAfterSetState_FallenBlossoms(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FALLENBLOSSOMS_0) { + // SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_1) { + // SUB_STATE_FALLENBLOSSOMS_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_2) { + // SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_3) { + // SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FALLENBLOSSOMS_4) { + // SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机 + } + + +} + \ No newline at end of file diff --git a/character/atmage/firepillar/firepillar.nut b/character/atmage/firepillar/firepillar.nut new file mode 100644 index 0000000..5c87c79 --- /dev/null +++ b/character/atmage/firepillar/firepillar.nut @@ -0,0 +1,388 @@ + +SUB_STATE_FIREPILLAR_0 <- 0 +SUB_STATE_FIREPILLAR_1 <- 1 +SUB_STATE_FIREPILLAR_2 <- 2 +SUB_STATE_FIREPILLAR_3 <- 3 +SUB_STATE_FIREPILLAR_4 <- 4 + +function checkExecutableSkill_FirePillar(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_FIREPILLAR); + + if(b_useskill) + { + obj.sq_IsEnterSkillLastKeyUnits(SKILL_FIREPILLAR); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FIREPILLAR_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_FIREPILLAR, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; + +} + +function checkCommandEnable_FirePillar(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) + { + return obj.sq_IsCommandEnable(SKILL_FIREPILLAR); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + + return true; + +} + +function onSetState_FirePillar(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + + obj.getVar("firepillar").clear_vector(); + obj.getVar("firepillar").push_vector(0); + obj.getVar("firepillar").push_vector(0); + obj.getVar("firepillar").push_vector(0); + + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + if(substate == SUB_STATE_FIREPILLAR_0) + { + obj.sq_PlaySound("MW_FPILLAR_READY"); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FIREPILLAR1); + + addElementalChain_ATMage(obj, ENUM_ELEMENT_FIRE); + } + else if(substate == SUB_STATE_FIREPILLAR_1) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FIREPILLAR2); + } + else if(substate == SUB_STATE_FIREPILLAR_2) + { + obj.sq_PlaySound("MW_FPILLAR"); + + if(obj.isMyControlObject()) + { + local skillLevel = obj.sq_GetSkillLevel(SKILL_FIREPILLAR); + local arriveTime = obj.sq_GetIntData(SKILL_FIREPILLAR, 0); // 0. 模辨给桧 釭陛朝 楼紫 (剪葬梱虽 紫殖?朝 卫除) (1/1000蟾) + local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_FIREPILLAR, STATE_FIREPILLAR, 2, 1.0); // 2. 颤问 奢问溘(%) + local distance = obj.sq_GetLevelData(SKILL_FIREPILLAR, 1, skillLevel); // 1.釭陛朝 剪葬 + local term = obj.sq_GetIntData(SKILL_FIREPILLAR, 2); // 2. 棻钦?? 除问 + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(attackRate); // 横鸥奢问溘 + sq_BinaryWriteDword(distance); // 釭陛朝 剪葬 + sq_BinaryWriteDword(arriveTime); // 模辨给桧 釭陛朝 楼紫 (剪葬梱虽 紫殖?朝 卫除) (1/1000蟾) + sq_BinaryWriteDword(term); // 棻钦?? 除问 + obj.sq_SendCreatePassiveObjectPacket(24254, 0, 0, 1, 0); // + } + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FIREPILLAR3); + } + else if(substate == SUB_STATE_FIREPILLAR_3) + { + } + else if(substate == SUB_STATE_FIREPILLAR_4) + { + } + + //obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + // SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function prepareDraw_FirePillar(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FIREPILLAR_0) { + // SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_1) { + // SUB_STATE_FIREPILLAR_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_2) { + // SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_3) { + // SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_4) { + // SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机 + } +} + +function onProc_FirePillar(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + //print(" substate:" + substate); + + if(substate == SUB_STATE_FIREPILLAR_0) { + // SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_1) { + } + else if(substate == SUB_STATE_FIREPILLAR_2) { + // SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_3) { + // SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_4) { + // SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机 + } +} + +function onProcCon_FirePillar(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FIREPILLAR_0) { + // SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_1) + { + local bDownKey = obj.isDownSkillLastKey(); + local stateTimer = obj.sq_GetStateTimer(); + local grabMaxTime = obj.sq_GetIntData(SKILL_FIREPILLAR, 1); // 1. 模辨给桧 濩坚 毡朝 譆渠卫除 + + // 蹂羶饵? + // 谏醱 ?缣 谏醱卫除虏踯 ?脑贼 濠翕戏煎 剩横骨栖棻.. + if(!bDownKey || stateTimer >= grabMaxTime)// 桨击 嗥历棻朝匙擎.. + //if(!bDownKey)// 桨击 嗥历棻朝匙擎.. + { // 桨击 嗥历棻朝匙擎.. + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FIREPILLAR_2); // substate撮? + obj.sq_AddSetStatePacket(STATE_FIREPILLAR, STATE_PRIORITY_USER, true); + return; + } + } + else if(substate == SUB_STATE_FIREPILLAR_2) { + // SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_3) { + // SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_4) { + // SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_FirePillar(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) { + return; + } + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FIREPILLAR_0) { + + print( " onend:" + substate); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FIREPILLAR_1); // substate撮? + obj.sq_AddSetStatePacket(STATE_FIREPILLAR, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_FIREPILLAR_1) { + } + else if(substate == SUB_STATE_FIREPILLAR_2) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(substate == SUB_STATE_FIREPILLAR_3) { + // SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_4) { + // SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_FirePillar(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FIREPILLAR_0) { + // SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_1) { + // SUB_STATE_FIREPILLAR_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_2) { + // SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_3) { + // SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_4) { + // SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_FirePillar(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FIREPILLAR_0) { + // SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_1) { + // SUB_STATE_FIREPILLAR_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_2) { + // SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_3) { + // SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_4) { + // SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onAfterSetState_FirePillar(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FIREPILLAR_0) { + } + else if(substate == SUB_STATE_FIREPILLAR_1) { + // SUB_STATE_FIREPILLAR_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_2) { + // SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_3) { + // SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FIREPILLAR_4) { + // SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机 + } + + +} + + +function onBeforeDamage_FirePillar(obj, attacker, boundingBox, isStuck) +//function onBeforeDamage_FirePillar(obj, attacker, boundingBox) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FIREPILLAR_1) + { + // // 碳晦菅 锰剪葬 奢问暧 等嘐虽蒂 N%虏踯 马模卫郦坚, 唳霜击 嫡虽 强蝗栖棻. + local isMeleeAttack = attacker.isMeleeAttack(); + local isMissileObj = attacker.isMissileObject(); + + if((isMeleeAttack == false) || (isMissileObj == true)) + { + local direction = sq_GetOppositeDirection(obj. sq_GetDirection(obj)); + + if(direction == sq_GetDirection(attacker)) + { + local attackerInfo = sq_GetCurrentAttackInfo(attacker); + + print( " isMeleeAttack:" + isMeleeAttack); + print( " isMissileObj:" + isMissileObj); + if(attackerInfo) + { + local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackerInfo); + + local backupRate = rateDamager * 100.0; + obj.getVar("firepillar").set_vector(VECTOR_FLAG_0, backupRate.tointeger()); + + sq_SetAttackInfoHitDelayRateDamager(attackerInfo, 0.0); // 横鸥 蝶欐?徽击 0.0戏煎 虏菟横帼萼棻.. + + obj.getVar("firepillar").set_vector(VECTOR_FLAG_1, sq_GetCurrentAttackeDamageAct(attackerInfo)); + print( " DAMAGEACT_NONE"); + sq_SetCurrentAttackeDamageAct(attackerInfo, DAMAGEACT_NONE); + + obj.getVar("firepillar").set_vector(VECTOR_FLAG_2, 1); + } + } + } + } + +} + +function onAfterDamage_FirePillar(obj, attacker, boundingBox) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + // // 碳晦菅 锰剪葬 奢问暧 等嘐虽蒂 N%虏踯 马模卫郦坚, 唳霜击 嫡虽 强蝗栖棻. + if(substate == SUB_STATE_FIREPILLAR_1) + { + if(obj.getVar("firepillar").get_vector(VECTOR_FLAG_2)) + { + local attackerInfo = sq_GetCurrentAttackInfo(attacker); + + if(attackerInfo) + { + local backupRate = obj.getVar("firepillar").get_vector(VECTOR_FLAG_0); + local damageAct = obj.getVar("firepillar").get_vector(VECTOR_FLAG_1); + local rateDamager = backupRate.tofloat() / 100.0; + sq_SetAttackInfoHitDelayRateDamager(attackerInfo, rateDamager); // 横鸥 蝶欐?徽击 0.0戏煎 虏菟横帼萼棻.. + sq_SetCurrentAttackeDamageAct(attackerInfo, damageAct); + } + + obj.getVar("firepillar").set_vector(VECTOR_FLAG_2, 0); + } + } +} + \ No newline at end of file diff --git a/character/atmage/firepillar/po_atfirepillar.nut b/character/atmage/firepillar/po_atfirepillar.nut new file mode 100644 index 0000000..32a0b89 --- /dev/null +++ b/character/atmage/firepillar/po_atfirepillar.nut @@ -0,0 +1,241 @@ + +function setCustomData_po_ATFirePillar(obj, reciveData) +{ + if(!obj) return; + + local attackRate = reciveData.readDword(); // 横鸥奢问溘 + local distance = reciveData.readDword(); // 釭陛朝 剪葬 + local arriveTime = reciveData.readDword(); // 模辨给桧 釭陛朝 楼紫 (剪葬梱虽 紫殖?朝 卫除) (1/1000蟾) + local term = reciveData.readDword(); + + initGetVarTimer(obj, 1, term, -1); + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(0); + + obj.getVar("flag").clear_vector(); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + obj.getVar("dis").clear_vector(); + + obj.getVar("dis").push_vector(x); + obj.getVar("dis").push_vector(y); + obj.getVar("dis").push_vector(z); + obj.getVar("dis").push_vector(distance); + + obj.getVar("arriveTime").clear_vector(); + obj.getVar("arriveTime").push_vector(arriveTime); + + obj.getVar("frmIndex").clear_vector(); + obj.getVar("frmIndex").push_vector(0); + obj.getVar("frmIndex").push_vector(0); + obj.getVar("frmIndex").push_vector(0); + + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, attackRate); + + if(obj.isMyControlObject()) { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + +} + +function setState_po_ATFirePillar(obj, state, datas) +{ + if(!obj) return; + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + obj.getVar("flag").set_vector(VECTOR_FLAG_0, 0); + + //initGetVarTimer(obj, 1, 400, 10); + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + } + +} + +function procAppend_po_ATFirePillar(obj) +{ + + if(!obj) return; + + local state = obj.getVar("state").get_vector(0); + local passiveState = state; + + local pAni = obj.getCurrentAnimation(); + local frmIndex = sq_GetAnimationFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + local objX = sq_GetXPos(obj); + local objY = sq_GetYPos(obj); + local parentObj = obj.getParent(); + + if(!parentObj) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + + if(parentObj.getState() != STATE_FIREPILLAR) + { + //if(passiveState == PASSIVEOBJ_SUB_STATE_0) + //{ + //if(obj.isMyControlObject()) + //{ + //local pIntVec = sq_GetGlobalIntVector(); + // + //sq_IntVectorClear(pIntVec); + //sq_IntVectorPush(pIntVec, 0); +// + //obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + //return; + //} + //} + } + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + + local fireT = obj.getVar("arriveTime").get_vector(0); + + local srcX = obj.getVar("dis").get_vector(0); // 卫蒙x + local srcY = obj.getVar("dis").get_vector(1); // 卫蒙y + local srcZ = obj.getVar("dis").get_vector(2); // 卫蒙z + + local distance = obj.getVar("dis").get_vector(3); // 识 桧翕剪葬 + + local v = sq_GetUniformVelocity(0, distance, currentT, fireT); + print(" distance:" + distance); + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + local dstY = srcY; + + sq_setCurrentAxisPos(obj, 0, dstX); + + if(currentT >= fireT) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + + local hitT = obj.getVar().get_timer_vector(0); + + if(hitT) + { + if(hitT.isOnEvent(currentT) == true) + { + print(" reset"); + obj.resetHitObjectList(); + } + } + + } + + local oldFrmIndex = obj.getVar("frmIndex").get_vector(VECTOR_FLAG_0); + if(frmIndex != oldFrmIndex) + { + obj.getVar("frmIndex").set_vector(VECTOR_FLAG_0, frmIndex); + + local x = objX; + local y = objY; + + local cnt = obj.getVar("frmIndex").get_vector(VECTOR_FLAG_1); + local size = 3; + local iKeyList =[]; + iKeyList.resize(size); + + iKeyList[0] = 0; + iKeyList[1] = 15; + iKeyList[2] = -15; + + local yList =[]; + yList.resize(size); + yList[0] = -1; + yList[1] = 1; + yList[2] = -2; + + local pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATFirePillar/3_firetail_dodge.ani", true, x, y + yList[cnt], iKeyList[cnt]); + + pooledObj.setCurrentDirection(obj.getDirection()); + + cnt = cnt + 1; + if(cnt > (size - 1)) + { + cnt = 0; + } + obj.getVar("frmIndex").set_vector(VECTOR_FLAG_1, cnt); + } + +} + +function onChangeSkillEffect_po_ATFirePillar(obj, skillIndex, reciveData) +{ + + if(!obj) return; + +} + +function onDestroyObject_po_ATFirePillar(obj, object) +{ + + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATFirePillar(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATFirePillar(obj) +{ + if(!obj) return; + + local state = obj.getVar("state").get_vector(0); + local passiveState = state; + + if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } +} + + + diff --git a/character/atmage/fireroad/fire_road.nut b/character/atmage/fireroad/fire_road.nut new file mode 100644 index 0000000000000000000000000000000000000000..10beef8b66f6482dc7af76ae8dd0bfb16ccb36ba GIT binary patch literal 5137 zcmd5=|4$QV828tb@ISmWF}X^IwCXQotf}qc8os7260$tnU z4esUDjFd;RKBBYzs0V>$r~XYkURx8AeewSObZ;%MrOq}#B8GhSR>e4n zGe$IzB~75xb$5n~`bDA3-|ahb0_nxEq#+sDoPQN|>4;>rNo>$N!&2rFHiTp*2`@M(x27TfC*8dVDgNy&-|$!YU+vTPD( z>lE^I>LeZ~lV^DxJQc7{&Iw$mher`fr6SQjD435XlIykese7DitOtTTmJeT6R-c&% zbCtIb&8su!`UVP@AFo>*e^zJrthFDJwe!eYzh{;nqw3lNbL)q&xwT?G-0wuz;+nbs z#ys5m4CJfpo0XXz^i`-U80zdg)fwvg+CfA!H_jx6`ozIVA~7^d^G@>YgO4};-bAa4 zsAOqvJqZpVniURPhzXoGXXn7>FtUDsRJnbK!sgOEs@~l+pOlbw{atzf7KC8!y+zjU zE=Y$_`R-GYx7H4jSt^-xyWk0c8O+5rX)-G5##yO&0n_dPR8Y5E2v8Lpbj=(KpsZv_ zdI0(*fpu)8ARtT_z+OW=J*W$uWKgy$I2fWNK(29T|)} zO_z>FlBuAlrHAvfowD3v4}ag@n`8Pel+am?+vmAz-y;&o&_zfmsj01)AO zW#%Vj&fWp=H5CUTWWKsrUVZ@uhf)U+LHO2+^}Ga?Ht+8urWQ1DIb_|u&B0x#v4##J z94^mMU&7TJuU+E2FeIz}_%hBzX#hc_iEB$N%gtz!mo)=GBj~8@CCDQSO?N`UYN}b@ zm=BU&3r9_Tk)VE_Y9#Qa45g^;WH-Toz;&-C6>tngy{IQOnE>hvAlqY)Hr@AUAvr9Hv2^PEut>3xrr&{!n=X^=``E2>k^T`e9TR&aBmF5`zHTwt368+UaoUhH zqoHvfXWev9Y)RRyn8yWxv6PQqlw>6xNexJ>-2+G*92rQ9{o;T)n4&M zlLSAgNkX=APBHCm&<7J5o{%(5B65+AYt_R#t(nEGlX9ukye_?UcivMs;U@Sc+2G`0 zL*LCYenunz;@AiF_%DxrPdWc7fS`A7X*F}epfMP0F>laWs-f1j+N#orr)ksm=A{ds z!nkjE>JmUXkc}%@Jk_H7bi!e$i;Jo3+IY^9hLeH#$!kj)$Js^B1X4`6YoAOtN@~CrDg&*b_Uh!E(})&&jMVe~T0K<7><8o^I3(K8HbX`Q3qV4E!aU$plcJ zeN?_S?=hUwFqn9F}xlhIy<3hz$=J zL4G2UAj;c6LlMk3t3eu?4Mt`y^f9c3npq1mYb28snyeTZ;ix-VM^OiIeWzUH<7p2= z50NPv9s$bV@1yebQgyk+C+5n*Yjb;vun>Jj@a0qu2~0|cJ6+vKMxVQbfrX9^ihAHC z=wtg-lJ$YEU@Eh{)obsWk5 zZc^qJ)Z^V8naE9^Ti#}YntZ5H{>(IZ&APm?$(ppU*E_l! z!eQJOwidQ|Sir3NOO@THok*x|zpP%{vleb3>);SjZM}QKlIZc9Cdp=nMo;S69qdu; zIZ#y?ZUCj=4hs`<96A*W0@%r)lN6czOVzc_@^5=E?Zb=@53shsHW2M@n_#WW%1#eT zKn_(0eITP_D8#MsN++?BjZ$vmP0x1nmkN#A=rl~vmku<=sU463jY*Fw7J>T;(R_HD zF=#t&_62)JgKRS3``o=U&U$4WdZo6b8;y7L(26o&COydF)A|Ul5 zQbZsS5~{d}CZ#0lg{lz{_%*xU{EMD5vmTF)6QN42)GEo^l0D~szVpp-EE`WDQ!Ub8KXQs8%`e$B<;SFo7P9{SruX^) zwBT_+uap=sVv%GWi@8rqh4N>`LS-s{t}s?kb}Oh=igHe?^OM%B4dH@~53xUv!z`Xt zCumQoC^tPKdE08Z7;U_3EJ?x^2tCkGf$dAwNkRW7EgnyI1TrW9c0&2ckyFTTZbEZXWBIcy9BMKPlQOPy9eV#U%15-4g>x7vz zj8f=Vs7pnOG6{`5*50({^7f*VREDKD{aqNi8jHe%|B4Y79J`uZSYVbhfDWL#SX{{f z%J^GQ?F6lAD-~uPT4$4%!4{Q<%5OrQ#g$zQ5xfC#+K*bnA2&(x{Zjk4gJ5+%i>UFJ zA7uS&OOVvOS*w*AGbIj%K3rQTX#fsE{A{jzt)1Zct0c+DsV3f&9}e&D0^(lm`8yl_ zSKk2`iNAl}yZd`KC7oscmF3W*|8R@A9jm2su3V@fwkrs3bfo*}b1~2ZI6%zmg#gsP z-v?UZ5lR#eA#gyEA_a*2B(Zf6sb@Y&Lq8Xq5P=*U{e+A{6y(YknJa#JPx}ai)t5TP zE2pdj1w~G(v+`Q$WvwJhOWcO^*uz^$dXg%;ycHrq5Oi>>Png94D3=cVc@@KHRmxWInPuNz$GCB>k%p=_Z+Tufyi@;2mQsG-n&~z^} z$83u`c5O;tED1FXg4`@)oVjq^EW*8rgW$TbjfApj7VFR{fuyqjcgRq!L}#>}D5HO^ zWp>O?l#u{E*@z{pRYaQ-1+S Cad#2` literal 0 HcmV?d00001 diff --git a/character/atmage/flamecircle/flamecircle.nut b/character/atmage/flamecircle/flamecircle.nut new file mode 100644 index 0000000..ab2608b --- /dev/null +++ b/character/atmage/flamecircle/flamecircle.nut @@ -0,0 +1,431 @@ + +SUB_STATE_FLAMECIRCLE_0 <- 0 +SUB_STATE_FLAMECIRCLE_1 <- 1 +SUB_STATE_FLAMECIRCLE_2 <- 2 +SUB_STATE_FLAMECIRCLE_3 <- 3 +SUB_STATE_FLAMECIRCLE_4 <- 4 +SUB_STATE_FLAMECIRCLE_CASTING <- 5 + +SKL_LV_FRAMECIRCLE_0 <- 0 // 0. ?瞪热 +SKL_LV_FRAMECIRCLE_1 <- 1 // 1. ?瞪楼紫 寡徽 (100%~) +SKL_LV_FRAMECIRCLE_2 <- 2 // 2. ?瞪 奢问溘(%) +SKL_LV_FRAMECIRCLE_3 <- 3 // 3. ?栖卫 奢问溘(%) + + +function checkExecutableSkill_FlameCircle(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_FLAMECIRCLE); + + if(b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FLAMECIRCLE_CASTING); // substate撮? + obj.sq_AddSetStatePacket(STATE_FLAMECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; + +} + +function checkCommandEnable_FlameCircle(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) + { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_FLAMECIRCLE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_FLAMECIRCLE); + } + + + return true; + +} + +function onSetState_FlameCircle(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + obj.getVar("expflag").clear_vector(); + obj.getVar("expflag").push_vector(0); + + if(substate == SUB_STATE_FLAMECIRCLE_CASTING) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FLAMECIRCLE_CASTING); + + // 议蝶? 楼紫蒂 评塭陛紫烟 扑姜 + // 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻. + // 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻. + //local skillLevel = sq_GetSkillLevel(obj, SKILL_FLAMECIRCLE); + //local castTime = sq_GetCastTime(obj, SKILL_FLAMECIRCLE, skillLevel); + //local animation = sq_GetCurrentAnimation(obj); + //local startTime = sq_GetFrameStartTime(animation, 16); + //local speedRate = startTime.tofloat() / castTime.tofloat(); + //obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + // SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + // + //sq_StartDrawCastGauge(obj, startTime, true); + + addElementalChain_ATMage(obj, ENUM_ELEMENT_FIRE); + } + else if(substate == SUB_STATE_FLAMECIRCLE_0) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FLAMECIRCLE1); + local pAni = obj.sq_GetCurrentAni(); + } + else if(substate == SUB_STATE_FLAMECIRCLE_1) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FLAMECIRCLE2); + local pAni = obj.sq_GetCurrentAni(); + //pAni.setSpeedRate(100.0); + } + else if(substate == SUB_STATE_FLAMECIRCLE_2) { + obj.sq_PlaySound("MW_FLAMECILCLE"); + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FLAMECIRCLE3); + + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_FLAMECIRCLE); + local pAttack = sq_GetCurrentAttackInfo(obj); + + // 跷陛 觼煎栖赝 蒙机 + local currentAni = sq_GetCurrentAnimation(obj); + local exp100Rate = obj.sq_GetIntData(SKILL_FLAMECIRCLE, 1); // 1. 葆虽虞 ?嫦 等嘐虽 寡徽 (100%~) + local expRate = exp100Rate.tofloat() / 100.0; + print( " expRate:" + expRate); + sq_SetAttackBoundingBoxSizeRate(currentAni, expRate, expRate, expRate); + obj.getVar("expflag").set_vector(0, 1); + /////////////////////////// + + //SKL_LV_FRAMECIRCLE_3 <- 3 // 3. ?栖卫 奢问溘(%) + local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_FLAMECIRCLE, STATE_FLAMECIRCLE, SKL_LV_FRAMECIRCLE_3, 1.0); //3. ?栖卫 奢问溘(%) + sq_SetCurrentAttackBonusRate(pAttack, firstAttackRate); + obj.sq_SetShake(obj,2,300); + + //sq_SetCurrentAttackBonusRate(pAttack, attack_rate); + + } + else if(substate == SUB_STATE_FLAMECIRCLE_3) { + // SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_4) { + // SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机 + } + + //obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + // SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function prepareDraw_FlameCircle(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FLAMECIRCLE_0) { + // SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_1) { + // SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_2) { + // SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_3) { + // SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_4) { + // SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProc_FlameCircle(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + + if(substate == SUB_STATE_FLAMECIRCLE_0) { + if(frmIndex >= 2) { + if(!obj.getVar().get_vector(0)) { + + + if(obj.isMyControlObject()) { + local distanceL = 0; + local h = 0; + +//SKL_LV_FRAMECIRCLE_0 <- 0 // 0. ?瞪热 +//SKL_LV_FRAMECIRCLE_1 <- 1 // 1. ?瞪楼紫 寡徽 (100%~) +//SKL_LV_FRAMECIRCLE_2 <- 2 // 2. ?瞪 奢问溘(%) +//SKL_LV_FRAMECIRCLE_3 <- 3 // 3. ?栖卫 奢问溘(%) + local skill_level = obj.sq_GetSkillLevel(SKILL_FLAMECIRCLE); + + local spin_num = obj.sq_GetLevelData(SKILL_FLAMECIRCLE, SKL_LV_FRAMECIRCLE_0, skill_level); // 0.葭觼 譆渠 偎热 + local speed_rate = obj.sq_GetLevelData(SKILL_FLAMECIRCLE, SKL_LV_FRAMECIRCLE_1, skill_level); // 1.虽楼卫除 + local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_FLAMECIRCLE, STATE_FLAMECIRCLE, SKL_LV_FRAMECIRCLE_2, 1.0); //2.奢问溘(%) + + + local spin_radius = obj.sq_GetIntData(SKILL_FLAMECIRCLE, 0); // ?瞪奁唳 (100%~) + local spin_r = spin_radius.tofloat() / 100.0; + + sq_BinaryStartWrite(); + sq_BinaryWriteWord(spin_num); // 蝶? 偎热 + sq_BinaryWriteFloat(spin_r); // 蝶? 奁唳 + sq_BinaryWriteFloat(speed_rate.tofloat()); // 楼紫 + sq_BinaryWriteDword(firstAttackRate); // ?瞪 奢问溘(%) + obj.sq_SendCreatePassiveObjectPacket(24244, 0, distanceL, 1, h); + } + + obj.getVar().set_vector(0, 1); + } + } + + if(frmIndex >= 3) { + if(obj.getVar().get_vector(0) == 1) { + local flame_passive_obj = obj.sq_GetPassiveObject(24244); // 顶陛 当撩? ?溯歜怃赝 + local next_state = false; + + if(!flame_passive_obj) { + next_state = true; + } + else { + if(flame_passive_obj.sq_var.get_vector(3) == 1) { + next_state = true; + } + } + + if(next_state) { + // 桧啪 桡戏贼 + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FLAMECIRCLE_1); + obj.sq_AddSetStatePacket(STATE_FLAMECIRCLE, STATE_PRIORITY_USER, true); + } + } + } + } + } + else if(substate == SUB_STATE_FLAMECIRCLE_1) { + } + else if(substate == SUB_STATE_FLAMECIRCLE_2) { + if(frmIndex >= 1) { + if(!obj.getVar().get_vector(0)) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_FLAMECIRCLE, true, "Appendage/Character/ap_atmage_effect.nut", true); + obj.getVar().set_vector(0, 1); + } + } + } + else if(substate == SUB_STATE_FLAMECIRCLE_3) { + // SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_4) { + // SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_FlameCircle(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FLAMECIRCLE_0) { + // SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_1) { + // SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_2) { + // SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_3) { + // SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_4) { + // SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_FlameCircle(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + print( " substate:" + substate); + + if(substate == SUB_STATE_FLAMECIRCLE_CASTING) + { + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FLAMECIRCLE_0); + obj.sq_AddSetStatePacket(STATE_FLAMECIRCLE, STATE_PRIORITY_USER, true); + } + } + else if(substate == SUB_STATE_FLAMECIRCLE_0) { + } + else if(substate == SUB_STATE_FLAMECIRCLE_1) { + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FLAMECIRCLE_2); + obj.sq_AddSetStatePacket(STATE_FLAMECIRCLE, STATE_PRIORITY_USER, true); + } + } + else if(substate == SUB_STATE_FLAMECIRCLE_2) { + if(obj.isMyControlObject()) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + else if(substate == SUB_STATE_FLAMECIRCLE_3) { + // SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_4) { + // SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_FlameCircle(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FLAMECIRCLE_0) { + // SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_1) { + // SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_2) { + // SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_3) { + // SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_4) { + // SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_FlameCircle(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + // 觼煎栖赝 跷陛 蒙机 + // 横鸥梦蝶 寡徽击 锰鼻鹧煎 给溥捡?栖棻. + if(obj.getVar("expflag").get_vector(0)) + { + local ani = sq_GetCustomAni(obj, CUSTOM_ANI_FLAMECIRCLE3); + if(ani) + { + local currentAni = sq_GetCurrentAnimation(obj); + local exp100Rate = obj.sq_GetIntData(SKILL_FLAMECIRCLE, 1); // 1. 葆虽虞 ?嫦 等嘐虽 寡徽 (100%~) + local expOldRate = 100.0 / exp100Rate.tofloat(); + sq_SetAttackBoundingBoxSizeRate(currentAni, expOldRate, expOldRate, expOldRate); + } + } + /////////////////////////// + + + if(substate == SUB_STATE_FLAMECIRCLE_0) { + // SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_1) { + // SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_2) { + } + else if(substate == SUB_STATE_FLAMECIRCLE_3) { + // SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_4) { + // SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机 + } + + // 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据 + //sq_EndDrawCastGauge(obj); +} + +function onAfterSetState_FlameCircle(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FLAMECIRCLE_0) { + // SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_1) { + // SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_2) { + // SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_3) { + // SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FLAMECIRCLE_4) { + // SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机 + } + + +} + + +function onAttack_FlameCircle(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FLAMECIRCLE_2) { + // SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机 + sq_AddHitObject(obj, damager); + + } + + +} \ No newline at end of file diff --git a/character/atmage/flamecircle/po_atflamecircle.nut b/character/atmage/flamecircle/po_atflamecircle.nut new file mode 100644 index 0000000..d97ce93 --- /dev/null +++ b/character/atmage/flamecircle/po_atflamecircle.nut @@ -0,0 +1,189 @@ + +function setCustomData_po_ATFlameCircle(obj, reciveData) +{ + + if(!obj) return; + + local spin_count = reciveData.readWord(); + local radius = reciveData.readFloat(); + local speed = reciveData.readFloat(); + local attack_rate = reciveData.readDword(); + + local pAni = obj.getCurrentAnimation(); + pAni.setImageRate(radius, 1.0); + pAni.setSpeedRate(speed); + + obj.sq_var.clear_vector(); + obj.sq_var.push_vector(spin_count); // 0 + obj.sq_var.push_vector(0); // 1 + obj.sq_var.push_vector(0); // 2 + obj.sq_var.push_vector(0); // 3 + + obj.sq_var.clear_obj_vector(); + + + //local pRopeNormal = obj.sq_createCNRDAnimation("Effect/Animation/Spincutter/throw/4_rope_normal_0.ani"); + local ani = sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATFlameCircle/04_bspin_dodge.ani"); + + ani.setImageRate(radius, 1.0); + ani.setSpeedRate(speed); + + local bspin_dodge = sq_CreatePooledObject(ani,false); + bspin_dodge.setCurrentPos(obj.getXPos(),obj.getYPos()-2,obj.getZPos()-2); + bspin_dodge.setCurrentDirection(obj.getDirection()); + sq_AddObject(obj,bspin_dodge,2,false); + + obj.sq_var.push_obj_vector(bspin_dodge); + + sq_SetAttackBoundingBoxSizeRate(pAni, radius, radius, radius); + + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, attack_rate); +} + +function destroy_po_ATFlameCircle(obj) +{ + local bspin_dodge_obj = obj.sq_var.get_obj_vector(0); + print( " destroy_po_ATFlameCircle:" + bspin_dodge_obj); + + if(bspin_dodge_obj) { + bspin_dodge_obj.setValid(false); + obj.sq_var.clear_obj_vector(); + } + +} + +function setState_po_ATFlameCircle(obj, state, datas) +{ + if(!obj) return; + +} + +function onAttack_po_ATFlameCircle(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + + local spin_cnt = obj.sq_var.get_vector(1); + local total_spin_cnt = obj.sq_var.get_vector(0); + + if(spin_cnt >= total_spin_cnt) + { + sq_AddHitObject(obj, damager); + } + + return 0; +} + +function procAppend_po_ATFlameCircle(obj) +{ + if(!obj) return; + + local pChr = obj.getTopCharacter(); + + if(!pChr) + { + if(obj.isMyControlObject()) { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + + if(pChr.getState() != STATE_FLAMECIRCLE) + { + if(obj.isMyControlObject()) { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + + local pAni = obj.getCurrentAnimation(); + local frmIndex = sq_GetAnimationFrameIndex(pAni); + + local bspin_dodge_obj = obj.sq_var.get_obj_vector(0); + + if(bspin_dodge_obj) { + local bspin_dodge_ani = bspin_dodge_obj.getCurrentAnimation(); + local bspin_frm_index = sq_GetAnimationFrameIndex(bspin_dodge_ani); + sq_SetAnimationCurrentTimeByFrame(pAni, bspin_frm_index, false); + } + + if(frmIndex >= 0 && frmIndex < 3) { + if(obj.sq_var.get_vector(2) == 1) { + local cnt = obj.sq_var.get_vector(1); + + cnt = cnt + 1; + obj.sq_var.set_vector(1, cnt); // ?夥袜 给嬴除 苹遴?蒂 ?廓 棺萼棻.. + + obj.sq_var.set_vector(2, 0); + obj.resetHitObjectList(); + } + } + + if(frmIndex >= 3 && frmIndex <= 4) { + if(obj.sq_var.get_vector(2) == 0) { + local cnt = obj.sq_var.get_vector(1); + obj.sq_var.set_vector(2, 1); + } + } + + local spin_cnt = obj.sq_var.get_vector(1); + local total_spin_cnt = obj.sq_var.get_vector(0); + + if(spin_cnt >= (total_spin_cnt - 1)) { + if(obj.sq_var.get_vector(3) == 0) { + obj.sq_var.set_vector(3, 1); + } + } + + //print( " total_spin_cnt:" + total_spin_cnt + " spin_cnt:" + spin_cnt); + + if(spin_cnt >= total_spin_cnt) { + + //obj.resetHitObjectList(); + + if(bspin_dodge_obj) { + bspin_dodge_obj.setValid(false); + obj.sq_var.clear_obj_vector(); + } + + if(obj.isMyControlObject()) { + sq_SendDestroyPacketPassiveObject(obj); + } + } + +} + +function onDestroyObject_po_ATFlameCircle(obj, object) +{ + + if(!obj) return; + + if(object == obj) + { + local bspin_dodge_obj = obj.sq_var.get_obj_vector(0); + + if(bspin_dodge_obj) + { + bspin_dodge_obj.setValid(false); + obj.sq_var.clear_obj_vector(); + } + } +} + +function onKeyFrameFlag_po_ATFlameCircle(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATFlameCircle(obj) +{ + + if(!obj) return; + + + //if(obj.isMyControlObject()) { + //sq_SendDestroyPacketPassiveObject(obj); + //} + +} diff --git a/character/atmage/frozenland/frozenland.nut b/character/atmage/frozenland/frozenland.nut new file mode 100644 index 0000000..0ea6502 --- /dev/null +++ b/character/atmage/frozenland/frozenland.nut @@ -0,0 +1,419 @@ + +SUB_STATE_FROZENLAND_0 <- 0 +SUB_STATE_FROZENLAND_1 <- 1 +SUB_STATE_FROZENLAND_2 <- 2 +SUB_STATE_FROZENLAND_3 <- 3 +SUB_STATE_FROZENLAND_4 <- 4 +SUB_STATE_FROZENLAND_CASTING <- 5 + +function createShockWaveAnimation(obj, x, y, z) +{ + local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATFrozenLand/sub_dodge.ani"); + + local shockWaveObj = sq_CreatePooledObject(ani,true); + shockWaveObj = sq_SetEnumDrawLayer(shockWaveObj, ENUM_DRAWLAYER_BOTTOM); + + if(shockWaveObj) + { + shockWaveObj.setCurrentPos(x,y,z); + sq_AddObject(obj, shockWaveObj, OBJECTTYPE_DRAWONLY, false); + } +} + + +function checkExecutableSkill_FrozenLand(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_FROZENLAND); + + if(b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FROZENLAND_CASTING); // substate撮? + obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; + +} + +function checkCommandEnable_FrozenLand(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) + { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_FROZENLAND); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_FROZENLAND); + } + + + return true; + +} + +function onSetState_FrozenLand(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + obj.sq_StopMove(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + obj.getVar("state").clear_ct_vector(); + obj.getVar("state").push_ct_vector(); + + + if(substate == SUB_STATE_FROZENLAND_CASTING) + { + // 议蝶? 楼紫蒂 评塭陛紫烟 扑姜 + // 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻. + // 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻. + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND_CASTING); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_FROZENLAND); + local castTime = sq_GetCastTime(obj, SKILL_FROZENLAND, skillLevel); + local animation = sq_GetCurrentAnimation(obj); + local startTime = sq_GetFrameStartTime(animation, 16); + local speedRate = startTime.tofloat() / castTime.tofloat(); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + + sq_StartDrawCastGauge(obj, startTime, true); + obj.sq_PlaySound("MW_SLASHWATER"); + } + else if(substate == SUB_STATE_FROZENLAND_0) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND1); + + } + else if(substate == SUB_STATE_FROZENLAND_1) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND2); + } + else if(substate == SUB_STATE_FROZENLAND_2) { + local t = obj.getVar("state").get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + //obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND3); + } + else if(substate == SUB_STATE_FROZENLAND_3) + { + //print(" obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND3);"); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND3); + } + else if(substate == SUB_STATE_FROZENLAND_4) { + // SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机 + } + + //obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + // SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function prepareDraw_FrozenLand(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FROZENLAND_0) { + // SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_1) { + // SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_2) { + // SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_3) { + // SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_4) { + // SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProc_FrozenLand(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + if(substate == SUB_STATE_FROZENLAND_0) { + // SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_1) { + // SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_2) { + // SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机 + + local t = obj.getVar("state").get_ct_vector(0); + local currentT = 0; + + currentT = t.Get(); + + //print(" currentT:" + currentT); + + if(currentT > 240) + { + if(!obj.getVar().get_vector(1)) + { + //obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND3); + if(obj.isMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FROZENLAND_3); // substate撮? + obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + + obj.getVar().set_vector(1, 1); + } + } + + } + else if(substate == SUB_STATE_FROZENLAND_3) { + // SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_4) { + // SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_FrozenLand(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + + if(substate == SUB_STATE_FROZENLAND_0) { + if(frmIndex >= 4) { + if(obj.getVar().get_vector(0) == 0) + { + if(obj.isMyControlObject()) + { + local radiusRate = obj.sq_GetIntData(SKILL_FROZENLAND, 0);// 0. 卫瞪彰嫔 (葆彻霞 虽荤 绿徽 : 100%~) + local stopSpinNum = obj.sq_GetIntData(SKILL_FROZENLAND, 2); // 2. 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热 + local spinTime = obj.sq_GetIntData(SKILL_FROZENLAND, 3); // 3. 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除 + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(radiusRate); // 卫瞪彰嫔 (葆彻霞 虽荤 绿徽 : 100%~) + sq_BinaryWriteDword(stopSpinNum); // 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热 + sq_BinaryWriteDword(spinTime); // 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除 + + local multiHitTerm = obj.sq_GetIntData(SKILL_FROZENLAND, 1); // 1. 晦菅 棻钦?? 除问 (0.001蟾 钦嫔) + local multiHitAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_FROZENLAND, STATE_FROZENLAND, 0, 1.0); //0.晦菅 棻钦?? 奢问溘(%) + local expAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_FROZENLAND, STATE_FROZENLAND, 1, 1.0); // 1.晦菅 ?嫦 奢问溘(%) + obj.sq_GetLevelData(SKILL_FROZENLAND, 1, obj.sq_GetSkillLevel(SKILL_FROZENLAND)); + + // 2.彩念 ?徽 3.彩念 溯涟 4.彩念 卫除 + local skillLevel = obj.sq_GetSkillLevel(SKILL_FROZENLAND); + local frozenRate = obj.sq_GetLevelData(SKILL_FROZENLAND, 2, skillLevel); // 2.彩念 ?徽 + local frozenLevel = obj.sq_GetLevelData(SKILL_FROZENLAND, 3, skillLevel); // 3.彩念 溯涟 + local frozenTime = obj.sq_GetLevelData(SKILL_FROZENLAND, 4, skillLevel); // 4.彩念 卫除 + + sq_BinaryWriteDword(multiHitTerm); // 晦菅 棻钦?? 除问 + sq_BinaryWriteDword(multiHitAttackRate); // 晦菅 棻钦?? 奢问溘 (%) + sq_BinaryWriteDword(expAttackRate); // 晦菅 ?嫦 奢问溘 (%) + sq_BinaryWriteDword(frozenRate); // 彩念 ?徽 + sq_BinaryWriteDword(frozenLevel); // 彩念 溯涟 + sq_BinaryWriteDword(frozenTime); // 彩念 卫除 + + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻. + local spinAddTime = obj.sq_GetIntData(SKILL_FROZENLAND, 4); // 4. 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔) + sq_BinaryWriteDword(spinAddTime); // 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔) + + + obj.sq_SendCreatePassiveObjectPacket(24247, 0, 10, -1, 0); // 陴彻饵 - 橡横称擎 渠虽 (葆彻霞) + } + + obj.getVar().set_vector(0, 1); + } + } + } + else if(substate == SUB_STATE_FROZENLAND_1) { + + local magicCirclePassiveObj = obj.sq_GetPassiveObject(24247); // po_ATFrozenLandMagicCircle + local stateChange = true; + + if(magicCirclePassiveObj) + { + local magicCirclePassiveState = magicCirclePassiveObj.getState(); + + if(magicCirclePassiveState == S_PO_FROZENLAND_MC_3) + { + stateChange = true; + } + else + { + stateChange = false; + } + } + + if(stateChange) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FROZENLAND_2); // substate撮? + obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + + } + else if(substate == SUB_STATE_FROZENLAND_2) { + // SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_3) { + // SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_4) { + // SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_FrozenLand(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) { + return; + } + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FROZENLAND_CASTING) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FROZENLAND_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_FROZENLAND_0) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FROZENLAND_1); // substate撮? + obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_FROZENLAND_1) { + } + else if(substate == SUB_STATE_FROZENLAND_2) { + } + else if(substate == SUB_STATE_FROZENLAND_3) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(substate == SUB_STATE_FROZENLAND_4) { + // SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_FrozenLand(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FROZENLAND_0) { + // SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_1) { + // SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_2) { + // SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_3) { + // SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_4) { + // SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_FrozenLand(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FROZENLAND_0) { + // SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_1) { + // SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_2) { + // SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_3) { + // SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_4) { + // SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机 + } + + // 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据 + sq_EndDrawCastGauge(obj); + + + +} + +function onAfterSetState_FrozenLand(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_FROZENLAND_0) { + // SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_1) { + // SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_2) { + // SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_3) { + // SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_FROZENLAND_4) { + // SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机 + } + + +} + \ No newline at end of file diff --git a/character/atmage/frozenland/po_atfrozenlandexp.nut b/character/atmage/frozenland/po_atfrozenlandexp.nut new file mode 100644 index 0000000000000000000000000000000000000000..4f590def08645efa071c22c7c2872eda6c3bf344 GIT binary patch literal 7441 zcmeHMTW=fJ5%#ML=s%q3iA>kLN{&!B5h#jM)k-2k(oW@<#fn@?jHq39cWH|<3gm(m z1&X#P(57_}7iq3Y0wnE2fHt<1Uqed%7y0JQ*&DBt5d=k1h@_-FGjrz5<(oOf#p^Y_ zQr0)C<-4W5oxN!CmT*n4*mFJmWW(?b zy=&`*`le%_nbwYBHA|=6gnjUuCLFWTzGo6ia`E~D60p#2C0@W<5^G-1v2NiJULCt( zbcACx+da3|J~PG35#E$z8qJOSw$n@`Z;5nT3_g0};^EVa-+dTxny1}@=NXOTs^QIH zUK@P=@!+HPpZ(>F;n#l+1n}0`OlH1-;p=Z*eDz4I4gdX~IDh=@;G3s>27KaRsYBDd zV>pQ=*Mllc$yB3b8jgO?Yw|DNJ0p@ztp!V z&K<|JJdUqzt7TJcOBSrxM%LGDtLIV-C6pLVOxy~#MJA99+U{<@Xj`6RcghE^Axsj< zq(H7LsHEs_TizYB5va4(u@8(6Kje@iT6#mB;Bk?nE}?j(va#g~!pmRP1P7RuK^hs& zCXQ93_^lwNOfNBpBAQU5HBqY<>LtBW-7Z(R>-&1)cD<~LmeFxdO)M?Rt$zjW_;j3A;nohaW_hF7E%~i8#Ebu07prU#LIY)6nOFg?**oS(TnmF1*?5x5H=>3mT>Zl z;kv*+c4@kJWH?3xr%dk}hh{pUO-ErfjYvsLTaYQznPnXhbhqmmeflCa?z>Q z*Ulsjt@$9^=pg-NUgN2cm%aop7Uxg@Gko|lK${!~Zxx#U&R{_ttL-#VUjJFCSg-F_ zO8Q2%@M?K)XI}-fuNsGI?Z|E%ziQkw121yaB3cowQpbr=PR?w!9n^#WM|lQul;ym? z4@>%yo&BK$dx{>pxE}vokt~BV0>a2MiS<*vIN7cMhSA2kjKs*K@jea@m7y5=q)I?Yd*!{7 zCQ5s^cO~TP6!uG1eZ5?-mv`mal|kq2dGmYS6Lwihry1*H1!B{iD%(D#TJMJBbpN{;hMbJIz0fHuc|gua&%onMvL zhi8BK=lO5{#m7`^v$x6TM)-(#%s`ClaQtZ&M`~N1d1#{J*Tju19-_x$3(nxn#rg6p z%qBzCH%NY_L2{XwqSjlUPMk^QZ>~y}VuqM4J`3@50h?gKnOo(sRh(~z1+%bVK5mH{ zD{R3zT+4ATNNt2Y7PgroVFa-xF@nHE&B5&O4*>UqYc&=Vp4hw&xnCcG2+g6A(G z!1-{a)4AAAw0sJM&7=2G7;X&Hb7W8-(}Qw3iE{+ibByY|A$?w9(@BNo5?iW5;-6F1 zy!lX142pOzy!*nZnqm^Hqj6CP9d;a}=OMlkV9)z(Gt4(>yYVV=iOu3wglcj8cGq?6 zMxom^t>%;lI(eDVXSaCdgo#kM@xPiFU}lJ8;zb=dk*WHGe+fA!jgQDI3>a2(!*nrP z>hmBcHk2TChNy59OQ?VsJ6$&Dp;ED_=2&tvOT4(oT7N}=@&J)>5FCSErfoSV+cXIZ z=!4R-=@=)bT*H`6RT<_{cvcU1iVSe|_6d#Tn3jzh*L7;=|2(||d=n`D3L>26dH%!? zwv)D0)7gkA@8D8UuIigRg)JRiJa2j+-5I+&DNZ1^-(<%)f%ELx1&Q+X@f@chmLS|C z_eI-MF;$l1$|+H=QPY5F=8Whc%_Q6Ux!ISl-NbNvs$4p}^t~?{ipJC{Sxx12_N zpLg;-mQrn6a>c*6fQ>ltu9PeRS3CxTe8D{r-KOKDg)$kvmh_#D%zPxzz u8&HVBldp&GJ{tV_GjZ|mTf+|?4<7w(ZTQ|h_$vj?r8A-y!-H$ru6+j(cK@>g literal 0 HcmV?d00001 diff --git a/character/atmage/frozenland/po_atfrozenlandexpwaterpole.nut b/character/atmage/frozenland/po_atfrozenlandexpwaterpole.nut new file mode 100644 index 0000000..19975e7 --- /dev/null +++ b/character/atmage/frozenland/po_atfrozenlandexpwaterpole.nut @@ -0,0 +1,44 @@ + +function setCustomData_po_ATFrozenLandExpWaterPole(obj, reciveData) +{ + + if(!obj) return; + + local index = reciveData.readDword(); // 樯策蝶 + local expAttackRate = reciveData.readDword(); // ?嫦奢问溘 + + local atk = sq_GetCurrentAttackInfo(obj); + + if(atk) + { + sq_SetCurrentAttackBonusRate(atk, expAttackRate); + } + + if(index == 1) + { + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + } +} + + + + +function onDestroyObject_po_ATFrozenLandExpWaterPole(obj, object) +{ + + if(!obj) return; + +} + +function onEndCurrentAni_po_ATFrozenLandExpWaterPole(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) return; + + + sq_SendDestroyPacketPassiveObject(obj); + +} diff --git a/character/atmage/frozenland/po_atfrozenlandmagiccircle.nut b/character/atmage/frozenland/po_atfrozenlandmagiccircle.nut new file mode 100644 index 0000000..ec74ee1 --- /dev/null +++ b/character/atmage/frozenland/po_atfrozenlandmagiccircle.nut @@ -0,0 +1,516 @@ + +S_PO_FROZENLAND_MC_0 <- 10 +S_PO_FROZENLAND_MC_1 <- 11 +S_PO_FROZENLAND_MC_2 <- 12 +S_PO_FROZENLAND_MC_3 <- 13 +S_PO_FROZENLAND_MC_4 <- 14 +S_PO_FROZENLAND_MC_5 <- 15 + + +function insertIceFog(obj, dx, dy, dz) +{ + if(!obj) + return; + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + local particleCreater = obj.getVar().GetparticleCreaterMap("fronzenLand", "PassiveObject/Character/Mage/Particle/ATFrozenLand.ptl", obj); + + particleCreater.Restart(0); + particleCreater.SetPos(x + dx, y + dy, z + dz); + + //print(" insertIceFog:" + particleCreater); + sq_AddParticleObject(obj, particleCreater); + + +} + +function setCustomData_po_ATFrozenLandMagicCircle(obj, reciveData) +{ + + if(!obj) return; + + local radiusRate = reciveData.readDword(); // 卫瞪彰嫔 (葆彻霞 虽荤 绿徽 : 100%~) + local spinNum = reciveData.readDword(); // 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热 + local spinTime = reciveData.readDword(); // 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除 + + + local multiHitTerm = reciveData.readDword(); // 晦菅 棻钦?? 除问 + local multiHitAttackRate = reciveData.readDword(); // 晦菅 棻钦?? 奢问溘 (%) + local expAttackRate = reciveData.readDword(); // 晦菅 ?嫦 奢问溘 (%) + local frozenRate = reciveData.readDword(); // 彩念 ?徽 + local frozenLevel = reciveData.readDword(); // 彩念 溯涟 + local frozenTime = reciveData.readDword(); // 彩念 卫除 + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻. + local spinAddTime = reciveData.readDword(); // 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔) + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(0); + + obj.getVar("flag").clear_vector(); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + + obj.getVar("basePos").clear_vector(); + obj.getVar("basePos").push_vector(0); + obj.getVar("basePos").push_vector(0); + obj.getVar("basePos").push_vector(0); + + obj.getVar("flag").clear_timer_vector(); + obj.getVar("flag").push_timer_vector(); + + obj.getVar("icefog").clear_vector(); + obj.getVar("icefog").push_vector(0); + + local t = obj.getVar("flag").get_timer_vector(0); + t.setParameter(50, 1); + t.resetInstant(0); + + //radiusRate = 100; + + obj.getVar("radius").clear_vector(); + obj.getVar("radius").push_vector(radiusRate); // + obj.getVar("radius").push_vector(0); // setstate煎 setcurrentanimation 胀 拥栖诡桧暮 亿煎遴 绿徽 + obj.getVar("radius").push_vector(spinNum); // 2 蝶?偎热 + obj.getVar("radius").push_vector(spinTime); // 3 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除 + + obj.getVar("attack").clear_vector(); + obj.getVar("attack").push_vector(multiHitTerm); // + obj.getVar("attack").push_vector(multiHitAttackRate); // + obj.getVar("attack").push_vector(expAttackRate); // + obj.getVar("attack").push_vector(frozenRate); // + obj.getVar("attack").push_vector(frozenLevel); // + obj.getVar("attack").push_vector(frozenTime); // + + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻. + obj.getVar("spin").clear_vector(); + obj.getVar("spin").push_vector(spinAddTime); // + + if(obj.isMyControlObject()) { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, radiusRate); + + obj.addSetStatePacket(S_PO_FROZENLAND_MC_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + +} + +function setState_po_ATFrozenLandMagicCircle(obj, state, datas) +{ + + if(!obj) return; + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + obj.getVar("flag").set_vector(VECTOR_FLAG_0, 0); + + initGetVarTimer(obj, 1, 400, 10); + + if(passiveState == S_PO_FROZENLAND_MC_0) { + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + obj.getVar("basePos").set_vector(0, x); + obj.getVar("basePos").set_vector(1, y); + obj.getVar("basePos").set_vector(2, z); + + + local atk = sq_GetCurrentAttackInfo(obj); + + if(atk) + { + local frozenRate = obj.getVar("attack").get_vector(3); + local frozenLevel = obj.getVar("attack").get_vector(4); + local frozenTime = obj.getVar("attack").get_vector(5); + + print(" frozenRate:" + frozenRate); + + sq_SetChangeStatusIntoAttackInfo(atk, 0, ACTIVESTATUS_FREEZE, frozenRate, frozenLevel, frozenTime); + } + } + else if(passiveState == S_PO_FROZENLAND_MC_1) { + } + else if(passiveState == S_PO_FROZENLAND_MC_2) { + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + } + else if(passiveState == S_PO_FROZENLAND_MC_3) { + } + else if(passiveState == S_PO_FROZENLAND_MC_4) { + local ani = obj.getCustomAnimation(1); + obj.setCurrentAnimation(ani); + + + } + + if(passiveState != S_PO_FROZENLAND_MC_3) + { + local radius100Rate = obj.getVar("radius").get_vector(0); + local radiusRate = (radius100Rate.tofloat() / 100.0); + local currentAni = sq_GetCurrentAnimation(obj); + currentAni.setImageRateFromOriginal(radiusRate, radiusRate); + local size = (sq_GetAniRealImageSize(currentAni, ENUM_DIRECTION_RIGHT) / 2) + 60; + obj.getVar("radius").set_vector(1, size); + } + + //radius100Rate + + +} + +function procAppend_po_ATFrozenLandMagicCircle(obj) +{ + + if(!obj) return; + local pChr = obj.getTopCharacter(); + + if(!pChr) { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + return; + } + + local objX = sq_GetXPos(obj); + local objY = sq_GetYPos(obj); + local objZ = sq_GetZPos(obj); + + local state = obj.getVar("state").get_vector(0); + local passiveState = state; + + local pAni = sq_GetCurrentAnimation(obj); + local frmIndex = sq_GetAnimationFrameIndex(pAni); + + if(passiveState == S_PO_FROZENLAND_MC_0) { + // 罹晦 passivestate缣怃朝 晦菅 ?卫粽螃粽薛?菟击 虏蛙栖棻.. + if(frmIndex >= 2) { + if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0) { + if(obj.isMyControlObject()) { + + //obj.getVar("attack").push_vector(multiHitTerm); // + //obj.getVar("attack").push_vector(multiHitAttackRate); // + //obj.getVar("attack").push_vector(expAttackRate); // + //obj.getVar("attack").push_vector(frozenRate); // + //obj.getVar("attack").push_vector(frozenLevel); // + //obj.getVar("attack").push_vector(frozenTime); // + + local radius100Rate = obj.getVar("radius").get_vector(0); + local radiusRate = (radius100Rate.tofloat() / 100.0); + local size = (sq_GetAniRealImageSize(pAni, ENUM_DIRECTION_RIGHT) / 2) + 60; + obj.getVar("radius").set_vector(1, size); + + + local radiusSize = obj.getVar("radius").get_vector(1); + + local spinNum = obj.getVar("radius").get_vector(2); + local spinTime = obj.getVar("radius").get_vector(3); + local multiHitTerm = obj.getVar("attack").get_vector(0); + local multiHitAttackRate = obj.getVar("attack").get_vector(1); + + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻. + local spinAddTime = obj.getVar("spin").get_vector(0); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(0); // + sq_BinaryWriteDword(0); // + sq_BinaryWriteDword(radiusSize); // + sq_BinaryWriteDword(spinNum); // + sq_BinaryWriteDword(spinTime); // + sq_BinaryWriteDword(multiHitTerm); // + sq_BinaryWriteDword(multiHitAttackRate); // + sq_BinaryWriteDword(spinAddTime); // + sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24248, 0, 0, 0, 0); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(180); // + sq_BinaryWriteDword(1); // + sq_BinaryWriteDword(radiusSize); // + sq_BinaryWriteDword(spinNum); // + sq_BinaryWriteDword(spinTime); // + sq_BinaryWriteDword(multiHitTerm); // + sq_BinaryWriteDword(multiHitAttackRate); // + sq_BinaryWriteDword(spinAddTime); // + sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24248, 0, 0, 0, 0); + //obj.getVar().set_vector(1, 1); + } + + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_FROZENLAND_MC_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1); + + + } + local currentT = sq_GetCurrentTime(pAni); + //procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/ATFrozenLand.ptl", objX, objY + 5, objZ); + //insertIceFog(obj, 0, 5, 0); + } + } + else if(passiveState == S_PO_FROZENLAND_MC_1) { + } + else if(passiveState == S_PO_FROZENLAND_MC_2) { + // 罹晦 ?卫粽蝶才桧?缣怃朝 晦菅桧 桡横螺朝虽 ?樯?坚 棻 桡横螺棻贼 ?嫦?卫粽螃粽薛?蒂 当撩?怃 棻挤蝶才桧?煎 setstate?栖棻. + if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0) + { + local pole_passive_obj = sq_GetPassiveObject(obj, 24248); + if(!pole_passive_obj) + { + local parentObj = obj.getParent(); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Appendage/Character/ap_common_suck.nut"); + + if(obj.isMyControlObject()) { + + local radius100Rate = obj.getVar("radius").get_vector(0); + + local radiusRate = (radius100Rate.tofloat() / 100.0); + local currentAni = sq_GetCurrentAnimation(obj); + local size = (sq_GetAniRealImageSize(currentAni, ENUM_DIRECTION_RIGHT) / 2) + 60; + obj.getVar("radius").set_vector(1, size); + + local radiusSize = obj.getVar("radius").get_vector(1); + + local expAttackRate = obj.getVar("attack").get_vector(2); // + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(radiusSize); // + sq_BinaryWriteDword(expAttackRate); // ?嫦奢问溘 + sq_BinaryWriteDword(radius100Rate); // 怃赝 ?渠 绿徽 + + local cx = obj.getVar("basePos").get_vector(0); + local cy = obj.getVar("basePos").get_vector(1); + local cz = obj.getVar("basePos").get_vector(2); + + sq_SendCreatePassiveObjectPacket(obj, 24249, 0, 0, 1, 0, obj.getDirection()); + + //sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24249, 0, cx, cy, cz); // ?嫦 ?卫粽螃粽薛? + + + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_FROZENLAND_MC_3, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1); + } + else + { + if(obj.getVar("flag").get_vector(VECTOR_FLAG_2) == 0) + { + local poleState = pole_passive_obj.getState(); + + if(poleState == S_PO_FROZENLAND_POLE_1 || poleState == S_PO_FROZENLAND_POLE_2) + { + local poleAni = pole_passive_obj.getCurrentAnimation(); + + local frmIndex = sq_GetAnimationFrameIndex(poleAni); + + if(frmIndex >= 1) + { + // CNFlashScreen* sq_flashScreen(CNRDObject* obj, int inTime, int stayTime, int outTime, + // int maxAlpha, DWORD rbga, int effectType, int layerType) + sq_SetMyShake(obj,4,200); + + local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0); + + local poleAniDelayTime = poleAni.getDelaySum(0, poleAniFrameNumber - 1); + local poleAniLoopTime = poleAni.getDelaySum(3, poleAniFrameNumber - 1); + + local spinNum = obj.getVar("radius").get_vector(2); + local spinTime = obj.getVar("radius").get_vector(3); + + local totalSpinPoleDelaySum = ((spinNum - 1) * poleAniLoopTime) + poleAniDelayTime - 80; + + + totalSpinPoleDelaySum = totalSpinPoleDelaySum + spinTime; + + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻. + totalSpinPoleDelaySum = totalSpinPoleDelaySum + obj.getVar("spin").get_vector(0); + + //print( " spinNum:" + spinNum + " poleAniDelayTime:" + poleAniDelayTime + " poleAniLoopTime:" + poleAniLoopTime + " spinTime:" + spinTime + " totalSpinPoleDelaySum:" + totalSpinPoleDelaySum); + + if(obj.isMyControlObject()) + { + local fScreen = sq_flashScreen(obj,0,totalSpinPoleDelaySum,0,140, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + } + + obj.getVar("flag").set_vector(VECTOR_FLAG_2, 1); + } + } + } + + + if(!obj.getVar("flag").get_vector(VECTOR_FLAG_3)) + { + local poleState = pole_passive_obj.getState(); + if(poleState == S_PO_FROZENLAND_POLE_2) + { + print(" appendage suck"); + local parentObj = obj.getParent(); + + // 庄横菟桧朝 横?蛤虽 陛翕 + local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_FROZENLAND, false, "Appendage/Character/ap_common_suck.nut", false); + + local suckVel = 200; + local radiusSize = obj.getVar("radius").get_vector(1); + local range = radiusSize * 2; + + if(appendage) + { + appendage.sq_SetValidTime(2000); + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(appendage, parentObj, obj); + + local auraAppendage = appendage.sq_getAuraMaster("frozenAura"); + // + if(!auraAppendage) + auraAppendage = appendage.sq_AddAuraMaster("frozenAura",parentObj, obj, 1200, 18, 5, 0); + + auraAppendage.setAttractionInfo(suckVel, suckVel, range, 100); + } + + // + obj.getVar("flag").set_vector(VECTOR_FLAG_3, 1); + + obj.sq_PlaySound("ICEEARTH_SPIN"); + } + } + } + } + } + else if(passiveState == S_PO_FROZENLAND_MC_3) { + // 罹晦 ?卫粽蝶才桧?缣怃朝 ?嫦 ?卫粽暧 拥栖诡桧暮 ?溯歜击 ?樯?怃 饵塭虽啪 ?栖棻. + if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0) + { + local exp_passive_obj = sq_GetPassiveObject(obj, 24249); + + if(exp_passive_obj) + { + if(exp_passive_obj.getState() == S_PO_FROZENLAND_1) + { + local exp_ani = sq_GetCurrentAnimation(exp_passive_obj); + local exp_frm_index = sq_GetAnimationFrameIndex(exp_ani); + + if(exp_frm_index >= 4) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_FROZENLAND_MC_4, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + + obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1); + } + } + } + } + } + + local t = obj.getVar("flag").get_timer_vector(0); + + + + if(passiveState == S_PO_FROZENLAND_MC_2) + { + if(obj.getVar("flag").get_vector(VECTOR_FLAG_2) == 1) + { + local currentT = sq_GetCurrentTime(pAni); + + if(t.isOnEvent(currentT) == true) + { + local radius = obj.getVar("radius").get_vector(1); + // + //local offset = 20; + + local index = obj.getVar("icefog").get_vector(0); + + local size = 3; + local iKeyList =[]; + iKeyList.resize(size); + + iKeyList[0] = ((radius * 2) / 3); + iKeyList[1] = -(radius * 2) / 3; + iKeyList[2] = 0; + + print(" iKeyList[0]:" + iKeyList[0]); + print(" iKeyList[1]:" + iKeyList[1]); + + insertIceFog(obj, iKeyList[0], 2, 40); + insertIceFog(obj, iKeyList[1], 2, 40); + insertIceFog(obj, iKeyList[2], 2, 40); + + print(" insertIceFog:" + iKeyList[index]); + + index = index + 1; + + if(index > 2) + { + index = 0; + } + index = obj.getVar("icefog").set_vector(0, index); + } + } + + } +} + + +function onDestroyObject_po_ATFrozenLandMagicCircle(obj, object) +{ + + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATFrozenLandMagicCircle(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATFrozenLandMagicCircle(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) return; + + + local state = obj.getVar("state").get_vector(0); + + local passiveState = state; + + if(passiveState == S_PO_FROZENLAND_MC_0) { + //local pIntVec = sq_GetGlobalIntVector(); + // + //sq_IntVectorClear(pIntVec); + //sq_IntVectorPush(pIntVec, 0); + // + //obj.addSetStatePacket(S_PO_FROZENLAND_MC_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + else if(passiveState == S_PO_FROZENLAND_MC_1) { + } + else if(passiveState == S_PO_FROZENLAND_MC_2) { + } + else if(passiveState == S_PO_FROZENLAND_MC_4) { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } +} diff --git a/character/atmage/frozenland/po_atfrozenlandpole.nut b/character/atmage/frozenland/po_atfrozenlandpole.nut new file mode 100644 index 0000000..45baf36 --- /dev/null +++ b/character/atmage/frozenland/po_atfrozenlandpole.nut @@ -0,0 +1,420 @@ + +S_PO_FROZENLAND_POLE_0 <- 10 +S_PO_FROZENLAND_POLE_1 <- 11 +S_PO_FROZENLAND_POLE_2 <- 12 +S_PO_FROZENLAND_POLE_3 <- 13 + + + +function procCreateShockWaveAnimation(obj, currentT) +{ + if(!obj) + return; + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + local t = obj.getVar("state").get_timer_vector(0); + + if (t.getEventTerm() == -1) { + print(" return:" + t.getEventTerm()); + return; + } + + if (t.isOnEvent(currentT) == true) + { + createShockWaveAnimation(obj, x, y, z); + } + +} + + + +function setCustomData_po_ATFrozenLandPole(obj, reciveData) +{ + + if(!obj) return; + + local angle = reciveData.readDword() * 100; + local flip = reciveData.readDword(); + local radiusSize = reciveData.readDword(); // 奁虽荤 + + local spinNum = reciveData.readDword(); // 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热 + local spinTime = reciveData.readDword(); // 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除 + + local multiHitTerm = reciveData.readDword(); // 晦菅 棻钦?? 除问 + local multiHitAttackRate = reciveData.readDword(); // 晦菅 棻钦?? 奢问溘 (%) + + local spinAddTime = reciveData.readDword(); // 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔) + + local atk = sq_GetCurrentAttackInfo(obj); + + if(atk) + { + sq_SetCurrentAttackBonusRate(atk, multiHitAttackRate); + } + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(0); + + obj.getVar("spin_dir").clear_vector(); // state vector + obj.getVar("spin_dir").push_vector(angle); // state vector + + obj.getVar("flip").clear_vector(); // state vector + obj.getVar("flip").push_vector(0); + + obj.getVar("radius").clear_vector(); // state vector + obj.getVar("radius").push_vector(radiusSize); + + obj.getVar("pole").clear_vector(); + obj.getVar("pole").push_vector(spinNum); + obj.getVar("pole").push_vector(spinTime); + + + obj.getVar().clear_vector(); + + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + + if(obj.isMyControlObject()) { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_FROZENLAND_POLE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + + if(flip) + { + obj.getVar("flip").set_vector(0, 1); + } + + + obj.getVar("state").clear_timer_vector(); + obj.getVar("state").push_timer_vector(); + + local t = obj.getVar("state").get_timer_vector(0); + t.setParameter(200, -1); + t.resetInstant(0); + + local hitCnt = obj.sq_var.get_vector(VECTOR_I_MULTI_HIT_COUNT); + + print("\n\n multiHitTerm:" + multiHitTerm); + + obj.timer_.setParameter(multiHitTerm, -1); + obj.timer_.resetInstant(0); + + // 跷陛 觼煎栖赝 蒙机 + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻. + obj.getVar("spin").clear_vector(); + obj.getVar("spin").push_vector(spinAddTime); // 譆渠偎热 + obj.getVar("spin").push_vector(0); + + +} + +function setState_po_ATFrozenLandPole(obj, state, datas) +{ + + if(!obj) return; + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + if(passiveState == S_PO_FROZENLAND_POLE_0) + { + // 晦遽谢? + obj.getVar().set_vector(0, x); + obj.getVar().set_vector(1, y); + obj.getVar().set_vector(2, z); + + local radius = obj.getVar("radius").get_vector(0); + local current100Angle = obj.getVar("spin_dir").get_vector(0); + current100Angle = current100Angle % 36000; + + local angle = (current100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(x, obj.getDirection(), disMovLen.tointeger()); + + local axisMagnifyRate = 29.0; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + local mov_y = y + upMovLen.tointeger(); + + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 0, mov_x); + } + else if(passiveState == S_PO_FROZENLAND_POLE_1) + { + if(obj.getVar("flip").get_vector(0)) + { + local ani = obj.getCustomAnimation(1); + obj.setCurrentAnimation(ani); + } + else + { + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + } + + //local hitCnt = 10; + //local term = 4000 / hitCnt; + //print(" \n\n term:" + term); + ////obj.timer_.setParameter(term, hitCnt); + //obj.timer_.resetInstant(0); + + } + + + if(passiveState == S_PO_FROZENLAND_POLE_1 || passiveState == S_PO_FROZENLAND_POLE_3) + { + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + + local t = obj.getVar().get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + local stateTimer = obj.getVar("state").get_timer_vector(0); + stateTimer.setParameter(200, -1); + stateTimer.resetInstant(0); + } + +} + +function procAppend_po_ATFrozenLandPole(obj) +{ + if(!obj) return; + + local pChr = obj.getTopCharacter(); + + if(!pChr) { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + return; + } + + local state = obj.getVar("state").get_vector(0); + local passiveState = state; + + local pAni = sq_GetCurrentAnimation(obj); + local frmIndex = sq_GetAnimationFrameIndex(pAni); + //local currentT = sq_GetCurrentTime(pAni); + + local t = obj.getVar().get_ct_vector(0); + local currentT = 0; + + if(t) + currentT = t.Get(); + + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + if(passiveState == S_PO_FROZENLAND_POLE_0) { + } + else if(passiveState == S_PO_FROZENLAND_POLE_1) + { + local stopSpinNum = obj.getVar("pole").get_vector(0); + if(obj.getVar().get_vector(2) >= stopSpinNum) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻. + if(obj.getVar("spin").get_vector(0) > 0) + obj.addSetStatePacket(S_PO_FROZENLAND_POLE_3, pIntVec, STATE_PRIORITY_AUTO, false, ""); + else + obj.addSetStatePacket(S_PO_FROZENLAND_POLE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + + } + } + else + { + if(obj.getVar().get_vector(4) == 0) + { + if(frmIndex >= 6) + { + local spinNum = obj.getVar().get_vector(2); + + obj.getVar().set_vector(2, spinNum + 1); + obj.getVar().set_vector(4, 1); + } + } + else + { + if(obj.getVar().get_vector(4) == 1) + { + if(frmIndex < 6) + { + obj.getVar().set_vector(4, 0); + } + } + } + + obj.getVar().set_vector(3, currentT); + } + + procCreateShockWaveAnimation(obj, currentT); + } + else if(passiveState == S_PO_FROZENLAND_POLE_3) + { + local baseX = obj.getVar().get_vector(0); + local baseY = obj.getVar().get_vector(1); + // 陕紫 侦褐 + local currentSpeedRate = 1.0; + local defaultRoundTime = obj.getVar("pole").get_vector(1); + + local radiusBaseSize = obj.getVar("radius").get_vector(0); + local radius = radiusBaseSize; + + local base100Angle = obj.getVar("spin_dir").get_vector(0); + local current100Angle = (base100Angle + (36000 * currentSpeedRate * (currentT) / defaultRoundTime)) % 36000; + + + local angle = (current100Angle.tofloat() / 100.0); + + //print( " angle:" + angle); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, obj.getDirection(), disMovLen.tointeger()); + + local axisMagnifyRate = 29.0; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + local mov_y = baseY + upMovLen.tointeger(); + + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 0, mov_x); + + procCreateShockWaveAnimation(obj, currentT); + + // 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻. + local spinAddTime = obj.getVar("spin").get_vector(0); + if(currentT > spinAddTime) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_FROZENLAND_POLE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + + //obj.getVar("spin_dir").set_vector(0, angle.tointeger()); + obj.getVar().set_vector(3, currentT); + } + + + } + else if(passiveState == S_PO_FROZENLAND_POLE_2) + { + local delaySum = obj.getVar().get_vector(3); + //local delaySum = 0; + + local baseX = obj.getVar().get_vector(0); + local baseY = obj.getVar().get_vector(1); + // 陕紫 侦褐 + local currentSpeedRate = 1.0; + local defaultRoundTime = obj.getVar("pole").get_vector(1); + + local radiusBaseSize = obj.getVar("radius").get_vector(0); + local radius = sq_GetUniformVelocity(radiusBaseSize, 0, currentT - delaySum, defaultRoundTime); + + local base100Angle = obj.getVar("spin_dir").get_vector(0); + local current100Angle = (base100Angle + (36000 * currentSpeedRate * (currentT - delaySum) / defaultRoundTime)) % 36000; + + local angle = (current100Angle.tofloat() / 100.0); + + local disMovLen = radius * sq_CosTable(angle.tointeger()); + local mov_x = sq_GetDistancePos(baseX, obj.getDirection(), disMovLen.tointeger()); + + local axisMagnifyRate = 29.0; + local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; + local mov_y = baseY + upMovLen.tointeger(); + + sq_setCurrentAxisPos(obj, 1, mov_y); + sq_setCurrentAxisPos(obj, 0, mov_x); + + if(currentT > (defaultRoundTime + delaySum)) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + + procCreateShockWaveAnimation(obj, currentT); + } + + if (obj.timer_.isOnEvent(currentT) == true) + { + obj.resetHitObjectList(); + } + + + +} + + +function onDestroyObject_po_ATFrozenLandPole(obj, object) +{ + + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATFrozenLandPole(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATFrozenLandPole(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) return; + + + local state = obj.getVar("state").get_vector(0); + + local passiveState = state; + + if(passiveState == S_PO_FROZENLAND_POLE_0) { + + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_FROZENLAND_POLE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + else if(passiveState == S_PO_FROZENLAND_POLE_1) { + } + else if(passiveState == S_PO_FROZENLAND_POLE_2) { + } + +} +//*.obj;*.ani;*.als;*.lst;*.atk;*.skl;*.lst;*.ptl;*.nut;*.equ;*.ptl;*.etc +//*.obj;*.ani;*.als;*.lst;*.atk;*.skl;*.lst;*.ptl;*.nut;*.equ;*.ptl;*.etc +// *.obj;*.ani;*.als;*.lst;*.atk;*.skl;*.lst;*.ptl;*.nut;*.equ;*.ptl;*.etc;*.ui \ No newline at end of file diff --git a/character/atmage/holonglight/holong_light.nut b/character/atmage/holonglight/holong_light.nut new file mode 100644 index 0000000000000000000000000000000000000000..4ed9bd042a61592fa4253065b425930b04e39769 GIT binary patch literal 4669 zcmcIoTW=Fb6z0{D@*f5s&|29zjtiAaNF!rA#KO5K>p*E$SsQyCFIn%J-E~N~NR+6p zs*09N1-MNp;TEct^3Xs_6Uwjg?O*hqnb}?2*lDQL$X;b<&N*`~-?@zQWh3iora`g= znq5pR(`?yM=XI(qYPz18Fm=;dNNEcNM>6Nn1^fFh_4fs|ymS!Xh((>UWstn8+jJxV zJGz-wb&@s9hC@aP(1aGKGr2OO+P1btr{~YntP{gsDRLwdi3CT0hYRF9ACqv9;1NQS zZmKy&H(g=&`OHb`Fx679BPpknsZ?fSIyF6YGLuT4oJcc?OhK1b$P2XTiYHvbhkul2 z$4pZPtzE_tU(t*O$(PF4KxTmR28M=6v+`4;@}|1}BdNXEsI9G&vHG>E^@qQc=9laB z-AAOhv01%$gH*SkHlMs~tX?J6FIMY+zXmo^{dK$c;7((ESL}|}9_@rsCt-hq`5*j- zjtT_wrX_I~Yop;2?KpGV$iRT+8X52ydb*!`UeU}m7x;4P8mZsdg&2|M#w!eL zeSM?;@aLBJ%$M_dhG$STyx$mc6H8uB>?2g{NDNa87sTnHW-Dq@Zx^ee$^Wo##^R?>NJEXo-Y24WLzzv3Yg2{1k9RP?x5XK-gAf2{r zx4$FJ-JLPWp4!dVD5_lu0!73dYmDuv7Ox7J!fCBYyHo~wSRQoYz*656;Y(|)5n>-{ z@k^n`5l~zdH8(3pM+wgacuvL1<;!l>dxsz%RVMb@_fm;jh7spLna=={Z7j!rHYDvi zo0sS=mU`97=X4X4dFy;8n#(C7u|;Nb8(Q;I7Iw|dCZ}hU>9d(RB{3`WTF+_+!=&(- zW0fhx#}!nbJ=%QP-v=)2@5{F}o0wTFszxqhV87|sYETwgB--1w)Qi-@dHh+p4{}j>&a( zmG!IY=2~O@Rr8zeM&)}V9J8^Bjji_J+cD@+n7P71wYLwB0ey4retq>h`ONiJB>Z`c z<^pF)=&3C+?uAuMFJy*qJD%D>V;U}KJHa9oX0%Lls-xO6(d=1jQwJ-71wp(7f;(^o zV1-4Yrs9~TNplIB9AemAq)x1CS=4Z%hE`N@Mv`K4N_u)S6P-%FJ9M;hVpO!OQld1M zH1ejT%p?-=O#19hA`^=$=?r^^4C}fKk^%v~bvl}wOJw4S@#tJC?b3HF4u`@rfrn^y zz|FCu(ix^1jK0OI;El<&Z1pZtBDddfVi+l0Q1XN+?21lTtyK_+W z&)qRneR&Ta*SDIL$Dm@gRD$_{Kh*`AHWjT{(rItOhdkP$SV6VatV69KwUkkvBJgLh zorH|Ca|q5Cn#%;MlIInMrIr$88VMukN4OJG`+!ZaD#|*+-sQ8i9-77}x-xD-FCW*{ zg-%_d>cVQ$$kFBQYB5U@yYK;^d(;HF)3B)h0@kQB_L5Zh`B^4MAcPT_91ROVaX2gk z2nHh`;u!*7E3m>x9!_x)-aiV%P>Ccy83f9k{5g=uH5d#Frs=?BomMTFFnQEDNaGr$ zvXP}TrY-T6Pw-#RJ}9FJKpxjDxJF<;2Ib`-Y$4D!+|^c+Wa!DMZ&rOYP{=U-}cE6}rI zVtyY1VvKfU+<7aFh#RRtS3^xg2Wa->O3XAI%hadYPXSUeh(ZFF*wgF0IL@E3G`w}P zf)j9e*y0J$Sc2;-UKsF(@!M?@CCA{F{j9q61Kzi*Z*JFa{leha&N&WuLkF%&erk7< z&#Br{qZ?WLf@$R>x7qZj@F3NjMD?N4o5+oHZwfb*{&ep8O@Uq;gA1@j1>m^*#q7_1 bijm1OD;1d7;s}<+_`olGI%cy22M+uL)zZ~x literal 0 HcmV?d00001 diff --git a/character/atmage/holonglight/po_atholonglight.nut b/character/atmage/holonglight/po_atholonglight.nut new file mode 100644 index 0000000000000000000000000000000000000000..99682687038f5642296b86859ae1ce5471780a0c GIT binary patch literal 7362 zcmcIoYm*aI8s=-L;y;|74^~n(bHmviOQk~6Gm|1SiAiQw{LLVjL1s`(`;@ReaCIelJV&g#ZWNhmcpj3!g9X0peOQt_{P znT-4WFrvz0u~-d-{b3kQwpc8LB!2`6{TK67rJAYg#?h7ec}9PP1K89Q>pr;F-MP*B zj~@1ay~F;@diU=2KKZhH;l15QH(2Mvqjc}$yR7rU7u|3F)j#*Rd*k6Gh|-;p?(Y8Q zG3#CZZ}%S`b+6w^cfY#IW_Pb%$3=$2-o>3X(GFEYnk|($beNRr-1?^f`8_c1-}<@t z_-XImClJT_-`wnccE0oXhw41t+j-pE`B-R0@<80V{(b+euSZJC>6L1^cwCtKijdU1 ze82njTJMwZy6>DHgMt29sZgxsi_7G&Il&>_xqEwvf3qu#qb6|hMY9xP$qZE$3wre9z6ZkZpn%QJltH2vxB5@>oZ_?#v{ix$KlPMyW zlBpK38Sc;x;?m-Fz2cc3FWSxR671w&GIl#`LL#0qSu$)fauOD6+!~7pU+_?x zj<_A~=NgNpg0xmK$lC+DlJKCXXM0Fi1Ds1x_3!=W~t)TI1%nv@@ zfn!^58Wk#1*X6dC5m|TCvD>XO!jr_|!oXqPZa7r8DUC&Pl$f23RlZ|WhUr`2I->49 z|2%Kk`CA$b{+)H&wwFRHpnUOr0lp?=J75j7+2T@roKiwrt)=a(V|%XCES`9S*HG5% zrI$jELIOK-giV8OLhvQVbQKvbQV}&eQo ze4&7f2=S3(fDi><^xQTVV}QQ&etN_@KYZP}e~b0syV}2q$(0~t4o@?9YKSXmnD8ZW zBtMQ>)4}i%jv*2F#Nvt{&N4YTgE8XRIo?8ax24NQBvd`1fo2pieB>zDG%34rIc#Gk z@sn)O(c@8Z320+~88nWN@NIG)u8FnD#(Gy`O=A&V9K1T@^2|6g?LyPnSD+&t~3Gf54$4BM@ z`goWHt74eRW5Sofu?&IfUHF?|!;*qKb%y7(2E|_S_Xhx>=Oc`!23pL}Rvt_ZnNm`{ zU=r+kJ)9q^$)F=ZYcZ2I+pTq@<{4Y)g$~VYLYTnGfZ#pUc<+~AkaR>Wg;MJ!uPALJ zH>V|UK`>e7h=nYfg!~18alPc+^t7f3W&8yc5xqY-t@#eoW;D^cr83ijm`D``2=SnuY= zbm#uR)7T=U2lg&{;iyg5vb|bz!dH+@u$TSs(rlk13<^kse@L3pi{|DgfKAZevjC+Y zM;Eu(I3;kqmCP<;uhb11EGreGdc33?`l~DX(vrShHI_09Vx<&ut>~JZa}jJX={XIF zSy>ckkOIi~P&y`G(0b5r=sXde(!9vj>*K3cT0CAES1*-_abdzMk!Bd`hEi8K8`kD* zyf`P;#kw$|IExE@RFJK+6f^q2I;XD$NHcyY;<%EqTJQ(}0OM21+oEMgrrsXaFV|D$ z;GnlWSAR(*#maJ5lEpKvaYhRO zeApYMO(adw3!RsM?n-F1R;|gC6aKfU*e*S}=`|1Q|uW9*_ zo`_giYMR>>LK?}5LT0HXAM-NRW3u4KFGe5w$aW`_RiQ4Z`r;Yp^V=iGLJ=yIprC^u5y`?al6_6Cy{ec6 z?Iadndf$jposKAhssTZ!R^v@T8+K?83w6i@KL83b+Ne^8{Wp?8XZa2ic8%x0nm`3y zgbC{PM22&~AM9mnTv3JQW=AVT49OFLLct^s>q9jFmCX>Z5(6^i5g{2amu0yh=kj_= zpv!YlyYGJ-TVRAV!C<@xpP=ZJmULgKur}tJ9=@ce`(OO19wqU3{dwopAH{;A^2ciB z%+@;W_8$`jhT7ZMOl2`85fx<@(Oa#-$s=AHM$RsJ^-ZP7LVvdlUSERIMSNlLxZ_Z= z6g4kgo(QZHOTPGx8k1b-rTTu0Y?$q)7wa}T?*FEyu$q9el8N0IbbwkB#2$wH%!{QM zH% WWs&3d>?YwP{eP$;T)c1JzW)K2qeKP( literal 0 HcmV?d00001 diff --git a/character/atmage/icearea/icearea.nut b/character/atmage/icearea/icearea.nut new file mode 100644 index 0000000000000000000000000000000000000000..2e71aacd077c0f023c1261ed809d965956059897 GIT binary patch literal 3288 zcmbVPZBN@)6y8@O@gMHKC0i6iO821%AulmiL;@&IR#nqvImv~(I5xE%D4P0VrJYo1 zt5(*nV}nuFwTN}Vhf%b((Eb`b&cE2XFLvy_bnPT$@bx|CKIb{lIp;Duve+`}j%FID zeht@`rJK0ka@3lRWuQe>xA7$X zq?>hBM>VBoW1HBcDFi#y_6?GSgDA)Sx&;(81fIF z`P+|>zjNBTcY@rnHl~rkx#exY^xizagxvk@&i1eEjYIT#HZz`0XC~6w%ohnT)kSr#^&z=&yyQ)J+^ zU>%6+*+~+{Xo|}QO-)4(1AhV)4I^DAhYA7$cOX5&IT0g;LX-@O>6ah}qc$25FwDAO zIC<5fMbK-SLgOh!k4sJp1gP-VXwb(fasaacf&=wLY$w54oO;s;>L4mbpqVHvg&Kg+ zP9e=MV;egpGZwHyNa?9pU=$X)EM&)ADVeL7=`mQuPLAbEG_y zl?M@nBlsaAJvst`P9yK>S^MO9|Aphd;o?-#RCIr`>NU zlIhN!f4aMQS%!jmAB`~Ex@uE?yYkBMl|kZ))&VVg=0pvc4bShR9I_EHAg4k)NMb{i z8B1+qnUo}1PJ}*FC>yb~S1@jrSsRLYNjv7EZmLcqiN;V6Q+JURURMurh@;hI;;CRP znhAM9lJZLB>Vl-?M7g5ScPNg5%iu|1Up^CyRY}Q9Gh($^3AXnvhH!zo06B>Uyg)h9 zX!Dl3MmWE$ww5p>JrY<7k=8{CfMSz$+=R}f>bYyGW+-B%qy{$9T(zV~MX4msRg^0* zRLaCCUUe%LUQsPfPK=fvD=mODu(-I!S~XgmkS;>x5^qCtt47#lCD(hLX-Gz+tAzd| z2OLOBkY{Sxu!IRYmj}M-@e}SQ zJ$oDm8*7xn96_zwrS+U?IF_l;*RJC_=n=dMtex|w{J;7+x7FAUhU@-US=h5)N(!~KNBAx(3 z8I+teTZR+NxBqaJjfcb#Q9sUm0J<>53qAbZAnqc+W?GFzkXdp8 z00)^gj2{?-Fnl^&zjtLY$TXTtFbC^w+Wqr{jIfSAEULJri*G|L;4 zjG?W;KN92;Z`;}`X0^_5^x27Q77_}I&wc_AxKd?k`xeOEh~y2LVqedvJIIFk^`3Ur G5B>$HUsI(3 literal 0 HcmV?d00001 diff --git a/character/atmage/icearea/po_icearea.nut b/character/atmage/icearea/po_icearea.nut new file mode 100644 index 0000000000000000000000000000000000000000..e65109352e860cf5b9caa58c518dbe00ae0c4411 GIT binary patch literal 3649 zcma)9-%lGy5YFpa^8c`jRLPFc_TAa0Ap{}U9F-7qox6;YWQYSlM@;Cl*z~%^R9wb zLQ6CIG;D;c6JVCTu98q*K;L3S6$7Os_bF8@VSl@ zC{t1@MXrASu6yy%^}!o*b@Fd-|6TXL3qRz3Y_Tw>SIdQYhE=CXAGZ7B@7Mds{Q%gw znqOR5DC1@t19UHb>Fu48-sw^Ahhx(H=Jn;bXM>H?|Xm!I%v$IN8@bB*bhA#*=XA}&vb0kqF%n;@|@d=eJw zbCzRxu{dUon_K1vEt^d$5i)2!`<3I?!`2{jCUB>1d*hmWQuayd|L&R}GgR3*IIn1)P?l@|DAcGU5cLV0*DJA`q?Yb2`d8P^=v0^gaa2l> zJ$(w`fti=IsLgB3&)BBZ0`PF_N_dMk)E!I&-kG)m1kj2i<_mw@5pUJLw-AWm^I*O8 zWfihsGVHq3j6G3gRaN4Tm88NZi9ZlNoOe$S#2{kB%l{8p3YR>2I8D@~!nhISNEq5S zdED1)nS>GXfqvS6Yw ztjt$u3ne{YE-Wro7xa~KDOco`C9xFkvb`yEB~}h_78VgE3?>C0nl-_gDrXhYmdqNM zaKOhg@!U3LWB>ZMJUI8F}9ZZgvTu6n(SeGumOk<}9Nz zI4(BeEjwnM4F+&9LiYC()H5uSfBUf7__NW!m5dx2!6k-o z%sFID1^%qTQGUbYJ%f=SmpiDjKZrgxHUaI2kqUcd&2yl_6gdF)RWjC{s5+DmE7)-5 ziOWlH$98NTdPq zWi=aCGO;&c4el)~V{)GHEsSiXBBm)x&|5N#kZn@&Zb9Jj&Qp<%ZATTj`0f4T_n*j} zKYoB+mA-rIgr!$?UjFjq^5<7o_fayva_Ys44}ZP{SjyyK@|7z7oYHqwL8U3(v;@ju zy!*ar3?icun9?H#5dfmr5tAb^>mAdK#*$^=4_0P9e-iZ{J!Uajgb#+L4K6!d8fapx zJ8*iA4@?3oC5^uvh^H)rJZRB^V4pF0SMYg`=zpHb;{nZcXq_G23-ZG2jz{OmSRNDNF71Yp7UX8W+8e4p8-F zp%A2GLhOyw!vQWCrWGX~Q+~ukN##5bxD>ipRZi*Vl8#Hf-Y7Wman}#SXm{xQhrV0T zRQ*w$Q~!`Y07R|q6N)ICZXQt6M0nZ)329oai4ryJf)WZsDLjnJT_I9?&7&$~cS6$~ z>S#6q!kTDjnTWmFjPdbBigiGx3chnRYUp$RhKzc1|Jf`RIZlXef)xXW|Gr|iKb_V9 zbvO{Y?U38sq)TqxAR9>;*dbV&XO?%;wA`H`UFi zNu^3#jlZJlC4iT(#6&O(;fbYYp8>H@+G?8!gCVCyd4f;`sDISFUE$jr_bdh6lW54M z;)LzPx7exthb8 zoOnuC2-;~O8*zlAu3)nMN8XQUl6E!uk^3F^-0HZB_&0C4-A>2-^#4q?d4*I6n?3=Q z0AZtNsps=?DVK}5hm6x>>XJ8@>MW@;0AH4BBMBmD-Nxp)tdFoY#(=#}4lN4u5Of0J z>}oo 0) + { + // 庄横渡啖韩 迹瞳虽 颤啃, 庄横菟桧朝 ?暧 剪葬 , 颤啃戏煎 睡搅暧 迹瞳虽 剪葬, 庄横渡望 楼紫 + local appendage = sq_AttractToMe(obj, 200, 100, attractPower); + local var = obj.getVar(); + var.setAppendage(VAR_ICE_CHAKRAM_ATTRACT_APPENDAGE, appendage); + } + } + else if(substate == SUB_STATE_ICECHAKRAM_6) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICECHAKRAM_6); + } + + + +} + + +function onTimeEvent_IceChakram(obj, timeEventIndex, timeEventCount) +{ + if(!obj) + return false; + + if(!obj.isMyControlObject()) + return false; + + if(timeEventIndex == ENUM_ICE_CHAKRAM_TIMER_LARGE_MULTI_HIT) + { + obj.resetHitObjectList(); //棻钦??蒂嫔? ??螃粽薛? 葬蝶?蒂 葬掸. + return false; // false贼 啗楼 属寥 (timeEventCount苹遴?陛 嵘?桧塭贼 timeEventCount 虏踯 属寥) + } + + return true; // true贼 属寥 酝钦 +} + + +function prepareDraw_IceChakram(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ICECHAKRAM_0) { + // SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_1) { + // SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_2) { + // SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_3) { + // SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_4) { + // SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProc_IceChakram(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + obj.sq_StopMove(); + if(substate == SUB_STATE_ICECHAKRAM_0) { + // SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_1) { + // SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_2) { + // SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_3) { + // SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_4) { + // SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_IceChakram(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + + + + if(substate == SUB_STATE_ICECHAKRAM_0) { + // SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_1) + { + local loopTime = 400; + + local t = obj.getVar("state").get_ct_vector(0); + local currentT = 0; + + currentT = t.Get(); + + //print( " currentT:" + currentT + " loopTime:" + loopTime); + + if(currentT > loopTime) + { + if(!obj.getVar().get_vector(0)) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_2); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true); + + obj.getVar().set_vector(0, 1); + } + } + } + else if(substate == SUB_STATE_ICECHAKRAM_2) + { + if(obj.isMyControlObject()) + { + if(obj.getVar("ani").get_vector(0)) + { + local smallRingObj = obj.sq_GetPassiveObject(24258); // po_ATIceChakramSmallIceRing.nut 24258 + + if(smallRingObj) + { + local passiveState = smallRingObj.getState(); + + if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + local isFindChr = smallRingObj.getVar("findchr").get_vector(0); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_3); // substate撮? + obj.sq_IntVectPush(isFindChr); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + } + } + else if(substate == SUB_STATE_ICECHAKRAM_3) { + // SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_4) { + // SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_6) { + sq_RemoveParticle("Character/Mage/Effect/Particle/ATIceChakramDust.ptl", obj); + } + + +} + +function onEndCurrentAni_IceChakram(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ICECHAKRAM_0) { + // SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机 + if(obj.isMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_1); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if(substate == SUB_STATE_ICECHAKRAM_1) { + } + else if(substate == SUB_STATE_ICECHAKRAM_2) { + obj.getVar("ani").set_vector(0, 1); + } + else if(substate == SUB_STATE_ICECHAKRAM_3) { + // SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机 + if(obj.isMyControlObject()) + { + if(obj.getVar("findchr").get_vector(0)) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_5); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true); + } + else + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + else if(substate == SUB_STATE_ICECHAKRAM_4) { + // 陈嬴蚂 离觼茔击 赅戏朝 翕蒙 + obj.sendStatePacket(STATE_ICECHAKRAM, SUB_STATE_ICECHAKRAM_5); + } + else if(substate == SUB_STATE_ICECHAKRAM_5) { + // 赎 离觼茔 ?瞪 卫郦朝 翕蒙 + obj.sendStatePacket(STATE_ICECHAKRAM, SUB_STATE_ICECHAKRAM_6); + + } + else if(substate == SUB_STATE_ICECHAKRAM_6) { + // 赎 离觼茔 ?瞪 卫郦朝 翕蒙 + obj.sendStateOnlyPacket(STATE_STAND); + } + +} + +function onKeyFrameFlag_IceChakram(obj, flagIndex) +{ + + if(!obj) return true; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ICECHAKRAM_0) { + // SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_1) { + // SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_2) { + // SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_3) { + // SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_4) { + // SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机 + + } + else if(substate == SUB_STATE_ICECHAKRAM_5) { + if(flagIndex == 1) + { + obj.sq_PlaySound("RAGEBLAST_THROW_LOOP",3711); + + sq_SetMyShake(obj,2,100); + sq_CreateParticle("Character/Mage/Effect/Particle/ATIceChakramDust.ptl",obj,60, -60,0,true,350,1000,100); + sq_CreateParticle("Character/Mage/Effect/Particle/ATIceChakramDust_1.ptl",obj,-10,-10,0,true,350,1000,100); + } + } + else if(substate == SUB_STATE_ICECHAKRAM_6) { + if(flagIndex == 1) + { + local createXDis = 30; + local createYDis = 1; + local createZDis = 58; + local searchAngleH = 30; + local searchAngleV = 15; + local distance = 1000; + local angle = 20; + + local x = sq_GetDistancePos(obj.getXPos(), sq_GetDirection(obj), createXDis); + local y = sq_GetDistancePos(obj.getYPos(), ENUM_DIRECTION_DOWN, createYDis); + local z = sq_GetDistancePos(obj.getZPos(), ENUM_DIRECTION_UP, createZDis); + + local x_range = obj.sq_GetIntData(SKILL_ICECHAKRAM , 3); // x蹴 譆渠 彰嫔 + local y_range = 200; // + local z_range = 100; // + + printc("x_range " + x_range); + local activeObject = getPriorityTarget(obj, 0, x_range, y_range, z_range, null, true); + printc("activeObject " + activeObject); + + local maxDistance = activeObject ? abs(activeObject.getXPos() - x) : obj.sq_GetIntData(SKILL_ICECHAKRAM , 3);; + local horizonAngle = activeObject ? sq_GetShootingHorizonAngle(activeObject, y, 0, searchAngleH, maxDistance) : 0.0 ; + local verticalAngle = activeObject ? sq_GetShootingVerticalAngle(activeObject, z, 0, searchAngleV, maxDistance, 300) : 0.0; + local moveSpeed = obj.sq_GetIntData(SKILL_ICECHAKRAM , 5); + + sq_BinaryStartWrite(); + sq_BinaryWriteFloat(horizonAngle); // 桧翕 陕紫 热? + sq_BinaryWriteFloat(verticalAngle); // 桧翕 陕紫 热霜 + sq_BinaryWriteDword(moveSpeed); // 桧翕 楼紫 + sq_BinaryWriteDword(maxDistance); // 桧翕 剪葬 + sq_BinaryWriteDword(sq_GetGroup(activeObject)); // 颤啃 姜尔 + sq_BinaryWriteDword(sq_GetUniqueId(activeObject)); // 颤啃 姜尔 + + obj.sq_SendCreatePassiveObjectPacket(24234, 0, createXDis, createYDis, createZDis); + + local attractPower = sq_GetLevelData(obj, SKILL_ICECHAKRAM, 6, sq_GetSkillLevel(obj, SKILL_ICECHAKRAM)); + if(attractPower > 0) + { + local var = obj.getVar(); + local appendage = var.getAppendage(VAR_ICE_CHAKRAM_ATTRACT_APPENDAGE); + if(appendage) + appendage.setValid(false); + } + + obj.stopSound(3711); + } + } + + return true; + +} + +function onEndState_IceChakram(obj, new_state) +{ + if(!obj) + return; + + obj.stopSound(7577); + + if (new_state != STATE_STAND) + { + local var = obj.getVar(); + local appendage = var.getAppendage(VAR_ICE_CHAKRAM_ATTRACT_APPENDAGE); + if (appendage) + appendage.setValid(false); + } + + // 等嘐虽,鼻鹧桧鼻 蛔戏煎 嬴桧蝶 离觼茔桧 部陬棻. + if(new_state != STATE_ICECHAKRAM) + { + obj.stopSound(3711); + // ??赝 薯剪. + sq_RemoveParticle("Character/Mage/Effect/Particle/ATIceChakramDust.ptl", obj); + sq_RemoveParticle("Character/Mage/Effect/Particle/ATIceChakramDust_1.ptl", obj); + } +} + +function onAfterSetState_IceChakram(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ICECHAKRAM_0) { + // SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_1) { + // SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_2) { + // SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_3) { + // SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICECHAKRAM_4) { + // SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机 + } + + +} diff --git a/character/atmage/icechakram/po_aticechakramlarge.nut b/character/atmage/icechakram/po_aticechakramlarge.nut new file mode 100644 index 0000000000000000000000000000000000000000..87230d8783ab767e120b752df1b6f71e3962b69c GIT binary patch literal 7452 zcmcIpZF3XX74BCt!+*H(hm71=B-uclmQal>$wq^0xsnK>Uv}2gmAygU6|0ql!!Q%# z$s`O33?z^^7zzPH3#3dMXdpJ_&s1;!qR+W^-y}=MhQyXV^6H**&&zXOot`;1t*+hOStxg}y7BlLROp(32kHrq{-IIP5LGHb@nx089A{g5N zL18vC!^9T|#z8>e@|H|eEgYLr3&lh+txjf7WM-y9p?CL<#SXD(bT*S@hYzz}*#}b6 z4Ix1|b|^IPL_VEJolw*7&t`LlOm2qm7^gc}y!r56_uPy2#!L2R7H?fx@80=pAP1k8 zi1!QP=H2!7rxyi}=9dq9)Jh&J6m!#RqF78MkE)rO$())>PbOe>T1iZZN@svqGaD zhYUXFOXWBtAiK+UCZh`V$v^=Q2N>eS07iTFR2oLf)=h)ext*|Wt#mSDR7|yILa$7T zCl|DnmbRGHta%%~X?!V!7Ld!M zf?UMQRm=R4TY{0pGy;}W+@3IvMm?|D{J3r}%xd+zzQn_YqnT`$l7W*8n8IZA`HvJf zhF2sudPr*LT;sb?3XL1KIEB0*tT@nZos#7|1IwQVqM@e&M2hkQ7{MS3!e z+YQSg@8I>DL5x(8%oiI~TZcKw6jR!q=Y}j_;#CsRN3Ig;ceKI|Dugw-t#DGWRs~Uj zfb|oMN}o`mApGgh^b*1+{L1>^78Hf`39PV~!fdO-rRQQ4Lr*qYck@=f_3ReuNrv1_ zH0?Am?IhQb9|dJv8w=e8aRcyqTyoQu=zaIK#~0`TD3kjO1(Rc za=}J<$r;t>lTe8YY1e^(tj_TASz5fu2vHL6DA@-is;w4ggR{LCV3HGEjZkUAR`5 z^^`hW)s_op!zhPG@`LJu+;KIV%gv4`<9{3*L#1@;i&tIBylz|O^3b|6 zDqACHndbxmSA2r->uX7|B!rQuu+5s3T?*MRqbZ82$m&DoM8bA6zv#09eQ9h_Ig%vqE{G&tPQhL9)6* z(Ayc}sW|Inz9&I?%KF{UTBg*EXy zD+G5F%XWzCj|~tD5dZ;qqBHbGjV6CNW%mx*UM_G4cXz?yND~bH?Zoi4a0L(^-%_*$ zlHAe!lH!y;)kbu{&HWyor8rX&e_>zPIpA!7F zooqDvR~mu`f|FKX!`2i|{CFD&gb=ci44>`y6m*+M<}NB6c4E{QtbVOc#dz!^b6iOE7hIB>Xft<0BcHY4cWuI~UqFOOE5gtEy zP;q|H*-zyYvq!M#nVd`~i|R~nCauU?oXRJTXA>u|6rRWxvA2}r03KQybFO!FIB=`D z>Q8^bRr~3_;H5FlNwM8uC!$Zzbjt;-7UfRyfU^I9?8rreLvji1a4?;VjpH_Dx~wf? zJg^itM_s&b%ukr76{gp*Q!1StrS6qN0i!VOA<*r$uKW{%P+92jXT>l^ANa&xuPZ(y ze{ENks0h^>^#v7)N?pRn&$Pmhc*5Ww`S7xZBSJc-X0f;5CRMaWE<@9Kthii9qft5J zH$U5OHf3>SQWRWDn4)nf_2n5^kZH=KVeHlg44LP?X#e-Q)7Ew$ZK9mhzFYR25m0v4 zRxs1igYNY&XgAvacw>UV zG2r&IZNhCjdX_iQ3Vaxiy`z@Ie;XEbTP>UAc^=UWeS`#{j)&xM@1TdmOMyI5v&>SW zR>Sl&)GwYB2s(9~Ovwq}*=)$QKD$qtKFYIbd?})()nTHp+ezH&h-+TZ&NV+qcTbQzw23G~= 90 && currentAngle_ < 270) + { + obj.setCurrentDirection(ENUM_DIRECTION_LEFT); + } + else + { + obj.setCurrentDirection(ENUM_DIRECTION_RIGHT); + } +} + +function moveToBombingState(obj, currentAngle) +{ + //local angle = 20 + sq_getRandom(0, 10); + if(!obj) + return; + + if(obj.isMyControlObject()) + { + //int angle = 20 + Rand_r() % 10; + local angle = 50 + sq_getRandom(0, 10); + //local angle = sq_getRandom(0, 180); + + if(sq_getRandom(0, 2) != 0) + angle = -angle; + + //print( " send changeAngle:" + angle); + + sq_BinaryStartWrite(); + sq_BinaryWriteFloat(angle.tofloat()); + + sq_SendChangeSkillEffectPacket(obj, SKILL_ICECHAKRAM); + } +} + + + +function procSmallRingMove(obj) +{ + if(!obj) + return; + + //local target = obj.sq_var.get_obj_vector(0); + + //if (target) + { + local t = obj.getVar("sr").get_ct_vector(0); + if(!t) + return; + + local time = t.Get(); + + + local radius = 0; + local angle = 0; + local zPos = 0; + local currentAngle = 0; + //local bombingTurnStartTime_ = 10; + //local bombingTurnEndTime_ = 200; + local bombingTurnStartTime_ = 60; + local bombingTurnEndTime_ = 300; + local bombingStartAngle_ = obj.getVar("sr").get_vector(1) + local bombingChangeAngle_ = obj.getVar("sr").get_vector(0); + + //print( " bombingChangeAngle_:" + bombingChangeAngle_); + //local BOMBING_RADIUS = 40; + local BOMBING_RADIUS = 30; + + local srcZ = obj.getVar("pos").get_vector(2); + local currentAngle_ = obj.getVar("angle").get_vector(0); + + + if (time <= bombingTurnStartTime_) + { + // 霜摹 + //radius = sq_GetUniformVelocity((isFlyToCenter_)? 0 : -BOMBING_RADIUS, BOMBING_RADIUS, time, bombingTurnStartTime_); + radius = sq_GetUniformVelocity(0, BOMBING_RADIUS, time, bombingTurnStartTime_); + angle = bombingStartAngle_; + zPos = srcZ; + currentAngle = currentAngle_; + } + else + { + // 摹? + local dstZPos_ = obj.getVar("pos").get_vector(2); + + + //local OVER_RADIUS = 50; + local OVER_RADIUS = 150; + local turnTime = time - bombingTurnStartTime_; + local turnEndTime = bombingTurnEndTime_ - bombingTurnStartTime_; + + if (turnTime <= turnEndTime / 2) + radius = BOMBING_RADIUS + sq_GetAccel(0, OVER_RADIUS, turnTime, turnEndTime / 2, true); + else + radius = BOMBING_RADIUS + sq_GetAccel(OVER_RADIUS, 0, turnTime - turnEndTime / 2, turnEndTime / 2, false); + + angle = bombingStartAngle_ + sq_GetUniformVelocity(0, bombingChangeAngle_, turnTime, turnEndTime); + //zPos = sq_GetUniformVelocity(srcZ, dstZPos_, turnTime, turnEndTime); + + if (bombingChangeAngle_ > 0) + currentAngle = sq_GetUniformVelocity(bombingStartAngle_, bombingStartAngle_ + 180 + bombingChangeAngle_, turnTime, turnEndTime); + else + currentAngle = sq_GetUniformVelocity(bombingStartAngle_, bombingStartAngle_ - 180 + bombingChangeAngle_, turnTime, turnEndTime); + } + + local posX = CNRDObject.getAngleDistanceXPos(obj.getVar("pos").get_vector(0), angle, radius, ENUM_DIRECTION_RIGHT); + local posY = CNRDObject.getAngleDistanceYPos(obj.getVar("pos").get_vector(1), angle, radius, false); + local posZ = obj.getVar("pos").get_vector(2); + sq_setCurrentAxisPos(obj, 0, posX); + sq_setCurrentAxisPos(obj, 1, posY); + sq_setCurrentAxisPos(obj, 2, posZ); + //setCurrentPos(2, zPos); + updateAngle(obj, currentAngle); + + //print( " time:" + time); + + if(time > bombingTurnEndTime_) + { + //print( " time out :" + time); + moveToBombingState(obj, 0); + //t.Reset(); + //t.Start(10000,0); + //local changeAngle = moveToBombingState(obj, 0); + //obj.getVar("sr").set_vector(0, changeAngle); + //local currentAng = obj.getVar("angle").get_vector(0); + //obj.getVar("sr").set_vector(1, changeAngle); + //return; + } + + } +} + + +function setCustomData_po_ATIceChakramSmallIceRing(obj, reciveData) +{ + + if(!obj) return; + + local id = reciveData.readDword(); + local multi_hit_num = reciveData.readDword(); + local power = reciveData.readDword(); + local moveMode = reciveData.readDword(); + + local hitCnt = multi_hit_num; + + local atk = sq_GetCurrentAttackInfo(obj); + + if(atk) + { + sq_SetCurrentAttackBonusRate(atk, power); + } + + + // 蒙擎 橡挤坚葬陛 奢问?贼怃 给嬴棻栖朝 卫除 卫除 (喻蝓霞) + local attackTime = 3000; // 0.01蟾钦嫔 + + obj.getVar("attackTime").clear_vector(); + obj.getVar("attackTime").push_vector(attackTime); + + + obj.getVar("move").clear_vector(); + obj.getVar("move").push_vector(moveMode); + + local object = sq_GetObjectByObjectId(obj, id); + obj.sq_var.clear_obj_vector(); + obj.sq_var.push_obj_vector(object); + + obj.getVar("findchr").clear_vector(); + obj.getVar("findchr").push_vector(1); + + + + if(!object) + { + obj.getVar("findchr").set_vector(0, 0); + } + + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + + local t = obj.getVar().get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + obj.getVar("sr").clear_ct_vector(); + obj.getVar("sr").push_ct_vector(); + + obj.getVar("sr").clear_vector(); + + local changeAngle = 45; + obj.getVar("sr").push_vector(changeAngle); + obj.getVar("sr").push_vector(20); + + + + + obj.getVar("dir").clear_vector(); + obj.getVar("dir").push_vector(0); + + local pAni = obj.getCurrentAnimation(); + local initDelay = 0; + + local term = attackTime / hitCnt; + + obj.timer_.setParameter(term, -1); + obj.timer_.resetInstant(initDelay); + + + /////////////////////////////////////////////////////////////////////// + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + obj.getVar("pos").clear_vector(); + + obj.getVar("pos").push_vector(x); + obj.getVar("pos").push_vector(y); + obj.getVar("pos").push_vector(z); + + obj.getVar("dis").clear_vector(); + + + + obj.getVar("dis").push_vector(x); + obj.getVar("dis").push_vector(y); + obj.getVar("dis").push_vector(z); + + local xLen = 200; + local yLen = 0; + local zLen = 50; + //local zLen = 250; + + if(object) + { + xLen = obj.getXDistance(object); + yLen = sq_GetYPos(object) - sq_GetYPos(obj); + zLen = sq_GetZPos(object) + (sq_GetObjectHeight(object) / 2); + } + + obj.getVar("dis").push_vector(xLen); + obj.getVar("dis").push_vector(yLen); + obj.getVar("dis").push_vector(zLen); + + /////////////////////////////////////////////////////////////////////// + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(0); + + obj.getVar("hitCnt").clear_vector(); + obj.getVar("hitCnt").push_vector(hitCnt); + obj.getVar("hitCnt").push_vector(1); + + obj.getVar("end").clear_vector(); + obj.getVar("end").push_vector(0); + + + obj.getVar("state").clear_ct_vector(); + + obj.getVar("state").push_ct_vector(); + local t = obj.getVar("state").get_ct_vector(0); + t.Reset(); + t.Start(100000,0); + + //print(" term:" + term + "hitCnt:" + hitCnt); + initGetVarTimer(obj, 2, term, hitCnt + 1); + + local currentT = 0; + + local isMyControl = obj.isMyControlObject(); + + + + if(isMyControl) { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + + + +} + +function setState_po_ATIceChakramSmallIceRing(obj, state, datas) +{ + if(!obj) return; + + local pChr = obj.getTopCharacter(); + + if(!pChr) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + + return; + } + + local t = obj.getVar().get_ct_vector(0); + + if(t) + { + t.Reset(); + t.Start(10000,0); + } + + local srT = obj.getVar("sr").get_ct_vector(0); + srT.Reset(); + srT.Start(10000,0); + + + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + obj.getVar("angle").clear_vector(); + obj.getVar("angle").push_vector(0); + + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { // 跷问 + local dir = obj.getDirection(); + obj.getVar("dir").set_vector(0, dir); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { // 颤问 + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + obj.getVar("pos").clear_vector(); + + obj.getVar("pos").push_vector(x); + obj.getVar("pos").push_vector(y); + obj.getVar("pos").push_vector(z); + + //obj.sq_SetMoveParticle("Particle/Sparrow.ptl", 20.0, -25.0); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + obj.getVar("dis").clear_vector(); + + obj.getVar("dis").push_vector(x); + obj.getVar("dis").push_vector(y); + obj.getVar("dis").push_vector(z); + + local dx = sq_GetXPos(pChr); + local dy = sq_GetYPos(pChr) + 1; + local dz = sq_GetZPos(pChr) + 160; + + local xLen = 200; + local yLen = 0; + local zLen = 50; + + xLen = obj.getXDistance(pChr); + yLen = dy - sq_GetYPos(obj); + zLen = dz; + + print(" zLen:" + zLen); + //print( " xlen:" + xLen + " ylen:" + yLen + " zlen:" + zLen); + + obj.getVar("dis").push_vector(xLen); + obj.getVar("dis").push_vector(yLen); + obj.getVar("dis").push_vector(zLen); + + local initDir = obj.getVar("dir").get_vector(0); + + //local oppDir = sq_GetOppositeDirection(initDir); + //obj.setCurrentDirection(oppDir); + if(x > dx) + { + obj.setCurrentDirection(ENUM_DIRECTION_LEFT); + } + else + { + obj.setCurrentDirection(ENUM_DIRECTION_RIGHT); + } + + } +} + +function procAppend_po_ATIceChakramSmallIceRing(obj) +{ + if(!obj) return; + + local state = obj.getVar("state").get_vector(0); + + if(state == 0) + return; + + local pChr = obj.getTopCharacter(); + + if(!pChr) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + + return; + } + + local passiveState = state; + + local pAni = obj.getCurrentAnimation(); + + local t = obj.getVar().get_ct_vector(0); + local currentT = 0; + + currentT = t.Get(); + + + if(passiveState == PASSIVEOBJ_SUB_STATE_0 || passiveState == PASSIVEOBJ_SUB_STATE_2) + { // 跷问, ?热 + local fireT = 150; + + if(obj.getVar("findchr").get_vector(0) == 0) + { + fireT = 350; + } + + if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + fireT = 300; + } + local srcX = obj.getVar("dis").get_vector(SMALLICERING_START_X); // 卫蒙x + local srcY = obj.getVar("dis").get_vector(SMALLICERING_START_Y); // 卫蒙y + local srcZ = obj.getVar("dis").get_vector(SMALLICERING_START_Z); // 卫蒙z + + local dis_x_len = obj.getVar("dis").get_vector(SMALLICERING_MOV_X); // 识 桧翕剪葬 + local dis_y_len = obj.getVar("dis").get_vector(SMALLICERING_MOV_Y); // y蹴 桧翕剪葬 + local endZ = obj.getVar("dis").get_vector(SMALLICERING_MOV_Z); // z蹴 桧翕剪葬 + + local v = sq_GetAccel(0, dis_x_len, currentT, fireT, true); + local my = sq_GetAccel(0, dis_y_len, currentT, fireT, true); + local mz = sq_GetAccel(srcZ, endZ, currentT, fireT, true); + //local v = sq_GetUniformVelocity(0, dis_x_len, currentT, fireT); + //local my = sq_GetUniformVelocity(0, dis_y_len, currentT, fireT); + //local mz = sq_GetUniformVelocity(srcZ, endZ, currentT, fireT); + + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + local dstY = srcY + my; + + sq_setCurrentAxisPos(obj, 0, dstX); + sq_setCurrentAxisPos(obj, 1, dstY); + sq_setCurrentAxisPos(obj, 2, mz); + + if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + + } + + if(currentT >= fireT) + { + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + } + + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { // 颤问 + + local hitT = obj.getVar().get_timer_vector(0); + + if(!obj.getVar("move").get_vector(0)) + { + procSmallRingMove(obj); + } + else + { + local movT = obj.getVar().get_timer_vector(1); + if(movT) + { + if(movT.isOnEvent(currentT) == true) + { + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + local ox = obj.getVar("pos").get_vector(0); + local oy = obj.getVar("pos").get_vector(1); + local oz = obj.getVar("pos").get_vector(2); + + local dx = 0; + local dy = 0; + local dz = 0; + + + if(ox != x) + dx = ox; + else + dx = x + sq_getRandom(-40, 40); + + if(oy != y) + dy = oy; + else + dy = y + sq_getRandom(-40, 40); + + //print( " ox:" + ox + " oy:" + oy + " x:" + x + " y:" + y + " dx:" + dx + " dy:" + dy); + + sq_setCurrentAxisPos(obj, 0, dx); + sq_setCurrentAxisPos(obj, 1, dy); + sq_setCurrentAxisPos(obj, 2, z); + } + } + } + + if(hitT) + { + if(hitT.isOnEvent(currentT) == true) + { + obj.resetHitObjectList(); + } + } + + local targetObj = obj.sq_var.get_obj_vector(0); + + if(targetObj) + { + local x = sq_GetXPos(targetObj); + local y = sq_GetYPos(targetObj); + local z = targetObj.getZPos() + (sq_GetObjectHeight(targetObj) / 2); + + obj.getVar("pos").set_vector(0, x); + obj.getVar("pos").set_vector(1, y); + obj.getVar("pos").set_vector(2, z); + } + + + local attackTime = obj.getVar("attackTime").get_vector(0); // 0.01蟾钦嫔 + if(currentT > attackTime || obj.getVar("findchr").get_vector(0) == 0) + { + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } +} + +function onChangeSkillEffect_po_ATIceChakramSmallIceRing(obj, skillIndex, reciveData) +{ + if(!obj) return; + + if(skillIndex != SKILL_ICECHAKRAM) return; + + local pChr = obj.getTopCharacter(); + + if(!pChr) return; + + local changeAngle = reciveData.readFloat(); + + //print( " changeAngle:" + changeAngle); + local t = obj.getVar("sr").get_ct_vector(0); + + if(!t) + return; + + t.Reset(); + t.Start(10000,0); + + //print( " changeAngle:" + changeAngle); + + //local bombingStartAngle_ = obj.getVar("sr").get_vector(1) + //local bombingChangeAngle_ = obj.getVar("sr").get_vector(0); + + obj.getVar("sr").set_vector(0, changeAngle.tointeger()); + local currentAng = obj.getVar("angle").get_vector(0); + obj.getVar("sr").set_vector(1, currentAng); + + +} + +function onDestroyObject_po_ATIceChakramSmallIceRing(obj, object) +{ + + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATIceChakramSmallIceRing(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATIceChakramSmallIceRing(obj) +{ + + if(!obj) return; + +} + +function getCustomHitEffectFileName_po_ATIceChakramSmallIceRing(obj, isAttachOnDamager) +{ + return "PassiveObject/Character/Mage/Animation/ATIceChakram/fire/08_chakrahit_dodge.ani"; +} diff --git a/character/atmage/icechakram/po_aticechakramsmallmgr.nut b/character/atmage/icechakram/po_aticechakramsmallmgr.nut new file mode 100644 index 0000000..e4f0183 --- /dev/null +++ b/character/atmage/icechakram/po_aticechakramsmallmgr.nut @@ -0,0 +1,429 @@ + +function createIceSmallRing(obj, dx, dy, dz) +{ + if(!obj) + return; + + local x = sq_GetXPos(obj) + dx; + local y = sq_GetYPos(obj) + dy; + local z = sq_GetZPos(obj) + dz; + local ani = 0; + + ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATIceChakram/cast/04_schakra_normal.ani"); + + local ring_obj = sq_CreatePooledObject(ani,false); + + ring_obj.setCurrentPos(x,y,z); + obj.getVar().push_obj_vector(ring_obj); // 罹晦怃 + sq_AddObject(obj, ring_obj, OBJECTTYPE_DRAWONLY, false); +} + +function procSmallRing(obj, currentT) +{ + local object_num = obj.getVar().get_obj_vector_size(); + + local i = 0; + local startLen = 140; + local endLen = 210; + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + local size = 5; + + local sr_angle_l = []; + + sr_angle_l.resize(size); + + sr_angle_l[0] = 90; + sr_angle_l[1] = 60; + sr_angle_l[2] = 120; + sr_angle_l[3] = 70; + sr_angle_l[4] = 110; + + local sr_len_l =[]; + sr_len_l.resize(size); + + sr_len_l[0] = 180; + sr_len_l[1] = 160; + sr_len_l[2] = 140; + sr_len_l[3] = 245; + sr_len_l[4] = 240; + + + + for(i = 0; i < object_num; i++) + { // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻.. + local ringObj = obj.getVar().get_obj_vector(i); + + if(ringObj) + { + local angle = sr_angle_l[i%5]; + + + local len = sq_GetUniformVelocity(startLen, sr_len_l[i%5] + ((i/5)*10), currentT, 80); + + local upMovLen = len * sq_SinTable(angle.tointeger()); + local lenMovLen = len * sq_CosTable(angle.tointeger()); + + + sq_setCurrentAxisPos(ringObj, 0, x + lenMovLen.tointeger()); + //sq_setCurrentAxisPos(ringObj, 1, y + 1); + //print( " angle:" + angle + " index:" + i + " lenMovLen:" + lenMovLen); + sq_setCurrentAxisPos(ringObj, 2, upMovLen.tointeger()); + + } + } + +} + +function procFireSmallRing(obj, currentT, maxT) +{ + local object_num = obj.getVar().get_obj_vector_size(); + + local i = 0; + local startLen = 180; + local endLen = 210; + + + for(i = 0; i < object_num; i++) + { // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻.. + local ringObj = obj.getVar().get_obj_vector(i); + + if(ringObj) + { + if(currentT > maxT) + { + if(obj.isMyControlObject()) + { + local x_range = 600; // + local y_range = 300; // + local z_range = 100; // + + local pChr = obj.getTopCharacter(); + + local targetObj = getPriorityTarget(pChr, -40, x_range, y_range, z_range, obj.getVar("target"), false); + + if(targetObj) + { + print( " find Target"); + obj.getVar("target").push_obj_vector(targetObj); + obj.getVar("target").set_vector(0, 1); + } + else + { // 嬴鼠匙紫 颤啃击 跤琼懊棻贼.. 锰楚 琼懊湍 颤啃桧 毡朝虽 羹觼?尔坚 毡棻贼 斜匙击 厥蝗栖棻. + local backTarget = obj.getVar("target").get_obj_vector(0); + print( " none find Target:" + backTarget); + + if(backTarget) + { + obj.getVar("target").push_obj_vector(backTarget); + obj.getVar("target").set_vector(0, 1); + + targetObj = backTarget; + } + } + + local id = sq_GetObjectId(targetObj); + + + //obj.getVar("chakram").clear_vector(); + //obj.getVar("chakram").push_vector(createSmallRingNum); + //obj.getVar("chakram").push_vector(multiHitNum); + + //local power = reciveData.readDword(); // 0.蒙擎 橡挤坚葬 棻钦?? 奢问溘(+) + + local multiHitNum = obj.getVar("chakram").get_vector(1); // 1. 蒙擎 橡挤 坚葬 棻钦?? ?热 + local power = obj.getVar("chakram").get_vector(2); // power + + + local x = sq_GetXPos(ringObj); + local y = sq_GetYPos(ringObj); + local z = sq_GetZPos(ringObj); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(id); + sq_BinaryWriteDword(multiHitNum); + sq_BinaryWriteDword(power); + //local moveMode = sq_getRandom(0, 2); + local moveMode = 0; + sq_BinaryWriteDword(moveMode); + sq_SendCreatePassiveObjectPacketPos(pChr, 24258, 0, x, y, z); + } + + ringObj.setValid(false); + obj.getVar().remove_obj_vector(ringObj); + + return true; + } + return false; + } + } + + return false; + +} + + + +function pushSmallRingFireTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, pushMaxNum) +{ + if(!obj) + return null; + + local objectManager = obj.getObjectManager(); + + + if (objectManager == null) + return null; + + obj.getVar("target").clear_obj_vector(); + + local i; + + for(i = 0; i < pushMaxNum; i++) + { // + local targetObj = getPriorityTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, obj.getVar("target")); + + obj.getVar("target").push_obj_vector(targetObj); + } +} + + + +function setCustomData_po_ATIceChakramSmallMgr(obj, reciveData) +{ + if(!obj) return; + + //sq_BinaryWriteDword(createSmallRingNum); // + //sq_BinaryWriteDword(multiHitNum); // + //sq_BinaryWriteDword(power); // + + local createSmallRingNum = reciveData.readDword(); // 0. 当撩肾朝 橡挤坚葬 偎热 + local multiHitNum = reciveData.readDword(); // 1. 蒙擎 橡挤 坚葬 棻钦?? ?热 + local power = reciveData.readDword(); // 0.蒙擎 橡挤坚葬 棻钦?? 奢问溘(+) + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(0); + + obj.getVar("flag").clear_timer_vector(); + obj.getVar("flag").push_timer_vector(); + + obj.getVar("flag").clear_vector(); + + obj.getVar("chakram").clear_vector(); + obj.getVar("chakram").push_vector(createSmallRingNum); + obj.getVar("chakram").push_vector(multiHitNum); + obj.getVar("chakram").push_vector(power); + + local i; + + for(i = 0; i < createSmallRingNum; i++) + { // + obj.getVar("flag").push_vector(0); + } + + + local object_num = obj.getVar("cl").get_obj_vector_size(); + + + + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + + local t = obj.getVar().get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + obj.getVar().clear_obj_vector(); + + local t = obj.getVar("flag").get_timer_vector(0); + t.setParameter(50, 1); + t.resetInstant(0); + + obj.getVar("attack").clear_vector(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(90); + obj.getVar().push_vector(45); + obj.getVar().push_vector(135); + obj.getVar().push_vector(35); + obj.getVar().push_vector(155); + + local atk = sq_GetCurrentAttackInfo(obj); + + if(atk) + { + sq_SetCurrentAttackPower(atk, power); + } + + + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + +function destroy_po_ATIceChakramSmallMgr(obj) +{ + destroyObject(obj); +} + + +function setState_po_ATIceChakramSmallMgr(obj, state, datas) +{ + if(!obj) return; + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + obj.getVar("flag").set_vector(VECTOR_FLAG_0, 0); + + initGetVarTimer(obj, 1, 400, 10); + obj.getVar("target").clear_obj_vector(); + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + obj.getVar("target").clear_vector(); + obj.getVar("target").push_vector(0); + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + + //obj.getVar("chakram").push_vector(multiHitNum); + + local smallRingNum = obj.getVar("chakram").get_vector(0); // 0 createSmallRingNum + + local i; + for(i = 0; i < smallRingNum; i++) + { + createIceSmallRing(obj, 0, 1, 210); + } + + local t = obj.getVar().get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + } + + +} + +function procAppend_po_ATIceChakramSmallMgr(obj) +{ + + if(!obj) return; + + local pChr = obj.getTopCharacter(); + + if(!pChr) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + return; + } + + local chr_state = pChr.getState(); + + if(chr_state != STATE_ICECHAKRAM) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } + return; + } + + local objX = sq_GetXPos(obj); + local objY = sq_GetYPos(obj); + local objZ = sq_GetZPos(obj); + + local state = obj.getVar("state").get_vector(0); + local passiveState = state; + + if(passiveState == 0) + return; + + local t = obj.getVar().get_ct_vector(0); + local currentT = 0; + + currentT = t.Get(); + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + local parentState = obj.sq_GetParentState(); + local subState = obj.sq_GetParentSkillSubState(); + + procSmallRing(obj, currentT); + + if(parentState == STATE_ICECHAKRAM && subState == SUB_STATE_ICECHAKRAM_2) + { + if(obj.isMyControlObject()) + { + local frmIndex = sq_GetCurrentFrameIndex(pChr); + if(frmIndex > 1) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + local result = procFireSmallRing(obj, currentT, 100); + + if(result == true) + { + t.Reset(); + t.Start(10000,0); + } + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + } + +} + +function onChangeSkillEffect_po_ATIceChakramSmallMgr(obj, skillIndex, reciveData) +{ + if(!obj) return; + +} + +function onDestroyObject_po_ATIceChakramSmallMgr(obj, object) +{ + + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATIceChakramSmallMgr(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATIceChakramSmallMgr(obj) +{ + + if(!obj) return; + +} + \ No newline at end of file diff --git a/character/atmage/icecrash/ap_icecrash.nut b/character/atmage/icecrash/ap_icecrash.nut new file mode 100644 index 0000000000000000000000000000000000000000..0cd293f4297c05a19d439e9ddf9f5f54f36a4880 GIT binary patch literal 2936 zcmd5;T~8B16!orCHi3tSP&7cWMyj#YAH?8b4!H zB%&r5dC&wCKNEjVx9~5#cV>3B+pZAB2NR$zb3e{G_uScLyDD|J#2wFt;8O8exqMuG zoUj*|Vb^NRE!%S}m+iWm?aJuS2UCK3YQ9(MF+sc*b!c&{#72BOnD4R+R zim11LTc_ZbWfgq$n;Og6u53H|LZ!k=yq&j*Ohgmal(OxK8K+`&YbA0(8fJXP>%Kdf z$>0Z3IaBpYb`@&2&s=_b_96^{&N(>8_@p>6a)X#4Lj$kwmsm>Zv^bEV8PS0d#NpSj zLAUOs@Wj0W#?RVSr)*U0YQRLl2(845B?+|zv4}X)1}7LFbpmd?B{t~=hVDhk&(VK! zCM5nj>iDQJI*v~I^Z6EDT$h}luXA2y2&c{r3*#(P_CnH_J>#G|VOReq>S~ZCEVc=8Ui9tlH-LZD5U#B^e?EcjXD`B6cZOl>IAO3t5K3|8%#^dI<>zD(L^%W%1T-^-ceb^zi zdE=fUDq0gC(#;7J3tFSZLZ@CkQba+9`*nJvAq`2Ub89eVOOg$e#jvETG8g91G>3&T(ACVQ)f<`z|V# hxFcE>ODL^K?on&?RY{92G?5(D7{n!tb6DQD?-zG$%%lJS literal 0 HcmV?d00001 diff --git a/character/atmage/icecrash/icecrash.nut b/character/atmage/icecrash/icecrash.nut new file mode 100644 index 0000000..5f186e3 --- /dev/null +++ b/character/atmage/icecrash/icecrash.nut @@ -0,0 +1,238 @@ +ENUM_ICE_CRASH_SUBSTATE_START <-0 ; //嫦翕 +ENUM_ICE_CRASH_SUBSTATE_LOOP <-1 ; //?瞪 +ENUM_ICE_CRASH_SUBSTATE_LOOP_ATTACKING <-2 ; //?瞪?贼怃 奢问酝 +ENUM_ICE_CRASH_SUBSTATE_END <-3 ; //虞颤 + +ENUM_ICE_CRASH_TIMER_SPIN <- 0; +ENUM_ICE_CRASH_MULTI_HIT <- 1; + +VAR_ICE_CRASH <-0 + +function checkExecutableSkill_IceCrash(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_ICE_CRASH); + if(b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(ENUM_ICE_CRASH_SUBSTATE_START); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICE_CRASH , STATE_PRIORITY_USER, true); + return true; + } + return false; + +} + +function checkCommandEnable_IceCrash(obj) +{ + if(!obj) + return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_ICE_CRASH); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_ICE_CRASH); + } + + return true; +} + +function onEndState_IceCrash(obj, newState) +{ + if(!obj) + return; + + if(newState != STATE_ICE_CRASH) + { + removeAllIceCrashAppendage(obj); + sq_RemoveParticle("Character/Mage/Particle/IceCrashIceDust.ptl",obj); + } +} + +function onSetState_IceCrash(obj, state, datas, isResetTimer) +{ + if(!obj) return; + + local level = sq_GetSkillLevel(obj, SKILL_ICE_CRASH); + local spinDistance = sq_GetIntData(obj, SKILL_ICE_CRASH, 0, level); // ?瞪?貊 陈嬴陛朝 剪葬 + local spinSpeed = sq_GetIntData(obj, SKILL_ICE_CRASH, 1, level); // ?瞪?貊 陈嬴陛朝 卫除 + local spinTime = (spinDistance.tofloat()/spinSpeed.tofloat()) * 1000.0; + local multiHitGap = sq_GetLevelData(obj, SKILL_ICE_CRASH, 0, level); + + local subState = sq_GetVectorData(datas, 0); + obj.setSkillSubState(subState); + if(subState == ENUM_ICE_CRASH_SUBSTATE_START) { + local attackPower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_CRASH , STATE_ICE_CRASH, 1, 1.0); + local var = obj.getVar(); + var.setBool(VAR_ICE_CRASH,true); + + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_CRASH_START); + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_ICE_CRASH); + local currentAttackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(currentAttackInfo, attackPower); + sq_SetCurrentAttackeHitStunTime(currentAttackInfo, 0); + obj.sq_PlaySound("MW_ICECRASH"); + } + else if(subState == ENUM_ICE_CRASH_SUBSTATE_LOOP) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_CRASH_LOOP); + obj.setTimeEvent(ENUM_ICE_CRASH_TIMER_SPIN,spinTime.tointeger(),1,false); + obj.setTimeEvent(ENUM_ICE_CRASH_MULTI_HIT,multiHitGap,9999,false); + } + else if(subState == ENUM_ICE_CRASH_SUBSTATE_LOOP_ATTACKING) { + //颤桧该陛 嬴霜 寰给嬴 陛坚 毡击阳 : ENUM_ICE_CRASH_SUBSTATE_LOOP蒂 剪纂虽 强击阳 + if(!obj.isExistTimeEvent(ENUM_ICE_CRASH_TIMER_SPIN)) { + obj.setTimeEvent(ENUM_ICE_CRASH_TIMER_SPIN,spinTime.tointeger(),1,false); + obj.setTimeEvent(ENUM_ICE_CRASH_MULTI_HIT,multiHitGap,9999,false); + } + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_CRASH_LOOP_ATTACK); + } + else if(subState == ENUM_ICE_CRASH_SUBSTATE_END) { + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_CRASH_END); + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_ICE_CRASH_LAST); + + sq_RemoveParticle("Character/Mage/Particle/IceCrashIceDust.ptl",obj); + + local attackPower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_CRASH , STATE_ICE_CRASH, 2, 1.0); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackPower); + sq_SetMyShake(obj,2,120); + } +} + +function onTimeEvent_IceCrash(obj, timeEventIndex, timeEventCount) +{ + if(!obj) + return false; + + if(!obj.isMyControlObject()) + return false; + + if(timeEventIndex == ENUM_ICE_CRASH_TIMER_SPIN) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(ENUM_ICE_CRASH_SUBSTATE_END); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICE_CRASH , STATE_PRIORITY_USER, true); + return true; // true贼 属寥 酝钦 + } + else if( timeEventIndex == ENUM_ICE_CRASH_MULTI_HIT ) + { + if(obj.getSkillSubState() == ENUM_ICE_CRASH_SUBSTATE_END) + return true; // true贼 属寥 酝钦 + + // 葬蝶?鼻暧 赅苌 螃粽薛? ?才 棻钦?? 尔卤 + local sq_var = obj.getVar(); + local i=0; + local objectsSize = sq_var.get_obj_vector_size(); + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_ICE_CRASH); + local attackPower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_CRASH , STATE_ICE_CRASH, 1, 1.0); + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackPower); + for(;i 0) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(ENUM_ICE_CRASH_SUBSTATE_LOOP_ATTACKING); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICE_CRASH , STATE_PRIORITY_USER, true); + } +} + +function onKeyFrameFlag_IceCrash(obj, flagIndex) +{ + if(!obj) return true; + + if(flagIndex == 1) { + obj.sq_SetStaticMoveInfo(0, 200, 100, false); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); + } + else if(flagIndex == 2) { + local level = sq_GetSkillLevel(obj, SKILL_ICE_CRASH); + local speed = sq_GetIntData(obj, SKILL_ICE_CRASH, 1, level); + + obj.sq_SetStaticMoveInfo(0, speed, speed, false); + obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); + + sq_CreateParticle("Character/Mage/Particle/IceCrashIceDust.ptl",obj,0,0,50,true,100,500,100); + } + else if(flagIndex == 3) { + removeAllIceCrashAppendage(obj); + } + return true; + +} diff --git a/character/atmage/icefieldex/icefieldex.nut b/character/atmage/icefieldex/icefieldex.nut new file mode 100644 index 0000000..ffbe3c1 --- /dev/null +++ b/character/atmage/icefieldex/icefieldex.nut @@ -0,0 +1,77 @@ + +function checkExecutableSkill_IceFieldEx(obj) +{ + + if (!obj) return false; + + local useSkill = obj.sq_IsUseSkill(SKILL_ICE_FIELD_EX); + + if (useSkill) { + obj.sq_AddSetStatePacket(STATE_ICE_FIELD_EX, STATE_PRIORITY_IGNORE_FORCE, false); + return true; + } + + return false; + +} + +function checkCommandEnable_IceFieldEx(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) { + // 警蜗 蝶鉴 偃? 蒙机濠: 姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_ICE_FIELD_EX); + } + + return true; + +} + +function onSetState_IceFieldEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_FIELD_EX); + obj.sq_PlaySound("MW_ICEFIELD"); +} + +function onEndCurrentAni_IceFieldEx(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); // 拥栖 部釭贼 蝶鼹萄煎. +} + +function onKeyFrameFlag_IceFieldEx(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + local level = sq_GetSkillLevel(obj, SKILL_ICE_FIELD_EX); + + if(flagIndex == 1) { + local level = sq_GetSkillLevel(obj, SKILL_ICE_FIELD_EX); + local power = obj.sq_GetBonusRateWithPassive(SKILL_ICE_FIELD_EX , STATE_ICE_FIELD_EX, 0, 1.0); // LEVEL 0. 橡挤 叹够 奢问溘(%) + local iceLevel = sq_GetLevelData(obj, SKILL_ICE_FIELD_EX, 1, level); // LEVEL 1. 彩念 溯涟 + local iceProb = sq_GetLevelData(obj, SKILL_ICE_FIELD_EX, 2, level); // LEVEL 2. 彩念 ?睦 + local iceTime = sq_GetLevelData(obj, SKILL_ICE_FIELD_EX, 3, level); // LEVEL 3. 彩念 卫除 + + obj.sq_StartWrite(); + obj.sq_WriteFloat(power.tofloat()); //挤热橾热紫 毡晦阳侥缣 float?戏煎 尔鱼棻. sqr缣摹 DWORD ?击 濠翕戏煎 int?戏煎 夥脯 舆韩 强晦 阳侥. + obj.sq_WriteDword(iceLevel); + obj.sq_WriteDword(iceProb); + obj.sq_WriteDword(iceTime); + obj.sq_SendCreatePassiveObjectPacket(24237, 0, 0, 0, 0); // ?萄 当撩, 100,50暧 谢?缣 当撩 + } + + return true; + +} diff --git a/character/atmage/icefieldex/po_aticefieldex.nut b/character/atmage/icefieldex/po_aticefieldex.nut new file mode 100644 index 0000000000000000000000000000000000000000..1da9e1c4db955801514fd7893d081fef750e0c7f GIT binary patch literal 1356 zcma)5O>dh(5bc#n{tw%nj7lxnann{w4j3;E3XTzwMC}D_@Yo^2yUDU7v8w#{&VsR> zPgQV$-8XOEyqO6miRaM7^{78gqO(B~#db`Sv3-JvlMy-mN_q#ao!|pl5PHsuPc?K8 zp)bJac9;Z{3mO`4a_MU=z^CWbZz!H+YY;&=8B`qomwFmR?2ReW9N#M$vy!JO6Py&F zoU%}2F=UD*w<57)F9kP)d`chN;_})e64LA*^u5{I`P6BHHCoB$MEE?AKX3lhes5`bkgE z#>p_WFMRtq4e>A>+kRsux>-N#-4px-mab$AaC0_)d-+i2+~ZSt#A(~!JzYh;eq_e- z0`y+#W*N5smt^>&~`9juzl^X2m`hXmgzDc&`c)X0R*bP*>-?#SbdDEi+nC5*T Sdel^^b*!{0S!!udpZ)>(v6zDZ literal 0 HcmV?d00001 diff --git a/character/atmage/iceman/ap_aticemanmagiccircle.nut b/character/atmage/iceman/ap_aticemanmagiccircle.nut new file mode 100644 index 0000000000000000000000000000000000000000..d04495e54d4999c5952a31610e126cef2613cf06 GIT binary patch literal 5823 zcmb_gTW=Fb6z;1di|qH)6h>rzx-bB$HqEYS^P z%`8O$X&?-(8ZJ$`#gWjmc11#}QUR#$7+|te5?y{2a`(!JS&5yHVS#agAr*0{S9k3h z_z2Ju_zQ?7%-V`!ndR6RF6aG?jHPT|%}S4APD`R+#R(Lb%Nf13{;lIGjT2Yb8C z?dJqx4z})-#@}z6k8ii$?7C_e=HKy8k*(zR^`pOD*cf z^GhjR%Vi5iv4r8GO^kB6Ak4O8lrB;)*0x)mh<)P1m`nL|E}t%**XMJ2Efpsf!>Uop zxo9_P#R4_DaJdXdfry0BkzllSMfu>si<7cU3veQuI}lyySP@gibL$kX$z({Zy^zdy zMi=)(!Ku3?s;#?4!-b&Y?quF<$6<|nJam~6*x~S8xB-uOf6MMeGNu}QxT6ll)Cgo1 z>=-Il*wJGr!0Tw3!#JpV`+RWj6^OL4L{_D9*edCllNNNj0M`q*(S9mX}g_ zHJ{1lA>Hw~9Ap8?r?F~@#WI%QJ+cdCK4(Z3s`zD!^j5F&ja03eUP)oLE*JDdaXHI4 zl(`it2cM9}^}EgY&zi5do4@=9q($ahw_i7IygYdDLqeo9tj}_4+T8+j1C9gkBaOZH zjaxgUY}QaWz5-N=AY(w_r)+$ztsC|lQ;Ei;;t@Pox(4P6p>dpyCm>Y%B4gsp?5esZ z5P$US2mUaA5_Hp12&?YE-eW+OBfYaoQP6pY=OLrI`e$c?l}XFan``SHbx)t>WDBve znED#CQc*gJAPa(yqIzVt1VPRK{+5A?2@ZkUa){H=?EVfyQ^^Z$8t6fD9U3xjW0C6b z+_T80wNysU9tT}$*b5zan_G{gW04PtT{JDLP+#>s0u*093yFeV0bim|OO?3!D(*(w zF4OO1LDuRnwi@#;w9D*`bSjTpupgEjx$ev?Ifa;^s?e`wl1FVpB0VLrR0qcoA>LVC=Y79%k!Pd^flc)Rt-D=(3g6&w|C`vodWVwM4 z?J5G2;tXc(oaupI7|~$pis#bweh+mFmrY>ow0lJ=r~(rM6!;>90+YiiFgZYhi7-Bx8b*VuK^mM2VT0*m zG??zz00RQ@jybb4x;j$vsL?_YOvI;(b<^{kaFH16kSy3gEKo1Urp9v=iw^bba1;rfT(?J|o#K-YhEJ2>~2@5_#a^r;5e6cgvy8o1Q57+OuHuoBv z*BU?XlE%wz=qpq3QM7E~Qr(35W~u%?5WDwbU*w}$ znf13W%z`iv!65i$dT~+I&p2T~LZK-1gRW76wnkBl8R&_XbctpR8%SPPi~KV@HcOi6 z!c38{>v)k7N~b*Ca4yrfPRv%v*-w;3P#f|NP@tpgIl43dvdn-xGw5Ym-0{5NZEcRF z6mP^u4~LC(oY-~CIy5dX7gBkiJc@$5f^!bxin$xW5QbyQc^d)5xXp3k1mHp*aN%wd z*lGG*BLoG4_Xwyoq+il>VGM-ZM3{(YxC(F-2^w4@=%OENGWS(hUsCgGhTl-IYlV-3 zJRx^S)sMR5!2Lh;lA|ArU(GX7k>2a&Ya%{=@D4C%<7<<^s{K)mK0HAM<-Kl>h($ literal 0 HcmV?d00001 diff --git a/character/atmage/iceman/iceman.nut b/character/atmage/iceman/iceman.nut new file mode 100644 index 0000000..b5c7897 --- /dev/null +++ b/character/atmage/iceman/iceman.nut @@ -0,0 +1,471 @@ + +SUB_STATE_ICEMAN_0 <- 0 +SUB_STATE_ICEMAN_1 <- 1 +SUB_STATE_ICEMAN_2 <- 2 +SUB_STATE_ICEMAN_3 <- 3 +SUB_STATE_ICEMAN_4 <- 4 +SUB_STATE_ICEMAN_WAIT <- 5 + +function checkExecutableSkill_IceMan(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_ICEMAN); + + if(b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICEMAN_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; + +} + +function checkCommandEnable_IceMan(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) { + // 警蜗 蝶鉴 偃? 蒙机濠: 姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_ICEMAN); + } + + return true; + +} + +function onSetState_IceMan(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + + obj.getVar("state").clear_ct_vector(); + obj.getVar("state").push_ct_vector(); + local t = obj.getVar("state").get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + + if(substate == SUB_STATE_ICEMAN_0) + { + //ICEBLADE_CAST + obj.sq_PlaySound("ICEBLADE_CAST"); + local offsetX = 100; + offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX); + + local vX = obj.sq_GetIntData(SKILL_ICEMAN, 0); // 0. 葆彻霞 桧翕楼紫 + local vY = 0; + + obj.sq_AddAimPointMark(offsetX, posY, vX, vY); + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN1); + } + else if(substate == SUB_STATE_ICEMAN_WAIT) + { + local dstX = obj.sq_GetVectorData(datas, 1); + + obj.getVar("dash").clear_vector(); + obj.getVar("dash").push_vector(dstX); // + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN6); + } + else if(substate == SUB_STATE_ICEMAN_1) + { + // 颤啃? 陛舒晦 + print(" sub_state_1"); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN2); + + } + else if(substate == SUB_STATE_ICEMAN_2) + { + // 殖溥陛晦 + + local dstX = obj.getVar("dash").get_vector(0); + obj.getVar("dash").push_vector(posX); // ?营 x : i: 1 + obj.getVar("dash").push_vector(posY); // ?营 y : i: 2 + + local disX = sq_Abs(dstX - posX); + local disY = posY; + + if(dstX > posX) + { + obj.setDirection(ENUM_DIRECTION_RIGHT); + } + else + { + obj.setDirection(ENUM_DIRECTION_LEFT); + } + + disX = disX - 120; + + if(disX <= 0) + disX = 0; + + obj.getVar("dash").push_vector(disX); // x蹴 桧翕剪葬 : i: 3 + obj.getVar("dash").push_vector(disY); // y蹴 桧翕剪葬 : i: 4 + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN3); + } + else if(substate == SUB_STATE_ICEMAN_3) { + // 阳葬晦 + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN4); + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_ICEMAN); + + local multiHitAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_ICEMAN, + STATE_ICEMAN, SKL_LVL_COLUMN_IDX_1, 1.0); //1.陪颤奢问溘(%) + + obj.sq_SetCurrentAttackBonusRate(multiHitAttackRate); + //CUSTOM_ATTACK_INFO_ICEMAN + // 觼煎栖赝 蒙机 翱颤楼紫陛 殖塭韩 热 毡蝗栖棻. + local currentAni = sq_GetCurrentAnimation(obj); + if(currentAni) + { + local multiHitSpeed100Rate = obj.sq_GetIntData(SKILL_ICEMAN, 2); // 2. 翱颤楼紫 + currentAni.setSpeedRate(multiHitSpeed100Rate.tofloat()); + } + //setSpeedRate + } + else if(substate == SUB_STATE_ICEMAN_4) { + // ?嫦 + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN5); + } + + + +} + +function prepareDraw_IceMan(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); +} + +function onProc_IceMan(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + local sq_var = obj.getVar(); + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + if(substate == SUB_STATE_ICEMAN_0) + { // 颤啃? 僭仪 + if(obj.isMyControlObject()) + { + local targetTime = obj.sq_GetIntData(SKILL_ICEMAN, 1); // 1. 葆彻霞戏煎 颤啃陛栋 卫除 + + print( " targetTime:" + targetTime); + + if(currentT > targetTime) + { + local skillLevel = sq_GetSkillLevel(obj, SKILL_ICEMAN); + + local value = 0; + + local freezeRate = obj.sq_GetLevelData(SKILL_ICEMAN, + SKL_LVL_COLUMN_IDX_0, skillLevel); // 彩念?徽(%) + + local multiHitAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_ICEMAN, + STATE_ICEMAN, SKL_LVL_COLUMN_IDX_1, 1.0); //1.陪颤奢问溘(%) + + local smashAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_ICEMAN, + STATE_ICEMAN, SKL_LVL_COLUMN_IDX_2, 1.0); //2.鬼颤奢问溘(%) + + local expPower = obj.sq_GetPowerWithPassive(SKILL_ICEMAN, + STATE_ICEMAN, SKL_LVL_COLUMN_IDX_3, -1, 1.0); //3.鼠伞虽朝 橡挤晦菅 奢问溘(+) + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(freezeRate); // + sq_BinaryWriteDword(multiHitAttackRate); // + sq_BinaryWriteDword(smashAttackRate); // + sq_BinaryWriteDword(expPower); // + + local aimPosX = obj.sq_GetAimPosX(posX, posY, true); + local offsetX = aimPosX - posX; + + if (offsetX < 0) + { + offsetX = -offsetX; + } + + local offsetY = -1; + obj.sq_SendCreatePassiveObjectPacket(24255, 0, offsetX, offsetY, 0); // 陴彻饵 嬴桧蝶裔 葆彻霞 + + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICEMAN_WAIT); // substate撮? + obj.sq_IntVectPush(aimPosX); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + } + else if(substate == SUB_STATE_ICEMAN_WAIT) + { + local t = obj.getVar("state").get_ct_vector(0); + local currentT = t.Get(); + + if(currentT > 620) + //if(currentT > 880) + { + if(obj.isMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICEMAN_1); // + obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + } + else if(substate == SUB_STATE_ICEMAN_1) { + // 颤啃? 陛舒晦 + if(!obj.getVar().get_vector(0)) + { + if(frmIndex >= 4) + { + obj.sq_PlaySound("MW_ICEMAN"); + obj.getVar().set_vector(0, 1); + } + } + } + else if(substate == SUB_STATE_ICEMAN_2) + { + // 殖溥陛晦 + local dash_t = pAni.getDelaySum(false); // + local srcX = obj.getVar("dash").get_vector(1); // 卫蒙x + local srcY = obj.getVar("dash").get_vector(2); // 卫蒙y + + local dis_x_len = obj.getVar("dash").get_vector(3); // 识 桧翕剪葬 + local dis_y_len = obj.getVar("dash").get_vector(4); // y蹴 桧翕剪葬 + + local v = sq_GetAccel(0, dis_x_len, currentT, dash_t, true); + + //local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t); + + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + //local dstY = srcY + my; + + sq_setCurrentAxisPos(obj, 0, dstX); + //sq_setCurrentAxisPos(obj, 1, dstY); + + } + else if(substate == SUB_STATE_ICEMAN_3) + { + // 阳葬晦 + local isHit = false; + + local particleX = sq_GetXPos(obj); + local particleY = sq_GetYPos(obj); + local particleZ = sq_GetZPos(obj); + + local offsetLen = 140; + + if(frmIndex >= 1 && !obj.getVar().get_vector(0)) + { + isHit = true; + offsetLen = 140; + obj.getVar().set_vector(0, 1); + } + + if(frmIndex >= 4 && !obj.getVar().get_vector(1)) + { + isHit = true; + offsetLen = 114; + + obj.getVar().set_vector(1, 1); + } + + if(frmIndex >= 8 && !obj.getVar().get_vector(2)) + { + isHit = true; + offsetLen = 90; + obj.getVar().set_vector(2, 1); + } + + if(frmIndex >= 11 && !obj.getVar().get_vector(3)) + { + isHit = true; + offsetLen = 150; + obj.getVar().set_vector(3, 1); + } + + if(frmIndex >= 16 && !obj.getVar().get_vector(4)) + { + isHit = true; + offsetLen = 85; + obj.getVar().set_vector(4, 1); + } + + + if(isHit) + { + obj.resetHitObjectList(); + particleX = sq_GetDistancePos(posX, obj.getDirection(), offsetLen); + sq_SetMyShake(obj,2,100); + + local particleCreater = obj.getVar().GetparticleCreaterMap("AtIceManPoleD2", + "PassiveObject/Character/Mage/Particle/ATIceManPoleDestroy.ptl", obj); + particleCreater.Restart(0); + particleCreater.SetPos(particleX, particleY + 5, particleZ + 65); + sq_AddParticleObject(obj, particleCreater); + } + + } + else if(substate == SUB_STATE_ICEMAN_4) { + // ?嫦 + } + + +} + +function onProcCon_IceMan(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + if(substate == SUB_STATE_ICEMAN_0) + { + local disX = sq_GetDistancePos(obj.getXPos(), sq_GetDirection(obj), 50); + + local iPX = obj.sq_GetAimPosX(obj.getXPos(), posY, false); + + if (sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) + { + if (disX < iPX) + { + obj.sq_SetAimPointMarkPosition(disX, posY); + } + } + + if (sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) + { + if (disX > iPX) + { + obj.sq_SetAimPointMarkPosition(disX, posY); + } + } + + } + else if(substate == SUB_STATE_ICEMAN_1) { + // SUB_STATE_ICEMAN_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEMAN_2) { + // SUB_STATE_ICEMAN_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEMAN_3) { + // SUB_STATE_ICEMAN_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEMAN_4) { + // SUB_STATE_ICEMAN_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_IceMan(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(!obj.isMyControlObject()) + return; + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + if(substate == SUB_STATE_ICEMAN_0) + { + } + else if(substate == SUB_STATE_ICEMAN_1) { + //obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICEMAN_2); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true); + + } + else if(substate == SUB_STATE_ICEMAN_2) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICEMAN_3); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_ICEMAN_3) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICEMAN_4); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(substate == SUB_STATE_ICEMAN_4) { + sq_SimpleMoveToNearMovablePos(obj,200); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + + +} + +function onKeyFrameFlag_IceMan(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + + return false; + +} + +function onEndState_IceMan(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(new_state != STATE_ICEMAN) + obj.sq_RemoveAimPointMark(); + + +} + + \ No newline at end of file diff --git a/character/atmage/iceman/po_aticemanmagiccircle.nut b/character/atmage/iceman/po_aticemanmagiccircle.nut new file mode 100644 index 0000000..f44db59 --- /dev/null +++ b/character/atmage/iceman/po_aticemanmagiccircle.nut @@ -0,0 +1,563 @@ + + + +function setCustomData_po_ATIceManMagicCircle(obj, reciveData) +{ + if(!obj) return; + + //sq_BinaryWriteDword(freezeRate); // + //sq_BinaryWriteDword(multiHitAttackRate); // + //sq_BinaryWriteDword(smashAttackRate); // + //sq_BinaryWriteDword(expPower); // + local freezeRate = reciveData.readDword(); // + local multiHitAttackRate = reciveData.readDword(); // + local smashAttackRate = reciveData.readDword(); // + local expPower = reciveData.readDword(); // + + obj.getVar("freezeRate").clear_vector(); // + obj.getVar("freezeRate").push_vector(freezeRate); + + obj.getVar("attack").clear_vector(); // + obj.getVar("attack").push_vector(multiHitAttackRate); + obj.getVar("attack").push_vector(smashAttackRate); + obj.getVar("attack").push_vector(expPower); + + + obj.getVar("state").clear_vector(); // state vector + obj.getVar("state").push_vector(0); + + obj.getVar("flag").clear_vector(); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + obj.getVar("flag").push_vector(0); + + obj.getVar("casting").clear_obj_vector(); + + local pChr = obj.getTopCharacter(); + + print(" pChr:" + pChr); + sq_SetCurrentDirection(obj, obj.getDirection()); + + if(obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + +function destroy_po_ATIceManMagicCircle(obj) +{ + if(!obj) + return; + + destroyObjectByVar(obj, "casting"); + destroyObject(obj); + + +} + + +function setState_po_ATIceManMagicCircle(obj, state, datas) +{ + if(!obj) return; + + local pChr = obj.getTopCharacter(); + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + local x = sq_GetXPos(obj); + local y = sq_GetYPos(obj); + local z = sq_GetZPos(obj); + + + obj.getVar("state").clear_ct_vector(); + obj.getVar("state").push_ct_vector(); +// 蟾晦? + local t = obj.getVar("state").get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + + local pooledBackObj = createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/01_casting/casting_base_back.ani", false, + posX, posY - 1, 0); + + local pooledFrontObj = createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/01_casting/casting_base_front.ani", false, + posX, posY + 2, 0); + + obj.getVar("casting").push_obj_vector(pooledBackObj); + obj.getVar("casting").push_obj_vector(pooledFrontObj); + + + createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/01_casting/02_roadappear_dodge_00.ani", true, + posX, posY + 2, 0); + + createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/01_casting/02_roadappear_dodge_f_00.ani", true, + posX, posY - 1, 0); + + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + //pChr.setDirection( + local ani = obj.getCustomAnimation(1); + obj.setCurrentAnimation(ani); + + + local pooledFrontObj = createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/02_pole/pole_base.ani", false, posX, posY, 0); + + obj.getVar().push_obj_vector(pooledFrontObj); // index 2 + + // 试虽 + createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/02_pole/dust/19smoke_dodge_11.ani", true, + posX, posY + 1, 0); + // + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_3) + { // 橡挤?惚 1 + local ani = obj.getCustomAnimation(2); + obj.setCurrentAnimation(ani); + + local attackInfo = sq_GetCustomAttackInfo(obj, 0); + sq_SetCurrentAttackInfo(obj, attackInfo); + + //////////////////////////////////////////////////////// + // 涧觼铮桧粽 跷陛 + local pooledObj = null; + + + pooledObj = sq_CreateDrawOnlyObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/common/18_shockwave_dodge_0.ani", + ENUM_DRAWLAYER_BOTTOM, true); + + pooledObj.setCurrentPos(posX, posY, 0); + + sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); + //////////////////////////////////////////////////////// + + + local pooledFrontObj = createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/destroy_base_0.ani", false, posX, posY, 0); + + destroyObject(obj); + + obj.getVar().push_obj_vector(pooledFrontObj); + + local particleCreater = obj.getVar().GetparticleCreaterMap("AtIceManD0", "PassiveObject/Character/Mage/Particle/ATIceManDestroy0.ptl", obj); + // + particleCreater.Restart(0); + particleCreater.SetPos(posX, posY + 5, posZ); + + sq_AddParticleObject(obj, particleCreater); + + + createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/02_broken/23_glow_dodge.ani", true, + posX, posY + 1, 0); + + local particle = obj.getVar().GetparticleCreaterMap("AtIceManD1", "PassiveObject/Character/Mage/Particle/ATIceManDestroy1.ptl", obj); + // + particle.Restart(0); + particle.SetPos(posX, posY + 5, 55); + + sq_AddParticleObject(obj, particle); + + local atk = sq_GetCurrentAttackInfo(obj); + local smashAttackRate = obj.getVar("attack").get_vector(1); + sq_SetCurrentAttackBonusRate(atk, smashAttackRate); + + + if(obj.isMyControlObject()) + { + // ?贼?娄 + local fScreen = sq_flashScreen(obj,0,80,0,80, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_addFlashScreen(fScreen, 0, 400, 240, 150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + // + + sq_SetMyShake(obj,4,300); + } + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_4) + { // 橡挤?惚 2 + local pooledFrontObj = createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/destroy_base_1.ani", false, + posX, posY, 0); + + destroyObject(obj); + + obj.getVar().push_obj_vector(pooledFrontObj); + + // 旋煎办 + createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/02_broken/23_glow_dodge.ani", true, + posX, posY + 1, 0); + + + // 试虽 + createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/02_broken/dust/19smoke_dodge_00.ani", true, + posX, posY + 1, 0); + // + + local ani = obj.getCustomAnimation(2); + obj.setCurrentAnimation(ani); + + local atk = sq_GetCurrentAttackInfo(obj); + local smashAttackRate = obj.getVar("attack").get_vector(1); + sq_SetCurrentAttackBonusRate(atk, smashAttackRate); + + + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_5) + { // 橡挤?惚 3 + local ani = obj.getCustomAnimation(2); + obj.setCurrentAnimation(ani); + + local attackInfo = sq_GetCustomAttackInfo(obj, 1); + + sq_SetCurrentAttackInfo(obj, attackInfo); + + local pooledFrontObj = createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/destroy_base_2.ani", false, + posX, posY, 0); + + destroyObject(obj); + + local frontObj = obj.getVar("casting").get_obj_vector(0); + local backObj = obj.getVar("casting").get_obj_vector(1); + + if(frontObj) + { + frontObj.setValid(false); + } + + if(backObj) + { + backObj.setValid(false); + } + + obj.getVar("casting").remove_obj_vector(frontObj); + obj.getVar("casting").remove_obj_vector(backObj); + + + obj.getVar().push_obj_vector(pooledFrontObj); + + // 旋煎办 + createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/02_broken/23_glow_dodge.ani", true, + posX, posY + 1, 0); + + local particleCreater = obj.getVar().GetparticleCreaterMap("AtIceManD2", "PassiveObject/Character/Mage/Particle/ATIceManDestroy2.ptl", obj); + // + particleCreater.Restart(0); + particleCreater.SetPos(posX, posY + 5, 55); + + sq_AddParticleObject(obj, particleCreater); + + // 试虽 + createAnimationPooledObject(obj, + "PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/03_broken_02/dust/19smoke_dodge_00.ani", true, + posX, posY + 1, 0); + // + if(obj.isMyControlObject()) + { + sq_SetMyShake(obj,4,300); + } + + local atk = sq_GetCurrentAttackInfo(obj); + local expPower = obj.getVar("attack").get_vector(2); + sq_SetCurrentAttackPower(atk, expPower); + + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_6) + { // 葆彻霞饷薯 + print(" passiveState == PASSIVEOBJ_SUB_STATE_6"); + local ani = obj.getCustomAnimation(3); + obj.setCurrentAnimation(ani); + + + } + + //local radiusRate = (radius100Rate.tofloat() / 100.0); + //local size = (sq_GetAniRealImageSize(currentAni, ENUM_DIRECTION_RIGHT) / 2) + 60; +} + +function procAppend_po_ATIceManMagicCircle(obj) +{ + if(!obj) return; + + local pChr = obj.getTopCharacter(); + + if(!pChr) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + + local passiveState = obj.getVar("state").get_vector(0); + + if(pChr.getState() != STATE_ICEMAN) + { + if(passiveState <= PASSIVEOBJ_SUB_STATE_3) + { + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + } + + + + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + local sendState = false; + local castingObj = obj.getVar("casting").get_obj_vector(0); + + if(castingObj) + { + local isEnd = sq_IsEnd(castingObj.getCurrentAnimation()); + + if(isEnd) + { + if(pChr.getState() == STATE_ICEMAN && pChr.getSkillSubState() >= SUB_STATE_ICEMAN_1) + { + local frmIndex = sq_GetCurrentFrameIndex(pChr); + + if(frmIndex > 1) + { + //print(" pass"); + sendState = true; + } + + } + // + } + } + else + { + //print(" castingObj is null"); + sendState = true; + } + + if(obj.isMyControlObject()) + { + if(sendState) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } + else if(passiveState > PASSIVEOBJ_SUB_STATE_1 && passiveState < PASSIVEOBJ_SUB_STATE_6) + { // 橡挤当撩, 橡挤?惚 + //PASSIVEOBJ_SUB_STATE_2 // 橡挤当撩 + //PASSIVEOBJ_SUB_STATE_3 // 橡挤?惚 - 梱虏?贼 + //PASSIVEOBJ_SUB_STATE_4 // 橡挤?惚 - ?惚1 + //PASSIVEOBJ_SUB_STATE_5 // 橡挤?惚 - ?惚2 + local sendState = false; + local castingObj = obj.getVar().get_obj_vector(0); + + if(castingObj) + { + local isEnd = sq_IsEnd(castingObj.getCurrentAnimation()); // index 2 + + if(isEnd) + { + if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { // 橡挤当撩桧 赅舒 部陬击 阳 + if(pChr.getState() == STATE_ICEMAN && pChr.getSkillSubState() >= SUB_STATE_ICEMAN_4) + { + local frmIndex = sq_GetCurrentFrameIndex(pChr); + + //print( " now:" + frmIndex); + + if(frmIndex > 5) + { + sendState = true; + } + } + } + else + { + sendState = true; + } + } + else + { // 拥栖诡桧暮桧 寰部陬击 阳 + if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { // 晦菅娄 跺桧 ?溯歜 翕晦? + if(pChr.getSkillSubState() == SUB_STATE_ICEMAN_3) + { + local frmIndex = sq_GetCurrentFrameIndex(pChr); + + if(frmIndex <= 18) + { + local poleObj = obj.getVar().get_obj_vector(2); // index 2 + + if(poleObj) + { + local poleFrmIndex = sq_GetCurrentFrameIndex(poleObj); + + if(poleFrmIndex != frmIndex) + { + sq_SetAnimationFrameIndex(poleObj.getCurrentAnimation(), frmIndex); + } + } + } + } + else if(pChr.getState() == STATE_ICEMAN && pChr.getSkillSubState() >= SUB_STATE_ICEMAN_4) + { + local frmIndex = sq_GetCurrentFrameIndex(pChr); + + if(frmIndex > 5) + sendState = true; + } + } + } + } + else + { + sendState = true; + } + + if(obj.isMyControlObject()) + { + if(sendState) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(passiveState + 1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } + +} + +function onChangeSkillEffect_po_ATIceManMagicCircle(obj, skillIndex, reciveData) +{ + + if(!obj) return; + +} + +function onDestroyObject_po_ATIceManMagicCircle(obj, object) +{ + + if(!obj) return; + +} + +function onKeyFrameFlag_po_ATIceManMagicCircle(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_ATIceManMagicCircle(obj) +{ + if(!obj) return; + + if(!obj.isMyControlObject()) + return; + + local passiveState = obj.getVar("state").get_vector(0); + + if(passiveState == PASSIVEOBJ_SUB_STATE_0) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_2) + { + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_3) + { + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_4) + { + } + else if(passiveState == PASSIVEOBJ_SUB_STATE_6) + { // 饷薯 + print(" passiveState == PASSIVEOBJ_SUB_STATE_6 destroy"); + sq_SendDestroyPacketPassiveObject(obj); + } + +} + +function onAttack_po_ATIceManMagicCircle(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + + local pChr = obj.getTopCharacter(); + + if(!pChr) + return 0; + + local active_damager = sq_GetCNRDObjectToActiveObject(damager); + + if(!active_damager) + return 0; + + + local passiveState = obj.getVar("state").get_vector(0); + + if(passiveState == PASSIVEOBJ_SUB_STATE_1) + { + local rand = sq_getRandom(0, 100); + + local rate = obj.getVar("freezeRate").get_vector(0); + print(" rate:" + rate + " rand" + rand); + + // 桧楼?徽桧 剩横陛捡 桧楼马模 横?蛤虽蒂 勘横鄹栖棻.. + if(rand <= obj.getVar("freezeRate").get_vector(0)) + { + CNSquirrelAppendage.sq_AppendAppendage(damager, pChr, SKILL_ICEMAN, + true, "Character/ATMage/IceMan/ap_ATIceManMagicCircle.nut", true); + } + } + + return 0; +} diff --git a/character/atmage/iceorbex/iceorbex.nut b/character/atmage/iceorbex/iceorbex.nut new file mode 100644 index 0000000..2e94f0e --- /dev/null +++ b/character/atmage/iceorbex/iceorbex.nut @@ -0,0 +1,103 @@ + +function checkExecutableSkill_IceOrbEx(obj) +{ + if (!obj) return false; + + local useSkill = obj.sq_IsUseSkill(SKILL_ICE_ORB_EX); + if (useSkill) { + obj.sq_AddSetStatePacket(STATE_ICE_ORB_EX, STATE_PRIORITY_IGNORE_FORCE, false); + return true; + } + return false; +} + +function checkCommandEnable_IceOrbEx(obj) +{ + if(!obj) return false; + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_ICE_ORB_EX); + } + + return true; +} + +function onSetState_IceOrbEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_ORB_EX); + obj.sq_PlaySound("MW_ICEORB"); +} + +function onEndCurrentAni_IceOrbEx(obj) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); // 拥栖 部釭贼 蝶鼹萄煎. +} + +function onKeyFrameFlag_IceOrbEx(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + local level = sq_GetSkillLevel(obj, SKILL_ICE_ORB_EX); + + if(flagIndex == 1) { + // ?卫粽 嫦饵. + if(obj.isMyControlObject()) + { + local distance = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 0); // 0. 鼠殓溘 剪葬 + + + local leftPress = sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL); + local rightPress = sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL); + + if(leftPress && rightPress) // 翕卫缣 寰扬毓击阳 籀葬. 翕卫缣 扬毓击 隆 酝除戏煎. + { + //蛤?? 高桧晦缣 嬴鼠匙紫 ?虽强挤. + } + else if((sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT && rightPress) // 伪擎 寞?击 扬毓击阳. + || (sq_GetDirection(obj) == ENUM_DIRECTION_LEFT && leftPress)) + { + distance = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 1); // STATIC 1. 姜寞? 剪葬 + } + else if(leftPress || rightPress) // ?釭塭紫 殓溘 腑棻贼 羲寞? + { + distance = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 2); // STATIC 2. 羲寞? 剪葬 + } + + + local speed = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 3);// STATIC 3. 掘羹 嫦饵 楼紫 + + local level = sq_GetSkillLevel(obj, SKILL_ICE_ORB_EX); + local gap = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 4); // STATIC 4. 陛卫 当撩 卫除 除问 + local pricklePower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_ORB_EX , STATE_ICE_ORB_EX, 0, 1.0); // LEVEL 0. 陛卫 奢问溘 + local lastPower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_ORB_EX , STATE_ICE_ORB_EX, 1, 1.0); // LEVEL 1. 虞颤 奢问溘 + local maxCount = sq_GetLevelData(obj, SKILL_ICE_ORB_EX, 2, level); // LEVEL 2. 陛卫 当撩 ?热 + local direction = sq_GetDirection(obj); + local targetPos = sq_GetDistancePos(obj.getXPos(), direction, distance); + + // 卫除 = 剪葬/楼溘 + obj.sq_StartWrite(); + obj.sq_WriteDword(speed); // 陈嬴陛朝 楼紫. + obj.sq_WriteDword(gap); + obj.sq_WriteFloat(pricklePower.tofloat()); //挤热橾热紫 毡晦阳侥缣 float?戏煎 尔鱼棻. sqr缣摹 DWORD ?击 濠翕戏煎 int?戏煎 夥脯 舆韩 强晦 阳侥. + obj.sq_WriteFloat(lastPower.tofloat()); + obj.sq_WriteDword(maxCount); + obj.sq_WriteWord(direction); + obj.sq_WriteDword(targetPos); + + obj.sq_SendCreatePassiveObjectPacket(24235, 0, 100, 0, 50); // 橡挤掘 当撩, 100,50暧 谢?缣 当撩 + } + } + + return true; + +} diff --git a/character/atmage/iceorbex/po_aticeorbex.nut b/character/atmage/iceorbex/po_aticeorbex.nut new file mode 100644 index 0000000..ae74fbe --- /dev/null +++ b/character/atmage/iceorbex/po_aticeorbex.nut @@ -0,0 +1,300 @@ +getroottable()["IceOrbExCreatePos"] <- {}; +getroottable()["IceOrbExCreatePos"] = [[28,28], // 0 + [22,-24], // 1 + [-21,0], // 2 + [-5,-28], // 3 + [-17,36], // 4 + [8,-19], // 5 + [-31,9], // 6 + [-2,42], // 7 + [-24,-24], // 8 + [36,7]]; // 9 + + + +PO_ICE_ORB_ETC_ANI_READY <- 0; // 赅暮 1 : 姜虽, 遽绿 +PO_ICE_ORB_ETC_ANI_ATTACK <- 1; // 赅暮 2 : 陛卫奢问 +PO_ICE_ORB_ETC_ANI_EXPLOSION <- 2; // 赅暮 3 : ?嫦 + +PO_ICE_ORB_SUB_STATE_FLYING <- 2; // 陈嬴马 +PO_ICE_ORB_SUB_STATE_READY <- 3; // 奢问遽绿,姜虽 +PO_ICE_ORB_SUB_STATE_ATTACK <- 4; // 奢问,陛卫络挤 +PO_ICE_ORB_SUB_STATE_EXPLOSION <- 5; // ?嫦 + +//PO_ICE_ORB_VAR_TIME <- 0; // 陈嬴陛朝 卫除 +PO_ICE_ORB_VAR_SPEED <- 1; // 陈嬴陛朝 楼紫 +PO_ICE_ORB_VAR_GAP <- 2; // 陛卫 当撩 卫除除问 +PO_ICE_ORB_VAR_POWER <- 3; // 陛卫 奢问溘 +PO_ICE_ORB_VAR_MAXCOUNT <- 4; // 陛卫 当撩 譆渠 偎热. +PO_ICE_ORB_VAR_TARGET_X <- 5; // 迹瞳虽 X谢? +PO_ICE_ORB_VAR_TARGET_Z <- 6; // 迹瞳虽 z谢? + + +PO_ICE_ORB_TIMER_FLYING <- 0; //陈嬴陛朝 卫除 +PO_ICE_ORB_TIMER_ATTACK_GAP <- 1; //陛卫 奢问 卫除 除问 +PO_ICE_ORB_TIMER_WAITING_END <- 2; //葆虽虞 陛卫 奢问? 拥栖 部陈阳 梱虽 卫除 除问 + +PO_ICE_ORB_CONST_PRICKLE_ANI_TIME <- 160; // 陛卫 拥栖暧 识 卫除. : 葆虽虞 陛卫陛 当撩胀? 葆虽虞 陛卫陛 饵塭韩阳梱虽 渠晦 卫除 +PO_ICE_ORB_CONST_START_FRAME <- 6; //籀挤 卫蒙? ?溯歜 + +function setCustomData_po_ATIceOrbEx(obj, reciveData) +{ + if(!obj) return; + + local speed = reciveData.readDword(); + local gap = reciveData.readDword(); + local pricklePower = reciveData.readFloat(); + local lastPower = reciveData.readFloat(); + local maxCount = reciveData.readDword(); + local direction = reciveData.readWord(); + local targetPos = reciveData.readDword(); + + obj.setDirection(direction); // 寞?击 睡赅偌羹谛 翕橾?啪 + + + local var = obj.getVar(); + var.setInt(PO_ICE_ORB_VAR_SPEED ,speed); + var.setInt(PO_ICE_ORB_VAR_GAP ,gap); + var.setFloat(PO_ICE_ORB_VAR_POWER ,pricklePower); + var.setInt(PO_ICE_ORB_VAR_MAXCOUNT ,maxCount); + var.setInt(PO_ICE_ORB_VAR_TARGET_X ,targetPos); + var.setInt(PO_ICE_ORB_VAR_TARGET_Z ,obj.getZPos()); + + + obj.sendStateOnlyPacket(PO_ICE_ORB_SUB_STATE_FLYING); + + // 虞颤 奢问溘 荡潍 + local currentAttackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(currentAttackInfo, lastPower.tointeger()); + +} + +//陛卫 当撩 ?热. +function createIcePrickleByIceOrbEx(obj, index, isFirst) +{ + // 当撩 嫔纂陛 蟾娄 肾贼 蟾娄 寰肾朝 彰嫔煎 虽姜 + local createPosMax = ::IceOrbExCreatePos.len(); + index = index % createPosMax; + + local pos = ::IceOrbExCreatePos[index]; + local x = pos[0]; + local z = pos[1]; + + // 桧嘐虽蒂 1.5寡 ?渠 ?棻. 评塭怃 陛卫暧 当撩嫔纂紫 1.5寡 渗?棻. + x = x.tofloat() * 1.0; + z = z.tofloat() * 1.0; + + local var = obj.getVar(); + local power = var.getFloat(PO_ICE_ORB_VAR_POWER); + + sq_BinaryStartWrite(); + sq_BinaryWriteWord(index); // 当撩 陛卫 樯策蝶. + sq_BinaryWriteFloat(power); + sq_BinaryWriteBool(isFirst); + sq_SendCreatePassiveObjectPacket(obj, 24236, 0, x.tointeger(), 1, z.tointeger(), obj.getDirection()); +} + +function onTimeEvent_po_ATIceOrbEx(obj, timeEventIndex, timeEventCount) +{ + if(!obj) + return false; + + if(timeEventIndex == PO_ICE_ORB_TIMER_ATTACK_GAP) + { + if(!obj.isMyControlObject()) + return true; // 颤桧该陛 true桧贼 ?轿 酝钦. + + local var = obj.getVar(); + local maxCount = var.getInt(PO_ICE_ORB_VAR_MAXCOUNT); + if(timeEventCount < maxCount) //譆渠 偎热 嘐虏桧贼 陛卫 当撩 + { + // 陛卫 当撩 ?热 属 + createIcePrickleByIceOrbEx(obj, timeEventCount + PO_ICE_ORB_CONST_START_FRAME, false); + return false; // 颤桧该陛 false桧贼 啗楼 ?轿 ?棻. + } + else { + obj.setTimeEvent(PO_ICE_ORB_TIMER_WAITING_END, PO_ICE_ORB_CONST_PRICKLE_ANI_TIME ,1 , false); + return true; // 颤桧该陛 true桧贼 ?轿 酝钦. + } + } + else if(timeEventIndex == PO_ICE_ORB_TIMER_WAITING_END) + { + obj.sendStateOnlyPacket(PO_ICE_ORB_SUB_STATE_EXPLOSION); + return true; // 颤桧该陛 true桧贼 ?轿 酝钦. + } + + return false; +} + +function setState_po_ATIceOrbEx(obj, state, datas) +{ + if(!obj) return; + + if(state == PO_ICE_ORB_SUB_STATE_FLYING) + { + local var = obj.getVar(); + local speed = var.getInt(PO_ICE_ORB_VAR_SPEED); + + obj.sq_SetMoveParticle("Particle/ATIceOrbEx.ptl", 0.0, 0.0); + sq_SetSpeedToMoveParticle(obj,0,speed); + + // 窒葬 试虽 : 绪蒂热烟 濠舆 当撩?棻. + local dustTimeGap = 50.0 * (1000.0/speed.tofloat()); + + sq_CreateParticle("PassiveObject/Character/Mage/Particle/ATIceOrbDust.ptl",obj,0,-1,0,true,dustTimeGap.tointeger(),500,100); + } + else if(state == PO_ICE_ORB_SUB_STATE_READY) + { + obj.sq_RemoveMoveParticle(); // 桧翕 姜虽. + setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_READY); // 拥栖 掖羹 + local xPos = sq_GetVectorData(datas,0); // 紫杂? x谢?. + sq_SetCurrentPos(obj, xPos, obj.getYPos(), obj.getZPos()); + + sq_RemoveParticle("PassiveObject/Character/Mage/Particle/ATIceOrbDust.ptl",obj); + } + else if(state == PO_ICE_ORB_SUB_STATE_ATTACK) + { + setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_ATTACK); // 拥栖 掖羹 + } + else if(state == PO_ICE_ORB_SUB_STATE_EXPLOSION) + { + setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_EXPLOSION); // 拥栖 掖羹 + obj.stopSound(3711); + } +} + +function procAppend_po_ATIceOrbEx(obj) +{ + if(!obj) return; + + local state = obj.getState(); + if(state == PO_ICE_ORB_SUB_STATE_FLYING) + { + local var = obj.getVar(); + local targetXPos = var.getInt(PO_ICE_ORB_VAR_TARGET_X); + local direction = obj.getDirection(); + if( (direction == ENUM_DIRECTION_LEFT && targetXPos > obj.getXPos()) + || (direction == ENUM_DIRECTION_RIGHT && targetXPos < obj.getXPos()) ) { + + obj.sq_RemoveMoveParticle(); // 桧翕 姜虽. + targetXPos = obj.getXPos(); + sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos()); + + // 桧翕 部 棻挤 鼻鹧煎 剩梯. + obj.sendStatePacket(PO_ICE_ORB_SUB_STATE_READY, obj.getXPos()); + } + } + else if(state == PO_ICE_ORB_SUB_STATE_READY) + { + if(sq_GetCurrentFrameIndex(obj) < 1) { + local var = obj.getVar(); + local targetXPos = var.getInt(PO_ICE_ORB_VAR_TARGET_X); + local addX = sq_GetShuttleValue(0, 10, sq_GetObjectTime(obj), 30)-5; + addX = addX >= 0 ? 2 : -2; + + sq_SetCurrentPos(obj, targetXPos + addX, obj.getYPos(), obj.getZPos()); + } + } + + if(state == PO_ICE_ORB_SUB_STATE_ATTACK || state == PO_ICE_ORB_SUB_STATE_READY) + { + if(PO_ICE_ORB_SUB_STATE_READY && sq_GetCurrentFrameIndex(obj) < 2) + return; + + local var = obj.getVar(); + local x,z; + local t = (sq_GetObjectTime(obj)/100)%4; //sq_GetShuttleValue(0, 4,sq_GetObjectTime(obj),80)%4; + + switch(t) + { + case 0 : x = 0; z = 2; break; + case 1 : x = 0; z = -2; break; + case 2 : x = -2; z = 0; break; + case 3 : x = 2; z = 0; break; + default : x = 0; z = 0; break; + } + + x = x + var.getInt(PO_ICE_ORB_VAR_TARGET_X); + z = z + var.getInt(PO_ICE_ORB_VAR_TARGET_Z); + + + sq_SetCurrentPos(obj, x, obj.getYPos(), z); + + } + +} + +function onKeyFrameFlag_po_ATIceOrbEx(obj, flagIndex) +{ + if(!obj) + return false; + + if(obj.getState() == PO_ICE_ORB_SUB_STATE_READY) + { + if(flagIndex == 1) + { + // 籀挤缚 棻 廓翻 鼻鹧煎 赅舒 当撩. + for(local i = 0; i<3%0>eeO$~vjDcgu85tLe^PsEyB$xLXjvRow*f&d8| zATMc}3u?ek6V&L%2~s0yAKC_W`ZcvKf6>`pijsVR$OrAt%$_-OW|pmP?DLSuC?VYH zCY)|BV~)KJ^~~m)PwH&bzU{EkzaEi1-MpqFM*Q$55k`ee7w=rUsD-WkN3c_X9o}W} z6%E$liKvewFf0tKcaG zETe3Me9PJjqhKBP2orE8!RO|oX!1C;3zblYly!YQQ3=Va!Pz3RI8)&xl1c8F}KK*U9_W~V%`&WPe0F53V%8tDMc(8MbhP&^| zqAd+W6Rikn9FRnVcHTsCynf^Au=6T|=^ni}<} zg`C%+(&7EE_Ee6=(9$gC z1+2$W55PkEPGIRM=inrP8&K^S))r>i=Y$zm+$Kg=0Aq4}8VjE4E2H$87lrLD?gcbx z6EBD6W-rJ&lq*8vayqhWUsk%U&76XDn4bVyQ7bN*2 zCup$IcTa{7p7!^CMWdb9MI?F)-ZJX{y$_4wjrPW!q|ldTERF0B9uW4oZU-aCW(MqzFh+;ym#hTUJd+xpGe#~Ujy%I2Z`jv5?+b?y1|sb8J(0_#Kgpz1$$Nf*aCRW0PIiUqZ!Zz`xatGJ^E*ODyqg8o zQXDbhQj{hC*uW*P=Ru9amf}(oqFtU3trB((78d70@?(pn7w<&6pGni_RK_a3p6IAE zx$=9?g(L|?dP)j4l;QdU{td(p8HLKpZtio*J4#5mhP=6E&n<<1pHrQGX(8DB zs2RnMMk!bb+Bbg2cl{uMuka8NwCIi0R#@v+b$i>ZZdP_0rE+eax$f#UV6~{RYXe8^ z`>}SOptMC}QsX67re=&986p$J!~{uOTfJz(jOWaWt->`*5Q)QP4z+>MNJMAUET^f9 zg}TiHzw7jP5Q_v5;>IZUTY?8AjI9GPnOBZxmQrots5s0@03>;tG3dIi);u|S!cIQ@ z`S|mS+ZnKc8GW#T+wX*ULLiwK({ zO$cPG%o3X@xvq_Pnnv@3-7sI1{|La=je_6Px}i66S;Hnmm<4^vtX?D!@t|&Fqqo6Y z?NYnql}oLgwpy(4TA@JFmQ1#lm)wLz%&{m;(>-D zI&_b<;UGHW0{RQ9i6dZ;W&jQ{{OZuo3Suyfsk{`}u7(H%J!%@*LfgrejM-(!#rqmt zDa1*i`QwrXP$v*v&W|7+)=UqXNi`V8`{$4&4{V|QmqDoJnMWxk#4qA~YNLoMI}-zv zJRgEdp(@T>xjbv7xG24_&R;pOQpPr?x>XmL+>RXi^uk>N* zR;6C8Z+Y!%twO{tK>;lmWc<^kRGH()I^v`&43@aqG8x|vUc=)+l@vO7nUoRuUxg=ot)4!m5#f}|8YE@jzC2N45!PC=kLDf eE%BLhZ0>PPpN=$R%_LuPqoF#%b4vIA2mb;?%EJo) literal 0 HcmV?d00001 diff --git a/character/atmage/iceroad/ap_atmage_iceroadcs.nut b/character/atmage/iceroad/ap_atmage_iceroadcs.nut new file mode 100644 index 0000000000000000000000000000000000000000..18fd4373732ed7eb314242881192d4f73c541eec GIT binary patch literal 2496 zcmcgtO>fgc5bZUQ@*kF*9I1-aGYTl`2dc!Eh$%;FYj0X3$Lp>)1=03|5aNJTkN~yf zLxrN2B2HW?@q6kv|ALua$FZH3lop|;@mhKNX6Mbk*-E+73mob3fJ7^H%XR0H*W0wq z3>t#1wuc3hd5oSg}{Bs7KxtX0Jl_To^UdY?8)B$dj{;utNp|@~Hy5PT7lE z;G|Us9VUAbWDh2pk5nev9}Gx(lC-9+`GwiG)w1rl?e@((4|JL+sA-}!1-A8dl(g+q0nR^fDFHkxZDkz_6zN&1?l;m*Rjh zTh_e8?tzC*7z$>iftFt6Qu40ta(9W?%$;dZJrgXY+q+$EO3v>|5pY)Jb z>>$hQGAM2R2E#VWAiMN&9t_fB&`ix5LxDkFi(G3G+@*wEBc@4?UViUy?Z!KMB>wV? zoIHDV^x~lZ{0ANAL=J#+!KwL~3 zjg_ibBT9#%OghfFik*@qH{k`1 z2NvsJ1{okUCl8544_wdDJAAfH^w#kVKjQ|bzuP?H^tfyN(ISl9= 7) { + if(!obj.getVar().get_vector(0)) { + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_ICEROAD, false, "Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut", false); + + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + // + + if(obj.isMyControlObject()) { + local skill = sq_GetSkill(obj, SKILL_ICEROAD); + skill.setSealActiveFunction(false); + } + + + obj.getVar().set_vector(0, 1); + } + } + + if(frmIndex >= 4) { + if(!obj.getVar().get_vector(1)) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_ICEROAD, true, "Appendage/Character/ap_atmage_effect.nut", true); + obj.getVar().set_vector(1, 1); + } + } + } + else if(substate == SUB_STATE_ICEROAD_1) { + // SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_2) { + // SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_3) { + // SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_4) { + // SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_IceRoad(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + //obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + + if(substate == SUB_STATE_ICEROAD_0) { + // SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_1) { + // SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_2) { + // SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_3) { + // SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_4) { + // SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_IceRoad(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ICEROAD_CASTING) + { + if(obj.isMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICEROAD_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICEROAD, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if(substate == SUB_STATE_ICEROAD_0) + { + // SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机 + if(obj.isMyControlObject()) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + else if(substate == SUB_STATE_ICEROAD_1) { + // SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_2) { + // SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_3) { + // SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_4) { + // SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_IceRoad(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ICEROAD_0) { + // SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_1) { + // SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_2) { + // SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_3) { + // SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_4) { + // SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_IceRoad(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ICEROAD_0) { + // SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_1) { + // SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_2) { + // SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_3) { + // SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_4) { + // SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机 + } + + // 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据 + sq_EndDrawCastGauge(obj); + +} + +function onAfterSetState_IceRoad(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_ICEROAD_0) { + // SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_1) { + // SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_2) { + // SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_3) { + // SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_ICEROAD_4) { + // SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机 + } + + +} + \ No newline at end of file diff --git a/character/atmage/iceroad/po_aticeroad.nut b/character/atmage/iceroad/po_aticeroad.nut new file mode 100644 index 0000000000000000000000000000000000000000..9143d8d5b59394a82853a0e79223c1df6ed6b26f GIT binary patch literal 4720 zcmb7IYj4w57~a=Z>VG)oQ>uAM*|dEaf+{3wiRevDXtjN@+}LSNQ#;sBM};O$Tr{x> zgt`e)DBC*9paaG<7!uIJpIO}GU+j6$IleRwrKm}p9KZL=^S-Bp1ND|w^Gw@fuHhA0 zu4gY7HBVEUwwkY&YsQSN=^1$Ap}Pvz?0C$PtYc`pu&&1>!A2$=%peUD zB0_scWzvi9zF z`|ZE1yYssH@&OL;VQ=RiYyWtwb7Kb_*)S%?`O1>nXp9>xMkAT1IjU1`x>;wLeY7Xo zFv>oKx=+dQHXVCDDPpu?Yo3r1q``f!Hc7dnHB9~BA|>_oMph5Z*_`Pumb_Y~Z|X*8 zN~Nz$3L_7)o^4v5v0$Lq6s8GV6&9Mp6FV;UaSV z0fU5bnW043RLeJ;hNUND9w3EclFKz6xROaTvt}>{xRnm75LMQz$F@X)C$x~s%NpXL zuz9;>>87=C(mt;+)2(=|+LAD$7x~yQ^(kJW^O}W42c;qVwrbkOGBOPM62W)pDUU zGnFrL{gPY4n_%NbO6cB?i-e4;GpC4 zFmiMl^+fQ@N$D^0BZLr~@`k>;?LYjpyMD*NwkaP8;AA)+>D<}stnYT#E>edR-Q}15 zZ#SvWsnNywDZ8`OO?k|=6+@s}CQNJs$V5~SdLEJ!m=Um+;w=I${aJAAR#P|xNFAeZ zflMJl(zPt}T+1j+-$8mt9>l3hIJL2uld#b7_^_1N5k2Ck9GSR&sVU@)9tUbAMWCR9 zUXtKW)l#b0QBBhr1BNFCd!PD1Pp0Ud%i))Ji4o7sRH8r(2W%^$p-*G+$|+mAfp+TM zCQ?E3zE9MbY4$O77I_KFkh4fEJ950I+T)uEwHz@9XTq;TckBll$XojztuBwDejj8J zV)44;9#R3q(KMg1@`U!GxY0p9MzQ1zO*F-XZ$VuohgC!gv4U9kNLb|(d=NKhbOwJUAh^j4mQ3{lVfkTv={UU-ig}^BF@Yw)-hJ}U6%DI+_#ik)9 z22Qi+3-Kj93Ysnk?E5NSVV={%q)LY%oy%7zAS)-=-<;OOE=(t?JSkMNR?AB(tgba& zo)n%;wzvDzU;o4Z?h@0unXI$6?r*%}KzBG}%f*afg|?W%5pqqJi>fexygYWQs+J}T zr}C3kb*_}3o|=qVgyQ0Qg=O6s)+8%TxR5-}nSeS@+hn|K8lku9VF(;3sx2 z=5IamH|_>t8XALe@6S&bxRwZi=EH*+R6sZbLg*A#E7mwZsc7#@-jSkl z$GX37`A;^OzxLM%35jBX?OS!5(X=_7C!Zd|lSuL>@+09-=wR&e7u-2vRREOoF$XXC z8QW%EEXX1q`=fy^fuevVDLZ4}Ix0tD6s{NnADGxC#A?c;5z!&6E1J`LlM>b?sFGKy z*d4Vuw+C|5T7xnk@$cXEZ*BxhiV`IYB9uWr6~Gyl0^9=z;gT%(m9$_G-^4P@9VM{r zl|}uLO7))hYRK!sD!}h~`9M2hCxn>r16DP{ma&p5uYA?7rc3I?)GQ9BOQoU&8-D$x z0>lN8(5WyrF)=k6=tFMab)@S#@0L9t`#~~kDD1|r*h8)@|c|kdC ztd3F`MjP5fABlAw^JOX!+G|n?d!M}aTV_H)z}3f;6x9+egn@nUAxxx>gO{aC&&5VL Ut+_7t01<}pe+;xsa{oU1A1S>tG5`Po literal 0 HcmV?d00001 diff --git a/character/atmage/icesword/ice_sword.nut b/character/atmage/icesword/ice_sword.nut new file mode 100644 index 0000000000000000000000000000000000000000..fddd748113a24399b1eae33ada6971e8e85337d2 GIT binary patch literal 5395 zcmcgwZBN@)6yDb$@gHuHCOMjwgtt!}Lm`+hYC=$)!1~ED@eQ~*c4j-YsAbwZO)1<6Tl)Sw+I7+>njo~lCU5^@=iX~Ob{c3#Spfy-T;Jn!o^#G~&UJrZv7#4j)zDF4 z5f_$(v$#;P<#`Q@ORAV+ihySYJv>D{nECoOm*sN=eCtAc=FC>|_|W5}oZ`VRSAO0%6G6 z8&?z&+oCPoct$QPVVe_k@tn|B!6PP^$tE+|WbTxd7lka(45R8pj;Xd;A(n<#ss0Z8 zSBVQjG!jOsB4P%ZA@mwyRI0*<4{~ZH82m|JH z#c>tUI0W4dI%eoDm;r})L@nWwBHOaXBh|`c3)?xhgw5`OCqTlVW1VOl<+QPk!84x_ z+lh*4V%?7GYDp$(#wGG%E|Zqx)5&%K=^oe?jiTn0YU8^f>vw-|zS=;w=UerAPntI` zq2}6p{nid@Zfv(MZlT(v`>kt#)*n?HTbrnLW4pC}6E$93gnL`}A0lor7W)cpcGA%* zW2}HE+ZlPZ)Z| zA_&Z>_Tr3eSt^uD2NNQf$2@L?RCH_&nBdkF%>z#}#~urQ`Qi>GoTyl~QTkl9g<=sG z>?u{l({c%O1Bpf1lnXXCqiHZV%9f*ErAFg9m;Ix$QE5oBO2!hF6hi^uBC@Uyco52p zB51e-buMe5Rn;M*h)&WqcqB~c(~^)9(!z93ngiy}y7kV`AFr=H^8sJm{B@iy)b^g$ zUOuW_zKUAUtK-eJ3#fkgB8fuP|& z!2)7HM|TEAAat^KzeWn(b9&NEzWthLXBUan>(#cg1>)8_%T#O$a8R3UUN5lN! zXpASnLnExP-$w2vUYRl>@250*p~LDTh?2U3&w3UHCmeTdpztEjyB&>fi&cFJ_c7{`taD|@I2%*BH*Z}+DAl`iXavt3^O7kWfK5z z$OA7LZLZ&jnk7&i7Dy=-7jul0ju1|gkM1NvM`DdIMyN-|pp|^|;Q)rCE$jfex`cz= z{hr?V_RC&+d-NH|2RdXxEExpkxn)z;?E*L8+c|(fLG7>XR+1*id_w1-LAZfFo{naN zJfV1Z65P4|F+uL_`cMm%Yj(oha@ff5dL22#E zW^4T+$lJK71uT_~GuZTUfHn*|N`kw*@bm`)Dn2Z$ zvUKf{P<`BeaDzH}O7u<2`?ip`Igvs`KR!IG(8u~lQHgdIk4)b&i#l;(``abyZ9jmE z9q>IO^Y$Eu$o$Hnx9+>mp1 z^RLH^%Wt5sHg5jhwwpLj7)rI$4TmJoWi^*t-s=zp#!(Z=2fcv*LAqT1 F=wB>wRjdF2 literal 0 HcmV?d00001 diff --git a/character/atmage/jumpattack/jump_attack.nut b/character/atmage/jumpattack/jump_attack.nut new file mode 100644 index 0000000000000000000000000000000000000000..9270cb460d9c98801d0c999204f1844e866fb5d2 GIT binary patch literal 4108 zcmc&%ZBH9V5boDQ@_(4{A+lAMx4x;Q$T}I5IG7iK)3-0Di@kS1c4nSuBQ24Z_I4=Q zs?EIFufUysmPj~@KSK5QtL}{@_uE_5>6_r)`q^E5;@zKe?mhu;`iA@9p8IH{4Qlgu zz2}d?yZxKHTJaYD3_Sz}k(NT)$l01{fN6{}dzAK3PM3=lvTdum^HKBcxwzOp4tdp9 zOL5RjBdo;itX5=JEYfmWinK^t0iwsyHU<{6%a(B>((+{lLvQde7i?zz$4z$MgSOVq zoT`JCV=0{#nPIEC2z~Utrt2B@In$vBFtoPP1?423FdUAK_NOx$C7nzusZ44hHJFt% zik!{L$^IC|9~_HA4?R6Fnw7ID<@A|>Vc!alAK!o94||{k5t1(BPr_SF)E+K@TUkjY z=pw2s&)wBEx+j0y`EJhrYuR0^xC@KmyxL3vURmw>OF*;g(|h;8KO(||4 zTPA?@VI0G&AGgelKHO1`m2au?q)8ijcByVHu7eNy#&y@~!~`?)>KOCQ>4GklHOpeU z985)9ljEwT<}i8MMB zK2mipAC2*IOZ6kC2G0xx`JoIB4W=kHBuWncBd4Kp4>VZ!rAJcS9lw9c&p|n#=T(+b zCz&N1T2ZC)i+09?Bu!cji!eDj(p#TxO%)0(XSatVh(x_g+Y6e7AaL+I75Y#N(<-WZ zn`&sSu{d<#p8(-sqUid6qsW{2F}5=ZYz-1ZTw<^vd>>=EjT{bs7ZGqP1dx9n34*)D z(G-Tg@<{*TK$usp^C5!taU=lljG`&{GU=12vWJ78u8ob`A%OhrND$mDj;1iAo_RPB z1`W_KjiYIR4FT)}8umY59dU8zEI+LM@XVR{6@}W@&ejIFH|MIa*GVHdTi+vHCxl4Y zCe`}cWS^xLS)Zk4@W1r@t5G8vx*Qh6kg(xrjPq-ofe zsSlk!hkO%_k;aLJ4oL=e0y1aANEatfPI5wwT^cq^Na$T3#Ni9^@4N5dW)hc)|5!@H ze5vHGdK)>&U-kZbd=;k)vO@_a5ZVJENy>5V9MB96)qs{uYF18XLd24L;W-XSw#bKo z{_;qcLjQJjJ1Yy`%T0jJZuiv#l+Nz$b%3t!L~Zsl?H(L}z(Nt!8>~c-5Ejn-y~y~< zY 0) + { + if (obj.isMyControlObject() && obj.getZPos() <= 16) + { + createLightExplosion(obj, null, null, false, 24283); + sq_SendDestroyPacketPassiveObject(obj); + } + } +} + + + +// 葆彻掘羹 - 檩楼撩 +function setCustomData_po_ATMagicBallDarkJump(obj, receiveData) +{ + if(!obj) + return 0; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + local attackBonusRate = 0; + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + local mage = obj.getTopCharacter(); + if (!mage) + return 0; + + // 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾 + local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5); + verticalAngle = verticalAngle - angle; + + local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE); + local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE); + attackBonusRate = sq_GetAttackBonusRate(skill, 6, 1.0) + attackBonusRate; + + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackBonusRate); + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallDarkMoveJump.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallDark", "PassiveObject/Character/Mage/Particle/ATMagicBallDarkTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailJump1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailJump2.ptl"); + //obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailJump3.ptl"); +} + + +// 葆彻掘羹 - 热楼撩 +function setCustomData_po_ATMagicBallWaterJump(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 县溯诠骁 溯樯缣怃 当撩胀 螃粽薛? + local flag = receiveData.readDword(); + local var = obj.getVar(); + + var.setInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT, flag); + } + + // 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾 + local mage = obj.getTopCharacter(); + local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5); + verticalAngle = verticalAngle - angle; + + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallWaterMoveJump.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallWaterTailJump", "PassiveObject/Character/Mage/Particle/ATMagicBallWaterTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTailJump1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTailJump2.ptl"); +} + + +function procAppend_po_ATMagicBallWaterJump(obj) +{ + // 葆彻掘羹 - 热楼撩 (县溯诠骁 溯樯) + local var = obj.getVar(); + if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0) + { + if (obj.isMyControlObject() && obj.getZPos() <= 16) + { + createWaterExplosion(obj, null, null, false, 24282); + sq_SendDestroyPacketPassiveObject(obj); + } + } +} + + +// 葆彻掘羹 - ?楼撩 +function setCustomData_po_ATMagicBallFireJump(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 县溯诠骁 溯樯缣怃 当撩胀 螃粽薛? + local flag = receiveData.readDword(); + local var = obj.getVar(); + + var.setInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT, flag); + } + + // 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾 + local mage = obj.getTopCharacter(); + local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5); + verticalAngle = verticalAngle - angle; + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallFireMoveJump.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallFireTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTailJump1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTailJump2.ptl"); +} + + +function procAppend_po_ATMagicBallFireJump(obj) +{ + // 葆彻掘羹 - ?楼撩 (县溯诠骁 溯樯) + local var = obj.getVar(); + if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0) + { + if (obj.isMyControlObject() && obj.getZPos() <= 16) + { + createFireExplosion(obj, null, null, false, 24281); + sq_SendDestroyPacketPassiveObject(obj); + } + } +} + + +// 葆彻掘羹 - 鼠楼撩 +function setCustomData_po_ATMagicBallNoneJump(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + // 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾 + local mage = obj.getTopCharacter(); + if (!mage) return; + + local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5); + verticalAngle = verticalAngle - angle; + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallNoneMoveJump.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallNoneTail.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallNoneTailJump.ptl"); + + // 晦狱晦 熨湿 瞳辨 + mage.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),mage.getState()); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); +} + + + + +// 瞳桧 翱楼 葆彻掘(?楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallFireJumpMultiShot(obj, damager, boundingBox, isStuck) +{ // 翱楼 葆彻掘 ?楼撩 + createFireExplosion(obj, damager, boundingBox, isStuck, 24281); + return 0; +} + + +// 瞳桧 ?颤 葆彻掘(?楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallFireJump(obj, damager, boundingBox, isStuck) +{ + // ?颤 ?楼撩 + createFireExplosion(obj, damager, boundingBox, isStuck, 24214); + return 0; +} + + +// 瞳桧 翱楼 葆彻掘(热楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallWaterJumpMultiShot(obj, damager, boundingBox, isStuck) +{ + createWaterExplosion(obj, damager, boundingBox, isStuck, 24282); + return 0; +} + + +// 瞳桧 ?颤 葆彻掘(热楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallWaterJump(obj, damager, boundingBox, isStuck) +{ + createWaterExplosion(obj, damager, boundingBox, isStuck, 24215); + return 0; +} + +// 瞳桧 翱楼 葆彻掘(赀楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallLightJumpMultiShot(obj, damager, boundingBox, isStuck) +{ // ?颤 赀楼撩 + createLightExplosion(obj, damager, boundingBox, isStuck, 24283); + return 0; +} + + +// 瞳桧 ?颤 葆彻掘(赀楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallLightJump(obj, damager, boundingBox, isStuck) +{ // ?颤 赀楼撩 + createLightExplosion(obj, damager, boundingBox, isStuck, 24216); + return 0; +} + + diff --git a/character/atmage/lightningwall/ap_lightningwall.nut b/character/atmage/lightningwall/ap_lightningwall.nut new file mode 100644 index 0000000000000000000000000000000000000000..a58381a0224d35013dee61405fe07ebb46d8c4d0 GIT binary patch literal 2600 zcmd5;+iu!G5Y4NR_=gQoMsc`AL8_Wml}ou*1T3JW&5O0M7jSFVbiGamP5-^KyJj5- zkV_w0$>7`U%$YNDW^Frex6^8mdYxX&y|%kucWe*bMz>KPx&05H(B&zrT;y~1PP5_2 z9*o=@VN?a9d~T9Zj|UM&@ekMb{bqXG!*gQd#ez^DPf0PK`<2fb`o6ToxUgW6SFn&g zyV}(42Gbd*0i9msFf4$lC)`AI$T8!>Q+oMV&KlHLuHfR3qu)EoXiO%=3Pek)i8UDqOfI7>JW3BXE-S+UR?D}4dUL%Bu)bZ(ZAh0ZI| zjeb;uoazY^%sNq=nF>T-#FL_x5icHoO&`Vz{s~$Yp;VGeojeI4be5TdvL`t$Rf!9# zAr}i}81m|s08gr0xNjtGbh4R^g4QNNmS(YhCPC;tFbyD!j4Mb#<;teP9E(Zuu%c{w z3+5|yiO$h`bXKdOw{rN1E(cdKCpe3Yl$g4BNtnr5LM+r8*iO4sZ#0`?bY1m({d#-Q zziL=Wy@zrSS|3b^VWmH)jF>!Kr)`@M3~rUB_!oIRmgW;93- zR=$EAqpaJdY>zg!fO7TBCE;m2i@fiyANf;Kf)0Th4N?{dXbV99Lm_C&;$TGvm=mb4 znmnIrFp1cFOn|O{FU^`&ty!87F)B92goroKx&nuHM+N~~5&V&6`u zDR2UD6%BhuxTP{iLh!;FIC=;-JV0d6+` literal 0 HcmV?d00001 diff --git a/character/atmage/lightningwall/lightningwall.nut b/character/atmage/lightningwall/lightningwall.nut new file mode 100644 index 0000000000000000000000000000000000000000..faa35683b47a4a53cdba991c69c6dc532afe693e GIT binary patch literal 4716 zcmb_gZEq7-7T&K$;y>J0YUQX?$96(hHJh~@dlD@CCeMTjtyZIneVt61%%n48g4I@9 zm9i_e+wDS2AvB@T7AUlYN`$N!?|+v>_3sM-NSGEzh5B! zH_u20J`%@|;a9U|)jh+uNPUym&&ua%z2)iaCRNTFrl}Q;jZM!otc^9@G~@RAyEDg+ zy?^{z%xK16!M}(@y_REp*IU2Zq7oGKKH zTCuQlQY{zCE81GNSe$|LXn1gRhM=#QIG$}Z6zVCS?$N4VKTEy1qGnZj#0rrJe_X8< zDz$=oMq5?nn#3byE@C2P&uL-Eu@7VLF?Np+$HB?jTU)x-kS)aLh0tK+V^#$^E?!~) z%!;^HoW%zR0R^#TQQRi0s@dEr0m$qu={$eZz5cy_^a;=$Vqpb(ngI-K*UPIvzw-^d+`}EOTwEC9wKoD1VJhrbp=9< zk^?(KWyh3YF$*%g^DTrtQS}QG+Zd7l`raIy13A z-gv_hTF=*ap#4s@%#BJ0GmE_gcZ=iG(Z;xAV%cyNYBf-YzzOC6a>8>Eh8i2{Nz=uX zfUw{sa{a&fPxtxN-o<_Y{%^e-{~*DWiy$NLl=QCN^uN0e`f(XL5*u3XJOP6%crAaM%dsmek>yXa1a|= zEJk6bVZVqFrkdjfVr1Y)@jUztGmy2ufv%7D5(pbTK?0+*6`DmRLa9xgfMDP$=U+7U zj0RJ6?D`91!0YoN2E&+IxyU8>hRCPX40-+a5nhqSMLv_^64!o#4b#wq)u89m+6?&% zNhdL*h|M2#^zocBDl9-E*}?a;rm4G|O5LH<;u4jVNGh33N+;llq~3-P2&A^M1kwXv zGZI;;WveF(IeB?m&Z%0tQkEsc#3o;HonVpnK_egyfOVr3b;~ zA0mcz&jaD9+B?(%yP}#`P-Cr@i-W+L;cbd;F>$=^zts#+xeVP@0?-}02b*s+69=pQ zHU8(pD(nf{j=c`>gfOs~?1eyx*^2v~nN1}V(AJ+!T^(DQfhP^RIslFrs=_CK=uOdlkv>Y}{zoeJ>30~&mHEQ<=#%vgFd%NF8oS68+ zoY%LYMqUoOxe0FO`j_e4`MP)Qz<+ujTrqEb<^s6TI-#q=J3YMpf4)mPN1ypu?z3Hj zY0xkoZ_P2VYjWO;1@^v_l>3a%BzXR7_vTMK*kB;$U>S~zTsT(3$8Qz0qPtKuGfkU&J7!%mA#%k;YsMwppH=$!7(yYS;&Iu(S=K`O>7-b+9c#SQ!l}-IDAJONfxzIH382)b& I)`$M|JGTii@Bjb+ literal 0 HcmV?d00001 diff --git a/character/atmage/lightningwall/po_lightningwall.nut b/character/atmage/lightningwall/po_lightningwall.nut new file mode 100644 index 0000000..a7abbd4 --- /dev/null +++ b/character/atmage/lightningwall/po_lightningwall.nut @@ -0,0 +1,343 @@ +// 塭桧?棚 错卫缣 当撩肾朝 维暧 潍虞 +PO_LIGHTNING_WALL_CREATE <- 2; // ?卫粽 螃粽薛?朝 state陛 2睡搅 卫蒙?棻. +PO_LIGHTNING_WALL_MOVE <- 3; +PO_LIGHTNING_WALL_DESTROY <- 4; + +PO_LIGHTNING_VAR_LIGHTNING_1 <- 0; +PO_LIGHTNING_VAR_LIGHTNING_2 <- 1; +PO_LIGHTNING_VAR_TARGET_X_POS <- 2; +PO_LIGHTNING_VAR_DIRECTION <- 3; // 潍虞暧 寞?擎 ?鼻 伪晦 阳侥缣 蟾晦 寞?击 荡潍 + + +PO_LIGHTNING_1_DISTANCE_X <- 61; +PO_LIGHTNING_1_DISTANCE_Y <- 32; +PO_LIGHTNING_2_DISTANCE_X <- -76; +PO_LIGHTNING_2_DISTANCE_Y <- -32; + +PO_LIGHTNING_TIMER_BLACK_MARK_SMALL <- 0; // 蒙擎 夥款 濠措 当撩 卫除 +PO_LIGHTNING_TIMER_BLACK_MARK_BIG <- 1; // 赎 夥款 濠措 当撩 卫除 +PO_LIGHTNING_TIMER_ELEC_MARK_1 <- 2; // 瞪晦 葆觼 1 +PO_LIGHTNING_TIMER_ELEC_MARK_2 <- 3; // 瞪晦 葆觼 2 + + + +// 蝶鹧? 等桧搅蒂 奁舱?罹 谆桧锷 亵瞰 +function lightingWallObjAniResizeing(parentObj, obj){ + local parentChr = parentObj.getTopCharacter(); + if(!parentChr) + return; + + local size = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0); + size = size.tofloat()/100.0; + + local ani = sq_GetCurrentAnimation(obj); + if(ani) + ani.resizeWithChild(size); +} + + +// 饵桧锷 渗?缣 评艇 螃?掸 嫔纂蒂 葬欐. +function getLightningWallPos(obj, offset) { + local parentChr = obj.getTopCharacter(); + if(!parentChr) + return offset; + + local walllGap = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0); + offset = offset.tofloat() * (walllGap.tofloat()/100.0); + + return offset.tointeger(); +} + +// 夥款 瞪晦 葆觼 当撩 +function lightningWallMakeElectMark(obj, x, y) +{ + local randNum = sq_getRandom(0,1); + local elecMark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/8_el-p2_dodge_" + randNum + ".ani", 0, 0, 0); + local x = obj.getXPos() + getLightningWallPos(obj, x); + local y = obj.getYPos() + getLightningWallPos(obj, y); + elecMark.setCurrentPos(x, y, 0); + lightingWallObjAniResizeing(obj, elecMark); + local ani = sq_GetCurrentAnimation(obj); +} + +function setCustomData_po_ATLightningWall(obj, receiveData) +{ + if(!obj) return; + + local moveDistance = receiveData.readDword(); + local attackPower = receiveData.readDword(); + local skill_level = receiveData.readDword(); + local prob = receiveData.readFloat(); + local level = receiveData.readDword(); + local duration = receiveData.readDword(); + local lightDamage = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + + sq_SetCurrentAttackBonusRate(attackInfo, attackPower); + sq_SetChangeStatusIntoAttackInfoWithEtc(attackInfo, 0, ACTIVESTATUS_LIGHTNING ,prob.tointeger() ,level ,duration, lightDamage, 0); + sq_SetCurrentAttackeHitStunTime(attackInfo, 0); + + // 谢办 塭桧?棚 偌羹 当撩 + local var = obj.getVar(); + local lightningObj1 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/5_el-p_normal_1.ani", PO_LIGHTNING_1_DISTANCE_X, PO_LIGHTNING_1_DISTANCE_Y, 0); + local lightningObj2 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/5_el-p_normal_2.ani", PO_LIGHTNING_2_DISTANCE_X, PO_LIGHTNING_2_DISTANCE_Y, 0); + lightingWallObjAniResizeing(obj, lightningObj1); + lightingWallObjAniResizeing(obj, lightningObj2); + + var.setObject(PO_LIGHTNING_VAR_LIGHTNING_1, lightningObj1); + var.setObject(PO_LIGHTNING_VAR_LIGHTNING_2, lightningObj2); + + local targetXPos = sq_GetDistancePos(50, sq_GetDirection(obj), moveDistance); // 譆谦迹瞳虽 x谢? + var.setInt(PO_LIGHTNING_VAR_TARGET_X_POS, targetXPos); + var.setInt(PO_LIGHTNING_VAR_DIRECTION, sq_GetDirection(obj)); + + // 维暧 潍虞擎 卫薄鼻 ?鼻 螃艇薹桧横捡 ?棻. + obj.setDirection(ENUM_DIRECTION_RIGHT); + lightingWallObjAniResizeing(obj, obj); + + obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_CREATE); +} + + + +function onKeyFrameFlag_po_ATLightningWall(obj, keyIndex) +{ + // 当撩卫 霞翕 + if(keyIndex == 1) { + sq_SetMyShake(obj,4,200); + return false; + } + + return true; +} + + + +function onTimeEvent_po_ATLightningWall(obj, timeEventIndex, timeEventCount) +{ + if(timeEventIndex == PO_LIGHTNING_TIMER_BLACK_MARK_SMALL) // 夥款缣 匐湮桧 濠措 + { + if(obj.isCurrentAnimationIndex(0)) { + local var = obj.getVar(); + local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1); + local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2); + + if(lightningObj1) { + local floorMark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_1.ani", 0, 0, 0); + floorMark.setCurrentPos(lightningObj1.getXPos(), lightningObj1.getYPos(), 0); + lightingWallObjAniResizeing(obj, floorMark); + sq_ChangeDrawLayer(floorMark, ENUM_DRAWLAYER_BOTTOM); + } + + if(lightningObj2) { + local floorMark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_1.ani", 0, 0, 0); + floorMark.setCurrentPos(lightningObj2.getXPos(), lightningObj2.getYPos(), 0); + lightingWallObjAniResizeing(obj, floorMark); + sq_ChangeDrawLayer(floorMark, ENUM_DRAWLAYER_BOTTOM); + } + + return false; + } + else + return true; + + } + else if(timeEventIndex == PO_LIGHTNING_TIMER_BLACK_MARK_BIG) // 夥款缣 匐湮桧 濠措 + { + if(obj.isCurrentAnimationIndex(0)) { + local randNum = sq_getRandom(0,2); + local floorDark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_2.ani", 0, 0, 0); + sq_ChangeDrawLayer(floorDark, ENUM_DRAWLAYER_BOTTOM); + lightingWallObjAniResizeing(obj, floorDark); + + local floorElec = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/4_el-b_dodge_" + randNum+ ".ani", 0, 0, 0); + sq_ChangeDrawLayer(floorElec, ENUM_DRAWLAYER_BOTTOM); + lightingWallObjAniResizeing(obj, floorElec); + return false; + } + else + return true; + } + else if(timeEventIndex == PO_LIGHTNING_TIMER_ELEC_MARK_1) // 瞪晦 涛鼻 + { + if(obj.isCurrentAnimationIndex(0)) { + lightningWallMakeElectMark(obj, PO_LIGHTNING_1_DISTANCE_X , PO_LIGHTNING_1_DISTANCE_Y); + return false; + } + else + return true; + } + else if(timeEventIndex == PO_LIGHTNING_TIMER_ELEC_MARK_2) // 瞪晦 涛鼻 + { + if(obj.isCurrentAnimationIndex(0)) { + lightningWallMakeElectMark(obj, PO_LIGHTNING_2_DISTANCE_X , PO_LIGHTNING_2_DISTANCE_Y); + return false; + } + else + return true; + } + + + + return true; +} + +function setState_po_ATLightningWall(obj, state, datas) +{ + if(!obj) return; + + if(state == PO_LIGHTNING_WALL_MOVE) { //桧翕 + setCurrentAnimationFromCutomIndex(obj, 0); + obj.sq_SetMoveParticle("Particle/ATLightningWall.ptl", 0.0, 0.0 );// 桧翕 ??赝 虽姜 + + local parentChr = obj.getTopCharacter(); + local size = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0); + size = size.tofloat()/100.0; //谆桧锷. 谆桧锷陛 觼贼 夥款缣 桧嘐虽蒂 斜葬朝 除问紫 创?棻. + + local speed = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 1); + local speedPerSec = speed.tofloat()/1000.0; + local calltime = 55.0/speedPerSec * size; + + if(parentChr) { + // 卫薄鼻 塭桧?棚 错擎 ?薹 寞?戏煎虏 尔樯棻. 评塭怃 奁渠寞?缣怃 陈莴唳办 寞?击 庵煎 ?棻. + if(parentChr.getDirection() != obj.getDirection()) + speed = -speed; + + sq_SetSpeedToMoveParticle(obj,0,speed); // x蹴 蝶?萄 虽姜 + } + + obj.setTimeEvent(PO_LIGHTNING_TIMER_BLACK_MARK_SMALL, calltime.tointeger(),999,true); // 蒙擎 夥款 濠措 当撩 卫除 + + calltime = 100.0/speedPerSec * size; + obj.setTimeEvent(PO_LIGHTNING_TIMER_BLACK_MARK_BIG, calltime.tointeger(),999,true); // 赎 夥款 濠措 当撩 卫除 + + calltime = 90.0/speedPerSec * size; + obj.setTimeEvent(PO_LIGHTNING_TIMER_ELEC_MARK_1, calltime.tointeger(),999,true); // 瞪晦 葆觼 + + calltime = 110.0/speedPerSec * size; + obj.setTimeEvent(PO_LIGHTNING_TIMER_ELEC_MARK_2, calltime.tointeger(),999,true); // 瞪晦 葆觼 + + local var = obj.getVar(); + local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1); + local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2); + + // 桧?? 称桧晦 /|/|/| <- 蹂楛 窒葬 伪擎 桧?? + local currentAni = sq_GetCurrentAnimation(lightningObj1); + if(currentAni) { + currentAni.addLayerAnimation(6,sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATLightningWall/7_el-p1_dodge_1.ani"),true); + + currentAni = sq_GetCurrentAnimation(lightningObj2); + currentAni.addLayerAnimation(6,sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATLightningWall/7_el-p1_dodge_2.ani"),true); + } + lightingWallObjAniResizeing(obj, obj); + } + else if(state == PO_LIGHTNING_WALL_DESTROY) { + obj.sq_RemoveMoveParticle(); // 桧翕部 + setCurrentAnimationFromCutomIndex(obj, 1); // ?惚 拥栖 + lightingWallObjAniResizeing(obj, obj); + + local var = obj.getVar(); + local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1); + local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2); + if(lightningObj1 && lightningObj2) { + lightningObj1.setValid(false); + lightningObj2.setValid(false); + + lightningObj1 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/d5_el-p_normal_1.ani", PO_LIGHTNING_1_DISTANCE_X, PO_LIGHTNING_1_DISTANCE_Y, 0); + lightningObj2 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/d5_el-p_normal_2.ani", PO_LIGHTNING_2_DISTANCE_X, PO_LIGHTNING_2_DISTANCE_Y, 0); + + var.setObject(PO_LIGHTNING_VAR_LIGHTNING_1, lightningObj1); + var.setObject(PO_LIGHTNING_VAR_LIGHTNING_2, lightningObj2); + } + } +} + +function onAttack_po_ATLightningWall(obj, damager, boundingBox, isStuck) +{ + if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)) { + local parentChr = obj.getTopCharacter(); + local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_LIGHTNING_WALL, false, "Character/ATMage/LightningWall/ap_LightningWall.nut", true); + if(parentChr && masterAppendage) { + sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , masterAppendage); + + local time = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 3); // 虽虽霜 唳霜卫除 + local appendageInfo = masterAppendage.getAppendageInfo(); + appendageInfo.setValidTime(time); + } + } + return 0; +} + +function procAppend_po_ATLightningWall(obj) +{ + if(!obj) return; + local var = obj.getVar(); + + if(!var) return; + + local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1); + local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2); + + local pos1X = getLightningWallPos(obj, PO_LIGHTNING_1_DISTANCE_X); + local pos1Y = getLightningWallPos(obj, PO_LIGHTNING_1_DISTANCE_Y); + local pos2X = getLightningWallPos(obj, PO_LIGHTNING_2_DISTANCE_X); + local pos2Y = getLightningWallPos(obj, PO_LIGHTNING_2_DISTANCE_Y); + + if(lightningObj1) + lightningObj1.setCurrentPos(obj.getXPos() + pos1X.tointeger(), obj.getYPos()+ pos1Y.tointeger(), obj.getZPos()); // ?惚陛 嬴栖塭 ?惚 拥栖煎 掖羹. + if(lightningObj2) + lightningObj2.setCurrentPos(obj.getXPos() + pos2X.tointeger(), obj.getYPos()+ pos2Y.tointeger(), obj.getZPos()); + + local targetXPos = var.getInt(PO_LIGHTNING_VAR_TARGET_X_POS); + local direction = var.getInt(PO_LIGHTNING_VAR_DIRECTION); + + if(direction == ENUM_DIRECTION_RIGHT) { + if(obj.getXPos() > targetXPos) + { + sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos()); + obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY); + } + } + else if(direction == ENUM_DIRECTION_LEFT) { + if(obj.getXPos() < targetXPos) + { + sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos()); + obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY); + } + } + else { + obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY); // 寞?桧 桡戏贼 饵塭虽虽 强挤戏煎 ?惚 + } + + +} + + +function onEndCurrentAni_po_ATLightningWall(obj) +{ + if(!obj) return; + + if(obj.isCurrentAnimationIndex(1)) { + if(obj.isMyControlObject()) + sq_SendDestroyPacketPassiveObject(obj); // 饵塭虽朝 赅暮? ?惚 + } +} + +function onDestroyObject_po_ATLightningWall(obj, destroyObj) +{ + if(!obj || isSameObject(obj,destroyObj)) { + local var = obj.getVar(); + local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1); + local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2); + if(lightningObj1) + lightningObj1.setValid(false); // ?惚陛 嬴栖塭 ?惚 拥栖煎 掖羹. + if(lightningObj2) + lightningObj2.setValid(false); + } + + local parentChr = obj.getTopCharacter(); + if(isSameObject(obj,parentChr)) { + if(obj.isMyControlObject()) + sq_SendDestroyPacketPassiveObject(obj); + } +} \ No newline at end of file diff --git a/character/atmage/magiccannon/magiccannon.nut b/character/atmage/magiccannon/magiccannon.nut new file mode 100644 index 0000000000000000000000000000000000000000..0455740d409c9299fbdd42d23cf7a8e3fb493660 GIT binary patch literal 6124 zcmdT|ZEqV@7Ut_j%73`<0gWXmbsSf%$abTtJxxsgCVQN2x>}7U_DwU?nF%vvh#M+_ zx+_2kp{)d4ixd@DT0|+Um0Di5t@>-?*#BbBxi21%YdgmIgyf9lnS0OMea>^v8NE== zn|W<5n>N#0p-?QCmFmTcp&7cFUf0TNIw9mw3nZ~Z$eA;w_rdeyr!VH`^zpmai{i`f7!kDKIyif_ntlNee>_d`MLSI z?WR);Y}X;R9a_7t@6%c{u(lesa@}q;%)E8YuB9!i6L7)N6k8#=SU4OAYz!Av7@5z3f{n@zKL-eg3tWi&6g3Gc6WCzr>;8)$`kO2p&pVc@aW^w zhfrMWgF&DcKq8h%Y-om|r7wpdJbLlu_|C)5^G_j}I`7}=9Ns0XM-L9WcYp4E{J7ix zjC3E}?;ifE^YsG)dDgl2$tu7Az`97fx7(e=|8-v6djr<@4!;5>Ab(9JmXeE!)M7I6 zw*jl=`S}sA$E6EIYaoguve6K_PRVm?Q-=+sfg*Vl@3wg6i?~4s?1)>9y7&RbFW5;vf)%jf> zdaGU+zpX}k$FdzrZ0NEmlS+gD6g*6Vx>FD7VVDWWvR!Cf$V}3>D4|Jbre}wjAv&&A zfQF%v8Pg)L=8-7}uyGTeI57p5Dv_AOFDVfX`dF|yBO%X-?#!sJoVt43MNF~4Tu9?@Zv z1KIx)>~@bneR%xU4`e~iF68*d=g?e`-mUL3KpfAuzwUbW4QS|DS!`&N zGi<$RT-G|N2I3xTKMhV#>@=oReC+qIl zZJ4aPKmBy{;eW`{!~4DOop(4$Yr@gfeOV`!0+58@N(gVln8S>1IYt64jJsbO6kE(US34R=|i4fs6(5rFW> zz%HjSc*Jv5VkE3wBZ>n^=?lgodI>rsjz=y8OLJl%OR==_-vc3sQi@%-T^l5E;Bokf zO2Bebg!JXrOKj=TYF?tRZcs494qB|1E{VB>iJPgYDd%bIw%!Oy5OsdeL?)uLY3tf-4^M1fqcrAF;bvT(91r zy?8S*YQ-ok1ue?-u2AT+JPNN1BBQQ&^T7vR1nWLDr*XntKt)I4d008bk=!7zYHo^5`i}1VVsl-8z4O20-u^dQ3e6dp1PgQmEtW`6#s>IQ;1B4WB6vPy+a9x1c1c&RB z!l-_;i9K8Ms5bk{G7yEL&g2y6Ib4~LQW%PIJS8PEe6R~NNVhDeY!uT})a6tTSw`Jo zUw5CrPk!FzekPqwwA9`1^ftfk-TngQfO;R_^g2(V9ME3-IaI+?vh|qyjd~B-N#}d= zYwHN?-|M{Cz4;NHTbMtzke@%CUzk5Xf_&iF81reyfnp;{rs|H%=zE%HGyk&kNysCY z*&kkC*|@&%lW|Na3E4Qpp@f{UN!{8H zbm{2g#<=7XafL+$7XqDq^ol6aC9d`)DAqv2AXgqboO4n!Trn(OJXR|fp><%|TP%S@ zv#*ipq`%6pEom~X#Bk(}A{eNs`{4_{JYPThgL4@n^}>*!L~pqCrBw97*ofewG8U}n M`&YwoNFF%w8?)Y~W&i*H literal 0 HcmV?d00001 diff --git a/character/atmage/manaburst/ap_atmage_manaburst.nut b/character/atmage/manaburst/ap_atmage_manaburst.nut new file mode 100644 index 0000000000000000000000000000000000000000..14f4aee85ac58d7334ad97cac782881dc22a10de GIT binary patch literal 2331 zcmd5-%Wl&^6lI%8`G+AZM=EiMsJcKb@@P?2=RuqzcB831X-%COcRWsoP*?mwg@h1D zfIvtTwru)EY5N!485<`~AEt^bAzR8!eDArBbLLK|IEt7fJgfE%v6k!-tUObrqQ zl(}S=R!YU!rD7r7SFbQG2ZB506{LT0YKn;*0|FisMs^|*$})iEBGG^d+7{$6228ih z;c{k6BBa7hmdoO;GdD(q#d26)m|*Ee4%ShrsGbGx)<+}i$V;qwBjbKbhiZO7P#FpK z_zE6khz-G+G|H_#B8VfYFgw7Y8Gkby%o`J>7_%|#0I5wys#&XPhOx_CAlv6Ws1oKW zu9I9d`6{X0P-0FANNI7d2#8RC*XIuL5#M=MoUi&=S;BQ3a=VP9)U7!$sqv zH>SdJQqey$1u$_iu!t;=gdcCrQbzf^Hq9Rttvo5 z>dBr|RkY(%BC=)cs%I@vx)Vg<-V$~ygM`!DG+$Oj%{a_2P_FT)R$D<29_kEbRZ#f2 z$wEm$51Oo5jQVvvWf)G7>e(o(^HJ)T!X*60N(v7|Piqv~1R`s72W{AceumtBHb~E$ z0Yd((SUAD4R|V45;*Ym#3=im-PiUWnp*NxSzUTW5DT%Y+=RS z?SVbipoJL#4E3 R;BrQM(&hM0O#P4U{Q*cj`x*cM literal 0 HcmV?d00001 diff --git a/character/atmage/manaburst/manaburst.nut b/character/atmage/manaburst/manaburst.nut new file mode 100644 index 0000000000000000000000000000000000000000..74dccaf0b4a4f272630d3a5163047158d8325e21 GIT binary patch literal 2756 zcmbtWdr#X|6zAU{i=Asc`M3zD&s55{8Z+zENh{%mddhLDr@!DdTWO=$(S*cN94}%K3Ux`SGR$_ z)_%_)za|eRAdo+Oc6NARPR*GQkHDOsB`eR#>!T)wLr3QvoAl8H^lRrKI4tx5AWt4c zBTsF~+)f}+c=o_rnlJM~;ij`x&pPiU61|mXPbAtdFJ}NFVk1f&q`pZP3}0qzr|D?w9iY>Du}`?lIa8y(}#BYRXSZ45FUUYs{Q=S{}lok`rlRb0mDKL9;ab1{lgBb^Cf!bH9*B4V(k}GbweH*qbHqX9Apa>O&h@O zR2z=AqRoSykfEf}htz`!O-Vv_f)ZOr_K6Qd+GnK{1<) zG_Gm!%Yt{+oqSS0|7yZ>ZV)9HeQF|8HR__pM=+OKHS#Q!aV@QTS@%hn}!CPxDm)}Bysj)FN85fiEBJv;aAP8}_ zE6By6> inputMax) + inputConut = inputMax; + + // 翱颤陛 桡戏贼 gapByInputMin 高戏煎. + // 翱颤陛 号击 热烟 gapByInputMax缣 陛梱遴 高戏煎. + local upValue = gapByInputMax - gapByInputMin; + upValue = upValue.tofloat() * (inputConut.tofloat()/inputMax.tofloat()); + gap = gapByInputMin + upValue.tointeger(); + obj.setTimeEvent(TIMER_MULTI_SHOT_CREATE_MAGIC_BALL, gap, 1,false); + + count = count+1; + var.setInt(VAR_MULTI_SHOT_CURRENT_COUNT, count); + + local currentElementalType = obj.getThrowElement(); + local subState = obj.getSkillSubState(); + local bonusDamage = 0; + + if(currentElementalType == ENUM_ELEMENT_NONE) + { + local basicState = STATE_ATTACK; + + if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL || subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) // 渠陕摹,热霜 + basicState = STATE_JUMP_ATTACK; + + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),0); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),basicState); + bonusDamage = sq_GetCurrentAttackBonusRate(obj); + } + + local addMultiShotDamage = sq_GetLevelData(obj, SKILL_MULTI_SHOT, 1, level); + + if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR) + createMiniMagicCircle(obj, 30, 65, 0, bonusDamage + addMultiShotDamage); + else if(subState == ENUM_MULTI_SHOT_SUBSTATE_HORIZON) // 姜贼 + createMiniMagicCircle(obj, 30, 82, 0, bonusDamage + addMultiShotDamage); + else if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL) // 渠陕摹 + createMiniMagicCircle(obj, 20, 55, 1, bonusDamage + addMultiShotDamage); + else if(subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) // 热霜 + createMiniMagicCircle(obj, 0, 45, 2, bonusDamage + addMultiShotDamage); + + + local typeName = "none"; + switch(currentElementalType) + { + case ENUM_ELEMENT_FIRE : typeName = "fire"; break; + case ENUM_ELEMENT_WATER : typeName = "water"; break; + case ENUM_ELEMENT_DARK : typeName = "dark"; break; + case ENUM_ELEMENT_LIGHT : typeName = "light"; break; + } + + local path = "Character/Mage/Effect/Animation/ATMultiShot/attack" + subState + "_" + typeName + "_dodge.ani"; + sq_CreateDrawOnlyObject(obj,path, ENUM_DRAWLAYER_NORMAL, true); + + local element = obj.getThrowElement(); + local attackIndex = obj.getAttackIndex(); + playSoundForAtmageAttack(obj, element, attackIndex); + } + else { + local endDelay = 50; + obj.setTimeEvent(TIMER_MULTI_SHOT_WATING_STAND, endDelay, 1,false); + } + } + else if(timeEventIndex == TIMER_MULTI_SHOT_INPUT_COUNT) { + + } + else if(timeEventIndex == TIMER_MULTI_SHOT_WATING_STAND) { + // 谦猿 颤桧该 + sendMultiShotEnd(obj); + return true; + } + return false; +} +function onEndCurrentAni_MultiShot(obj) +{ + if(!obj) return; + + local subState = obj.getSkillSubState(); + + + if(subState == ENUM_MAGIC_CANNON_SUBSTATE_CHARGE) { + local isHorizon = sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL); + local isVertical = sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL); + local subState = ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL; // 渠陕摹桧 晦狱 + + if(isHorizon && !isVertical) + subState = ENUM_MAGIC_CANNON_SUBSTATE_HORIZON; + else if(!isHorizon && isVertical) + subState = ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL; + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState); + obj.sq_IntVectPush(obj.getXPos()); + obj.sq_IntVectPush(obj.getYPos()); + obj.sq_IntVectPush(obj.getZPos()); + obj.sq_AddSetStatePacket(STATE_MULTI_SHOT , STATE_PRIORITY_USER, true); + } +} + + +function onKeyFrameFlag_MultiShot(obj, flagIndex) +{ + if(!obj) return true; + + local subState = obj.getSkillSubState(); + if(flagIndex == 1) { + obj.setTimeEvent(TIMER_MULTI_SHOT_CREATE_MAGIC_BALL, 50, 1,true); // 嫦饵 + obj.setTimeEvent(TIMER_MULTI_SHOT_INPUT_COUNT, 1000, 1,false); // 蟾渡 郦殓溘 ?热 ?钦. + + obj.startRapidInput(); + } + return true; + +} + \ No newline at end of file diff --git a/character/atmage/multishot/po_magic_ball.nut b/character/atmage/multishot/po_magic_ball.nut new file mode 100644 index 0000000..802ecc2 --- /dev/null +++ b/character/atmage/multishot/po_magic_ball.nut @@ -0,0 +1,239 @@ +function setCustomData_po_ATMagicBallLightDownMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallLightDown(obj, receiveData); +} + +function setCustomData_po_ATMagicBallDarkDownMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallDarkDown(obj, receiveData); +} + +function setCustomData_po_ATMagicBallWaterDownMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallWaterDown(obj, receiveData); +} + +function setCustomData_po_ATMagicBallFireDownMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallFireDown(obj, receiveData); +} + +function setCustomData_po_ATMagicBallNoneDownMultiShot(obj, receiveData) +{ + setCustomData_po_ATMagicBallNoneDown(obj, receiveData); +} + + + +// 葆彻掘羹 - 赀楼撩 +function setCustomData_po_ATMagicBallLightDown(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 县溯诠骁 溯樯 桧塭贼, 奢问溘击 荡潍?堡棻陛 ?嫦?阳 饵辨?紫烟 ?棻. + + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallLightMoveDown.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallLight", "PassiveObject/Character/Mage/Particle/ATMagicBallLightTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTailDown1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTailDown2.ptl"); +} + + +// 葆彻掘羹 - 檩楼撩 +function setCustomData_po_ATMagicBallDarkDown(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallDarkMoveDown.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallDark", "PassiveObject/Character/Mage/Particle/ATMagicBallDarkTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailDown1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailDown2.ptl"); + //obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailDown3.ptl"); +} + + +// 葆彻掘羹 - 热楼撩 +function setCustomData_po_ATMagicBallWaterDown(obj, receiveData) +{ + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallWaterMoveDown.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallWaterTailDown", "PassiveObject/Character/Mage/Particle/ATMagicBallWaterTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTailDown1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTailDown2.ptl"); +} + + +// 葆彻掘羹 - ?楼撩 +function setCustomData_po_ATMagicBallFireDown(obj, receiveData) +{ + if(!obj) + return; + + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallFireMoveDown.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallFireTail1.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTailDown1.ptl"); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTailDown2.ptl"); +} + +// 葆彻掘羹 - 鼠楼撩 +function setCustomData_po_ATMagicBallNoneDown(obj, receiveData) +{ + if(!obj) + return; + local horizonAngle = receiveData.readFloat(); + local verticalAngle = receiveData.readFloat(); + + if (sq_BinaryGetReadSize() < receiveData.getSize()) + { + // 奢问溘 掸? + local attackBonusRate = receiveData.readDword(); + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + } + + // ??赝暧 桧翕 陕紫蒂 亵瞰? + obj.sq_SetMoveParticle("Particle/ATMagicBallNoneMoveDown.ptl", horizonAngle, verticalAngle); + local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallNoneTail.ptl", obj); + particleCreater.Restart(0); + obj.sq_AddObjectParticleCreater("Particle/ATMagicBallNoneTailDown.ptl"); + + local mage = obj.getTopCharacter(); + if (!mage) + return; + + // 晦狱晦 熨湿 瞳辨 + mage.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),mage.getState()); + sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj)); +} + + + +// 瞳桧 翱楼 葆彻掘(?楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallFireDownMultiShot(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + createFireExplosion(obj, damager, boundingBox, isStuck, 24281); + return 0; +} + + +// 瞳桧 ?颤 葆彻掘(?楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallFireDown(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + + createFireExplosion(obj, damager, boundingBox, isStuck, 24214); + return 0; +} + + +// 瞳桧 翱楼 葆彻掘(热楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallWaterDownMultiShot(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + // ?颤 热楼撩 + createWaterExplosion(obj, damager, boundingBox, isStuck, 24282); + return 0; +} + + +// 瞳桧 ?颤 葆彻掘(热楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallWaterDown(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + // ?颤 热楼撩 + createWaterExplosion(obj, damager, boundingBox, isStuck, 24215); + return 0; +} + + +// 瞳桧 翱楼 葆彻掘(赀楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallLightDownMultiShot(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + // ?颤 赀楼撩 + createLightExplosion(obj, damager, boundingBox, isStuck, 24283); + return 0; +} + + + +// 瞳桧 ?颤 葆彻掘(赀楼撩)缣 蜃挤. +// ?嫦 当撩 +function onAttack_po_ATMagicBallLightDown(obj, damager, boundingBox, isStuck) +{ + if(!obj) + return 0; + // ?颤 赀楼撩 + createLightExplosion(obj, damager, boundingBox, isStuck, 24216); + return 0; +} + + diff --git a/character/atmage/passive_skill_atmage.nut b/character/atmage/passive_skill_atmage.nut new file mode 100644 index 0000000..814b0c1 --- /dev/null +++ b/character/atmage/passive_skill_atmage.nut @@ -0,0 +1,104 @@ +///////////////////////////////////////////////////////// +// +// ?卫粽 蝶鉴籀葬 +// ?渡 蝶鉴暧 ?卫粽 蝶鉴暧 Appendage蛔烟/?薯 蛔蛔 +// +///////////////////////////////////////////////////////// + +function ProcPassiveSkill_ATMage(obj, skill_index, skill_level) +{ + if (skill_index == SKILL_EXPRESSION) + { + if(skill_level > 0) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Character/ATMage/Expressions/ap_atmage_expression.nut", true); + + print(" expression appendage:" + appendage); + if(appendage) + { + local magicalAtkChangeRate = sq_GetLevelData(obj, skill_index, SKL_LVL_COLUMN_IDX_1, skill_level); + + local change_appendage = appendage.sq_getChangeStatus("expression"); + + if(!change_appendage) { + change_appendage = appendage.sq_AddChangeStatus("expression",obj, obj, 0, CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, magicalAtkChangeRate ); + } + + + if(change_appendage) + { + change_appendage.clearParameter(); + + print(" expression attack rate:" + magicalAtkChangeRate.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, magicalAtkChangeRate.tofloat()); + } + } + } + } + else if(skill_index == SKILL_DIEHARD) + { // 碳饵 + if(skill_level > 0) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, + "Character/ATMage/DieHard/ap_ATMage_DieHard.nut", true); + + if(appendage) + { + } + } + + } + else if(skill_index == SKILL_TUNDRASOUL) + { // 矗萄塭暧 陛? + if(skill_level > 0) + { + local skill = sq_GetSkill(obj, SKILL_TUNDRASOUL); + if(!skill) + return true; + + print( " passive_skill_tundrasoul"); + //if(!skill.isSealFunction()) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, + "Character/ATMage/TundraSoul/ap_ATMage_TundraSoul.nut", true); + + if(appendage) + { + print(" passive object isinBattle:" + obj.isInBattle()); + + //if(!skill.isSealFunction()) + //{ + //if(sq_IsInBattle()) + //{ + //local range = obj.sq_GetIntData(SKILL_TUNDRASOUL , 0);// 0. 彩念 鼻鹧桧鼻缣 勘葬朝 ?娄彰嫔 + //local AuraTundraSoulAppendage = appendage.sq_AddSquirrelAuraMaster("AuraTundraSoul",obj, obj, range, 18, 5, 0); + //} + //else + //{ + //appendage.sq_DeleteAppendages(); + //} + //} + //else + //{ + //appendage.sq_DeleteAppendages(); + //} + } + } + } + } + + return true; +} + + +function onUseSkillPassiveSkill_ATMage(obj,skillIndex, skillLevel) +{ + if(!obj) + return; + + +} + + + + diff --git a/character/atmage/pieceofice/piece_of_ice.nut b/character/atmage/pieceofice/piece_of_ice.nut new file mode 100644 index 0000000..a41009b --- /dev/null +++ b/character/atmage/pieceofice/piece_of_ice.nut @@ -0,0 +1,142 @@ +POI_MAX_KEYFRAME_INDEX <-8; + +function checkExecutableSkill_PieceOfIce(obj) +{ + + if (!obj) return false; + + local useSkill = obj.sq_IsUseSkill(SKILL_PIECE_OF_ICE); + + if (useSkill) { + //obj.sq_IntVectClear(); + //obj.sq_IntVectPush(SUB_STATE_ICEROAD_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_PIECE_OF_ICE, STATE_PRIORITY_IGNORE_FORCE, false); + return true; + } + + return false; + +} + +function checkCommandEnable_PieceOfIce(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_PIECE_OF_ICE); + } + + return true; + +} + +function onSetState_PieceOfIce(obj, state, datas, isResetTimer) +{ + if(!obj) return; + + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_PIECE_OF_ICE); + + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onProc_PieceOfIce(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + +} + +function onEndCurrentAni_PieceOfIce(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +function onKeyFrameFlag_PieceOfIce(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + local level = sq_GetSkillLevel(obj, SKILL_PIECE_OF_ICE); + + if(flagIndex == 1) { + if(obj.isMyControlObject()) + { + obj.sq_StartWrite(); + obj.sq_WriteBool(false); + local x = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 0); + local z = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 1); + obj.sq_SendCreatePassiveObjectPacket(24224, 0, x, 0, z); + } + } + else if(flagIndex >= 2 ) { + local iceCoreObj = obj.getMyPassiveObject(24224,0); + if(iceCoreObj) + { + if(iceCoreObj.isMyControlObject()) { + iceCoreObj.sendStatePacket(PIECE_OF_ICE_CORE_STATE_DAMAGE, flagIndex); + } + + local randMin = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 2); + local randMax = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 3); + local randNum = sq_getRandom(randMin, randMax); + + for(local i=0;i 360) + hAngleRange = 360; + + local horizonAngle = sq_getRandom(0,hAngleRange) -(hAngleRange/2); + local verticalAngle = sq_getRandom(0,vAngleRange); + + + // ?溯歜桧 虽陈热烟 当撩 谢?陛 薄薄 寰戏煎 菟横陛啪莠 + local startPosY = (40 * (8-flagIndex)/POI_MAX_KEYFRAME_INDEX) * (vAngleRange == 0 ? 1 : horizonAngle/(hAngleRange/2)); + local lifeTime = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 4); + local iceParticle = sq_CreateDrawOnlyObject(iceCoreObj, "PassiveObject/Character/Mage/Animation/ATPieceOfIce/08_ice_shard1_dodge.ani",ENUM_DRAWLAYER_NORMAL,true); + sq_SetCustomRotate(iceParticle,sq_ToRadian(-horizonAngle.tofloat())); + + obj.sq_StartWrite(); + obj.sq_WriteWord(sq_getRandom(0,5)); + obj.sq_WriteFloat(horizonAngle.tofloat()); // 热? 彰嫔 + obj.sq_WriteFloat(verticalAngle.tofloat()); // 热霜 彰嫔 + obj.sq_WriteWord(lifeTime); + + obj.sq_SendCreatePassiveObjectPacket(24223, 0, 60, startPosY, 75); + } + } + } + } + + return true; + +} + +function onDamage_PieceOfIce(obj, attacker, boundingBox) +{ + if(!obj) return; + + local iceCoreObj = obj.getMyPassiveObject(24224,0); + if(iceCoreObj) + iceCoreObj.sendStateOnlyPacket(PIECE_OF_ICE_CORE_STATE_END); + +} diff --git a/character/atmage/pieceofice/po_atpieceofice.nut b/character/atmage/pieceofice/po_atpieceofice.nut new file mode 100644 index 0000000000000000000000000000000000000000..3427c8d7666dd6db960857d1f75e708523211050 GIT binary patch literal 2621 zcmcguO>f&q5bae4{2w+tkpLq~3DApU6soKQM68e%6(l_oYjR~XrFIo^rN#{m1PFTR zF~}u{1W1dvhaQ>&MUkRT|BYh%Uvy@d6e&?gf)=P{2_k1WA8+29mFGG^@2)>`2SN9a z6ZnJf{(j)}`i&b`Nqc8|%Uid*xBCq=cIw7Gckh-qUaK2*WbFcvUk49}?(}>8z`cnX zgZ_PQ-}N2$4gotx*xnk?cqn7RNycPvmPs+$qml+w5p+jh%tGdlosb#g;DJR_7RGai zc5{2{@%C0D9vfG{VuD4^Qmz6v5)smb#F;;#NkVojPqk7;qkAHa43peY`E%zZk;dN$ z-sOi0t3Pow5mXxH4zca?H{UP5dqo!S-YkB34h863bC${&l79I4i_^b8TYox<$7~c& zHYC=iLRWbnDkTlS^2FCHg(`7&jiqfu4>1Cu(K=*uB&NM1n$l3R6ei{+6=vkXRK__rM(S9RvZ zBL1j5>aX0iNZTTvR$Enef@$E5r9)_+$$^+Nk0PcCGn&OWdr62mWUZ-8nii=Jt|i4- zPs$=I6DbWUAEe4D60$Cj5gg!A&KDCaQH`r|kdtZ3xCF-uMV=xP5n;{M@^(!{xynqH zvjHW8Z#ke^SO6bW!ykU?0wWQrp#myBpsvIac@=<)LR=5iUJlY8z=Z6jUx^ur$ZlHA z_NT!VRTZe%L8nD|+^m+^qEWO@k6F5mVRS6zY{_&69IEibof|cMW#h6y3M1(sPwD4a(!%K^R~^< zWRVEgZDwA!ZxIzxkMbqEyQC`pa^0JHm#EGk217Ohfv<>MGf=ahJ(?yW1E~Q6tAfF^ zp(JHZZ*XcA8p;tapjnEh8aemH$<~3HrXuW4r;JCNp!pCOm_E)1$34MiDiT-iTf>CM zKqK&xs~dM|*VJ{^3l-o zNb$nu$*~6~4wJ?ubH(M^z#RbZ6V(42!vtT_d=ruuk%bBz9zxS zm7)NL6H-H>&!du&o6x{+bvJ82Y9Jo=h<#kfD=b)T3m)yU3}}}RZsnLzt3ma0@%oRm hm#@!Ge|Z1oDg0EL9EX~## literal 0 HcmV?d00001 diff --git a/character/atmage/pieceofice/po_atpieceoficecore.nut b/character/atmage/pieceofice/po_atpieceoficecore.nut new file mode 100644 index 0000000000000000000000000000000000000000..812c4553e2e2d125faab83d853c355294deae6ab GIT binary patch literal 2276 zcmb7FO;6iE5bf1S{D2_JgS|!=#I^Sxk*fZK zs`pC$JBXjrnO)urOw0*9=6t8ey zo!n&k(>NO24!5tF!vidm5#a8GAq7MQ3WcPa$UEJ@QgLc?H>efTN&&sZrE- zb2H3144Kaj-Tm`Rd4jYl}R6|Mv9o z_vzs$`S|$f_v5c0a2{H;+@;enaE$2`My0Axf%&|B0ATP{uY)YO(5~!~5-38YEq^$G z@y@4v!OkcdS=bK(=$Lvj!r=Bq5sNnOl2Wbp_2+FSW)}Kjt$NZ@JC#xqRrY>=9CPk5 zQCh9(UNs}bN#_RxY!#bRj3s2H3PV2T%8KnVc*Z`%IjqD`K^*@gV`Y+!* z#7#N!FlP8j&WZrtoJt0Jw@QVXt3SWFfG&w6LpSOqX5jNM@VcUzR1MZK#HBI*u*D(> WrY~KOMiD&dX(pT(tp?=ad-D&)B&q@c literal 0 HcmV?d00001 diff --git a/character/atmage/pushout/ap_pushout.nut b/character/atmage/pushout/ap_pushout.nut new file mode 100644 index 0000000..122f583 --- /dev/null +++ b/character/atmage/pushout/ap_pushout.nut @@ -0,0 +1,74 @@ + +function sq_AddFunctionName(appendage) +{ + appendage.sq_AddFunctionName("proc", "proc_appendage_PushOut") + appendage.sq_AddFunctionName("onStart", "onStart_appendage_PushOut") + appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_PushOut") +} + +function sq_AddEffect(appendage) +{ +} + + + +function proc_appendage_PushOut(appendage) +{ + if(!appendage || !appendage.isValid()) { + return; + } + + local parentObj = appendage.getParent(); + local sourceObj = appendage.getSource(); + + if(!sourceObj || !parentObj) { + appendage.setValid(false); + return; + } + + if (parentObj.getState() == STATE_HOLD) + { + if (parentObj.getState() == STATE_HOLD && !sq_IsInCategory(parentObj,CATEGORY_ETC_FIXTURE)) + { + // 虽姜胀 寞?渠煎 鬼薯 瞪? + parentObj.setCurrentDirection(sq_GetOppositeDirection(sourceObj.getDirection())); + } + } + else + { + // ?萄卫郦晦 + if (parentObj.isMyControlObject() && parentObj.getState() != STATE_DIE && !parentObj.isDead()) + { + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_IntVectorPush(sq_GetGlobalIntVector(),0); + sq_IntVectorPush(sq_GetGlobalIntVector(),0); + sq_AddSetStatePacketActiveObject(parentObj,STATE_HOLD, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE); + } + } + +} + +function onEnd_appendage_PushOut(appendage) +{ + if(!appendage) { + return; + } + + local parentObj = appendage.getParent(); + + if(!parentObj) { + appendage.setValid(false); + return; + } + + if (parentObj.getState() == STATE_HOLD) { + appendage.setValid(false); + parentObj.sendStateOnlyPacket(STATE_STAND); + } + + //local ao = sq_GetCNRDObjectToActiveObject(parentObj); + //if(ao && sq_IsMyControlObject(ao) && !ao.isMovablePos(ao.getXPos(),ao.getYPos())) { + //sq_SimpleMoveToNearMovablePos(ao,100); // 桧翕碳陛 虽羲缣 毡棻贼 桧翕陛栋虽羲戏煎 桧翕 + //} +} + diff --git a/character/atmage/pushout/ap_pushoutexplosion.nut b/character/atmage/pushout/ap_pushoutexplosion.nut new file mode 100644 index 0000000000000000000000000000000000000000..a77737587d538c96ac021bb835a57863babc0a4e GIT binary patch literal 2942 zcmcImZExFD6y8@?%6~ZPhslwWEa}*nloGXZ1`$~jlC&A0A}_gJO-&r^n>J@=iGDd(tM>+UaY>= zC@t0+xeMh&shTep8>NEMsMh9dIe0w|$;eb>YPs8PQq5?C^+994)jH?C7S;EOtadu2 z-BK@+Xk_YgWJ>bi6Cs~H0KFy;IexN-≤q|; zhTh`3pxjJYl<8%Jjn1-i`;RJtmF*~uIpDpAb)cfclntvPIO%OuO7&utAD>q#bnmo; zV$TJ!Cn8Xcb=G-UCBqwYDW;VSli{vfH;lvT^p)`&dr4ZX8z;(L$5 zObp_w7^D(OHxl=hX&;gbGVAAprKqS>eSRV_@DMtth7HMb5rPSNS=xK|oI8I)8nVS4 z4vv)tlc=lCZ?|CZ>}&g{ry1yfakKyFAq;m9oTqykZie|SXl>QpK;=wYH#H{vtZ25J zx@1~jD3uCP$P6Cbfd0YG@bO(prUwW6_&yH7trrYKm%W(1$Wm!}SvOP~h5qh$sD%CZ zPKfC_wnYvok)Q@Qb6cug7O3Y;TCSHWN|dEy-@8Bj>QM+>-7s6Bd?COY51_xj+yDGq z`}Q3;!Us==L(C+Prt?}_zKCfeC-##s0XZLTK6I(!aR{+BE7#+-ifZ$LB*s{9`Q-~5 zZ!dTnAt^9?)kc*2u))f}OwXoeMQ|lr0cb6(kU-#A88F=WgHd2VyX*Y0HF)@ocVL_w zAAxiGWBg`+f0*F8u|7WX#h0Y 0) { + local x = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 86); + damager.setCurrentPos(x, obj.getYPos()-1, z); + } + } + else if(obj.isCurrentCutomAniIndex(CUSTOM_ANI_PUSH_OUT)) { + local x = 46; + if(currentAniIndex == 0) { + x = -10; + } + if(currentAniIndex == 1) { + x = -20; + } + + x = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), x); + damager.setCurrentPos(x, obj.getYPos()-1, z); + } + } + } +} + +function onSetState_PushOut(obj, state, datas, isResetTimer) +{ + if(!obj) return; + + local subState = sq_GetVectorData(datas, 0); + local var = obj.getVar(); + obj.setSkillSubState(subState); + + if(subState == ENUM_AMP_SUBSTATE_GRAB) { + + //渗热 蟾晦? + var.setBool(VAR_AMP_IS_GRAB,false); + var.setBool(VAR_AMP_HOLD_REALSE,false); + var.setBool(VAR_AMP_HOLD_REALSE_COMPLETE,false); + + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_PUSH_OUT_GRAB); + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_PUSH_OUT_GRAB); + // 钟帼瞪 蝶鉴击 瞳辨?棻. + obj.sq_SetApplyConversionSkill(); + } + else if(subState == ENUM_AMP_SUBSTATE_PUSH) { + local group = sq_GetVectorData(datas, 1); + local uniqueId = sq_GetVectorData(datas, 2); + local damager = sq_GetObject(obj, group, uniqueId); + if (damager) + { + if(CNSquirrelAppendage.sq_IsAppendAppendage(damager,"Character/ATMage/PushOut/ap_PushOut.nut")) { + sq_RemoveAppendage(damager,"Character/ATMage/PushOut/ap_PushOut.nut"); + } + + local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_PUSH_OUT, true, "Character/ATMage/PushOut/ap_PushOut.nut", true); + if(masterAppendage) { + var.push_obj_vector(damager); + } + } + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_PUSH_OUT); + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_PUSH_OUT); + // 钟帼瞪 蝶鉴击 瞳辨?棻. + obj.sq_SetApplyConversionSkill(); + + local level = sq_GetSkillLevel(obj, SKILL_PUSH_OUT); + local pushingAttackPower = obj.sq_GetBonusRateWithPassive(SKILL_PUSH_OUT , STATE_PUSH_OUT, 0, 1.0);// 尘横顶朝 奢问溘 + local attackInfo = sq_GetCurrentAttackInfo(obj); + local pushingPower = sq_GetLevelData(obj, SKILL_PUSH_OUT, 1, level); // 尘横顶朝 ?. + sq_SetCurrentAttacknBackForce(attackInfo,pushingPower); + sq_SetCurrentAttackBonusRate(attackInfo,pushingAttackPower); + } + else if(subState == ENUM_AMP_SUBSTATE_RELEASE) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_PUSH_OUT_ATTACK); + } + + if(subState != ENUM_AMP_SUBSTATE_GRAB) + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onTimeEvent_PushOut(obj, timeEventIndex, timeEventCount) +{ + return false; +} + +function removeAllPushOutAppendage(obj,isListClear) +{ + if(!obj) + return; + + local var = obj.getVar(); + local objectsSize = var.get_obj_vector_size(); + + for(local i=0;i$JdAT^@d_63Rl?saT zla+K7z;rxZX?$WyF3^PdqSVCvyu`fZR3)Hc1WigUNGwWqDM~Dd7zpQ5W^R67a7kiO z3CK(+lT!0s^HLzD0U4B;m01im3(O#3RxK|V2%^QEYg$@ratV5@LDizD2SpVgE6|PL z%uLfzgvY3+0w^tT7NwSy7Ufw3nLr!R9Yi>INwZI}NBz?2fAz9IGcJpT{iuxBj=ibZ97s-tVe;DA{<#V}wUN33oVj)vdwMlqahz?!^ zeF;>U5U*!ywK8?ej^WTnqqGjO2-JWBh}h&WnsF zEU?T~MQk}M(vhiDGU~ZW!g4t^MY_-b)w}bJd$id*{K9?js=ITKq`QxIynEmGuRrs) zZxL_*k+<`yyZe~*w?A_qe3W({eByrbpA_-7w%wh7yU!oI4*UB%_j_0O$?s>UXJ%8= zucl_F{}4nnD7lE+!|E;pv5MqhRK@sMG>9zytoowCOA_WUq!Aqi|G*LV`X-p4Cf;|C zdN-bvwEMT4q<{Oq`{ge2-v6n4^FwgQdv-{?g9F%|Cf(a#!+vl3h`77E?&bjqf_{N= z%i6{}s?m1ljm|1>LZ}gD*Z3HyVw%0J_ldi8kWP2+-6g$$zUSW9bN_s+ckL$eZhh{4 z`L%cdD#$0^wHtmM``fp{GU9#wEm#BwND2OiNY(pIH`MJUsTq#ZPC~;2SWu@@Z&Dj$ z0U?!T5BGy5zDk|*hOJDdstsz``UW(E1-IZIYk2v%)oHK!Pp1V?h!!b3R%^l9put-Z zH83}5(x!pnrl?EhN^wEY6mkJtNKMgq90#x^XRcWCC04$At}s`OzAOxd*AbbpE%L?{ zY6CO~tusl#3{{)LW3^Dq22Urnl@;)LO0G<0DiUv}ruAj3c15pQwN;uj%=*M+lAKPG zQ>T9&w)+^xvnNpes@^^|^MBC$irzdoLKcK`kq`W!kuNf6{7eBwRXg$8%;9uO`S1c`m2zKjZ#n1FlJ z-A!gmy8pqCqDiH%Rlo;qJLxF`1}+Ts6W~e)f|U{v7?c>V+CYkAI#JFLwa^OyJ$6*> zoNY8I^Z{R1q{Jkdc`f{6i_%(&lZX_Oa;%kxWdI$LDdIa6ES^C$@tdAAPQ6-2L9A2D zi<*|zD;F0vUCop$I=hDq4_yXH3I61KCcmWVS#2(}l&|>PV~cIyT8Nu}iOzr�~Uz z0HYZr@F*k+vI)K*KwEOMWiHxQHHxW-n;^Kp!UrtE2NJGL)OBYWVkQX~K$4Ypxw8zW zI2;H;0^i&MXo)a&fQuY4`L-3inKNtj^02Ker|hYM(n4vh^75#}>xC7bzgL<9vDz?f zp}~iCaLl*VYF`K*URbo+VFO!M`(p6);^5P_f~Rlsr&urW1Cf;8{pKv0ISmo!Go^@e z%C`kC0+zvTd|#A{fZ*gNC~FoDHb1cJ4yO1Vy}}|m*DzM2sfJk%)>vdg8P7UV+h?Eez^<<9|iq7L^(H9F#aqP(#*HwU-@6SU4a0owPH4(0G$YndH; z2B<-}YmlMm@W`3|nYCepw2^yi-*0vDxH1c(yYgt&YAFnS|vB5ejS61_AJMHDXx z<%D_V{UR(yK74pc`d{G?ifho4(swL<(SQUgdHV?Vg4O-)J$xbxqPk|7t5kQw{mXQ*YTK`Q(>g5=(+3#eR?3Fpn<88_FyYOTb(x=^%_ICkm|`ZXd(c8+J<-u zLm^{+ziiRy*%Tb6yuH7=cOS>+tNz{Z@$~iRL*-?bjIde42N@kG8F`J7g62_~n@CEX zwlV>o4qd*^TYMtyC*p8i9M_kKFUPgO@Eg{W@tYiahyfJ)1-WGbNvLmT3iHt6kou)E zpB1#cwxB@`@B^y;JNTFYXK22iebGn)1Iq*?32Q>NxUf(x#9WA*Dh|7e0U!8bXA!`$ zNdfIR%R#lp1*D8xE!Z`(?SobaGn6nHNGjj~##sJ$4{`1tWU&m#X9?jvyfvcoOh#%TA}d4k_fE7N2CWjKp-Ju8DyF=K#43tWn>fx{wYzhk61m!n0G6 zeKDz68McMrDPkk@4uoJmMMX@CF^Wt__4wriDn`R*UlksCh3m01M2G`Nq(B+dLEd{2 zql{*Blu)GM@*+wsEQ*3rAeblM6Nv}dwULyjPQWbDaQQh$^o@~8oJ-hz#Op2ug0i~U z5Y2#9X+c>IFh1{{VNAqjiuOH*h=z(p9V0Oj2t|~0 z;Y_M`|7nO&yv^OTAo_q%P+kaLAs44Yx7e!)3Q?wyRF&VrLm7u>g!7Le9F%rE-NX?X z>o%<67uZHNlf3X*=NEvxQp{^5{PrE;ok0K}LOa5dxWzu{#Mh7EoPlklQqF+ogGR?$ i2T2G2QTT5H{vFsKhv;P(aDqtlRN+<}{Ne9QFZ~w=FNW~| literal 0 HcmV?d00001 diff --git a/character/atmage/teleport/teleport.nut b/character/atmage/teleport/teleport.nut new file mode 100644 index 0000000..e3163e8 --- /dev/null +++ b/character/atmage/teleport/teleport.nut @@ -0,0 +1,393 @@ + +SUB_STATE_TELEPORT_0 <- 0 +SUB_STATE_TELEPORT_1 <- 1 +SUB_STATE_TELEPORT_2 <- 2 +SUB_STATE_TELEPORT_3 <- 3 +SUB_STATE_TELEPORT_4 <- 4 + +function checkExecutableSkill_Teleport(obj) +{ + + if(!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_TELEPORT); + + if(b_useskill) + { + obj.getVar("pos").clear_vector(); + obj.getVar("pos").push_vector(0); + obj.getVar("pos").push_vector(0); + obj.getVar("pos").push_vector(0); + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_TELEPORT_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_TELEPORT, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; + +} + +function checkCommandEnable_Teleport(obj) +{ + + if(!obj) return false; + + local state = obj.sq_GetState(); + + if(state == STATE_ATTACK) { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_TELEPORT); + } + + + return true; + +} + +function onSetState_Teleport(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local sq_var = obj.getVar(); + + if(substate == SUB_STATE_TELEPORT_0) { + obj.sq_PlaySound("MW_TELEPORT"); + + obj.getVar("pos").set_vector(0, posX); + obj.getVar("pos").set_vector(1, posY); + obj.getVar("pos").set_vector(2, posZ); + + sq_var.clear_vector(); + sq_var.push_vector(ENUM_DIRECTION_NEUTRAL); + sq_var.push_vector(ENUM_DIRECTION_NEUTRAL); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_TELEPORT1); + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_TELEPORT, + true, "Appendage/Character/ap_atmage_bodyeffect.nut", true); + + } + else if(substate == SUB_STATE_TELEPORT_1) { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_TELEPORT2); + + } + else if(substate == SUB_STATE_TELEPORT_2) { + //obj.sq_SetCurrentAnimation(CUSTOM_ANI_TELEPORT3); + } + else if(substate == SUB_STATE_TELEPORT_3) { + // SUB_STATE_TELEPORT_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_4) { + // SUB_STATE_TELEPORT_4 怃粽蝶才桧? 蒙机 + } + + +} + +function prepareDraw_Teleport(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_TELEPORT_0) { + // SUB_STATE_TELEPORT_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_1) { + // SUB_STATE_TELEPORT_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_2) { + // SUB_STATE_TELEPORT_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_3) { + // SUB_STATE_TELEPORT_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_4) { + // SUB_STATE_TELEPORT_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProc_Teleport(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + if(substate == SUB_STATE_TELEPORT_0) { + } + else if(substate == SUB_STATE_TELEPORT_1) { + // SUB_STATE_TELEPORT_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_2) { + // SUB_STATE_TELEPORT_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_3) { + // SUB_STATE_TELEPORT_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_4) { + // SUB_STATE_TELEPORT_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onProcCon_Teleport(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_TELEPORT_0) + { + local horizonDirection = obj.sq_GetInputDirection(0); + obj.getVar().set_vector(0, horizonDirection); + local verticalDirection = obj.sq_GetInputDirection(1); + obj.getVar().set_vector(1, verticalDirection); + + } + else if(substate == SUB_STATE_TELEPORT_1) { + // SUB_STATE_TELEPORT_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_2) { + // SUB_STATE_TELEPORT_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_3) { + // SUB_STATE_TELEPORT_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_4) { + // SUB_STATE_TELEPORT_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onEndCurrentAni_Teleport(obj) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + //if(!obj.isMyControlObject()) { + // return; + //} + + + if(substate == SUB_STATE_TELEPORT_0) { + local horizonDistance = obj.sq_GetIntData(SKILL_TELEPORT, 0); // 热? 表?剪葬 + local verticalDistance = obj.sq_GetIntData(SKILL_TELEPORT, 1); // 热霜 表?剪葬 + + local sq_var = obj.getVar(); + local horizonDirection = sq_var.get_vector(0); + local verticalDirection = sq_var.get_vector(1); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local fx = posX; + local fy = posY; + local fz = posZ; + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_TELEPORT_1); // substate撮? + + if((horizonDirection == ENUM_DIRECTION_LEFT || horizonDirection == ENUM_DIRECTION_RIGHT)) + { + fx = sq_GetDistancePos(posX, horizonDirection, horizonDistance); + } + + if(verticalDirection == ENUM_DIRECTION_UP) + { + fy = posY - verticalDistance; + } + + if(verticalDirection == ENUM_DIRECTION_DOWN) + { + fy = posY + verticalDistance; + } + + if(horizonDirection == ENUM_DIRECTION_NEUTRAL && verticalDirection == ENUM_DIRECTION_NEUTRAL) + { + fx = sq_GetDistancePos(posX, obj.getDirection(), horizonDistance); + } + + if(!sq_IsValidActiveStatus(obj, ACTIVESTATUS_HOLD)) + obj.sq_SetfindNearLinearMovablePos(fx, fy, obj.getXPos(), obj.getYPos(), 10); + + if(obj.isMyControlObject()) + { + obj.sq_AddSetStatePacket(STATE_TELEPORT, STATE_PRIORITY_IGNORE_FORCE, true); + } + + } + else if(substate == SUB_STATE_TELEPORT_1) { + if(obj.isMyControlObject()) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + else if(substate == SUB_STATE_TELEPORT_2) { + if(obj.isMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(1); // substate撮? + obj.sq_IntVectPush(0); // substate撮? + obj.sq_IntVectPush(1); // substate撮? + obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); + } + + } + else if(substate == SUB_STATE_TELEPORT_3) { + // SUB_STATE_TELEPORT_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_4) { + // SUB_STATE_TELEPORT_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onKeyFrameFlag_Teleport(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_TELEPORT_0) { + // SUB_STATE_TELEPORT_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_1) { + // SUB_STATE_TELEPORT_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_2) { + // SUB_STATE_TELEPORT_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_3) { + // SUB_STATE_TELEPORT_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_4) { + // SUB_STATE_TELEPORT_4 怃粽蝶才桧? 蒙机 + } + + + return false; + +} + +function onEndState_Teleport(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_TELEPORT_0) { + // SUB_STATE_TELEPORT_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_1) { + // SUB_STATE_TELEPORT_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_2) { + // SUB_STATE_TELEPORT_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_3) { + // SUB_STATE_TELEPORT_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_4) { + // SUB_STATE_TELEPORT_4 怃粽蝶才桧? 蒙机 + } + + +} + +function onAfterSetState_Teleport(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == SUB_STATE_TELEPORT_0) { + // SUB_STATE_TELEPORT_0 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_1) { + // SUB_STATE_TELEPORT_1 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_2) { + // SUB_STATE_TELEPORT_2 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_3) { + // SUB_STATE_TELEPORT_3 怃粽蝶才桧? 蒙机 + } + else if(substate == SUB_STATE_TELEPORT_4) { + // SUB_STATE_TELEPORT_4 怃粽蝶才桧? 蒙机 + } + + +} + + +function getScrollBasisPos_Teleport(obj) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + + + + if(substate == SUB_STATE_TELEPORT_1 || substate == SUB_STATE_TELEPORT_0) + { + if(obj.isMyControlObject()) + { + local pX = obj.getVar("pos").get_vector(0); + local pY = obj.getVar("pos").get_vector(1); + + if(substate == SUB_STATE_TELEPORT_1) + { + local pAni = obj.sq_GetCurrentAni(); + local currentT = sq_GetCurrentTime(pAni); + + local totalT = 200; + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local orgX = obj.getVar("pos").get_vector(0); + local orgY = obj.getVar("pos").get_vector(1); + local orgZ = obj.getVar("pos").get_vector(2); + + //pX = sq_GetAccel(orgX, posX, currentT, totalT, true); + pX = sq_GetUniformVelocity(orgX, posX, currentT, totalT); + //pX = posX; + //print( " orgX:" + orgX + " pX:" + pX); + pY = posY; + } + obj.sq_SetCameraScrollPosition(pX, pY, 0); + return true; + } + } + + return false; +} + \ No newline at end of file diff --git a/character/atmage/tundrasoul/ap_atmage_tundrasoul.nut b/character/atmage/tundrasoul/ap_atmage_tundrasoul.nut new file mode 100644 index 0000000..d58a233 --- /dev/null +++ b/character/atmage/tundrasoul/ap_atmage_tundrasoul.nut @@ -0,0 +1,266 @@ + +//////////////////////////////////////////////////////////////////// + +function enableAuraEffect_AuraTundraSoul(appendage, target) +{ + //print(" auratundra"); + + local isAppend = CNSquirrelAppendage.sq_IsAppendAppendage(target, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoulCS.nut"); + + print( "isAppend:" + isAppend); + + local parentObject = appendage.getParent(); + local parentObj = sq_ObjectToSQRCharacter(parentObject); + + if(!parentObj) + return; + + if(isAppend) + { + if(sq_IsValidActiveStatus(target, ACTIVESTATUS_FREEZE) || !parentObj.isInBattle()) + { + CNSquirrelAppendage.sq_RemoveAppendage(target, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoulCS.nut"); + } + return; + } + + + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(target, parentObj, SKILL_TUNDRASOUL, false, + "Character/ATMage/TundraSoul/ap_ATMage_TundraSoulCS.nut", true); + + local skillLevel = parentObj.sq_GetSkillLevel(SKILL_TUNDRASOUL); + // 0.橡晦梱虽 勘葬朝 卫除 1.彩念溯涟 2.彩念?徽 3.彩念卫除 4.橡横毡朝 瞳 跷陛 等嘐虽 + local frozenWaitTime = parentObj.sq_GetLevelData(SKILL_TUNDRASOUL, 0, skillLevel); // 0.橡晦梱虽 勘葬朝 卫除 + local frozenLevel = parentObj.sq_GetLevelData(SKILL_TUNDRASOUL, 1, skillLevel); // 1.彩念溯涟 + local frozenRate = parentObj.sq_GetLevelData(SKILL_TUNDRASOUL, 2, skillLevel); // 2.彩念?徽 + local frozenTime = parentObj.sq_GetLevelData(SKILL_TUNDRASOUL, 3, skillLevel); // 3.彩念卫除 + local frozenAddDamageRate = parentObj.sq_GetLevelData(SKILL_TUNDRASOUL, 4, skillLevel); // 4.橡横毡朝 瞳 跷陛 等嘐虽 + + appendage.getVar("skl").clear_vector(); + appendage.getVar("skl").push_vector(frozenWaitTime); + appendage.getVar("skl").push_vector(frozenLevel); + appendage.getVar("skl").push_vector(frozenRate); + appendage.getVar("skl").push_vector(frozenTime); + appendage.getVar("skl").push_vector(frozenAddDamageRate); +} + +function disableAuraEffect_AuraTundraSoul(appendage, target) +{ + if(!sq_IsValidActiveStatus(target, ACTIVESTATUS_FREEZE)) + { + CNSquirrelAppendage.sq_RemoveAppendage(target, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoulCS.nut"); + } + //print(" disable"); + +} + +function isInAuraRange_AuraTundraSoul(appendage, target) +{ + //print(" \n aa:" + target); + if(sq_IsValidActiveStatus(target, ACTIVESTATUS_FREEZE)) + { + local isAppend = CNSquirrelAppendage.sq_IsAppendAppendage(target, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoulCS.nut"); + + if(isAppend) + { + //CNSquirrelAppendage.sq_RemoveAppendage(target, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoulCS.nut"); + } + return false; + } + + if(!sq_IsInBattle()) + return false; + + return true; +} +//////////////////////////////////////////////////////////////////// + +function sq_AddFunctionName(appendage) +{ + appendage.sq_AddFunctionName("proc", "proc_appendage_atmage_tundrasoul") + appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_atmage_tundrasoul") + appendage.sq_AddFunctionName("onStart", "onStart_appendage_atmage_tundrasoul") + appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_atmage_tundrasoul") + appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_atmage_tundrasoul") + appendage.sq_AddFunctionName("onSetHp", "onSetHp_appendage_atmage_tundrasoul") +} + + +function sq_AddEffect(appendage) +{ +} + +function proc_appendage_atmage_tundrasoul(appendage) +{ + if(!appendage) { + return; + } + + + local parentObj = appendage.getParent(); + local currentT = appendage.getTimer().Get(); + local rebirthTime_ = appendage.sq_var.get_vector(VECTOR_I_REBIRTH_TIME); + + if(!parentObj) + { + appendage.setValid(false); + return; + } + + + local parentChr = sq_GetCNRDObjectToSQRCharacter(parentObj); + + if(!parentChr) + { + appendage.setValid(false); + return; + } + + local skill = sq_GetSkill(parentChr, SKILL_TUNDRASOUL); + + if(skill) + { + local auraAppendage = 0; + local appendage = CNSquirrelAppendage.sq_GetAppendage(parentChr, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoul.nut"); + + if(appendage) + { + auraAppendage = appendage.sq_getSquirrelAuraMaster("AuraTundraSoul"); + } + + if(!parentChr.isInBattle()) + { // 瞪潍酝桧 嬴栖塭贼.. on桧苌 off苌 鼠亵勒 aura ?娄蒂 疏捡?栖棻. + if(auraAppendage) + { + if(parentChr.isMyControlObject()) + { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); // + sq_SendChangeSkillEffectPacket(parentChr, SKILL_TUNDRASOUL); + } + } + } + else + { // 瞪潍酝桧塭贼.. + + if(skill.isSealFunction()) + { // off樯等 嬴办塭陛 毡戏贼 疏捡?栖棻. + if(auraAppendage) + { + //print(" parentChr.isInBattle():" + parentChr.isInBattle() + " auraAppendage:" + auraAppendage); + if(parentChr.isMyControlObject()) + { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); // + sq_SendChangeSkillEffectPacket(parentChr, SKILL_TUNDRASOUL); + } + } + } + else + { // on樯等 嬴办塭陛 桡戏贼 面捡?栖棻. + if(parentObj.getState() == STATE_DIE) // 避擎鼻鹧塭贼 嬴办塭蒂 橾钦 疏捡?栖棻. + { + if(auraAppendage) + { + if(parentChr.isMyControlObject()) + { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); // + sq_SendChangeSkillEffectPacket(parentChr, SKILL_TUNDRASOUL); + } + } + } + else + { + if(!auraAppendage) + { + if(parentChr.isMyControlObject()) + { + //print(" parentChr.isInBattle():" + parentChr.isInBattle() + " auraAppendage:" + auraAppendage); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(0); // + sq_SendChangeSkillEffectPacket(parentChr, SKILL_TUNDRASOUL); + } + } + else + { // 嬴办塭陛 毡棻朝 鼻鹧桧虽虏 valid陛 false橾 热 毡蝗栖棻. + if(!auraAppendage.isValid()) + { // 嬴办塭陛 isvalid陛 false塭贼.. 橾钦 虽表捡?栖棻. + print( " \n\n valid:" + auraAppendage.isValid()); + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); // + sq_SendChangeSkillEffectPacket(parentChr, SKILL_TUNDRASOUL); + } + } + } + } + } + } + +} + + +function onStart_appendage_atmage_tundrasoul(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + + appendage.sq_var.clear_timer_vector(); + appendage.sq_var.push_timer_vector(); + appendage.sq_var.push_timer_vector(); + + appendage.sq_var.clear_vector(); + appendage.sq_var.push_vector(0); // state + + local t = appendage.sq_var.get_timer_vector(0); + t.setParameter(400, -1); + t.resetInstant(0); + + local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); + + if(sqrObj) + { + } +} + + +function prepareDraw_appendage_atmage_tundrasoul(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + +function onEnd_appendage_atmage_tundrasoul(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj); + + if(sqrObj) + { + } + +} + +// 横渐螳 陕撩 渗褐暧 部睡碟 +function isEnd_appendage_atmage_tundrasoul(appendage) +{ + if(!appendage) + return false; + + local T = appendage.getTimer().Get(); + + return false; +} \ No newline at end of file diff --git a/character/atmage/tundrasoul/ap_atmage_tundrasoulcs.nut b/character/atmage/tundrasoul/ap_atmage_tundrasoulcs.nut new file mode 100644 index 0000000000000000000000000000000000000000..fb90091271459ba3b92d99cdb3aba4adac1550b5 GIT binary patch literal 6400 zcmcgwTW=Fb6z0{D@*f62t&3|r0i?DxL?&@Uq=ZC?2`w*Xu*YG+*>!i<2~OaNq6(p^ zp;CdA0uAL7(o#eV1(l}#HQqS?qUX%a&R%RMjv`@MiFfwQckY*&-kyoc;auU=X=#}NS4izKo3qG5VOU_0GEU9bK$axQ z4&}#Yb2IsD{`5>i6p{qFa)k(11B90xxeju)w}29`nl*F~5Eza!XQ*bO{;)Jpu^u7A zfK&&Oc<;vWE$)O&0X!F|#Z6F*SV1_bD8$LbuFNq+2`o4%kXJbh-lfx3O9$V@iAVKW zoE%aQo*Dw##u9|M{YO7VUyD_!vwW>D6IkQ%i_4#6T9@lp^zP_%cIxEVP;O)-H2IZfv~z$ z*Mts9A~z?Ms!76x&|xODQoTS0T6TQuWLBdUPJm8LK}3s89jA3>X^vH63I>z}E_?-) zNfHj^t@s%LGAprdeF+T%S_3$T9M^4U239p5L+DK)hWzrJMUE?};l(mSNv}8n6iB_! zK@)RQ(+m_5Q2|f9(P(`c{z;1b5*0w!s!+Yc*11E8^XpGSG~#fjL7`FRP_2OlFDyx% z1iG&u9^Drqk3+x~yOkl|As?s?foX&pz&N3LBt{^7E#3!)4~+akMFa<`ikJ))Gc+2n z;OIjJg|`zkzxcHLzL2yxY9>oBPv! z()jk*?bXNb+A{*{+uyuszW#?aHlH{Cd((LGX#39Z{LOa{-Sv&_jdl0u+wL##Q=nRh z8VGN|xQ?>4N}vG}sEM-CDVVZlE-~W_)t$UP-@YT+mntm{3Bs3TQakDuVKL4Y7}hL5 zN;r{*7{p(=_Zkjq>O4|=;2-h#+1{?owM!>pP{jdZ(EWv~e0S><5 zq7^nQ_X-jzAIS&|m!=N2iANvbEquRIZQx{*(Lt!Qdm0x|Oeq*>6LQszS+j~vOK=iN zBSVoo4lQ0{)@1A4M3%aqA znnPmnLD}IWOmtb%elcb80g3lCpP;S?zHCphqzKMN2_z@5?g`zXR-N~gGnVdveWa!_ z^^&g-FPc_K(@VS_M7IYhMAYzH>5dfhpgT$o@*t&@BAxC(0>e)1+|UJT(W1kw^aPCg z>1;mF4~5{t$_OtKDG0lBm`U5KuN#~1x1YQrTMzFvSH5nny>Neg2Fv#b$slCJ)*qYA z2iNfL?R$g1vNJHl3|R~Wo}#u5!>jP(6vmE&CJqDz%t9y?pNhmVzvNjKE0`$vUQzZ& z20vcG_}&C5hv>cp8GvaKqjwnrM3mt8=I?@nghsNogq$IHND0b$dO1wo%0kQ$d=Df~ zo*W+_xC>dvmaz@^^&ToYX8c2@Ldh)6u@p6Qey;(FgjisR6f2Bc-dusj9f;b|RcrPIj|?2myZY+Wt(&i! zZ>~cMbl4@({XnmFt*KzLGEr2w@-qodZ>EZ2mzio>L#Mg>y(zn z5&G`LP3gDC3kAXtSZE$DsnqKOjq}}ID}+QutBNxaKQaoxhK(G#Y3l0Cl_UmR^zNqM z2r5Srh!U(@do@37@q`S($`}-2C4LJA!P80rK?skW_*9 zFsNrTDSidQalJO6kok3sdJ=6M1yGihKMoN^1n_WW!{)FTqxB(90`Vj0VV#FhsJB(E zZf>Jn(zL7owtFyvj7p@yg{NuccD#VzMI6wbhe+rKA?BIc@3t^rb>C~1q%fDj0n>fA u(u7#qUj4!S{yA~q-Dy5v;WOQ}^{xABTaV!Q6{v-KR7a-0SFo-gIPgE*ItB*- literal 0 HcmV?d00001 diff --git a/character/atmage/tundrasoul/po_attundrasoulfrozen.nut b/character/atmage/tundrasoul/po_attundrasoulfrozen.nut new file mode 100644 index 0000000000000000000000000000000000000000..44617bfa605e7ece57ca36dea1f683804bb3a464 GIT binary patch literal 1350 zcma)5!H&}~5bZUU`VZ#TNKtoz;|ihDrfda>)i!Y8Qki7ZHBIeePZkQxC-4EBxNt!n zIKcsF;cL1Qf5A9Tt2C>IRa>RD=e_ZJZ_;U}xr|XL$qe8iH>egvj(oaQ(|#1?GSPgZ z@@%BlJCI%V@>Rez#Nr%mmEUQ<@3cLUc5l&%PbZjbdE|B4w414zXG|pQUIo$9z?0z{ zrIW6Iv@J>t_Q!Az+5T$p;DFuktuMc>|NOZ6_5JGS=NkT$BQ(G*{!WR%zy5t$Lq}rq zKlI%az5e*^@24*nk;}oErq1L+Zw44CT64`~1npFATTunXNTufW^daEWV)=&;XaaT^u>K$#KMyBSKYBKqj!why zMHn!btW9R~zestru%=hU(v5q?;T7Nv7eb>SL8$(`VkKHaLh#~@~B zSg2u?zwaDzR*)N=o%y%=plS4tEeKdbvv25D6a+EV$KP)5QZKcN`^zQ8wV%9!&PI0g zxUaWYvW#yovMfwfGHU-l0%mO4SSIlH`n!H3xk{E(=>lx(8ofj%L?7NvL8Omfc_EPL;+Q9ea+-kM{0m&o0DF6Tf literal 0 HcmV?d00001 diff --git a/character/atmage/turnwindmill/po_atturnwidmill.nut b/character/atmage/turnwindmill/po_atturnwidmill.nut new file mode 100644 index 0000000000000000000000000000000000000000..26b44393475f0aad16a4c13e13fba9b7489241c3 GIT binary patch literal 5670 zcmcIoOK%%h6lUv4`41PbW~gf?1tdfjDmO_R168cpO`C44iG7_;nar4(n-HgB2@(sC zDC(j@ELb5PqAS!@#jj}_{srH;=ic!hdz?Cmwi(%;d*0_ekD2AA;ZfXIVG@fl&Sa|Y zgz?}ojG~RBOnJ%vgPIte;2PsP^_Q0(E-zKWq4zdU@T*cur8-LEtMnCDl=Op0oQO4% zecrn%)!lZIkr1B<_;8#b?#&*a=7;y(!<=~(q$=!3ay^xSk}0SmynZ0nZjgF@9U7-7 zZUrN++U#~=qw83;CaUZAgEZ(vO5;{=ARC**q3o+h+h}OaGSx>a0;6?@{GHNP-;tSu z0B=P*Jbl`cio7}zmvl_W^oh8h(&wpvl?37sk!ubH){gD{2QZ5hF(r?5e7U?t|MMJX zQmrF#$>Bzzg5D_USvPb}SxhSX;jttFU*{7#ZAL|&PLgUeHjKg%B0XWNBl?4lFOqcN zIf)&F@ICI!`K06>gCI~U=zq3@9L}fCiIJki1;_?r+8vJ;5g5b=(YbWF>NkO82eDPy zT=nY!bddIrk>>;`rc#-u869Q!Es61T0ZQ$urpsMIn(iQ)Hd~Xz#GNf1tk50c!79P8 zhqz4Q`bpNKpjh_0N`_GqD9;z~P|dF=SvS~^q&LxQII}SBQSHy;?1b?QC+P(}*-KTi zpLs$X0IgxHu0Glg;L@oXAb!NlEHRkV`XOfCf#Y)F4+5#m~Pg8Vzys^5dj!T*|AtqCHiiOZ{HcH5Sn zo34n}7V=E`9CB^*EH!N87OH@DHvI@5%}rtwF8O({b90 zsfXM7mFpTcb-(8NLI~E6(p1KZ@3!J$!ZW_2MWF;S=n5p)llUm3ZtodMH8Gh0Hf&Tj z=sV<7nB5w$C$UPCXq)Gs?+d33jasqVmHphFn^CeKM0_*vp(KxnX?}a1+N@`IwbsIM z8y(i3)&z%4%OHz_!2nKm2+M6uE~&h79My!8UlWY1_D*Yir`6r-HE(yfYhoBgnZ)u@ z)%s0WY0OzRsLJ$!cgMT7Va{aNc*mlK(VqG9XFGYtAQ}Z(hFw6*q-c_V)Kc*0VoTo# zgn7D|#6--eqb3?!-WiY0P$1Wzi>^ zxi7x`{p`_`6PPgJ-FqD`;633T7kKZzju!}+@SYN{z(2~2F#wj@hXXe)GY-7Vg3g|P zEvB{(N7ymUL1Vuu)$KSOCh6g>MBqX-_Ry8Arkb#MLf55$GDsbhGDY!ZK^w+CdOo8- z>&HBb>;_o%0N>*PzI^oOtFOMBiJ{5Hv00VpMsRCR^t2n!l7wJy=_QH2u)_;D zM$KEdJL_IW8+7@2iz>3BdnZTCq9;=XUnFJ^+qxy2p8+go$iN;OM4edMO`nLmg@yQN z%>aWAIL;<1W&4M=jH!%Oi)|qsvcjfOvWOHnm6BCNtJfWN!Bqq?xX3DEqMiqfu=@1z z*^}qu+O@O4eiAR9|M2qBuVe-HsEe<$-5zh0!4z@APiH3dU}~n;tjkmOOr8sH%AS^fChXav7gBC4SLGC5d{Zxqz-YU zZMTATF!DV+i8tec8S5D6r9zmq#Lo)6XEYV3zl*Bsc?$_bSLB?t>lRi= 7) + { + if(!obj.getVar().get_vector(0)) + { + obj.sq_PlaySound("MW_SPINSPEAR_2ATK"); + + local fireOffsetX = 100; + local fireOffsetY = 0; + local fireOffsetZ = 13; + + local distance = obj.sq_GetIntData(SKILL_TURNWINDMILL, 1); // 1. 湍螺击阳 釭嬴陛朝 剪葬 + + local pAttack = sq_GetCurrentAttackInfo(obj); + local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_TURNWINDMILL, STATE_TURNWINDMILL, 0, 1.0); //0.奢问溘(%) + local term = obj.sq_GetIntData(SKILL_TURNWINDMILL, 0); // 0. 棻钦?? 除问 + + if(obj.isMyControlObject()) + { + sq_BinaryStartWrite(); + sq_BinaryWriteDword(1); // + sq_BinaryWriteDword(distance); // + sq_BinaryWriteDword(attackRate); // + sq_BinaryWriteDword(term); // + sq_BinaryWriteDword(0); // + + obj.sq_SendCreatePassiveObjectPacket(24251, 0, fireOffsetX, fireOffsetY + 1, fireOffsetZ); // po_ATTurnWidmill.nut + + local dirFiringSwitch = obj.sq_GetIntData(SKILL_TURNWINDMILL, 3);// 3. 觼煎栖觼缣 评艇 陕紫 翕卫嫦饵 on/off蝶嫔纂 + + if(dirFiringSwitch) + { + local dir = obj.sq_GetIntData(SKILL_TURNWINDMILL, 4);// 4. 3廓桧 on橾阳 + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(0); // + sq_BinaryWriteDword(distance); // + sq_BinaryWriteDword(attackRate); // + sq_BinaryWriteDword(term); // + sq_BinaryWriteDword(1); // + sq_BinaryWriteDword(dir); // + obj.sq_SendCreatePassiveObjectPacket(24251, 0, fireOffsetX, fireOffsetY + 1, fireOffsetZ); // po_ATTurnWidmill.nut + } + + + local cnt = obj.getVar("cnt").get_vector(0); + cnt = cnt + 1; + obj.getVar("cnt").set_vector(0, cnt); + + } + + obj.getVar().set_vector(0, 1); + } + } + } + +} + +function onEndCurrentAni_TurnWindmill(obj) +{ + + if(!obj) return; + + if(!obj.isMyControlObject()) { + return; + } + + local substate = obj.getSkillSubState(); + + local cnt = obj.getVar("cnt").get_vector(0); + + local maxCnt = obj.sq_GetIntData(SKILL_TURNWINDMILL, 2); // 2. 湍虽朝 ?离偎热 + + print(" cnt:" + cnt + " maxCnt:" + maxCnt); + if(cnt >= maxCnt) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + return; + } + + + if(substate == SUB_STATE_TURNWINDMILL_0) { + + // IRDSQRCharacter.pushPassiveObj("Character/ATMage/TurnWindmill/po_ATTurnWidmill.nut", 24251) + local fireOffsetX = 100; + local fireOffsetY = 0; + local fireOffsetZ = 13; + + local distance = obj.sq_GetIntData(SKILL_TURNWINDMILL, 1); // 1. 湍螺击阳 釭嬴陛朝 剪葬 + + local pAttack = sq_GetCurrentAttackInfo(obj); + local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_TURNWINDMILL, STATE_TURNWINDMILL, 0, 1.0); //0.奢问溘(%) + local term = obj.sq_GetIntData(SKILL_TURNWINDMILL, 0); // 0. 棻钦?? 除问 + + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(0); // + sq_BinaryWriteDword(distance); // + sq_BinaryWriteDword(attackRate); // + sq_BinaryWriteDword(term); // + sq_BinaryWriteDword(0); // + sq_BinaryWriteDword(0); // + obj.sq_SendCreatePassiveObjectPacket(24251, 0, fireOffsetX, fireOffsetY + 1, fireOffsetZ); // po_ATTurnWidmill.nut + + local dirFiringSwitch = obj.sq_GetIntData(SKILL_TURNWINDMILL, 3);// 3. 觼煎栖觼缣 评艇 陕紫 翕卫嫦饵 on/off蝶嫔纂 + + if(dirFiringSwitch) + { + local dir = obj.sq_GetIntData(SKILL_TURNWINDMILL, 4);// 4. 3廓桧 on橾阳 + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(0); // + sq_BinaryWriteDword(distance); // + sq_BinaryWriteDword(attackRate); // + sq_BinaryWriteDword(term); // + sq_BinaryWriteDword(2); // + sq_BinaryWriteDword(dir); // + obj.sq_SendCreatePassiveObjectPacket(24251, 0, fireOffsetX, fireOffsetY + 1, fireOffsetZ); // po_ATTurnWidmill.nut + } + + local cnt = obj.getVar("cnt").get_vector(0); + cnt = cnt + 1; + obj.getVar("cnt").set_vector(0, cnt); + + if(cnt >= maxCnt) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + return; + } + else + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_TURNWINDMILL_1); // substate撮? + obj.sq_AddSetStatePacket(STATE_TURNWINDMILL, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + else if(substate == SUB_STATE_TURNWINDMILL_1) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_TURNWINDMILL_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_TURNWINDMILL, STATE_PRIORITY_IGNORE_FORCE, true); + //obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + +} + +function onKeyFrameFlag_TurnWindmill(obj, flagIndex) +{ + + if(!obj) return false; + + local substate = obj.getSkillSubState(); + + return false; + +} + +function onEndState_TurnWindmill(obj, new_state) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + +} + +function onAfterSetState_TurnWindmill(obj, state, datas, isResetTimer) +{ + + if(!obj) return; + + local substate = obj.getSkillSubState(); + +} + + \ No newline at end of file diff --git a/character/atmage/watercannon/po_atwatercannon.nut b/character/atmage/watercannon/po_atwatercannon.nut new file mode 100644 index 0000000000000000000000000000000000000000..d1820765778d4556a12de437c3e969a0a9c880a3 GIT binary patch literal 5843 zcmcIoU2has80L0K_z#D@n$>Zqd}xeBn|4bPrL>_HC^yZpd$tVh&Marn*4+|rR8%fR z!5Bq>h>2oE)Eg2)H2xX8lz-v#p0AnN?zYtgGA-Rb@8@&g^StkwW;d?OD2Z9hWv!da zq&*YLaHW&1Of8)WB^R|Yj+59+&R_JI;B_9YagwO)+k0i--crs7(S z#?1SPXm}OaGb(Ac&d11}aiUJTcbdafB>N*wXW}}TMwH4hu8)c$6NP1DT3zMxbSS(^ zwcg^PSXtwBncyRZSy=9L(+hTWLM=n0C{)%Uly|U|iREn$0Z1NT9k>JUXMcaiHtzq$ zCO3Zmh)qszKE6Bn_5mAQzq#??juN6s)5|N1T+StHd?6GvLONdA{uLBN zqB@~|RgO?DL7?&L7y~uz8)^oK8wYEls2<~TXnij1c;$kJvJYz|*h2(qiW-|ge-Xe2 zwF{vL>o6J2g{wRm9o|wHwM=+$tDp{oA(z!t99t};r?(;qOn_63hIVC5n-s=D;d~i4 z#teWgnpsFv4@eyVSa$C%Sh-?5JTY;EVauL>^62^P?*@17vW@G%Y~K78VBpc%_JAg~ z3Mif>qj0DU>P0GUy|}z}aosJR%P(r<6u2qnG9nsTgOJ=RmaoB{3T1nl{w`$JcOhe8 zQ=*8>!WjyIdRdCvbb75&MjC}>&#tqV*y|G$6&5f@6QrV!P(GbZdn7<(Me`tKHnwD$ zEy4VF9hI%()4`{oKf88Aap{-%@5djWfBoCw={Ia}R{*uH5ImMs zigank)e$jxrci;Ak|u_NisR{=tUt`*l%5WC1;mu6STj1>jU=B)5p*5 z{V`c}an?;xakM4QIBJK~mRy*5qy;!;$L%mec~EWtuoYxKlXufvsxoP|l2Ce78V4r8 zc2pKwpjEWV<84q8^`TjjwC6>%8pUDDvle`3OSvhkPIYB+BJ6X4u5xM0CJ7E&H2$3# z7o#F+y>HV=H*Q4n>U7d`@|pe2@u)^|rjsb3Ixb%ofoUDrlL7a7xBX}6=%Wi!H6{8#B_|2ccm?eaUgRk`9ppf{sP7-E(>kcoub@~Rw`lF)DIz^ zq27!HCs4?(?GFW-!k1gd8odpvs1rzeP2E|FD%9{cK6|)%>vj*GohsqCt?Ge_>Xllx zpI1G%lj^~|>N->z{$)A4uCPM{hqRf^-#<1(*4A#lhEQ}velL!iiD=s?l%@ge$7i!f`YfAf5F>f6z{eOuq|+bLbW-uw`i7ECMsBYA$6>3mr}!npCSPzF~-Jtl`me3 zTCJnaCSV%LMBqu1Q1qZKH@msp47)O?P9MuLZcx^U0bmdoyP?n|ewX(Zcg?oK)iG9^ zSW>ZT!^43cjT;$fjx_O~0@5vLq#bGz)Dwlz&Sx#kXHmK+yY)-s-7wW%O9~WkzcB)F zOHsGPGZ=qhH(UMaG(#Go_oxdGS5AF0W(ICxtyYH z_Cvg5W{!dqdxafRX=<0NBI$MAUd>Qxo?GCM%ttx$Gz&=%GGVc4RJHuFECGm^id8;bR&bIp7W z-%|9tYl<*r_9)jn5ybXAQqhmLRF7q5L*L;GTSW*Eu4HjPgjFRfePYmQjCrDuc}d7K zB9dHpZZ$3ICH1X-X^|C{!hW=nDur#kd&bnrft^|Nk37OkP3~~BGTsVDZ#6U-Ko8z;ChY!B`n(8P$pY?sF?{uZB z3R2>0Jhr}U^s_W;Q-O>fzr&nXR%idW&Itw^Lsoa&)VLLnQX1V2*CSvlx?CH}Sp>UK zE|*s{WR8=(a@pVhy@nIrk-o}mbAmv*r8xdx!Cy4-=r4uP)#+pifE=n6L6zD0kmcm5^Or z)JJ22m{%b5AXR?3wL1d7M)+}25EstH1W;k}o5b<7>(3gX-C z4TEwqCw(}j!o3r$tKT)h9Z5Z(%|42cg9`HtR?bm(a&VIn^rV?Mk^sed{uqYG9Im!LGp(`~vRc0AVSy zyS2bsKUxJabiEjF3xd7Y6D~ZfrlL$pSMYv#5l8A>#4DmB^8eI^b0{d27OEz+1u(u^ zMY9uC%z{gbs~yr8@U0^1=`-r-qUPpM<7D@B{PNY&iyd_M{d4>l{=R-WdG|9uc#q

WX{XEjoBb}*8 z#mR`a%#Uo4T>el2N2Svhn~Jj#3E<>8P3 z5r5o6$9sR`58sa8JVSpEejn}rYS`dnX2wl2Fgn4L(H>Uwoza9Kqem6xVY>eOH5DT3 zEA%9pBU^Gm;85Lt&)f5Abn{TVEx2puxo`-VYq^KJdJ>le@2v>hr3?pF3R}+- zWVy9=M&||IXC7tU1wQB`Jggi&k3H)t#WPBUSaok@V-tje*|NJtw)K&rtmY8zbLOSG zxUCKop*^gs5ShvVL|mEs*O9)yb+`mNZ`vOon3QI+oja>76S>A69t1Rk1|?8Q1``cb zToXDogK|@8`!*wLw>FLWYQsz4HV7Wz5`nI0J z$^AAC974;RVMv%a4f-4~P5=p^_M#t%yKww~UPAQYfx5#iw;2v2DaCbVe4^~}4iha6o@bzJylU?y?I41av z&yi69*xNL^J#;vOV%0pVp{YSs3HqGuD&{3xwBfU*u0|ArpouRaq=QvTns(_Qm6BR+ literal 0 HcmV?d00001 diff --git a/character/atmage/watercannon/watercannon.nut b/character/atmage/watercannon/watercannon.nut new file mode 100644 index 0000000000000000000000000000000000000000..284581ea7d1c4138538c22d327074dc4acc149b5 GIT binary patch literal 3132 zcmbVOdvDuR6zAVm>UX$ILQ175X+vR%sftYEPEqqx>@2DfvRwP7^_E-*+v!@SNkBnp zLIY9I)^2U-nA!rR6rpW`u4SJlPVy}{_g>q1Z-Xj*-Fu$DbI$MFN`q*QVG^XRVC{yu zhP8&HE>*E~!>Cr3vg%+fsS;w6u(@=7YI5S%Bu1uo%J zH8r)047+4=GiVNhbkzP>Ne5?PX(64-C}lwwi%L?+_`s8Tu`+e*a=HAnD6ruLHw*xOy`Sfc~MDU&E<=tGM_Id#R$)W#o_1WSPhoe zZSW5f3}ibw0g+8kRQfHU+ljR@|~T%*2W3?Fg`sKk511<Zkw!@6y30h5qU< zmr4AF8DX2kA3-`8v?I{WMQme7Hfq=k><>)=IDo`FJS4}gXU$d23+5kUC)uzpOdNq2 zHI+_YI9Zb9d{z;1>AqHFb&kclinOy0O{!z8r%A;OO9fF(De_`LgaMLdh5Zi=KJpmi zip4_w?wXJ(iAqYG7fKn~R~R^)iB3ll{P4TY3!_j~*Cn$-^zfx@St;|uRf?jJTD-(W zRb3aWxCRNTRj8mr6hY3a%b3zf1c|v)RuMB|R?NvfS*p}ul)8oMs)bXQdULQU9C;?* zGjt{?Sf(~wb`)0)dE^F?CK+v`KRlC&MDNycw8|K_!Ew~Ev+Ll{vCL|I={hubc#6)g zH&T6lG>+DQ$a1M6J}XILv4_V7V_(4Q^Ojn}^Hp_uFmzCZQ#MZHTf9s3{ubc8{<3re z9oB@XxpCtDwVwbcx_jLE^8&T^HsDwL-opfHUVQIv{sLlrg|PVs3WUu;>5oo3@1s%6 zgYq3GwtoE#Ud7dZBkbsPEV*Z=?z0~Qd#dBWV)?)%4ZAo<&cSKfa8?ScZ37#P;6T4% zy^Ak`{8?k1eehG~{_pPDR`@O25*`x9C)jhz!C)y+wi}lQOs_|fOmylBv(2G*9~`0f z(Yd>Q7&utFhQX8JtoN+^0JJo5UhWEL0?~ETHSZprx1Jma=5+&h718KE?C#5wDj;m{TN|+%1o+Eg=`P%(YK>; z8ZGIk+&tIoes>=r_w*4|q`iHCTL1hFJ=Ifj*vRZ< z8NB{rhSQ|pa8ibM6=wM%_@ZP&E3u4wZl}yT~*yT!ie)0_znFJbY@wG zp|$@A%sW(##?APZP1e~{ib?a2E%)pII+Z`Qe*S_%cKkyE;`7^-KjaLJJ`UI-hv^SO z@B5QIs^Nr17eVx?#Nr)m2}T}_!G~!M$Wnh@{D#r?)^jRd6q9l~pHp&TNiGT*Y6imh M-l^Vu4HAFjUoEm9WdHyG literal 0 HcmV?d00001 diff --git a/character/atmage/windstrike/po_wind_strike.nut b/character/atmage/windstrike/po_wind_strike.nut new file mode 100644 index 0000000..9672809 --- /dev/null +++ b/character/atmage/windstrike/po_wind_strike.nut @@ -0,0 +1,29 @@ + +// setCustomData +function setCustomData_po_ATWindStrike(obj, receiveData) +{ + if(!obj) + return; + + local attackBonusRate = receiveData.readDword();// 奢问溘(%) + local power = receiveData.readDword(); // 奢问溘+ + local upForce = receiveData.readWord(); // 嗥办朝 ? + + local attackInfo = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate); + sq_SetCurrentAttackPower(attackInfo, power); + sq_SetCurrentAttacknUpForce(attackInfo, upForce); +} + + + +function onEndCurrentAni_po_ATWindStrike(obj) +{ + if(!obj) + return; + + if(obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + } +} diff --git a/character/atmage/windstrike/wind_strike.nut b/character/atmage/windstrike/wind_strike.nut new file mode 100644 index 0000000..caab351 --- /dev/null +++ b/character/atmage/windstrike/wind_strike.nut @@ -0,0 +1,187 @@ +function checkExecutableSkill_WindStrike(obj) { + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(SKILL_WIND_STRIKE); + + if (isUse) { + obj.sq_AddSetStatePacket(STATE_WIND_STRIKE, STATE_PRIORITY_USER, false); + return true; + } + + return false; +} + + +// function onSetState_upperslash(obj) +// { +// print(123123); +// return false; +// } + + + +// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.) +function checkCommandEnable_WindStrike(obj) { + if (!obj) return false; + local state = obj.sq_GetState(); + + + if (state == STATE_STAND) + return true; + + if (state == STATE_ATTACK) { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_WIND_STRIKE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_WIND_STRIKE); + } + + + return true; +} + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_WindStrike(obj, state, datas, isResetTimer) { + if (!obj) return; + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_WIND_STRIKE); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_WindStrike(obj) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + + +function onKeyFrameFlag_WindStrike(obj, flagIndex) { + if (!obj) + return false; + + local isMyControlObject = obj.sq_IsMyControlObject(); + + // ?螃葬 螃粽薛? 当撩 + if (isMyControlObject && flagIndex == 1) { + local xPosMin = obj.sq_GetIntData(SKILL_WIND_STRIKE, 0); + local xPosMax = obj.sq_GetIntData(SKILL_WIND_STRIKE, 1); + + local attackBonusRate = obj.sq_GetBonusRateWithPassive(SKILL_WIND_STRIKE, STATE_WIND_STRIKE, SKL_LVL_COLUMN_IDX_0, 1.0); // 奢问溘1(%) + local power = obj.sq_GetPowerWithPassive(SKILL_WIND_STRIKE, STATE_WIND_STRIKE, SKL_LVL_COLUMN_IDX_1, SKL_LVL_COLUMN_IDX_0, 1.0); + //local power = obj.sq_GetSkillPowerWithAttackBonusRate(SKILL_WIND_STRIKE, 1, attackBonusRate); + local upForce = obj.sq_GetLevelData(2); + + + obj.sq_StartWrite(); + //obj.sq_WriteWord(EARTHQUAKE_ROCK_MAX); + obj.sq_WriteDword(attackBonusRate); // attackBonusRate + obj.sq_WriteDword(power); // power + obj.sq_WriteWord(upForce); // upForce + obj.sq_SendCreatePassiveObjectPacket(24201, 0, 120, 1, 0); + } + return true; +} + + + + + + + + + + + + + + + + + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "character/atmage/windstrike/wind_strike1.nut", "windstrike1", 1, 1); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/WindStrike/po_wind_strike1.nut", 24357); + + + + +function checkExecutableSkill_windstrike1(obj) { + print(123123); + if (!obj) return false; + local isUse = obj.sq_IsUseSkill(243); + + if (isUse) { + obj.sq_AddSetStatePacket(243, STATE_PRIORITY_USER, false); + return true; + } + + return false; +} + + +// function onSetState_upperslash(obj) +// { +// print(123123); +// return false; +// } + + + +// 蝶???夔 ??? ?勒? ??朝 ???栖?. true? 葬??? 蝶? ??夔? ???陛 ?栖?. (嫦翕?勒 state朝 模蝶?? ?葬?栖?.) +function checkCommandEnable_windstrike1(obj) { + print(2222); + if (!obj) return false; + local state = obj.sq_GetState(); + + + if (state == STATE_STAND) + return true; + + if (state == STATE_ATTACK) { + // 念????朝 ?姜蝶?? 警?? 陛??栖?. 蒙机濠:姜霞? [2012.04.20] + return obj.sq_IsCommandEnable(243); // 念????朝 ?姜蝶?? 警?? 陛??栖?. 蒙机濠:姜霞? [2012.04.20] obj.sq_IsCommandEnable(SKILL_WIND_STRIKE); + } + + + return true; +} + + +// state? 撮??? ???煎 ???? ?栖?. ?? 葬模蝶? 撮??栖?. +function onSetState_windstrike1(obj, state, datas, isResetTimer) { + if (!obj) return; + + obj.sq_StopMove(); + obj.sq_SetCurrentAnimation(CUSTOM_ANI_WIND_STRIKE); + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); +} + +function onEndCurrentAni_windstrike1(obj) { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + + +function onKeyFrameFlag_windstrike1(obj, flagIndex) { + if (!obj) + return false; + + local isMyControlObject = obj.sq_IsMyControlObject(); + + // ??葬 ??薛? ?? + if (isMyControlObject && flagIndex == 1) { + local xPosMin = obj.sq_GetIntData(SKILL_WIND_STRIKE, 0); + local xPosMax = obj.sq_GetIntData(SKILL_WIND_STRIKE, 1); + + local attackBonusRate = obj.sq_GetBonusRateWithPassive(243, 243, SKL_LVL_COLUMN_IDX_0, 1.0); // 奢??1(%) + local power = obj.sq_GetPowerWithPassive(243, 243, SKL_LVL_COLUMN_IDX_1, SKL_LVL_COLUMN_IDX_0, 1.0); + //local power = obj.sq_GetSkillPowerWithAttackBonusRate(SKILL_WIND_STRIKE, 1, attackBonusRate); + local upForce = obj.sq_GetLevelData(2); + + + obj.sq_StartWrite(); + //obj.sq_WriteWord(EARTHQUAKE_ROCK_MAX); + obj.sq_WriteDword(attackBonusRate); // attackBonusRate + obj.sq_WriteDword(power); // power + obj.sq_WriteWord(upForce); // upForce + obj.sq_SendCreatePassiveObjectPacket(24201, 0, 120, 1, 0); + } + return true; +} \ No newline at end of file diff --git a/character/atmage_load_state.nut b/character/atmage_load_state.nut new file mode 100644 index 0000000..29498b2 --- /dev/null +++ b/character/atmage_load_state.nut @@ -0,0 +1,245 @@ +//****************************************************************************************** +// 陴彻饵 奢鳝 +//****************************************************************************************** +IRDSQRCharacter.pushScriptFiles("Character/ATMage/atmage_header.nut"); // 陴彻饵 蝶觼董? 偃嫦击 嫔? 厥横菩 鼻热(enum高 赅挤) +IRDSQRCharacter.pushScriptFiles("Character/ATMage/atmage_common.nut"); // 桧够擎 state煎 掘碟骋朝匙桧 嬴棋 陴彻饵 奢鳝 ?热 殓栖棻 +//IRDSQRCharacter.pushScriptFiles("Character/ATMage/atmage_throw.nut"); // state_throw缣怃 籀葬?丑捡?朝 ?热殓栖棻. +IRDSQRCharacter.pushScriptFiles("Character/ATMage/passive_skill_ATMage.nut"); // 晦狱瞳樯 ?卫粽 蝶鉴击 籀葬?朝 睡碟殓栖棻. + + +//****************************************************************************************** +// 蝶鉴偃涤 NUT?橾 煎萄 +//****************************************************************************************** +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/WindStrike/wind_strike.nut", "WindStrike", STATE_WIND_STRIKE, SKILL_WIND_STRIKE); +// IRDSQRCharacter.pushState(0, "Character/ATMage/WindStrike/wind_strike.nut", "upperslash", 8, 1); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/Attack/attack.nut", "Attack", STATE_ATTACK, -1); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/ATMageDashAttack/ATMageDashAttack.nut", "ATMageDashAttack", STATE_DASH_ATTACK, -1); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/JumpAttack/jump_attack.nut", "JumpAttack", STATE_JUMP_ATTACK, -1); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/CrystalAttack/CrystalAttack.nut", "CrystalAttack", STATE_CRYSTALATTACK, SKILL_CRYSTALATTACK); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/ElementalChange/elemental_change.nut", "ElementalChange", STATE_ELEMENTAL_CHANGE, SKILL_ELEMENTAL_CHANGE); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/FireRoad/fire_road.nut", "FireRoad", STATE_FIRE_ROAD, SKILL_FIRE_ROAD); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/IceSword/ice_sword.nut", "IceSword", STATE_ICE_SWORD, SKILL_ICE_SWORD); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/DarkChange/dark_change.nut", "DarkChange", STATE_DARK_CHANGE, SKILL_DARK_CHANGE); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/PieceOfIce/piece_of_ice.nut", "PieceOfIce", STATE_PIECE_OF_ICE, SKILL_PIECE_OF_ICE); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/Holonglight/holong_light.nut", "HolongLight", STATE_HOLONG_LIGHT, SKILL_HOLONG_LIGHT); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/IceArea/IceArea.nut", "IceArea", STATE_ICE_AREA, SKILL_ICE_AREA); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/IceCrash/IceCrash.nut", "IceCrash", STATE_ICE_CRASH, SKILL_ICE_CRASH); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/PushOut/PushOut.nut", "PushOut", STATE_PUSH_OUT, SKILL_PUSH_OUT); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/MagicCannon/MagicCannon.nut", "MagicCannon", STATE_MAGIC_CANNON, SKILL_MAGIC_CANNON); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/MagicShield/MagicShield.nut", "MagicShield", STATE_MAGIC_SHIELD, SKILL_MAGIC_SHIELD); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/WaterCannon/WaterCannon.nut", "WaterCannon", STATE_WATER_CANNON, SKILL_WATER_CANNON); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/Resonance/Resonance.nut", "Resonance", STATE_RESONANCE, SKILL_RESONANCE); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/ElementalRain/ElementalRain.nut", "ElementalRain", STATE_ELEMENTAL_RAIN, SKILL_ELEMENTAL_RAIN); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/LightningWall/LightningWall.nut", "LightningWall", STATE_LIGHTNING_WALL, SKILL_LIGHTNING_WALL); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/atmage_throw.nut", "Throw", STATE_THROW, -1); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/atmage_buff.nut", "Buff", STATE_BUFF, -1); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/MultiShot/MultiShot.nut", "MultiShot", STATE_MULTI_SHOT, SKILL_MULTI_SHOT); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/IceOrbEx/IceOrbEx.nut", "IceOrbEx", STATE_ICE_ORB_EX, SKILL_ICE_ORB_EX); +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/IceFieldEx/IceFieldEx.nut", "IceFieldEx", STATE_ICE_FIELD_EX, SKILL_ICE_FIELD_EX); + + +// 县溯诠骁 帼蝶搅 [陕撩晦] +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/ElementalBuster/ElementalBuster.nut", + "ElementalBuster", + STATE_ELEMENTAL_BUSTER, + SKILL_ELEMENTAL_BUSTER); + +// 县溯诠骁 帼蝶搅 [?卫粽 螃粽薛?] +local path = "Character/ATMage/ElementalBuster/po_ATElementalBusterExpBody.nut"; +IRDSQRCharacter.pushPassiveObj(path, 24290); +IRDSQRCharacter.pushPassiveObj(path, 24291); +IRDSQRCharacter.pushPassiveObj(path, 24292); +IRDSQRCharacter.pushPassiveObj(path, 24293); +IRDSQRCharacter.pushPassiveObj(path, 24294); +IRDSQRCharacter.pushPassiveObj(path, 24295); +IRDSQRCharacter.pushPassiveObj(path, 24296); +IRDSQRCharacter.pushPassiveObj(path, 24297); +IRDSQRCharacter.pushPassiveObj(path, 24298); +IRDSQRCharacter.pushPassiveObj(path, 24299); +IRDSQRCharacter.pushPassiveObj(path, 24300); +IRDSQRCharacter.pushPassiveObj(path, 24301); + + + +// 钟抚?溯桧? +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/Concentrate/Concentrate.nut", + "Concentrate", + STATE_CONCENTRATE_EX, + SKILL_CONCENTRATE_EX); +path = "Character/ATMage/Concentrate/po_ATConcentrateExp.nut"; +IRDSQRCharacter.pushPassiveObj(path, 24284); // 钟抚?溯桧?(?撩) 蒙擎 ?嫦 螃粽薛? +IRDSQRCharacter.pushPassiveObj(path, 24285); // 钟抚?溯桧?(?撩) 赎 ?嫦 螃粽薛? +IRDSQRCharacter.pushPassiveObj(path, 24286); // 钟抚?溯桧?(?撩) 楼撩掘 螃粽薛? + + + + + +//****************************************************************************************** +// 蝶鉴妇湿 ?卫粽 螃粽薛? NUT?橾 煎萄 +//****************************************************************************************** +IRDSQRCharacter.pushPassiveObj("Character/ATMage/CrystalAttack/po_CrystalCore.nut", 24221); // 24221 `Character/Mage/CrystalCore.obj` // 陴彻饵 - 觼葬蝶骁横鸥 + +// 横? +IRDSQRCharacter.pushPassiveObj("Character/ATMage/WindStrike/po_wind_strike.nut", 24201); + +// 葆彻 掘羹 (?颤) +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24202); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24203); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24204); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24205); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24206); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24207); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24208); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24209); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24210); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24211); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24228); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24229); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24230); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24231); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24232); + + +// 翱楼 葆彻掘 妇湿 ?卫粽 螃粽薛? +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24266); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24267); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24268); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24269); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/Attack/po_magic_ball.nut", 24270); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24271); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24272); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24273); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24274); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/JumpAttack/po_magic_ball.nut", 24275); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24276); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24277); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24278); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24279); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MultiShot/po_magic_ball.nut", 24280); + +// ?桧横煎萄 +IRDSQRCharacter.pushPassiveObj("Character/ATMage/FireRoad/po_fire_road.nut", 24212); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/FireRoad/po_fire_road.nut", 24213); + +// 橡挤?? +IRDSQRCharacter.pushPassiveObj("Character/ATMage/PieceOfIce/po_ATPieceOfIce.nut", 24223); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/PieceOfIce/po_ATPieceOfIceCore.nut", 24224); + +// ?炀碳 +IRDSQRCharacter.pushPassiveObj("Character/ATMage/HolongLight/po_ATHolongLight.nut", 24222); + +// 嬴桧蝶 缣横葬横 +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceArea/po_IceArea.nut", 24225); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceArea/po_IceAreaIceRain.nut", 24226); + +// 衙霜 议凯 +IRDSQRCharacter.pushPassiveObj("Character/ATMage/MagicCannon/po_MagicCannon.nut", 24227); + +// 彩盟? +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceChakram/po_ATIceChakramLarge.nut", 24234); + + +// ?撩 : 嬴桧蝶 螃粽 +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceOrbEx/po_ATIceOrbEx.nut", 24235); // 陴彻饵 : ?撩 嬴桧蝶 螃粽 (掘羹) +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceOrbEx/po_ATIceOrbExPrickle.nut", 24236); // 陴彻饵 : ?撩 嬴桧蝶 螃粽 (陛卫) + +// ?撩 : 嬴桧蝶 ?萄 +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceFieldEx/po_ATIceFieldEx.nut", 24237); // 陴彻饵 : ?撩 嬴桧蝶 ?萄 + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/ChainLightning/ChainLightning.nut", "ChainLightning", STATE_CHAINLIGHTNING, SKILL_ATCHAINLIGHTNING); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ChainLightning/po_ATChainLightning.nut", 24241); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ChainLightning/po_ATChainLightningTarget.nut", 24242); + + + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/IceRoad/IceRoad.nut", "IceRoad", STATE_ICEROAD, SKILL_ICEROAD); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceRoad/po_ATIceRoad.nut", 24243); + + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/FlameCircle/FlameCircle.nut", "FlameCircle", STATE_FLAMECIRCLE, SKILL_FLAMECIRCLE); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/FlameCircle/po_ATFlameCircle.nut", 24244); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/BlueDragonWill/BlueDragonWill.nut", "BlueDragonWill", STATE_BLUEDRAGONWILL, SKILL_BLUEDRAGONWILL); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/BlueDragonWill/po_ATBlueDragonWillExp.nut", 24245); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/BlueDragonWill/po_ATBlueDragonWillSub.nut", 24246); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/FrozenLand/FrozenLand.nut", "FrozenLand", STATE_FROZENLAND, SKILL_FROZENLAND); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/FrozenLand/po_ATFrozenLandMagicCircle.nut", 24247); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/FrozenLand/po_ATFrozenLandPole.nut", 24248); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/FrozenLand/po_ATFrozenLandExp.nut", 24249); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/BrokenArrow/BrokenArrow.nut", "BrokenArrow", STATE_BROKENARROW, SKILL_BROKENARROW); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/BrokenArrow/po_ATBrokenArrow.nut", 24250); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/Teleport/Teleport.nut", "Teleport", STATE_TELEPORT, SKILL_TELEPORT); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/FallenBlossoms/FallenBlossoms.nut", "FallenBlossoms", STATE_FALLENBLOSSOMS, SKILL_FALLENBLOSSOMS); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/TurnWindmill/TurnWindmill.nut", "TurnWindmill", STATE_TURNWINDMILL, SKILL_TURNWINDMILL); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/TurnWindmill/po_ATTurnWidmill.nut", 24251); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/DarknessMantle/DarknessMantle.nut", "DarknessMantle", STATE_DARKNESSMANTLE, SKILL_DARKNESSMANTLE); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/DarknessMantle/po_ATDarknessMantle.nut", 24252); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/DarknessMantle/po_ATDarknessMantleExp.nut", 24253); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/WaterCannon/po_ATWaterCannon.nut", 24217); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/ManaBurst/ManaBurst.nut", "ManaBurst", STATE_MANABURST, SKILL_MANABURST); + + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/LightningWall/po_LightningWall.nut", 24218); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/FirePillar/FirePillar.nut", "FirePillar", STATE_FIREPILLAR, SKILL_FIREPILLAR); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/FirePillar/po_ATFirePillar.nut", 24254); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/IceMan/IceMan.nut", "IceMan", STATE_ICEMAN, SKILL_ICEMAN); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceMan/po_ATIceManMagicCircle.nut", 24255); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/FirePillar/po_ATFirePillar.nut", 24254); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ElementalRain/po_ElementalRainBigBall.nut", 24219); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ElementalRain/po_ElementalRainBigBallExp.nut", 24220); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ElementalRain/po_ElementalRainCreator.nut", 24233); + + + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/DieHard/DieHard.nut", "DieHard", STATE_DIEHARD, SKILL_DIEHARD); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/WaterCannon/po_ATWaterCannonExp.nut", 24256); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/IceChakram/IceChakram.nut", "IceChakram", STATE_ICECHAKRAM, SKILL_ICECHAKRAM); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceChakram/po_ATIceChakramSmallMgr.nut", 24257); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/IceChakram/po_ATIceChakramSmallIceRing.nut", 24258); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/TundraSoul/po_ATTundraSoulFrozen.nut", 24259); + +IRDSQRCharacter.pushState(ENUM_CHARACTERJOB_AT_MAGE, "Character/ATMage/ElementalStrikeEx/ElementalStrikeEx.nut", "ElementalStrikeEx", STATE_ELEMENTAL_STRIKE_EX, SKILL_ELEMENTAL_STRIKE_EX); + +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ElementalStrikeEx/po_ATElementalStrikeEx.nut", 24310); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ElementalStrikeEx/po_ATElementalStrikeEx.nut", 24311); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ElementalStrikeEx/po_ATElementalStrikeEx.nut", 24312); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ElementalStrikeEx/po_ATElementalStrikeEx.nut", 24313); +IRDSQRCharacter.pushPassiveObj("Character/ATMage/ElementalStrikeEx/po_ATElementalStrikeEx.nut", 24314); + +for (local i = 0; i< ENUM_CHARACTERJOB_MAX; i += 1) { + IRDSQRCharacter.pushState(i, "Character/Common/Burster/Burster.nut", "Burster", STATE_BURSTER, SKILL_BURSTER); +} \ No newline at end of file diff --git a/character/avenger_load_state.nut b/character/avenger_load_state.nut new file mode 100644 index 0000000000000000000000000000000000000000..300a9b147ed0fbbd24d21a06000783944977e4cc GIT binary patch literal 4052 zcmb`K-A>y`6vw%xQr}^eE06*qK)<#Zk(D?kBE)IzwA{IFG7y&}_Sz0`*$UBamzF}i z?Y7;8LMdenrP6NMRVAqQY3w*}u`_Wz<9sYK4T@xCjy?YW&Y9zLW}<0k9#&?dHmp|l zBA?e})riX_s1F39MM;zL2Gl|sO@_J=lAI^SB9sbfLZxa12Csuq2v~pYTVL1g%`X7h z8~@mQC-(YI1eo`i%!3c+!((6`{DOw7yXZOl=|@mMIj$`o24SUIt{=Pt_TS6a(cf5rNJ!+iW2Jps&5N7l}Y z2i@F#SO2mBA_xswpPyS>FRh*9;o*xH&c>xmx-QQ{QJ<4bB~fieu1SYq)$uZn*d^Ay zDp&GV14X|vIS2weu>^vE7Z`yR`Ajk$%?SdVMV85AD&?^ZUiT|igoRmHRAybFL~~4J z5^QXOO>h&gh&%Q#k(E`Idg6@8>$AyBhI-(P{J(le(v7k*4_$h9OkN*ncwvgW$-4CJ z*hyV;HVHEX!nt#El#?NrW2~v0(z(KfiL!0#d5T z6|z9YK*X4vYO8SWNZWiBqpnCxVl<#{)$J8rZW z=IvUp4#H0(5LT=hpsU>{K90UN&%tVB>H9?T)Z`8m@BZ?rpr0iPRq)S!>HK6Rj zVNBCc_k>Tj(I-_qd{q0kjw5PrAEJduaRpAH4EGkvPV7++_9cpa>2&PTGh&aPH};qZ z`!dD8d^+~n8L`KDO_R316qU7n$=w9ubiG2+uXI80KD}GUG)@X%tv7pU>;BZ*TIns` zZMuxs`qf>f)K|}y8bs;`A9{^>fwVi-lO)$D^R+I_v?Hora|AB7^}7fj6m&C#hz z>~ocLy*@2o^J-I*)K*I~>*|s=GCcIj@K7RnPxTm_Y+1CHlnML45)7@>XtPPpO0{j- zj%FnRY9Nl*QY~%DQa|Ew!RtX#sabMV%Rxl(crdh_S?5^ra1bQj7D(*jAV@;3d9@W$ z65bAmnRXntc6I?AVhZC$TXx01G(3cVu?WjG8d}X67+ZW;2G*96*=5yIYY;t3mIafN zHua{8QLALy7*+GMt|?XaSTQJVRjM$rVp6NA8Y$J(lOxA^gdJaE+M=ejpEVjdF}_G# z=g=vAP1R)zy&=63>>u1O2}^U@mWetf;A_yDY7kmIL*605xYUy7a4$(rSr~^nFbWZH z_eQs!=A2Lsy)HFW!`9gN$QqzSWS#RkupD11?WcxWvq7a1T%947b;uhC2pC+>wyj}f z901!am^h<3o#QR7sp=*!C{{j91O!KISvvZQ@Nr_$TS+o1TFPQ|y+I_@wprKBr3}3w6WuO3?b=x| zAqvnL!aZbyF^WRAUTk`6&)t=)-k(>!mCv`Y-Xz|g%kHC>-m}eAis6t@5O5`r+R%YK z#A=Y6H0u1bb(SstBa5i#FB|)wZ)Ey z#&BxN2D`N_O!KIfFsV$K)`!WsOnB32ZbnW31bSzDbim4_ka-_=LV0l^$F@KrKes58 zAn%0cg=s7mzjpKSJYA>tC9RkB{6zod0f1eNIJ!q8MsNpNF-ReiYCDMK zg!}4M_iO^3HMsWRDEMG%-EZ{?*4cmUd6n$%SCY+e{&IITaA`m`-uWQQ|k7l0F%e3@iG2q2ov-Z%v@n8}|aOcZs-dFdr-(9^96@F{;n!EWFYX0`- zBeHe#M{jM_{oxkWe5m)Zh6q1#Tr8c{4TH-Db)CJT1TraoFgrI_$s8}1%DE!bGo0I+ zHJuY$EtocA(5h3wC!cTw`*yFJm%Ux_v^pnbVg`T zwy!^RH-6h*djLw4NwCgj4~1?0W8}yn6%rUY%Frf=H>Emi33{ZcJ)jhW6Szwf4QdgI zZ&~CVW5n&+a11A z6x7mB=PgEjFeR`I6p0IJBS!=XByXpD^5!eam`>0gaJxu1@mxe!b~&ggQ^uR7f@xe7a1?9F-dK81*T@)oiV{2g zyhPsxEg6=6wHeWi|*5Mp$1k4q)MNz};6*Tb+o$gJZ;kVQZ+?w*M#)@c3nQg}> zw8Dp2Pd6UBFIK#Je~_Kq-?`uXLfjXt-ujAr=V!8WWdkby_Cw&>!M)DzSG=8$27V^4 P 100) + { + sq_flashScreen(obj, castTime - 100, 100, 0, 150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + } + } + + sq_StartDrawCastGauge(obj, startTime, true); +} + + +function onProc_Burster(obj) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + local sq_var = obj.getVar(); + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); +} + + +function onEndCurrentAni_Burster(obj) +{ + if(!obj) + return; + + if(obj.sq_IsMyControlObject()) + { + obj.sq_SetShake(obj, 3, 250); + } + + local skill_level = sq_GetSkillLevel(obj, SKILL_BURSTER); + + // 酝犒肾贼 寰肾晦 阳侥缣.. 棻卫 椭朝棻.. + local appendage = obj.GetSquirrelAppendage("Character/Common/Burster/ap_Common_Burster.nut"); + + if(appendage) + { + // 毡棻贼 晦襄 横?蛤虽 饷薯 + local spectrumAppendage = appendage.sq_GetOcularSpectrum("ocularSpectrum"); + + if(spectrumAppendage) + spectrumAppendage.endCreateSpectrum(); + + appendage.sq_DeleteAppendages(); + CNSquirrelAppendage.sq_RemoveAppendage(obj, "Character/Common/Burster/ap_Common_Burster.nut"); + } + + appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BURSTER, false, + "Character/Common/Burster/ap_Common_Burster.nut", false); + + // (0) 虽楼卫除 + local change_time = sq_GetLevelData(obj, SKILL_BURSTER, 0, skill_level); + + print(" burst mode valid time:" + change_time); + appendage.sq_SetValidTime(change_time); // 横?蛤虽 颤歜 撮? + + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BURSTER, skill_level); + + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + + + // 酝犒肾贼 寰肾晦 阳侥缣.. 棻卫 椭朝棻.. + appendage = obj.GetSquirrelAppendage("Character/Common/Burster/ap_Common_Burster.nut"); + + // 桧楼 马模 + if(appendage) + { + local change_appendage = appendage.sq_getChangeStatus("burstChangeStatus"); + + local value = sq_GetLevelData(obj, SKILL_BURSTER, 1, skill_level); // (1) 奢问 楼紫(+) + + if(!change_appendage) + change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, change_time, + CHANGE_STATUS_TYPE_ATTACK_SPEED, + false, value, APID_COMMON); + + if(change_appendage) { + local atk_spd = sq_GetLevelData(obj, SKILL_BURSTER, 1, skill_level); // (1) 奢问 楼紫(+) + local mov_spd = sq_GetLevelData(obj, SKILL_BURSTER, 2, skill_level); // (2) 桧翕 楼紫(+) + local cast_spd = sq_GetLevelData(obj, SKILL_BURSTER, 3, skill_level); // (3) 议蝶? 楼紫(+) + + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, atk_spd.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, mov_spd.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, cast_spd.tofloat()); + } + } + + + + if (obj.isMyControlObject()) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } +} + + +function onAttack_Burster(obj, damager, boundingBox, isStuck) +{ + if(!obj) return; + +} + \ No newline at end of file diff --git a/character/common/common_header.nut b/character/common/common_header.nut new file mode 100644 index 0000000000000000000000000000000000000000..7ae31076081719bdb07b6cbf6ec28489f130f8c2 GIT binary patch literal 1457 zcmZ{kUvJV-7{vlnm8G0e?UL|B(;+SN~;-X|@ zxXpy-(PPIqx}Svk3QY?62qeq>b?Kh{NA{Zuhq{ z?t|XLU%JRSJawAi5s2>1*zNQ=r`2}Pj*E(xNDEJ$ zj7QMnVfFRiE9BnaPtHD12A}Nx5yG7zzUXjtm2S_uJjXvy@WmXh_ zGmYwvokkVef5z||e{7M`;1yKgeOas7*ZX+*7dbJj^gVVhpW5b)^3IEDR@kdIs&5wR zyR~hy9_cdcs+S~Lj@yCaV6Ca0PzkY85etT@Sx;oXXfY%L6V+H6E2`y)mWyhOL|cq% zOGI0WYRg1hru$ctEwYDF!IBiilGdLG2K0I4`$#~(odo2&NCj;m|SUht8xod0m$(qAEPK zbW@7IONq5K2@9txkSHjeAfpUr`y~y(^(Sy8lkCSaz=&2jhf|(4qr+G)<_`Mrkvg4 z^s&SXUoQmf*!KkG0wLA%f^bEvd*|e!>FV&=UFi zKX$)w!m1PPN=PHJh7w3{1}xe$umto3JWa=>O=8-D%#zR?1+qf9-eAI5fy^APm5fSp zK3^&ug@wg(HG>G!)p85VlsDK2|E5v6ldsGbjfHY%hU9XjyYb`n(;n%rfAn?_{C9uJ z>G2=`>ygYV-1mR2`>$V|Z14L&k8~Y2v94aouqrV3_cy%XTN2d!vT^eAka(Z>z1=_ah2%xj2C0OE#7E2|o!b{$=Dg;Ua zl7#52ftrvJhKnJ3VgM)1L;9i?K)9ena{6Yc`*s^vpmL>DDSUF%-#kD=l>He1xiPDf z#3LY2_E2F)PG6Qx$@oJZLb}gnGq&TPBcNj9(1HJ8vPGug$bmj!yhW!Q88+LTrH3(X z!@0f-_Y=q{GlK^b9;swG^kTO16An8y5zQu}+`t3Pdy_HfrrK_I+~ongVF;YE$`sOw zTgn!JDRM24*q|zz8(V>dtBkh*V0sD@N(db$4^#qIy#Pgq7FjYmEg2R%XJAvZT|uE- z8DK#B+kA{G`VuKna)@1wjy?2RzN~D{Yjeb= maxCnt) + { + appendage.sq_var.set_vector(l_CHARGE_ON, 0); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0); + appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0); + } + } + +} + + +function onStart_appendage_creator_flame(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + local sq_var = appendage.sq_var; + sq_var.clear_timer_vector(); + sq_var.push_timer_vector(); + + local t = sq_var.get_timer_vector(0); + + if (t) + { + local eventTerm = 10; + t.setParameter(eventTerm, -1); + t.resetInstant(0); + } +} + + +function prepareDraw_appendage_creator_flame(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + + + + +function onEnd_appendage_creator_flame(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + + +function isEnd_appendage_creator_flame(appendage) +{ + if(!appendage) return false; + + local T = appendage.getTimer().Get(); + + return false; +} \ No newline at end of file diff --git a/character/creatormage/ap_creatormage_guardian.nut b/character/creatormage/ap_creatormage_guardian.nut new file mode 100644 index 0000000000000000000000000000000000000000..9f2677e9a322673e27263ae1f657fe176bfe8262 GIT binary patch literal 2567 zcmcIl-)j>=5bkRN`5)FiT{KPFS4));W6eWTiK+N@td~uClI+FJrdFgNXzP<8C5Fp6fm zu$U{B%>2@FsggnjRyvuNV$U|gBUg!GsBl9cr->boqQ8?OSu$wd&wV!A5;m7c zlJv$Bv6TGe^(49Gdn!V`boWzkb%bDCs+@tsp{mQ=t~sK4pFu3Pd}>5Er8N&#zO+6F zH34ja1goPs6t{D&6VXJtbpR*e5sr(19Ld?+-R`>`Sb^NNWK{={o8HzThJyO<1CSf@ znk4puYVnc!47FjJ%&7B6Is|p^>t|xeVV$7Q#OVY7{)`LF!|~I7$e;_)IWlU>IS(I2 zR1O_}7p^OiQ)&)78y=-;HU1*D>JyGVJsYhCqr$|-7QGqir&DjYI_;GqyTK7SZ?!4V zh+3)~fhiVSVrBiP6gRdCgey!m0bq6p3B@E%AczF6ehHEcEYf6pR+U(01OuBQZ%Yc{ zsso1Pza=KQu`jU(S`d*-(&3{o>C2*XUY_Hw_;F0s?MrI3(PmgVcvMlN(-#DB?&bm0 K0q^yxsj2^n_+q*M literal 0 HcmV?d00001 diff --git a/character/creatormage/ap_creatormage_ice.nut b/character/creatormage/ap_creatormage_ice.nut new file mode 100644 index 0000000000000000000000000000000000000000..4efd512acdffdbcd07cdfb05f6b44f85dc71a864 GIT binary patch literal 2467 zcmcIlU279T6zyvY`43~CHj<|8bEy(yta)fEF%{pIaWk8)B(rfcsfrW?ZF~|0r67LL zQqfW=RZvh``)|74{0r~hnQV5GG%1zREt%c9bMD7E_fB#$34eBrThehkX+AWwmC8;1 zTBLPm&_;vt3azqKa`I_%G7-LKh8RyZglkQuN$_iirlutrm98)yi%kK}SP<5rg541G zk-`dJFAVAOJCX{CaC-S4PDV9@+ppH7t+$t4SHs*ZI%-zbC7W3wEF*Q$SW=N;~1=%Tb`Sh_f63|b zAOGu-iYnaqe{J}$Uz}|3`#+B|8Q8?Ux-P@4z}(+&d%w37sQ0CP^74>)pZC4pJ^%ZA z@7Z(h4nLo~`quey>}_p&JBNs<^N>zGo&zLbhHt`1WfqwhSYG=(-n*1qdo6PeWlC0e$5$ z{1u`Jsak01sN<@7J-Cc??V3xWZsaO443%!=<1}%iS@d>NWQO!x_iC?wwuE3@s_a3l zz|RVIY**CpGO%#u6C;M6)`*ITG_k^%!LP$5t0K+H%Rm#v*o`&;;DmAXA_Oghu*m6~ zozB~BSb=c0_>`8(b${~!b%09l0g!78I!IKtYSxiTi!@Z4%qssQ4}=W%lyL5Y!!)gZ z;v9khU{FPd+Q^waWLias6&W?E-1`q=QiV3X4Oa`t4#oC_M~Otuu$Zm-gtJQzIIG5} zFtIyDchCiu)Z2|#b9KmW=mLkPHiawIKb0!G+-HZWwU(<(a+=l}-}V3@&8;-J~f2qqblf8t8j) zb9(8$jLNeTuG5MS@6AKoK27TmPFR95s9HE;#poxaB<=Mt;=))hiaS2OnU6;Q2S99S2C)3^$@Rc%E1VFjogCeS#{fi8@OCktyUB?_0v zG-{JFr1BRzzeze--lpU#9x^8u-Px**A3c~bnp;`;pa1#>>9v5K>(@7a&y%70h;Hwz zp= maxCnt) + { + appendage.sq_var.set_vector(l_CHARGE_ON, 0); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0); + appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0); + + } + } + +} + + +function onStart_appendage_creator_wind(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); + + local sq_var = appendage.sq_var; + sq_var.clear_timer_vector(); + sq_var.push_timer_vector(); + + local t = sq_var.get_timer_vector(0); + + if (t) + { + local eventTerm = 10; + t.setParameter(eventTerm, -1); + t.resetInstant(0); + } + +} + + +function prepareDraw_appendage_creator_wind(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + + + + +function onEnd_appendage_creator_wind(appendage) +{ + if(!appendage) { + return; + } + + local obj = appendage.getParent(); +} + + +function isEnd_appendage_creator_wind(appendage) +{ + if(!appendage) return false; + + local T = appendage.getTimer().Get(); + + return false; +} \ No newline at end of file diff --git a/character/creatormage/creatordisturb/creatordisturb.nut b/character/creatormage/creatordisturb/creatordisturb.nut new file mode 100644 index 0000000000000000000000000000000000000000..0748eeb199f240ce2c9abc44acb87d8a2f632750 GIT binary patch literal 4173 zcmcgvZEw?76yDcV>VLT7lPiT#&_0b-QJMr4^(B#=Fv>JVPI6O19XqofphA;2pxY2{ z0|s4L%i5u?qo}PW3fgFaKeIT_zt}nVUdMInY*ecz^+R)Co^#G~o^#Ii;DAyXEh_m$ zK3z=8=|ny&r!q>uAdeP@BcB{4!-E5Z1J$Npwrhq?%I9f$CViQfo3>igs4`R2v|`ev zs%@C5nq@c5l4O)F3=Ixk861ezs?vw}iDZ(FNhw^o1Y%x^m1-EGg^A?+vY zad+;Pv;4?;x)TFT%_yrHv1c2UjF4$+3%{6?imlq*-HcwLmzk5?lUkKX{LTmw1QhdA zxpYy`0I@_cn27bSh*5I%_z<8*B8HyOwB&i!oTkEy33ZyDR-4n*GaZTauoC$and!z+ zDmE=@A;Az0uo$zxC}ymJ#iNjvvCQ~*PsY$T+{cLg+g<-X4Bb9M%XU(uswoL?1v=l! zHLdefe^CsbB#=C-S+bB)=l*7#1;Vto0BnEEw( zk?u(m9>w)>T<)7CEDd2}M39ll=M%}XZni|QUec^UXnk-oF|Btm+dn>c-rR2QK6Spj z<}5BjIjt?aORqXNw%vuh#NGJSU7UAT)<|dJCujL)Toe#-?=Luuubp?xAH(_1;*<8Z z4f5HE;o~P_!ym;?41ey6FwB=xIXjk~OvrNfQq4R$NK2JLT_A?cY7;@1FB^g-L)rgGCxEW3d)5vIsah zdeq%+K*f5yeo+6g4fqYSrrXjH!jllv{*UldgrnF`JVM9_=(X>_=&Bcl2)%iSclFk{ zJEZmI0d(os(qq!vTz6itcCP>FH}3apt)aac(~h&meL3geyhYr#UFY={XxsUI&Uw5> zxP8+3=64tt%#GX6LFS(1@$!3hY77T~Hx~CpcIKAcg*SU4aZvPa{n5}N6BS}a4SQJb zCY}y7T&N3}E`4TWM0EGEYO!9@1xShooXz3aqlArO*424oaBozPY#*yP3xK)z2J|&E zXgx(S)6Kfn1q+;SP+E~;)S?CNZp=2SnxWd#5IIJ?aQsD97T6+yAJJoLWd(sUdexAW zTsocNj~u28_8a03UB=Y&oimB?0z8Y-rxJznym!23(ek_n!n}Vm8bm>7Fo2Y)UP8vZ z&mlPL1?Im3_#LwN6iI>U0QG(JHL7XMR5|?EMl6 zzBTtt1o8r^wZop1QJr2Yf^==l4S8wsK6tq9LH2;LPxKgGZ(xb4O-)g-p$3_;zK#;@B&lpW_hL`p)Ar~JO6_PRE( literal 0 HcmV?d00001 diff --git a/character/creatormage/creatorflame/creatorflame.nut b/character/creatormage/creatorflame/creatorflame.nut new file mode 100644 index 0000000000000000000000000000000000000000..b9e9a75a01ddc70a308505e76df34bba8488c0f0 GIT binary patch literal 4089 zcmcInZEw?76yDcV>VLT7lPj4J&_0b-k(;Ls!VHShXU2N`507yA9h!72R;~ak_Qn2>NG#!+UTCH6JdtUo3lT``-O$ z-XGho%^N7$+}SJC*N?+2~lDg zIgTJ{PNV1$D!uz#Ng65xkjiBhyOiX-UYf}RC zC|S>v<%sMM2e^e%PJ~n_NU4cVmUy5+vYb#@15rsrnr~mWetzz~zTMh?>V0#~TUv(l zSzq#(U$t-S_=|UuzxlhrwBW6-qxRx2-pb7+FBs(CU-XuCy|*i$!}<2olh(CO^yRU{ z(PQz%XYpf+ue!n;D?ub=K!BB36 zY7N`K&J`fPr;`wQbW_458A=@yx@D&UPhg-ZLEWV6@^q<71AN`CnyzpNMP%R*rG_+*fC)4TB8`{|9l?V7paJi(*4_Mm4>eyufL7dG zevF!18{Y0(`}*JA?)*+2bU*_pxsHJ;|K+@Y^A_^g_r2Y1khAyWy!Ut=G3%)P-JdWI zs1vuJgR%palgsbaj!7^Ccyp;AvOT}-FTOqqNv1($e-{VL5s~XJ5Le#N=Txgn`aIZ5N&EDZW7F{GiJsqSKW&Y$|>Zqz5c_k$UL|#Dh1WaoJ(pX-sn4s0kgg(D^#X zWd$ZEu@KyiyH>@pbXOQbM^F$fnEZ=uzaN`NwE#S+xKET`FC@u1dz7%ON8&v`v%Sifpy0_*oA2j z9td?C*L52cfWC>q8b93XZ~eV6mYKJ$(uX6YEc3%aWV76@)(EHp@sLr*ql{Ob$vN=D zwJjr8JP#v47#TrVNYdEzfJlLlT3$Qh=?7zgy?2AzMzu!`yk~dkdW(A5!CUTR8dO6+ z8+x8}^qo%)(|m`MZkZE!Zrp}%1^8f?>0?Q(z$$&CM=9XoXGHkP*e?vo2x!#pe-(-* zzNCRnUChh`2?)MbfM*~LBn}9D0%sM_8JpPI6O19Xt31sL-Sh=r+XL zfI(N*vUaHJC~B*Tf;L*<&n%AfFLuuLby5e1w^fs7_1+kEp zllin*$mU0jVm_4-C*^qL^Ft&)I50R+wY9QU(=}2)P0KUs3$$!oN=c>COifkgq(K!+ zH%4v6sMHiq&`W2A1_v$<4n%5I;S>Bt3~JeiMyiTx(qo7iIeeJ>v%Buxy-Aw)=G#w~ zoYh_D&SU3~t=7g>l4$PSCC>8|;@sMHuiSRGcZu`(Rde;*=IU?l`Az4CTdld9r1fw; z;m%!mmhU@{c4C03>SaYG)@*~4VKPlE?ilk@vJ}hnH=|YP1?HsZNv%o*@10@7DUb_O zxwPyP0l`Etnuz&M$S65@>hFU_XyrRT=oXcmj`AlI-E=uWq zlvsvMJ(oB+_y8FNZX)onhcd=kP@YM>URShAT0@0?ggDWPrz93#m-|s36{DbARZi?|!VyNmPA${J}e{NgNMOYk}(?wti^@rCnx`7^lRUVPZP zyg|M^8b5M07XLJMH2zgrieb)-m@8(QASX-qF9O< zt(kcWRamIisR0~eRrd54lu9=@T%my+qV#nm1$cr7O5)5@#xc*EWS5wL1z+QM17LX` zBuj5h=;vrq2@Tym$t^+iIhoT*mq}(%f8kUaYpS{M~Kg@6}_&yEJAV$BO%G&b@Y>xNE!4i!IQ%^W&WJ zV2yYVkoI?f!rWkf+;{>~_hpYSzgN%3co2AF@lD9~+>*QSaxWx~jJ`u48a{8LT#%?^ zUvW8AnU!=~s|W}4(DUV7K3hm93z_U>H#`1asHUWC7*w-FtyWiXa0|(zRLD-q;$%in zic-OwZCuohw9QRu4G9dXwGF&nBJS3e=E?^22Ke2&{3~&;-iChQa~!x1mx%M%eDkNL z?xj~StfK^*&hmYCYX$j#u*qQoiQglExxLqc=Dl@z2Ux_*i6-Xg5=jI#!n<>)!9wA{ zXdDgnT&N3}F#Sekgm?I|VzOq^K}hlkIHUW#A0=!iv)1lahUbsslidaD%>sb#eFHk1 z5j3Bom}k2#bie}l8|8C6EtE#S8!Vo!3{CK(#Syf<@0ET#*t(7GN%4k(x zkaFpC%3F7sF4%7fJoGUpKjIyo5XXyYIh8&x7RL+z{ho)W?=CRr|JMtLDH|QaAX0{M z9%=9FMsVE^Ztp&T*5MCkM{s;J4BAi(iZEgG0~*mqz7qwOQP$9dNV=9Y^zy!dBz5gS zM+oq@?A3=I)r#NR$qAV33B%j+sQG+}yp3$#BH zSqkCy#|#55#C|IxY=o03P!pR%J&Pgxc3`$y(t0yDMrV&3N}V28mFY09qE$FxtA9U1 z?EN|k?w-Ah(=|v9Xx9o|FQXbgFN1RAfQ4`?4C-cUY<*Bh8vwWz@>H{2ex)ptQ+ znR>VKM`%?ysAyTRvWN0lQR?skV?;|hg=*ULh<*XqG0C#aGyND1EwTT@1X8xYc1WBB k<9~h}2@TETFvW-pt<8 literal 0 HcmV?d00001 diff --git a/character/creatormage/creatorice/creatorice.nut b/character/creatormage/creatorice/creatorice.nut new file mode 100644 index 0000000000000000000000000000000000000000..834de0bb01f23e847aefc86c737d5ebc956ec8a2 GIT binary patch literal 4045 zcmcInZEw?76y|Fx^*`M4$(2F~XrIQa$V~!@+L9Ik2hgNma$+|`UxrWcu$+>>gBNc_$y5rM0P>0DZc@F9)} z1`@H~Xe~+(9T@?Ok%(!?x}H3%Su<34FsaSZ6Ix@2W5W)G5Q%)nP~j02)rL)Ngcafd z{9^W(YQ~HG)o;R%%LdZE4h3II8~Tdr<8O)N*t>}xg!D# zTtI99iU|CL5MlrYIhZtSHO(le4W!|_F%Tc%V6&LIIG+%)FpRo~7{_&bp7x{!kK+0S zE)UEK7J#rnDnO761vxq1$&LupPm&!7X@E^kMDz9Y)=y8}mp5B`kKM1YxJ%1WFzZX+ z@}KQ%JKo}L;%)xsEiJgK>!iK-v%7LVAxeaJcNg8I7w+qoPvCre=~3&-Ci(nm{K(N* z{Nvcs_!nKW4f10wpB+!1l=J!QXDn~QJc;ZD(_|VxH$v%&GFYNz&C%>=)y`8WutK#) zEkNcHz#dW#q(wIwf{1~nA-PQ}1@w0H?5<#f)pdHHbm!0vQ+ce;P~On3K;zbl>ubEmKvVYqC=^)_=2#NYZUUqN{HNyvki~>gowtx;>fqbC2yIiZA-|dp-%X^@` z&Eb!$;60!BuHPWu`kwn@8@TNLFz-HGC;V;F{`L=$ zf9Ar?r$B3;;&}P3^cO=x!<$R}CfoDN-r~z%lPLfD3VO7!ZA1n6kh4C!a=JFBm<^*W z9n6DxLwA`@W+zhJT=)l}Vv-HZqJ|?I)tZJaS4vJPh3up%pUhxaQuA4m5YAl&)z%gi ze*yz(?Eo5=iMM^Vxw;9}55HSiej)C)J5cdHvVr4ph`4_(G=F^NU48|fHcC)dRvviU ztBCr;EnyZciE|{-bbB3W-rs;bfE^xAG%+)mNg_xJp}HO6g!+K?b|RpqK!0c&1KM0f zh;~V{nOt-(C&dEx_5Q0-!n!FFYR-M`h2{g?wG&1j?DgIN*|LH!rzj@2QIk5x0_W?L zmh;dx@df{G%rPsvsX5XJIZXUex{Is=PyqlJA)nQff`&3i#gvp>I-TMZN>Ww|D*FvF z4_wBSNBGt$d15N9rqajdsfmJrKD222?gC=|zdRg9WpoIGNLktiM7%T8z;Qpgp2iNn zAlMG-7OiU*#p|Jd01|UaOfi9xk&!%T#58i2S$g05Nz-^A6KSK|Ez*I8_Gw|FvBj$P zH9GYcnB)q7_(UbNGIF@BLH=j)!4RnFiznSm}f( zz^Fkls6b1H@<#?G1PBec`{;~8g~O364z)x%_C3X(*>{>@S$Q+9$7sd0sO&f}Mu!0_ zYc=?Wu%bomAXQ^#%)AI=lj1Z=v-?3fuyp=s>xj_@dxFGS2>yq_k%0km&{7PZFlZWs a@&lmu_U7L$83@;hw2cZnJapi|fqwz;>UU-U literal 0 HcmV?d00001 diff --git a/character/creatormage/creatormage_common.nut b/character/creatormage/creatormage_common.nut new file mode 100644 index 0000000..d7c2ab5 --- /dev/null +++ b/character/creatormage/creatormage_common.nut @@ -0,0 +1,2015 @@ + +// 褐叙 议葛搅 - ?煎餍颤殓 蒙机 +// ?营煎怃 议葛搅 霜机 舱侥赀击 宪 热 桡朝 妇啗煎 罹彻饵蒂 渠鼻戏煎 蒙机击 ?艘蝗栖棻. +// 渡碟除 Thief陛 褐叙 议葛搅 - 葆办蝶夔?煤 霜机桧塭坚 除舆?栖棻. +// ?? Thief陛 嬴棋 褐叙 霜机 舱侥赀戏煎 夥绂横捡 ?栖棻. +// 寿缣 舆戮侥缣 Master塭坚 赀芦肾朝匙擎 夔?煤 肾朝 螃粽薛?菟暧 MainCharacter殓栖棻. + + +// 觼葬缣桧搅 瞪瘫鼻?樯虽 羹觼?朝 ?热殓栖棻. +function IsInBattleCreator(obj) +{ + if (!obj) + return false; + + if (!obj.isMyControlObject()) + return false; + + //print(" isInBattle:" + obj.isInBattle()); + + if (sq_GetCurrentModuleType() == MODULE_TYPE_SELECT_DUNGEON) + { + return false; + } + + if (sq_IsInBattle() && !sq_IsPauseTypeWorld(obj)) + { + if (!obj.isInActiveSkillBlockedMap()) + { // 挡?粽 蝶鉴击 噩 热 毡朝 裘樯虽 羹觼?栖棻. + if (obj.isInBattle()) + return true; + } + } + + return false; +} + +function lockMouse(obj) +{ + if (!obj) + return; + + if (sq_IsMyControlObject(obj) && sq_getJob(obj) == ENUM_CHARACTERJOB_CREATOR_MAGE) + { + sq_SetClipCursor(true); + setEnableBattleInUI(false); + obj.getVar("MouseLock").clear_vector(); + obj.getVar("MouseLock").push_vector(1); + + print(" lock mouse"); + } +} + +function unLockMouse(obj) +{ + if (!obj) + return; + + if (sq_IsMyControlObject(obj) && sq_getJob(obj) == ENUM_CHARACTERJOB_CREATOR_MAGE) + { + sq_SetClipCursor(false); + setEnableBattleInUI(true); + obj.getVar("MouseLock").clear_vector(); + obj.getVar("MouseLock").push_vector(0); + + print(" un lock mouse"); + } +} + + +function getCreatorTypeGaugeRate(obj) +{ + local appendage = getCreatorMageStateAppendage(obj); + + if (appendage) + { + local max_gaugeValue = appendage.sq_var.get_vector(I_MAX_COUNT); + local gaugeValue = appendage.sq_var.get_vector(I_REMAIN_COUNT); + + local rate = (gaugeValue.tofloat() * 100.0) / max_gaugeValue.tofloat(); + + return rate; + } + + return 0.0; +} + +function getCreatorTypeColor(obj, type) +{ + local rgb = sq_RGB(255,50,50); + switch (type) + { + case CREATOR_TYPE_FLAME: + rgb = sq_RGB(255,50,50); + break; + case CREATOR_TYPE_ICE: + rgb = sq_RGB(50,255,255); + break; + case CREATOR_TYPE_DISTURB: + rgb = sq_RGB(110,30,230); + break; + case CREATOR_TYPE_GUARDIAN: + rgb = sq_RGB(255,170,40); + break; + case CREATOR_TYPE_WIND: + rgb = sq_RGB(255,250,150); + break; + } + + return rgb; + +} + + +function getCreatorTypeAlphaColor(obj, type, alpha) +{ + local rgba = sq_RGBA(255,50,50,alpha); + switch (type) + { + case CREATOR_TYPE_FLAME: + rgba = sq_RGBA(255,50,50,alpha); + break; + case CREATOR_TYPE_ICE: + rgba = sq_RGBA(50,255,255,alpha); + break; + case CREATOR_TYPE_DISTURB: + rgba = sq_RGBA(110,30,230,alpha); + break; + case CREATOR_TYPE_GUARDIAN: + rgba = sq_RGBA(255,170,40,alpha); + break; + case CREATOR_TYPE_WIND: + rgba = sq_RGBA(255,250,150,alpha); + break; + } + + return rgba; + +} + + + + +// 觼葬缣桧搅暧 颤殓缣 评塭 楼撩横?蛤虽蒂 葬欐?栖棻. +function getCreatorMageAppendageByType(obj, type) +{ + local appendage = null; + local appendageName = null; + + switch (type) + { + case CREATOR_TYPE_FLAME: + appendageName = "Character/CreatorMage/ap_creatormage_flame.nut"; + break; + case CREATOR_TYPE_ICE: + appendageName = "Character/CreatorMage/ap_creatormage_ice.nut"; + break; + case CREATOR_TYPE_DISTURB: + appendageName = "Character/CreatorMage/ap_creatormage_disturb.nut"; + break; + case CREATOR_TYPE_GUARDIAN: + appendageName = "Character/CreatorMage/ap_creatormage_guardian.nut"; + break; + case CREATOR_TYPE_WIND: + appendageName = "Character/CreatorMage/ap_creatormage_wind.nut"; + break; + } + + if (appendageName != null) + appendage = CNSquirrelAppendage.sq_GetAppendage(obj,appendageName); + + return appendage; +} + +function getAniCreatorSkillOn(obj, type) +{ + if (!obj) + return null; + + local sq_var = obj.getVar(); + + local ani = null; + switch (type) + { + case CREATOR_TYPE_FLAME: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_fire", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_fire.ani"); + break; + case CREATOR_TYPE_ICE: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_ice", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_ice.ani"); + break; + case CREATOR_TYPE_DISTURB: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_defence", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_defence.ani"); + break; + case CREATOR_TYPE_GUARDIAN: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_block", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_block.ani"); + break; + case CREATOR_TYPE_WIND: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_wind", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_wind.ani"); + break; + } + + return ani; +} + + +function getAniCreatorSkillOff(obj, type) +{ + if (!obj) + return null; + + local sq_var = obj.getVar(); + + local ani = null; + switch (type) + { + case CREATOR_TYPE_FLAME: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_fire02", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_fire02.ani"); + break; + case CREATOR_TYPE_ICE: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_ice02", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_ice02.ani"); + break; + case CREATOR_TYPE_DISTURB: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_defence02", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_defence02.ani"); + break; + case CREATOR_TYPE_GUARDIAN: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_block02", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_block02.ani"); + break; + case CREATOR_TYPE_WIND: + ani = sq_var.GetAnimationMap("hud_skillicon_creator_wind02", "Character/Mage/CreatorAnimation/ui/hud_skillicon/hud_skillicon_creator_wind02.ani"); + break; + } + + if (ani) + { + + local rate = getCreatorTypeGaugeRate(obj); + + local currentFrameIndex = ani.GetCurrentFrameIndex(); + + if (rate < 50.0 && rate > 30.0) + { + if (currentFrameIndex > 3) + { + ani.setEnd(false); + ani.setCurrentFrameWithChildLayer(0); + } + } + else if (rate <= 30.0) + { + if (currentFrameIndex > 8) + { + ani.setEnd(false); + ani.setCurrentFrameWithChildLayer(5); + } + } + + + } + + + return ani; +} + + +// 觼葬缣搅暧 醱瞪晦栋击 撮??栖棻. +function setChargeCreatorMageGauge(obj, type, value) +{ + local appendage = getCreatorMageAppendageByType(obj, type); + + if (appendage) + { + if (value) + { // 醱瞪卫蒙桧塭贼 颤桧该蒂 亿煎 撮??栖棻. + appendage.getTimer().Reset(); + appendage.getTimer().Start(10000,0); + + // 陴嬴毡朝 偎热蒂 ?学?怃 ?煎 瓣表韩阳梱虽暧 卫除击 掘?鹿栖棻. + local initRemainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, initRemainCnt); + } + + appendage.sq_var.set_vector(l_CHARGE_ON, value); + } +} + + +// 觼葬缣搅暧 陕 撮睡蝶鉴缣 渠? 啪桧虽 模赅榆击 掘?栖棻. +function getCreatorSkillConsumeValue(obj, skillIndex) +{ + local consumeValue = 10; + local staticRowIndex = -1; + + switch (skillIndex) + { + case SKILL_FIREWALL: + // 1. 模赅榆 + staticRowIndex = 1; + break; + case SKILL_WOODFENCE: + // 1. 模赅榆 + staticRowIndex = 1; + break; + case SKILL_ICEROCK: + // 2. 模赅榆 + staticRowIndex = 2; + break; + case SKILL_FIREHURRICANE: + // 1. 模赅榆 + staticRowIndex = 1; + break; + case SKILL_ICESHIELD: + // 1. 模赅榆 + staticRowIndex = 1; + break; + case SKILL_ICEPLATE: + // 1. 模赅榆 + staticRowIndex = 1; + break; + case SKILL_MGRAB: + // 2. 模赅榆 + staticRowIndex = 2; + break; + case SKILL_FIREMETEO: + // 2. 模赅榆 + staticRowIndex = 2; + break; + case SKILL_WINDPRESS: + // 2. 模赅榆 + staticRowIndex = 2; + break; + case SKILL_WINDSTORM: + // 2. 模赅榆 + staticRowIndex = 1; + break; + } + + if (staticRowIndex != -1) + consumeValue = sq_GetIntData(obj, skillIndex, staticRowIndex); + + return consumeValue; + +} + +// 觼溯桧搅暧 赅苌 楼撩 啪桧虽 醱瞪击 卫蒙?栖棻. +function onAllChargeCreatorMageGauge(obj) +{ + for (local i = CREATOR_TYPE_FLAME; i < CREATOR_TYPE_MAX; i++) + { + setChargeCreatorMageGauge(obj, i, 1); + } +} + + + +function getCreatorMageStateAppendage(obj) +{ + // 觼葬缣桧搅 state 横?蛤虽 殓栖棻. + // 蝶鉴击 噙贼 桧翕?贼怃 ?廓缣 ?釭暧 蝶鉴虏 噩 热 毡晦阳侥缣 横?蛤虽蒂 舒朝匙殓栖棻. + // ap_creatormage_flame.nut + // ap_creatormage_disturb.nut + // ap_creatormage_guardian.nut + // ap_creatormage_ice.nut + + // 觼葬缣桧搅暧 奢问颤殓击 椭横褫栖棻. + local type = obj.getVar("state").get_vector(0); + + if (type < 0) + return null; + + local appendage = getCreatorMageAppendageByType(obj, type); + + if (!appendage) + return null; + + + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(-1); + } + + return appendage; +} + +function getCreatorBeforePosX(obj) +{ + local appendage = getCreatorMageStateAppendage(obj); + + if(appendage) + { + return appendage.sq_var.get_vector(I_BEFORE_X); + } + + return -1; +} + +function getCreatorBeforePosY(obj) +{ + local appendage = getCreatorMageStateAppendage(obj); + + if(appendage) + { + return appendage.sq_var.get_vector(I_BEFORE_Y); + } + + return -1; +} + + +function setCreatorBeforePos(obj, x, y) +{ + local appendage = getCreatorMageStateAppendage(obj); + + if(appendage) + { + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + } + + appendage.sq_var.set_vector(I_BEFORE_X, x); + appendage.sq_var.set_vector(I_BEFORE_Y, y); + } +} + +function setCreatorBeforeCount(obj, cnt) +{ + local appendage = getCreatorMageStateAppendage(obj); + + if(appendage) + { + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + } + + appendage.sq_var.set_vector(I_BEFORE_COUNT, cnt); + } +} + + + + +// 觼葬缣桧搅暧 蝶鉴樯策蝶蒂 撮??栖棻. +function setCreatorSkillStateSkillIndex(obj, index) +{ + if (!obj) + return; + + local oldStateIndex = getCreatorSkillStateSkillIndex(obj); + + if (oldStateIndex == CREATOR_TYPE_DISTURB) + { + // 寞?赅萄缣怃 萄煎办蒂 堤舆朝匙击 ?廓 ?轿?鄹栖棻. + // 援艇鼻鹧缣怃 蝶鉴樯策蝶蒂 渗唳?贼 夸醮毡朝 帼斜嫦当 + onMouseButtonUp_Mgrab(obj); + } + + + obj.getVar("state").clear_vector(); + obj.getVar("state").push_vector(index); + + if (index != -1) + { + local ani = getAniCreatorSkillOn(obj, index); + + if (obj.getVar("gauge_ani").size_vector() == 0) + obj.getVar("gauge_ani").push_vector(1); + else + obj.getVar("gauge_ani").set_vector(0, 1); + + if (ani) + { + obj.sq_PlaySound("PCHANGE"); + sq_Rewind(ani); + } + } +} + +// 觼葬缣桧搅暧 蝶鉴偎热蒂 撮??栖棻. +function setCreatorSkillCount(obj, cnt) +{ + + local appendage = getCreatorMageStateAppendage(obj); + + if (appendage) + { + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + } + + appendage.sq_var.set_vector(I_REMAIN_COUNT, cnt); + } +} + + + + +// ?营噙坚 毡朝 蝶鉴樯策蝶 殓栖棻. +function getCreatorSkillStateSkillIndex(obj) +{ + if (!obj) + return -1; + + if (obj.getVar("state").size_vector() == 0) + { + obj.getVar("state").push_vector(-1); + } + + return obj.getVar("state").get_vector(0); +} + +// 陴嬴毡朝 蝶鉴偎热 +function getCreatorRemainSkillCount(obj) +{ + local remainCount = 0; + + local appendage = getCreatorMageStateAppendage(obj); + + if(appendage) + { + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + } + + remainCount = appendage.sq_var.get_vector(I_REMAIN_COUNT); + } + + return remainCount; +} + +// 觼溯桧搅暧 卫瞪饵遴萄蒂 嫦翕?栖棻. +function playCreatorCastSound(obj, skillIndex) +{ + switch (skillIndex) + { + case SKILL_FIREWALL: + obj.sq_PlaySound("R_CR_FIREWALL"); + break; + case SKILL_FIREMETEO: + obj.sq_PlaySound("R_CR_METEO"); + break; + case SKILL_ICEROCK: + obj.sq_PlaySound("R_CR_ICESTONE"); + break; + case SKILL_ICEPLATE: + obj.sq_PlaySound("R_CR_ICEPLATE"); + break; + case SKILL_WOODFENCE: + obj.sq_PlaySound("R_CR_WOODFENCE"); + break; + case SKILL_MGRAB: + obj.sq_PlaySound("R_CR_THROW_MONSTER"); + break; + case SKILL_WINDSTORM: + obj.sq_PlaySound("R_CR_WINDSTORM"); + break; + } +} + +function useCreatorSkill(obj, skillIndex, x, y, consumeValue) +{ + local appendage = getCreatorMageStateAppendage(obj); + + if(appendage) + { + switch (skillIndex) + { + case SKILL_FIREWALL: + case SKILL_WOODFENCE: + case SKILL_ICEROCK: + case SKILL_FIREMETEO: + case SKILL_ICEPLATE: + { + // 鼻晦 蝶鉴菟擎 夥款y蹴匐仪击 ?瑭捡 ?栖棻. + if (y < TILE_FLOOR_START_Y) + return false; + } + break; + } + + + local cnt = getCreatorRemainSkillCount(obj); + + local remainCnt = (cnt - consumeValue); + + if(remainCnt < 0) + { + remainCnt = 0; + + if (obj.isMessage()) + { + //29004>啪桧虽陛 睡褶?罹 %s蝶鉴桧 ?薯腌栖棻. + + local type = getCreatorSkillStateSkillIndex(obj); + + local typeStrIndex = 0; + + switch (type) + { + case CREATOR_TYPE_FLAME: + typeStrIndex = 29005; + break; + case CREATOR_TYPE_ICE: + typeStrIndex = 29006; + break; + case CREATOR_TYPE_DISTURB: + typeStrIndex = 29007; + break; + case CREATOR_TYPE_GUARDIAN: + typeStrIndex = 29008; + break; + case CREATOR_TYPE_WIND: + typeStrIndex = 29009; + break; + } + + if (typeStrIndex) + { + sq_AddMessagePrintf(29004, typeStrIndex); + } + } + + setCreatorSkillStateSkillIndex(obj, -1); + // 赅苌 觼溯桧搅暧 楼撩 醱瞪击 卫蒙?栖棻. + //setCreatorBeforeCount(obj, remainCnt); + onAllChargeCreatorMageGauge(obj); + + + return false; + } + + setCreatorBeforePos(obj, x, y); + setCreatorBeforeCount(obj, cnt); + setCreatorSkillCount(obj, remainCnt); + + // + appendage.getTimer().Reset(); + appendage.getTimer().Start(10000,0); + + + // 质湍 晦奖击 绿掖?怃 譆蟾煎 噙朝匙桧塭贼..卫瞪饵遴萄 轿溘 + if (obj.getVar("useskill").size_vector() == 0) + { + obj.getVar("useskill").push_vector(skillIndex); + playCreatorCastSound(obj, skillIndex); + } + else + { + if (obj.getVar("useskill").get_vector(0) != skillIndex) + { + obj.getVar("useskill").set_vector(0, skillIndex); + playCreatorCastSound(obj, skillIndex); + } + } + // + + + local rate = getCreatorTypeGaugeRate(obj); + + if (rate < 50) + { + if (obj.getVar("gauge_ani").get_vector(0) != 2) + { + local type = getCreatorSkillStateSkillIndex(obj); + local ani = getAniCreatorSkillOff(obj, type); + + if (ani) + { + sq_Rewind(ani); + } + + if (obj.getVar("gauge_ani").size_vector() == 0) + obj.getVar("gauge_ani").push_vector(2); + else + obj.getVar("gauge_ani").set_vector(0, 2); + } + } + } + + return true; +} + + + +// ?营 蹂羶? 颤殓 葆办蝶 豭赝葛击 ?击 阳 横雯 蝶鉴樯虽 椭横鹿栖棻. +function getLButtonSkillByType(obj, type) +{ + if (type < 0 || type >= CREATOR_TYPE_MAX) + return -1; + + local size = CREATOR_TYPE_MAX; // ?釭 涡 跷陛?捡? + local skill_l =[]; + + skill_l.resize(size); + + skill_l[CREATOR_TYPE_NONE] = -1; + skill_l[CREATOR_TYPE_FLAME] = SKILL_FIREWALL; + skill_l[CREATOR_TYPE_ICE] = SKILL_ICEROCK; + skill_l[CREATOR_TYPE_DISTURB] = SKILL_WOODFENCE; + skill_l[CREATOR_TYPE_GUARDIAN] = SKILL_FIREHURRICANE; + skill_l[CREATOR_TYPE_WIND] = SKILL_WINDPRESS; + + return skill_l[type]; +} + +// ?营 蹂羶? 颤殓 葆办蝶 螃艇赝葛击 ?击 阳 横雯 蝶鉴樯虽 椭横鹿栖棻. +function getRButtonSkillByType(obj, type) +{ + + if (type < 0 || type >= CREATOR_TYPE_MAX) + return -1; + + + local size = CREATOR_TYPE_MAX; // ?釭 涡 跷陛?捡? + local skill_l =[]; + + skill_l.resize(size); + + skill_l[CREATOR_TYPE_NONE] = -1; + skill_l[CREATOR_TYPE_FLAME] = SKILL_FIREMETEO; + skill_l[CREATOR_TYPE_ICE] = SKILL_ICEPLATE; + skill_l[CREATOR_TYPE_DISTURB] = SKILL_MGRAB; + skill_l[CREATOR_TYPE_GUARDIAN] = SKILL_ICESHIELD; + skill_l[CREATOR_TYPE_WIND] = SKILL_WINDSTORM; + + return skill_l[type]; +} + + + +// ?营 葆办蝶 豭赝葛 帼?击 扬毓击 阳 釭螃朝 蝶鉴击 葬欐?栖棻. +function getLButtonSkill(obj) +{ + if (!obj) + return -1; + + local type = obj.getVar("state").get_vector(0); + + local skillIndex = getLButtonSkillByType(obj, type); + + + if (skillIndex != -1) + { + local level = sq_GetSkillLevel(obj, skillIndex); + + if (level <= 0) + return -1; + } + + return skillIndex; +} + +// ?营 葆办蝶 螃艇赝葛 帼?击 扬毓击 阳 釭螃朝 蝶鉴击 椭蝗栖棻. +function getRButtonSkill(obj) +{ + if (!obj) + return -1; + + local type = obj.getVar("state").get_vector(0); + + + local skillIndex = getRButtonSkillByType(obj, type); + + if (skillIndex != -1) + { + local level = sq_GetSkillLevel(obj, skillIndex); + + if (level <= 0) + return -1; + } + + return skillIndex; +} + + +// ?营 觼葬缣桧搅 瞪瘫 ui ?撩? 鼻鹧樯虽 羹觼?琐栖棻. +// 橾奁 ui陛 ?撩?樯虽 羹觼?贼 腌栖棻. +function isEnableCreatorBattleInUI() +{ + local mainControl = sq_GetGlobalMainControl(); + + if (mainControl) + { + return mainControl.IsEnable(); + } + + return false; + +} + + +function setEnableBattleInUI(enable) +{ + local quiestUI = sq_GetPopupWindowMainCotrol(1); // quest guide + if (quiestUI) + { + quiestUI.SetEnable(enable); + quiestUI.SetVisible(true); + } + + local group = sq_GetUISystemChatControl(99); + + if (group) + { + group.SetEnable(enable); + group.SetVisible(true); + } + + + local chatControl = sq_GetGlobalChatControl(); + + if (chatControl) + { + chatControl.SetEnable(enable); + chatControl.SetVisible(true); + } + + local mainControl = sq_GetGlobalMainControl(); + + if (mainControl) + { + mainControl.SetEnable(enable); + mainControl.SetVisible(true); + } + + local strikerUI = sq_GetStrikerSkillUi(); + + if (strikerUI) + { + strikerUI.SetEnable(enable); + // strikerUI.SetVisible(enable); + } + +} + + + +// 褐叙 议葛搅 - 觼葬缣桧搅缣怃 瞪瘫 卫 葆办蝶 晦栋击 斛渠??晦 嫔? +// ?贼顶 ui菟 葆办蝶 ?撩?陛 肾朝虽 寰肾朝虽 晦遽桧 肾朝 嫔纂殓栖棻. 桧够缣 属寥or sqr 夥樯注击 ?栖棻. +function onOpenPopupWindow_CreatorMage(obj, popupType, windowTileType) +{ + if (!obj) + return; + + if (!IsInBattleCreator(obj)) + { + return; + } + + // 樯? 孺紫办谛 晦颤 ?釭?釭 ?机击 鼠卫?栖棻. + if (sq_IsIgnoreOpenPopupCreator(popupType, windowTileType)) + return; + + + + local isEsc = sq_IsESCClosableWindow(popupType); + + local windowsNum = sq_GetPopupWindows(); + + + // 褐叙 议葛搅 - 觼葬缣桧搅缣怃 瞪瘫 卫 葆办蝶 晦栋击 斛渠??晦 嫔? + // ?贼顶 ui菟 葆办蝶 ?撩?陛 肾朝虽 寰肾朝虽 晦遽桧 肾朝 嫔纂殓栖棻. 桧够缣 属寥or sqr 夥樯注击 ?栖棻. + unLockMouse(obj); +} + +function onClosePopupWindow_CreatorMage(obj, popupType, windowTileType) +{ + if (!obj) + return; + + if (!IsInBattleCreator(obj)) + return; + + + // 樯? 孺紫办谛 晦颤 ?釭?釭 ?机击 鼠卫?栖棻. + if (sq_IsIgnoreOpenPopupCreator(popupType, windowTileType)) + return; + + local isEsc = sq_IsESCClosableWindow(popupType); + + // 翮萼 孺紫办陛 ?釭塭紫 毡戏贼 鼠卫?栖棻. + + //if (!isEsc) + //return; + + local windowsNum = sq_GetPopupWindows(); + // + + // 觼葬缣桧搅陛 鼠卫? 热 桡朝 夔?煤?捡?朝 ?机桧 翮溥毡朝虽 羹觼?朝 ?热殓栖棻. + if (sq_IsOpenCreatorControlPopupWindows()) + return; + + print(" onClose popupType:" + popupType + " windowTileType:" + windowTileType); + //print(" clip on"); + lockMouse(obj); +} + +// 渠莲饵遴萄蒂 撮??朝 螃帼塭桧注胀 ?热殓栖棻.. +// 觼葬缣桧搅朝 渠莲横鸥饵遴萄陛 釭螃贼 寰腌栖棻. +function playDashAttackSound_CreatorMage(obj) +{ + return 1; +} + + +// 螃帼胀 嬴桧蛊击 琼晦嫔? ?热 殓栖棻. +function checkOverItemObject_CreatorMage(obj) +{ + if (!obj) + return null; + + + + local itemObj = null; + + local objMgr = obj.getObjectManager(); + + if (objMgr) + { + itemObj = objMgr.getMeetItemObject(IMouse.GetXPos(), IMouse.GetYPos()); + } + + return itemObj; +} + + + + +// 觼葬缣桧搅暧 颤殓涤 蝶鉴樯策蝶蒂 椭蝗栖棻. +function getTypeSkillIndex(obj, type) +{ + local idx = SKILL_CREATORFLAME; + switch (type) + { + case CREATOR_TYPE_FLAME: + idx = SKILL_CREATORFLAME; + break; + case CREATOR_TYPE_ICE: + idx = SKILL_CREATORICE; + break; + case CREATOR_TYPE_DISTURB: + idx = SKILL_CREATORDISTURB; + break; + case CREATOR_TYPE_GUARDIAN: + idx = SKILL_CREATORGUARDIAN; + break; + case CREATOR_TYPE_WIND: + idx = SKILL_CREATORWIND; + break; + } + + return idx; +} + +function drawMainCustomUI_CreatorMage(obj) +{ + if (!obj) + return; + local sq_var = obj.getVar(); + + // 蝶鉴蜗煜 + local hud_creator_b_gauge = sq_var.GetAnimationMap("hud_creator_b_gauge", "Character/Mage/CreatorAnimation/ui/hud_creator_b_gauge.ani"); + local hud_creator_b_select = sq_var.GetAnimationMap("hud_creator_b_select", "Character/Mage/CreatorAnimation/ui/hud_creator_b_select.ani"); + + local skill_ui_index = 0; + + + local x = 626; + local y = 588; + local offset = 36; + + // ?斜葬晦 + local hudCreatorAni = sq_var.GetAnimationMap("hud_creator_back", "Character/Mage/CreatorAnimation/ui/hud_creator_back.ani"); + sq_DrawSpecificFrame(hudCreatorAni, x, y, false, 0, false, 1.0); + // + + // 谆办濠陛 毡击 热 毡戏嘎煎 桧够缣怃 寡?樯虽 嬴棋虽蒂 羹觼?罹 + // 寡?桧 嬴棋 唳办 醴怃谛 ui蒂 ?横鄹栖棻. + if (!IsInBattleCreator(obj)) + { + local isEnable = isEnableCreatorBattleInUI(); + + if (!isEnable) + { + unLockMouse(obj); + } + + //return; + } + + + + // 摹鸥? 才舒葬 斜葬晦 + if (getCreatorSkillStateSkillIndex(obj) != -1) + { + local type = getCreatorSkillStateSkillIndex(obj); + + local skillmgr = obj.getSkillManager(); + + local slot = -1; + if (skillmgr) + { + local index = getTypeSkillIndex(obj, type); + slot = skillmgr.getSlotindex(index); + } + + if (slot != -1) + { + // 摹鸥虽 斜葬晦 + sq_AnimationProc(hud_creator_b_select); + sq_drawCurrentFrame(hud_creator_b_select, x + (slot * offset), y, false); + } + } + + // 啪桧虽 斜葬晦 + local hud_creator_b_gauge = sq_var.GetAnimationMap("hud_creator_b_gauge", "Character/Mage/CreatorAnimation/ui/hud_creator_b_gauge.ani"); + + // 楼撩蝶鉴 啪桧虽 斜葬晦 睡碟殓栖棻. + + local skillmgr = obj.getSkillManager(); + + if (!skillmgr) + return; + + for (local i = CREATOR_TYPE_FLAME; i < CREATOR_TYPE_MAX; i++) + { + local slot = -1; + + if (skillmgr) + { + local index = getTypeSkillIndex(obj, i); + slot = skillmgr.getSlotindex(index); + } + + if (slot != -1) + { + local appendage = getCreatorMageAppendageByType(obj, i); + if (appendage) + { + local gaugeValue = 0; + local max_gaugeValue = 0; + + max_gaugeValue = appendage.sq_var.get_vector(I_MAX_COUNT); + + gaugeValue = appendage.sq_var.get_vector(I_REMAIN_COUNT); + local rate = gaugeValue.tofloat() / max_gaugeValue.tofloat(); + local rgb = getCreatorTypeColor(obj, i); + local alpha = sq_ALPHA(255); + hud_creator_b_gauge.setImageRate(rate, 1.0); + local gaugePosX = x - 87; + sq_DrawSpecificFrameEffect_SIMPLE(hud_creator_b_gauge, gaugePosX + (slot * offset), y, 0, rgb, alpha, true); + } + } + } +} + +function onProcSkillShop_CreatorMage(obj, control) +{ + local x = 573; + local y = 538; + local offset = 46; + + //print(" control x:" + control.GetXPos() + " y:" + control.GetYPos()); + + local sq_var = obj.getVar(); + // 啪桧虽 斜葬晦 + local hud_creator_b_gauge = sq_var.GetAnimationMap("hud_creator_b_gauge", "Character/Mage/CreatorAnimation/ui/hud_creator_b_gauge.ani"); + + // 楼撩蝶鉴 啪桧虽 斜葬晦 睡碟殓栖棻. + + local skillmgr = obj.getSkillManager(); + + if (!skillmgr) + return; + + for (local i = CREATOR_TYPE_FLAME; i < CREATOR_TYPE_MAX; i++) + { + local slot = -1; + + if (skillmgr) + { + local index = getTypeSkillIndex(obj, i); + slot = skillmgr.getSlotindex(index); + } + + if (slot != -1) + { + local appendage = getCreatorMageAppendageByType(obj, i); + if (appendage) + { + local gaugeValue = 0; + local max_gaugeValue = 0; + + max_gaugeValue = appendage.sq_var.get_vector(I_MAX_COUNT); + + gaugeValue = appendage.sq_var.get_vector(I_REMAIN_COUNT); + local rate = gaugeValue.tofloat() / max_gaugeValue.tofloat(); + local rgb = getCreatorTypeColor(obj, i); + local alpha = sq_ALPHA(255); + hud_creator_b_gauge.setImageRate(rate, 1.0); + local gaugePosX = x; + sq_DrawSpecificFrameEffect_SIMPLE(hud_creator_b_gauge, gaugePosX + (slot * offset), y, 0, rgb, alpha, true); + } + } + } + +} + +function drawCustomUI_CreatorMage(obj) +{ + // 葆办蝶斜椰 籀葬 + + if (!obj) + return; + + + if (!IsInBattleCreator(obj)) + { + return; + } + // 醴怃斜葬晦 + // 醴怃 斜葬晦 睡碟殓栖棻. + + + local isLock = sq_IsClipCursor(); + + + if (!isLock) + { + if (!sq_IsVisibleCursor()) + { + sq_SetVisibleCursor(true); + } + + return; + } + + + if (sq_IsVisibleCursor()) + { + sq_SetVisibleCursor(false); + } + + local ani = obj.getVar().GetAnimationMap("NORMAL", + "Character/Mage/Effect/Animation/CreatorMagicSphere/normal.ani"); // 橾奁醴怃 + + local usingSkillIndex = getCreatorSkillStateSkillIndex(obj); + + if (usingSkillIndex == CREATOR_TYPE_DISTURB) + { + local stage = sq_GetObjectManagerStage(obj); + + if (!stage) + return; + + local control = stage.getMainControl(); + + if (control.IsRBDown()) + { // 萄煎办橾隆 醴怃蒂 夥习栖棻. + ani = obj.getVar().GetAnimationMap("THROW", + "Character/Mage/Effect/Animation/CreatorMagicSphere/draw_cursor.ani"); // + } + else + { + ani = obj.getVar().GetAnimationMap("BLOCK", + "Character/Mage/Effect/Animation/CreatorMagicSphere/block.ani"); // + } + } + else if (usingSkillIndex == CREATOR_TYPE_GUARDIAN) + { + ani = obj.getVar().GetAnimationMap("GUARD", + "Character/Mage/Effect/Animation/CreatorMagicSphere/guard.ani"); // + } + else if (usingSkillIndex == CREATOR_TYPE_ICE) + { + ani = obj.getVar().GetAnimationMap("ICE", + "Character/Mage/Effect/Animation/CreatorMagicSphere/icesphere.ani"); // + } + else if (usingSkillIndex == CREATOR_TYPE_FLAME) + { + ani = obj.getVar().GetAnimationMap("FIRE", + "Character/Mage/Effect/Animation/CreatorMagicSphere/firesphere.ani"); // + } + else if (usingSkillIndex == CREATOR_TYPE_WIND) + { + ani = obj.getVar().GetAnimationMap("WIND", + "Character/Mage/Effect/Animation/CreatorMagicSphere/wind.ani"); // + } + + local state = obj.getState(); + + if (state == STATE_ICESHIELD) + { + ani = obj.getVar().GetAnimationMap("SHIELD", + "Character/Mage/Effect/Animation/CreatorMagicSphere/shield_cursor_dodge.ani"); // + } + else if (state == STATE_FIREHURRICANE) + { + ani = obj.getVar().GetAnimationMap("HURRICANE", + "Character/Mage/Effect/Animation/CreatorMagicSphere/hurricane_cursor.ani"); // + } + + if (ani) + { + local posX = IMouse.GetXPos(); + local posY = IMouse.GetYPos(); + + sq_AnimationProc(ani); + sq_drawCurrentFrame(ani, posX, posY, false); + } + + + ////////////// 诡樯ui + if (getCreatorSkillStateSkillIndex(obj) == -1) + return; + + local sq_var = obj.getVar(); + local skill_ui_index = 0; + + + local x = 400; + local y = 470; + local offset = 36; + + local alpha = sq_ALPHA(200); + local baseRGB = sq_RGB(255,255,255); + + // ?斜葬晦 + local main_gauge_b = sq_var.GetAnimationMap("main_gauge_b", + "Character/Mage/CreatorAnimation/ui/main_gauge_b.ani"); + local main_gauge_b_select = sq_var.GetAnimationMap("main_gauge_b_select", + "Character/Mage/CreatorAnimation/ui/main_gauge_b_select.ani"); + + + sq_AnimationProc(main_gauge_b); + + local currentFrameIndex = main_gauge_b.GetCurrentFrameIndex(); + sq_DrawSpecificFrameEffect_SIMPLE(main_gauge_b, x, y, currentFrameIndex, baseRGB, alpha, false); + //sq_drawCurrentFrame(main_gauge_b, x, y, false); + + // 啪桧虽 斜葬晦 + local hud_creator_b_gauge = sq_var.GetAnimationMap("hud_creator_b_gauge", "Character/Mage/CreatorAnimation/ui/hud_creator_b_gauge.ani"); + + if (getCreatorSkillStateSkillIndex(obj) != -1) + { + local creator_guage_1 = sq_var.GetAnimationMap("creator_guage_1", "Character/Mage/CreatorAnimation/ui/creator_guage_1.ani"); + local creator_guage_2 = sq_var.GetAnimationMap("creator_guage_2", "Character/Mage/CreatorAnimation/ui/creator_guage_2.ani"); + local creator_guage_3 = sq_var.GetAnimationMap("creator_guage_3", "Character/Mage/CreatorAnimation/ui/creator_guage_3.ani"); + local creator_guage_4 = sq_var.GetAnimationMap("creator_guage_4", "Character/Mage/CreatorAnimation/ui/creator_guage_4.ani"); + local type = getCreatorSkillStateSkillIndex(obj); + + local appendage = getCreatorMageAppendageByType(obj, type); + if (appendage) + { + local gaugeValue = 0; + local max_gaugeValue = 0; + + //I_REMAIN_COUNT <- 0 // 陴嬴毡朝 蝶鉴偎热 + //l_CHARGE_ON <- 1 // 醱瞪 酝 樯虽 羹觼 + //I_BEFORE_X <- 2 // 卫除 + //I_BEFORE_Y <- 3 // 卫除 + //I_MAX_COUNT <- 4 // 譆渠醱瞪榆 + //I_SIZE <- 5 // 卫除 + max_gaugeValue = appendage.sq_var.get_vector(I_MAX_COUNT); + gaugeValue = appendage.sq_var.get_vector(I_REMAIN_COUNT); + local rate = gaugeValue.tofloat() / max_gaugeValue.tofloat(); + local maxFrameIndex = 156; + local frameRate = maxFrameIndex.tofloat() * rate.tofloat(); + + local frameIndex = maxFrameIndex - frameRate.tointeger(); + + local rgb = getCreatorTypeColor(obj, type); + + //local rgba = getCreatorTypeAlphaColor(obj, type, 50); + + sq_DrawSpecificFrameEffect_SIMPLE(creator_guage_1, x, y, frameIndex, rgb, alpha, true); + sq_DrawSpecificFrameEffect_SIMPLE(creator_guage_2, x, y, frameIndex, rgb, alpha, true); + sq_DrawSpecificFrameEffect_SIMPLE(creator_guage_3, x, y, frameIndex, rgb, alpha, true); + sq_DrawSpecificFrameEffect_SIMPLE(creator_guage_4, x, y, frameIndex, rgb, alpha, true); + } + } + + //摹鸥? 蝶鉴菟 + local main_gauge_lb = sq_var.GetAnimationMap("main_gauge_lb", "Character/Mage/CreatorAnimation/ui/main_gauge_lb.ani"); + local main_gauge_rb = sq_var.GetAnimationMap("main_gauge_rb", "Character/Mage/CreatorAnimation/ui/main_gauge_rb.ani"); + + //sq_DrawSpecificFrame(main_gauge_lb, x, y, false, 0, false, 1.0); + //sq_DrawSpecificFrame(main_gauge_rb, x, y, false, 0, false, 1.0); + sq_DrawSpecificFrameEffect_SIMPLE(main_gauge_lb, x, y, 0, baseRGB, alpha, false); + sq_DrawSpecificFrameEffect_SIMPLE(main_gauge_rb, x, y, 0, baseRGB, alpha, false); + + + // 摹鸥? 蝶鉴樯策蝶 斜葬晦 + local main_gauge_b_select = sq_var.GetAnimationMap("main_gauge_b_select", "Character/Mage/CreatorAnimation/ui/main_gauge_b_select.ani"); + + if (getCreatorSkillStateSkillIndex(obj) != -1) + { + local off = 32; + local type = getCreatorSkillStateSkillIndex(obj); + + local skill_icon_mode = obj.getVar("gauge_ani").get_vector(0); + if (skill_icon_mode == 1) + { + local hud_creatorskill_icon = getAniCreatorSkillOn(obj, type); + + sq_AnimationProc(hud_creatorskill_icon); + sq_drawCurrentFrame(hud_creatorskill_icon, x, y, false); + //sq_DrawCurrentFrameEffect_SIMPLE(hud_creatorskill_icon, x, y, baseRGB, alpha, false); + } + else if (skill_icon_mode == 2) + { + local hud_creatorskill_icon = getAniCreatorSkillOff(obj, type); + + sq_AnimationProc(hud_creatorskill_icon); + sq_drawCurrentFrame(hud_creatorskill_icon, x, y, false); + //sq_DrawCurrentFrameEffect_SIMPLE(hud_creatorskill_icon, x, y, baseRGB, alpha, false); + } + + + // 摹鸥? 蝶鉴嬴桧夔 斜葬晦 + local lbuttonSkl = getLButtonSkillByType(obj, type); + local rbuttonSkl = getRButtonSkillByType(obj, type); + + local ls = sq_GetSkill(obj, lbuttonSkl); + local rs = sq_GetSkill(obj, rbuttonSkl); + + local sx = x - 29; + local sy = y - 16; + + if (ls) + { + if (sq_GetSkillLevel(obj, lbuttonSkl) > 0) + { + sq_DrawSkillIcon(ls, sx, sy, alpha); + } + } + + if (rs) + { + if (sq_GetSkillLevel(obj, rbuttonSkl) > 0) + { + sq_DrawSkillIcon(rs, sx + off, sy, alpha); + } + } + + // 摹鸥?击阳 + + local stage = sq_GetObjectManagerStage(obj); + + if (!stage) + return; + + local control = stage.getMainControl(); + + if (control.IsLBDown()) + { + sq_AnimationProc(main_gauge_b_select); + sq_drawCurrentFrame(main_gauge_b_select, x, y, false); + } + else if(control.IsRBDown()) + { + sq_AnimationProc(main_gauge_b_select); + sq_drawCurrentFrame(main_gauge_b_select, x + off, y, false); + } + + } + + +} + +function onStartMap_CreatorMage(obj) +{ + if(!obj) + return; + + lockMouse(obj); + + obj.getVar("dstpos").clear_vector(); + + // 寞桧 剩横鬲朝等 ?热 横?蛤虽陛 毡棻贼.. + // 饷薯?鄹栖棻. + // 棻挤寞缣怃紫 ?娄陛 虽楼肾晦 阳侥殓栖棻. + local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "Appendage/Character/ap_common_suck.nut"); + + if (appendage) + { + appendage.sq_DeleteAppendages(); + CNSquirrelAppendage.sq_RemoveAppendage(obj, "Appendage/Character/ap_common_suck.nut"); + } +} + + +function resetDungeonStart_CreatorMage(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount) +{ + if (!obj) return -1; + + if (!obj.isMyControlObject()) + return -1; + + local isReset = true; // 晦狱瞳戏烦 瞪睡 葬掸殓栖棻. + + setCreatorSkillStateSkillIndex(obj, -1); + onAllChargeCreatorMageGauge(obj); + + if (sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST || sq_GetCurrentModuleType() == MODULE_TYPE_ENTRANCE || sq_GetCurrentModuleType() == MODULE_TYPE_SELECT_DUNGEON) + { + unLockMouse(obj); + } + else + { + print(" game module:" + sq_GetCurrentModuleType()); + lockMouse(obj); + } + + print(" resetDungeonStart_CreatorMage game module:" + sq_GetCurrentModuleType()); + + if (!sq_IsTowerDungeon()) + { + for (local i = CREATOR_TYPE_FLAME; i < CREATOR_TYPE_MAX; i++) + { + local slot = -1; + + local skillmgr = obj.getSkillManager(); + + if (skillmgr) + { + local index = getTypeSkillIndex(obj, i); + slot = skillmgr.getSlotindex(index); + } + + if (slot != -1) + { + local appendage = getCreatorMageAppendageByType(obj, i); + if (appendage) + { + local max_gaugeValue = appendage.sq_var.get_vector(I_MAX_COUNT); + appendage.sq_var.set_vector(I_REMAIN_COUNT, max_gaugeValue); + appendage.sq_var.set_vector(l_CHARGE_ON, 0); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0); + appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0); + } + } + } + } + + + return 1; +} + + +function onStartDungeon_CreatorMage(obj) +{ + if (!obj) + return; + + if (sq_IsMyCharacter(obj)) + { + lockMouse(obj); + ////////////////////////////////////////////////////// + obj.getVar("lbdown").clear_timer_vector(); + obj.getVar("lbdown").push_timer_vector(); + obj.getVar("lbdown").push_timer_vector(); + + local t = obj.getVar("lbdown").get_timer_vector(0); + t.setParameter(20, -1); + t.resetInstant(0); + + obj.getVar("lbdown").clear_ct_vector(); + obj.getVar("lbdown").push_ct_vector(); + local timer = obj.getVar("lbdown").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); + ////////////////////////////////////////////////////// + + // 觼溯桧搅暧 赅苌 楼撩 啪桧虽 醱瞪击 卫蒙?栖棻. + onAllChargeCreatorMageGauge(obj); + } +} + + +// 孺紫办陛 ?撩? 腑击阳 ?轿肾朝 属寥?热 殓栖棻. +function onActiveWindow_CreatorMage(obj, activeState) +{ + if (!obj) + return; + if (IsInBattleCreator(obj)) + { +//#define WA_INACTIVE 0 +//#define WA_ACTIVE 1 +//#define WA_CLICKACTIVE 2 + local isOpen = sq_IsOpenCreatorControlPopupWindows(); + local hotKey = sq_IsDownHotKeyCreatorCursor(); + if (isOpen || hotKey) + { + return; + } + + lockMouse(obj); + } +} + +// 孺紫办陛 绿?撩? 腑击阳 ?轿肾朝 属寥?热 殓栖棻. +function onInActiveWindow_CreatorMage(obj) +{ + unLockMouse(obj); +} + + + +function onChangeSkillEffect_CreatorMage(obj, skillIndex, reciveData) +{ + if (!obj) + return; + + if (skillIndex == SKILL_MGRAB) + { + onChangeSkillEffect_Mgrab(obj, skillIndex, reciveData); + } +} + + +function procAppend_CreatorMage(obj) +{ + if (!obj) + return 0; + + local type = getCreatorSkillStateSkillIndex(obj); + + if (type == CREATOR_TYPE_DISTURB) + { + onProc_Mgrab(obj); + } + + if (!obj.isMyControlObject()) + return 0; + + local STATE_ACTIVE = 1; + + local cashState = sq_GetStateCashShop(); + local isClipCursor = sq_IsClipCursor(); // 醴怃陛 陉?毡朝虽 羹觼?栖棻. + + if (cashState == STATE_ACTIVE) + { + // 撮塭憧桧 翮溜朝等 醴怃陛 off赅萄陛 肾横怃朝 寰腌栖棻. + if (isClipCursor) + unLockMouse(obj); + } + else + { + // 葆办蝶块桧 ?葬虽 强擎 唳办 葆虽虞 湍瞪 赝葬横鼻鹧樯虽 羹觼?琐栖棻. + if (sq_GetResultState() || sq_GetRewardState()) + { + // 念娄玺桧 釭螃朝 翕寰缣紫 鼻濠蛔击 睡敷帼葬晦 嫔? + // 桧廓缚 羲戏煎 ui?撩?郦蒂 援脑贼 葆办蝶蒂 濡掬帼董栖棻. + local hotKey = sq_IsDownHotKeyCreatorCursor(); + + if (hotKey) + { + // ui?撩?郦陛 扬萼鼻鹧缣怃朝 赝董桧 ?溥毡棻贼.. + // 棻卫 濡掬帼董栖棻. + if (!isClipCursor) + lockMouse(obj); + } + else + { + if (isClipCursor) + { + unLockMouse(obj); + } + } + return 0; + } + + if (IsInBattleCreator(obj)) + { // 瞪潍酝桧塭贼.. + local hotKey = sq_IsDownHotKeyCreatorCursor(); + + if (hotKey) + { + // ui?撩? 郦蒂 援艇 鼻鹧缣歙 葆办蝶陛 濡衔朝虽 羹觼?琐栖棻. + if (isClipCursor) + { + // 葆办蝶陛 濡衔棻贼 + unLockMouse(obj); + } + } + else + { + // ?营 葆办蝶 谢?陛 孺紫办 ?贼寰薹缣 毡朝 羹觼?栖棻. + //print(" isClipCursor:" + isClipCursor); + if (!isClipCursor) + { // 葆办蝶块桧 ?萼 鼻鹧塭贼 + //print(" isopencreator:" + sq_IsOpenCreatorControlPopupWindows()); + if (!sq_IsOpenCreatorControlPopupWindows()) + { + if (sq_IsMousePtInWindowRect()) + { // 葆办蝶陛 顶睡缣 谢?蒂 ??毡棻贼.. + // ui?撩? 郦蒂 援艇 鼻鹧缣怃 谖睡瓣?玺击 援脑贼 橾卫瞳戏煎 + // ui?撩? 郦陛 false煎 肾朝等 桧阳 葆办蝶块击 勘横舆贼 寰腌栖棻. + lockMouse(obj); + } + } + } + } + } + else + { + if (isClipCursor == true) + { + unLockMouse(obj); + } + } + } + + + + return 1; +} + + +// 奢问除问击 姜?晦 嫔? 樯搅弊击 姜?怃 葬欐?栖棻. +function IsInterval(obj, interval) +{ + if (!obj) + return false; + + // 晦狱奢问 颤桧该 + local t = obj.getVar().get_ct_vector(0); + + if (!t) + { + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + t = obj.getVar().get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + return true; + } + + local currentT = t.Get(); + if(currentT > interval) + { + t.Reset(); + t.Start(10000,0); + + return true; + } + + //print(" not interval"); + + return false; +} + + +// 葆办蝶帼?击 扬毓击 阳 籀葬肾横捡 ?朝 蝶鉴?煎撮蝶 睡碟殓栖棻. +function onMouseButtonDown_ProcSkill(obj, usingSkillIndex) +{ + if (!obj) + return; + + if (!obj.isMyControlObject()) + return; + + if (!IsInBattleCreator(obj)) + return; + + if (!sq_IsClipCursor()) + return; + + // 骁匙击 颤坚 毡戏贼 葆办蝶 奢问击 ? 热 桡蝗栖棻. + if (sq_IsRidingObject(obj)) + return; + + local objectManager = obj.getObjectManager(); + + if (!objectManager) + return; + + local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL); + local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), 0, ENUM_DRAWLAYER_NORMAL); + + //print(" onMouseButtonDown_ProcSkill:" + usingSkillIndex); + if (usingSkillIndex == SKILL_WOODFENCE) + { + // 办萄?蝶暧 唳办朝 萄楚斜寞冲桧晦 阳侥缣 + // 罹晦怃 籀葬肾虽 强蝗栖棻. + } + else if (usingSkillIndex == SKILL_FIREWALL) + { + //print(" onMouseMoveCharacter_Firewall:" + usingSkillIndex); + onMouseMoveCharacter_Firewall(obj, IMouse.GetXPos(), IMouse.GetYPos()); + } + else if (usingSkillIndex == SKILL_ICEROCK) + { + local consumeValue = getCreatorSkillConsumeValue(obj, usingSkillIndex); + + if (useCreatorSkill(obj, usingSkillIndex, xPos, yPos, consumeValue)) + onMouseButtonDown_IceRock(obj); + } + else if (usingSkillIndex == SKILL_FIREMETEO) + { + local consumeValue = getCreatorSkillConsumeValue(obj, usingSkillIndex); + + if (useCreatorSkill(obj, usingSkillIndex, xPos, yPos, consumeValue)) + onMouseButtonDown_FireMeteo(obj); + } + else if (usingSkillIndex == SKILL_ICEPLATE) + { + local consumeValue = getCreatorSkillConsumeValue(obj, usingSkillIndex); + + if (useCreatorSkill(obj, usingSkillIndex, xPos, yPos, consumeValue)) + onMouseButtonDown_IcePlate(obj); + } + else if (usingSkillIndex == SKILL_FIREHURRICANE) + { + local isExcute = obj.isExcutableState(SKILL_CREATORGUARDIAN); + if (isExcute) + { + local consumeValue = getCreatorSkillConsumeValue(obj, usingSkillIndex); + + if (useCreatorSkill(obj, usingSkillIndex, xPos, yPos, consumeValue)) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FIREHURRICANE_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_FIREHURRICANE, STATE_PRIORITY_USER, true); + } + } + } + else if (usingSkillIndex == SKILL_ICESHIELD) + { + if (obj.isExcutableState(SKILL_CREATORGUARDIAN)) + { + local consumeValue = getCreatorSkillConsumeValue(obj, usingSkillIndex); + + if (useCreatorSkill(obj, usingSkillIndex, xPos, yPos, consumeValue)) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICESHIELD_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICESHIELD, STATE_PRIORITY_USER, true); + } + } + } + else if (usingSkillIndex == SKILL_WINDPRESS) + { + local isExcute = obj.isExcutableState(SKILL_CREATORWIND); + if (isExcute) + { + local consumeValue = getCreatorSkillConsumeValue(obj, usingSkillIndex); + + if (useCreatorSkill(obj, usingSkillIndex, xPos, yPos, consumeValue)) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_WINDPRESS_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + } + else if (usingSkillIndex == SKILL_WINDSTORM) + { + local consumeValue = getCreatorSkillConsumeValue(obj, usingSkillIndex); + + if (yPos >= TILE_FLOOR_START_Y) + { + if (useCreatorSkill(obj, usingSkillIndex, xPos, yPos, consumeValue)) + { + onMouseButtonDown_WindStorm(obj); + } + } + } + else if (usingSkillIndex == SKILL_MGRAB) + { + // 蟾晦? + setStateMouseGrab(obj); + grabThrowObject(obj); + } + else if (usingSkillIndex == -1) + { + // 桧谖暧 唳办 渠?瞳戏煎 -1樯 唳办缣朝 + // 晦狱奢问戏煎 瞪??栖棻. + + // http://jira.in.neople.co.kr/jira/browse/DNF-8531 + // [觼葬缣桧搅] 嬴桧蝶 褒萄蒂 蝗菜?虽 强擎 鼻鹧缣怃 ?溯歜 ?葬馨樯 饵辨 酝 螃艇薹 赝葛击 ? 唳办 等嘐虽陛 雪嬴虽朝 ?鼻 + local state = obj.getState(); + if (state == STATE_ICESHIELD || state == STATE_FIREHURRICANE) + return; + + // ?颤奢问击 噩 热 毡朝 鼻?樯虽 羹觼?栖棻. + if (!obj.isEnableBasicAttack()) + return; + + + local hitInterval = 500; // 除问热纂 (ms) + if (IsInterval(obj, hitInterval)) + { // 嫦饵?坚 桧? 嫦饵 除问桧 蹂羶? 热纂 桧?陛 肾横捡 晦狱嫦饵陛 陛栋?栖棻. (翱嫦寞虽) + local objectManager = obj.getObjectManager(); + + if (!objectManager) + return; + + + local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL); + local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), 0, ENUM_DRAWLAYER_NORMAL); + local zPos = 0; + + local hoverEnemyObject = getOverClickableEnemyObject(obj, IMouse.GetXPos(), IMouse.GetYPos()); + + if (hoverEnemyObject) + { + yPos = hoverEnemyObject.getYPos(); + + if (hoverEnemyObject.getZPos() > 0) + { + zPos = hoverEnemyObject.getZPos(); + } + + zPos = objectManager.getFieldZPos(IMouse.GetYPos(), yPos, ENUM_DRAWLAYER_NORMAL); + } + + sq_SetCurrentAttackInfo(obj, obj.sq_GetDefaultAttackInfo(0)); + obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),STATE_ATTACK); + sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); + + obj.sq_StartWrite(); + sq_BinaryWriteWord(0); // 涡嘐 + sq_SendCreatePassiveObjectPacketPos(obj, 24353, 0, xPos, yPos, zPos); + } + } +} + + +// 葆办蝶 帼?桧 机腑击阳 籀葬肾横捡 ?朝 蝶鉴?煎撮蝶 殓栖棻. +function onMouseButtonUp_ProcSkill(obj, usingSkillIndex) +{ + if (!obj) + return; + + if (usingSkillIndex == SKILL_MGRAB) + { + //onMouseButtonUp_Mgrab(obj); + } +} + + + +function onMouseLeftButtonDown_CreatorMage(obj) +{ + if (!obj) + return; + + // 避历击 隆 菟横谛摹 寰腌栖棻. + if (obj.isDead()) + return; + + local objectManager = obj.getObjectManager(); + + if (!objectManager) + return; + + // 葆办蝶煎 螃帼胀 嬴桧蛊 + local overItem = obj.getOverItemObject(); + + if (overItem) + { + // 尔寰赅菊阳侥缣 濡卫 嬴桧蛊毡朝 谢?煎 鬲棻陛 给嬴褫栖棻. + local beforePosX = obj.getXPos(); + local beforePosY = obj.getYPos(); + local beforePosZ = obj.getZPos(); + + local itemPosX = overItem.getXPos(); + local itemPosY = overItem.getYPos(); + + sq_SetCurrentPos(obj, itemPosX, itemPosY, 0); + + obj.procGetItem(); + + sq_SetCurrentPos(obj, beforePosX, beforePosY, beforePosZ); + return; + } + + local usingSkillIndex = getLButtonSkill(obj); + + onMouseButtonDown_ProcSkill(obj, usingSkillIndex); +} + + +function onMouseLeftButtonUp_CreatorMage(obj) +{ + if (!obj) + return; + + // 避历击 隆 菟横谛摹 寰腌栖棻. + if (obj.isDead()) + return; + + local usingSkillIndex = getLButtonSkill(obj); + + + onMouseButtonUp_ProcSkill(obj, usingSkillIndex); +} + +function onMouseRightButtonDown_CreatorMage(obj) +{ + if (!obj) + return; + + // 避历击 隆 菟横谛摹 寰腌栖棻. + if (obj.isDead()) + return; + + local usingSkillIndex = getRButtonSkill(obj); + + //歜卫 ?机 + //sq_OpenPopupWindow(379, 279, 499, 1000); + // + + onMouseButtonDown_ProcSkill(obj, usingSkillIndex); + +} + + +function onMouseRightButtonUp_CreatorMage(obj) +{ + if (!obj) + return; + + // 避历击 隆 菟横谛摹 寰腌栖棻. + if (obj.isDead()) + return; + + local usingSkillIndex = getRButtonSkill(obj); + + onMouseButtonUp_ProcSkill(obj, usingSkillIndex); + +} + + +function onMouseMoveCharacter_CreatorMage(obj, x, y) +{ + if (!obj) + return; + + // 避历击 隆 菟横谛摹 寰腌栖棻. + if (obj.isDead()) + return; + + if (!obj.isMyControlObject()) + return; + + if (!IsInBattleCreator(obj)) + return; + + if (!sq_IsClipCursor()) + return; + + // 骁匙击 颤坚 毡戏贼 葆办蝶 奢问击 ? 热 桡蝗栖棻. + if (sq_IsRidingObject(obj)) + return; + + local stage = sq_GetObjectManagerStage(obj); + + if (!stage) + return; + + x = IMouse.GetXPos(); + y = IMouse.GetYPos(); + + local control = stage.getMainControl(); + + local usingSkillIndex = -1; + + if (control.IsLBDown()) + { + usingSkillIndex = getLButtonSkill(obj); + } + else if(control.IsRBDown()) + { + usingSkillIndex = getRButtonSkill(obj); + } + + // ?营 噙坚毡朝 蝶鉴桧 毡朝虽 ?学?琐栖棻. + if (usingSkillIndex == SKILL_FIREWALL) + { + onMouseMoveCharacter_Firewall(obj, x, y); + } + else if (usingSkillIndex == SKILL_WOODFENCE) + { + onMouseMoveCharacter_WoodFence(obj, x, y); + } + else if (usingSkillIndex == SKILL_MGRAB) + { + } + +} + + + +function drawAppend_CreatorMage(obj, isOver, x, y) +{ + if (!obj.isMyControlObject()) + return 0; + + + return 0; + +} + + + \ No newline at end of file diff --git a/character/creatormage/creatormage_header.nut b/character/creatormage/creatormage_header.nut new file mode 100644 index 0000000000000000000000000000000000000000..acbffecde4c5c2d3b665c420be275b9ae30c27d5 GIT binary patch literal 4476 zcmds5%~RV}5YH9Q_kY04^t?jLc-r7)TGn0@Q2(5>j zPeTZw=?qOuFz#PtS^6)!yHBztBR5>Qzy-9w_jZ4~@9oE9c$m4nuRG0ccWs5aSI-OX z(XQ8c*KO^CeAoT6!Maa3x{GHFgx>3xSKBXimsY&`3)cC0v2$`*@Ge{KPm8SJT|Ft_ zBLC?nM^FWq`mJlw@aZ?-|L`62-oN+joBqikonNn+Tf1_1Y6Y^=*zN9ZyXR}}&W5{x z{W;5KhJjj=&;=0+Hxq5N(pfohe|yn+ega%r=i;rm^eoVl&7hi3?(K(2TDD@V%ssm3 zo^3z?n76s!UEIEJ!}qNpqHoP;dqrwzjdx+jCwyhLr9-L=$YSA`KXR@qJ zIU_?~e#SmW@Z)3(&kiS;w#6hPSEkG{L}=vH>oK10d7z#N^S^nmr_yk zM1WhBijp$|+^CapS4~qZDm;{pkr_3Z0+BFVGf?Y@`cns>zk*@1hK*P5@Iq|+Opr;fiv$56$Z$m+#pWl19V+%!KHH#TJGu_=J6=8?!T|R z)#NoKZ5T0BHa6e}cA5v?v-LYF3o@GY2?NO$255^rOJjznPZ~Va63HTA3{%t1Te?o9 z3Zy;G&rW5^R3?yB9!e8Uo{>n9sKW7unATxd%TRdu+PGAZKt-r`-Y`m&s$Qf7$U{Bk z>l0!@;w_JeK*EOkDpQk$A=rrt1qqCX+R#Q6-RpFW;093lb=cZRjPwJRV!$lL`_QVjk9@PE&)RV*uOSL_Z?R5XI0+ z00Ir#1fC`~1#(f2ok*}Hb`kTvW4w)tax4e|9JU@Z*^6HaD9W+W2Y8rG`QB;u0V3Y2 z(7#@_B3r%tkPwSGx<0fCpG*#-@WL=FxJk@G@Ut0PE2}WP8qlGs?m3SU6hzGFVdn2O z-8XIQOYoM4e0ERUP=*=4X;97s~ZOXZI2`iai0MhjliiIdEqcO^4C0s#E=?y5iR_u@CV#HdJkT$gjY|J)8N~DNZZql s{V+HM_=g9N2Iz*lK!uk;pAG68L0q7KHo)bW=a%+0F~N?2NBHQ`e|f%@ng9R* literal 0 HcmV?d00001 diff --git a/character/creatormage/creatorwind/creatorwind.nut b/character/creatormage/creatorwind/creatorwind.nut new file mode 100644 index 0000000000000000000000000000000000000000..1773e6c2b416281ec26082b34ec842fbdb2a0550 GIT binary patch literal 4071 zcmcInTW=Fb6z;1dnc7d>ZY*7o{Rh@es);<=nT=li~M*}(y2YD87CayF^P zGf6o+nK_x7NT|`!7Y9jnaA0ttST*ua$uvm*49(9bFVK9|(Q-OfW=p!R#x1HjrggGp z6eKfuc4%ue&P` z+{dpXU{g2qnogX#3MIp2hC0G2=Aq(f4)-->6zB!!B=@9LBoeF@5da7z zgpq{ocbW^6gNKK}WGG}BvaZL^Xx0oBE{tn4^te`?q5iv}PzNNTZxEJd5IMDKQyZa$ zPyoV+{k591r)(aAq>QG<#@dO(hv72D(z@Do-Zx-4CurV@>r}HO;i@prchXh+jMPU6 zLq`d4W><4IBI(}Qim_1neYsFjsKYQ$Yx!B~NL^A26TXzrq$V?|?6f+iBr{>+SXIhh z5rE(Vq6m0|;I9KFhEh<9akE_3j6%{tHSSZ0_ySiAi>ih7aS;uJsdb2HU8m=08!dPg z*T-W?eqH2PuU)pfZ!fz`%aA$i zOWyK}#?>8f@fPtm|L~R;+|_l`Sp3CZxfT<-LcBYR?$WONcI9(8-&lH7zr0DlJQ6*8 zBoh5BawPgyOLDy&8OcnJCMV=fX7VJXE=ZLiFvyf?`1lxmKNRr2+WC%~-0UvbRJxOt8S z*{_)PDe)2%ms4re=1If_1iRC%-RbV#)2-dp{;qfu%$>lLjN~yj)pINYZX7*oZdV{b z{oPhj|FI4BD^|&HqyvOA&{^OQ@Z5uQSUP+($S}yXcRy$<7WMc0ns@ykuiUjCUXj}C zyHJU1%MVFyYs1}LYg~ERD$eg!LA&cO@{P^Hdp_@7yH33IJ$H8-6z%>r?><~7{BhFw z{x9eT%!eCKLEOI3@$!3BV|XEkhBueGO*ZD2y~Wq_o?XWgd7hJOmOCSJ8HYB;h{Dr?w)rTCPRog7!?iIf_bl`QX5T)zydtu3ek zF^r?W17KVt-u9K+>L!!`_+7vJD{-&hhP3yA4IGC<#Ql4rcJG;Y=?(PVFu~fg^1$0( zMbIB^3A12HoFjo2-0nc_{s!Cu=$b$t7WNaEO5R; zX(0m*6kqV~MjW%Ko0=mHkwe6frM1XX0P6rCBdTaAub`onQ8XnbolGY9#KPpjenZeb zmyz@k-#Q_WO(oSt@|Zj|mi5nfEZV-ifSCU;4~Iz^9l{_ImUbQ?Z;m){+z+m;#Y0O7 zc7=*XE1E^|dS_dJI&)EsG=UkC={#t~G}4xt|6l`g)A%48Nu$t8)!vr+G&9lSA|-o# z4!m$IQ=iP8g(e^k4G}=W9~Myv5IRCH@+R2-pb_v{*Y9qODmcC0+AhS_Z>obqZXyAS zVa=pto?|0EdzX>a$tyWeAP^__1RJMUKb2rZfxl^qAB>n_|1 zS{c4CtZ)w7Ny(TQF)zR*r8w36Y(FG>$MHX#N0>fd2qema@V^ia_Y8^SmS6yN;ij>8 TKLT+3u)jY-5V4PF{F8qHh&P4= literal 0 HcmV?d00001 diff --git a/character/creatormage/firehurricane/firehurricane.nut b/character/creatormage/firehurricane/firehurricane.nut new file mode 100644 index 0000000..d3eadc5 --- /dev/null +++ b/character/creatormage/firehurricane/firehurricane.nut @@ -0,0 +1,317 @@ + +SUB_STATE_FIREHURRICANE_0 <- 0 +SUB_STATE_FIREHURRICANE_1 <- 1 + +function checkExecutableSkill_FireHurricane(obj) +{ + if (!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_FIREHURRICANE); + + if (b_useskill) + { + print(" checkExecutableSkill_FireHurricane"); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_FIREHURRICANE_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_FIREHURRICANE, STATE_PRIORITY_USER, true); + return true; + } + + return false; + +} + +function checkCommandEnable_FireHurricane(obj) +{ + if(!obj) return false; + + local state = obj.sq_GetState(); + + local skill_level = obj.sq_GetSkillLevel(SKILL_FIREHURRICANE); + if(state == STATE_ATTACK) + { + return obj.sq_IsCommandEnable(SKILL_FIREHURRICANE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + return true; +} + +function onSetState_FireHurricane(obj,state,datas,isResetTimer) +{ + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + print(" onSetState_FireHurricane:" + substate); + + if (substate == SUB_STATE_FIREHURRICANE_0) + { + //setCreatorSkillStateSkillIndex(obj, -1); + + local skill_level = obj.sq_GetSkillLevel(SKILL_FIREHURRICANE); + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_FIRE_HURRICANE); + obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACKINFO_FIRE_HURRICANE); + + //local speedRate = 1.0; + // + //obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + //SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + // + obj.getVar("state").clear_ct_vector(); + + obj.getVar("state").push_ct_vector(); + local t = obj.getVar("state").get_ct_vector(0); + t.Reset(); + t.Start(100000,0); + + + local multiHitTerm = obj.sq_GetIntData(SKILL_FIREHURRICANE, 0); // 0.棻钦?? 除问 + + obj.sq_timer_.setParameter(multiHitTerm, -1); + obj.sq_timer_.resetInstant(0); + + local skill_level = obj.sq_GetSkillLevel(SKILL_FIREHURRICANE); + // 1.虽楼卫除 + local attackTime = obj.sq_GetLevelData(SKILL_FIREHURRICANE, SKL_LV_1, skill_level); + + local power = obj.sq_GetPowerWithPassive(SKILL_FIREHURRICANE, STATE_FIREHURRICANE, SKL_LV_0, -1,1.0); + obj.sq_SetCurrentAttackPower(power); + + + local ani = sq_GetCurrentAnimation(obj); + + if (ani) + { + // 2.?葬馨樯 饵桧锷 (%) (100桧 晦狱) + local imageRate = sq_GetLevelData(obj, SKILL_FIREHURRICANE, SKL_LV_2, skill_level); + print(" imageRate:" + imageRate); + ani.setImageRateFromOriginalOnlyChild(imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0); + sq_SetAttackBoundingBoxSizeRate(ani, imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0, 1.0); + } + + + obj.sq_PlaySound("R_CR_HURRICANE"); + + } + else if (substate == SUB_STATE_FIREHURRICANE_1) + { + local ani = sq_GetCurrentAnimation(obj); + } + +} + +function prepareDraw_FireHurricane(obj) +{ + + if(!obj) return; + +} + +function onEnterFrame_FireHurricane(obj, frameIndex) +{ + if (!obj) + return; + + local t = obj.getVar("state").get_ct_vector(0); + local time = 0; + + if(t) + time = t.Get(); + + local ani = sq_GetCurrentAnimation(obj); + + if(!ani) + return; + + + if (frameIndex == 2) + { + obj.sq_PlaySound("FIREHURRICANE_BURST"); + } + + local loopStartFrameIndex = 15; + local loopEndFrameIndex = loopStartFrameIndex + 3; + local endFrameIndex = 24; + + local frmIndex = ani.GetCurrentFrameIndex(); + + if (frmIndex > loopEndFrameIndex && frmIndex < endFrameIndex) + { + local skill_level = obj.sq_GetSkillLevel(SKILL_FIREHURRICANE); + local attackTotalTime = obj.sq_GetLevelData(SKILL_FIREHURRICANE, SKL_LV_1, skill_level); // 1.虽楼卫除 + + if (time > attackTotalTime) + { + print(" frmIndex:" + frmIndex + " endFrameIndex:" + endFrameIndex + " Time:" + attackTotalTime); + + if (obj.isMyControlObject()) + { + sq_SendChangeSkillEffectPacket(obj, SKILL_FIREHURRICANE); + //ani.setEnd(false); + //ani.setCurrentFrameWithChildLayer(endFrameIndex + 1); + } + } + else + { + print(" loopStartFrameIndex:" + loopStartFrameIndex); + ani.setEnd(false); + ani.setCurrentFrameWithChildLayer(loopStartFrameIndex); + sq_AnimationProc(ani); + } + } +} + +function onProc_FireHurricane(obj) +{ + if (!obj) return; + + local t = obj.getVar("state").get_ct_vector(0); + local time = 0; + + if(t) + time = t.Get(); + + if (obj.sq_timer_.isOnEvent(time) == true) + { + obj.resetHitObjectList(); + } + + //obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + + +} + +function onProcCon_FireHurricane(obj) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if (substate == SUB_STATE_FIREHURRICANE_0) + { + if (sq_IsDownKey(obj, 1, true)) + { + print(" Enter jump Command"); + sq_SendChangeSkillEffectPacket(obj, SKILL_FIREHURRICANE); + } + } + +} + +function onEndCurrentAni_FireHurricane(obj) +{ + if (!obj.isMyControlObject()) + { + return; + } + + local substate = obj.getSkillSubState(); + + print(" endani"); + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +function onChangeSkillEffect_FireHurricane(obj, skillIndex, reciveData) +{ + if (!obj) + return; + + + local substate = obj.getSkillSubState(); + + if (substate == SUB_STATE_FIREHURRICANE_0) + { + local endFrameIndex = 24; + local ani = sq_GetCurrentAnimation(obj); + + if(!ani) + return; + + obj.setSkillSubState(SUB_STATE_FIREHURRICANE_1); + + ani.setEnd(false); + ani.setCurrentFrameWithChildLayer(endFrameIndex + 1); + } + +} + + + +function onKeyFrameFlag_FireHurricane(obj,flagIndex) +{ + + if(!obj) return false; + + return true; + +} + +function onEndState_FireHurricane(obj,new_state) +{ + + if(!obj) return; + +} + +function onAfterSetState_FireHurricane(obj,state,datas,isResetTimer) +{ + + if(!obj) return; + +} + +function onBeforeAttack_FireHurricane(obj,damager,boundingBox,isStuck) +{ + + if(!obj) return; + +} + +function onAttack_FireHurricane(obj,damager,boundingBox,isStuck) +{ + + if(!obj) return; + +} + +function onAfterAttack_FireHurricane(obj,damager,boundingBox,isStuck) +{ + + if(!obj) return 0; + + return 1; + +} + +function onBeforeDamage_FireHurricane(obj,attacker,boundingBox,isStuck) +{ + + if(!obj) return; + +} + +function onDamage_FireHurricane(obj,attacker,boundingBox) +{ + + if(!obj) return; + +} + +function onAfterDamage_FireHurricane(obj,attacker,boundingBox) +{ + + if(!obj) return; + +} diff --git a/character/creatormage/firemeteo/firemeteo.nut b/character/creatormage/firemeteo/firemeteo.nut new file mode 100644 index 0000000..7e3e2eb --- /dev/null +++ b/character/creatormage/firemeteo/firemeteo.nut @@ -0,0 +1,82 @@ + +SUB_STATE_FIREMETEO_0 <- 0 + + +function onMouseButtonDown_FireMeteo(obj) +{ + if (!obj) return; + + local objectManager = obj.getObjectManager(); + local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL); + local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), 0, ENUM_DRAWLAYER_NORMAL); + local zPos = 61; + + if (yPos < TILE_FLOOR_START_Y) + { // 夥款桧 卫蒙?朝 y谢?塭贼.. + return; + } + + + local ptl = sq_GetParticleInfo(obj, "Particle/CreatorFireMeteo.ptl"); + + sq_BinaryParameterStartWrite(); + // ?塭嘐搅陛 伞鼠 号嬴 夥桧伞葬 等桧颤蒂 桧辨?栖棻. + // x, y, z == 亿郭?卫粽螃粽薛?陛 轿溘腆 够 + // wx, wy == 唳坚?卫陛 轿溘腆 够 + // delay ControlRate 唳坚?卫暧 蝶?萄 亵瞰辨 %高 + // warningMarkIndex == 唳坚?卫暧 谦盟 : 0 寰尔歜, 1 尔鳝, 2 渠?, 3 尔鳝 (嬴捱Only), 4 渠? (嬴捱Only) + local moveVariable1 = 500; + local naaMoveVariable1 = -400; // -800 + local createXDistance = xPos - moveVariable1; + local createYDistance = yPos; + local createZDistance = -naaMoveVariable1; + + local dir = sq_GetDirection(obj); + if (dir == ENUM_DIRECTION_LEFT) + { + createXDistance = xPos + moveVariable1; + } + + sq_BinaryParameterWriteDword(createXDistance); + sq_BinaryParameterWriteDword(createYDistance); + sq_BinaryParameterWriteDword(createZDistance); + + sq_BinaryParameterWriteDword(xPos); + sq_BinaryParameterWriteDword(yPos); + + sq_BinaryParameterWriteDword(ENUM_DIRECTION_NEUTRAL); + sq_BinaryParameterWriteDword(200); // int delayControlRate + + local markType = obj.sq_GetIntData(SKILL_FIREMETEO, 0); // 颤啪? 葆觼 谦盟(渗唳?虽 蜓匙!) + sq_BinaryParameterWriteDword(markType); //int warningMarkIndex + + + // 奢问溘 跷陛热纂 蒙机 + local level = sq_GetSkillLevel(obj, SKILL_CREATORFLAME); + + // 1.奢问溘 跷陛 热纂 (%) + local addValue = sq_GetLevelData(obj, SKILL_CREATORFLAME, SKL_LV_1, level); + local addRate = addValue.tofloat() / 100.0; + + print(" addRate:" + addRate); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_FIREMETEO); + + local power = obj.sq_GetPowerWithPassive(SKILL_FIREMETEO, STATE_FIREMETEO, SKL_LV_0,-1,addRate.tofloat()); + local sizeRate = sq_GetLevelData(obj, SKILL_FIREMETEO, SKL_LV_1, skillLevel); + + + // 诡才螃 奢问溘 ?卫 + sq_BinaryStartWrite(); + // 奢问溘 撮? + sq_BinaryWriteDword(power); + // size rate + sq_BinaryWriteDword(sizeRate); + + + local skill_level = obj.sq_GetSkillLevel(SKILL_FIREMETEO); + sq_CreatePassiveObjectAfterWarning(obj, 23501, skill_level, ptl); + + obj.sq_PlaySound("R_METEO_CASTING"); +} + diff --git a/character/creatormage/firewall/firewall.nut b/character/creatormage/firewall/firewall.nut new file mode 100644 index 0000000..c02adc2 --- /dev/null +++ b/character/creatormage/firewall/firewall.nut @@ -0,0 +1,68 @@ + +SUB_STATE_FIREWALL_0 <- 0 +SUB_STATE_FIREWALL_1 <- 1 + + +function onMouseMoveCharacter_Firewall(obj, x, y) +{ + if (!obj) + return; + + local objectManager = obj.getObjectManager(); + + local x1 = getCreatorBeforePosX(obj); + local y1 = getCreatorBeforePosY(obj); + local x2 = objectManager.getFieldXPos(x, ENUM_DRAWLAYER_NORMAL); + local y2 = objectManager.getFieldYPos(y, 0, ENUM_DRAWLAYER_NORMAL); + local zPos = 0; + + + print(" x2:" + x2 + " y2:" + y2 + " TILE_FLOOR_START_Y:" + TILE_FLOOR_START_Y); + + if (y2 < TILE_FLOOR_START_Y) + { // 夥款桧 卫蒙?朝 y谢?塭贼.. + return; + } + + local appendage = getCreatorMageAppendageByType(obj, CREATOR_TYPE_FLAME); + + if (!appendage) + return; + + local dist = getDist2(x1, y1, x2, y2); + + local term = obj.sq_GetIntData(SKILL_FIREWALL, 0); // 当撩 除问 + + local time = appendage.getTimer().Get(); + + print( " term:" + term + " dist:" + dist + " time:" + time); + if (term <= dist || time > 100) + { + local consumeValue = getCreatorSkillConsumeValue(obj, SKILL_FIREWALL); + + if (useCreatorSkill(obj, SKILL_FIREWALL, x2, y2, consumeValue)) + { + // 奢问溘 跷陛热纂 蒙机 + local level = sq_GetSkillLevel(obj, SKILL_CREATORFLAME); + // 1.奢问溘 跷陛 热纂 (%) + local addValue = sq_GetLevelData(obj, SKILL_CREATORFLAME, SKL_LV_1, level); + local addRate = addValue.tofloat() / 100.0; + + // 0.奢问溘 + local power = obj.sq_GetPowerWithPassive(SKILL_FIREWALL, STATE_FIREWALL, SKL_LV_0,-1, addRate.tofloat()); + + local skillLevel = sq_GetSkillLevel(obj, SKILL_FIREWALL); + // 1.?桧横错 饵桧锷 + local sizeRate = sq_GetLevelData(obj, SKILL_FIREWALL, SKL_LV_1, skillLevel); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(power); // ? + sq_BinaryWriteDword(sizeRate); // ?桧横错 饵桧锷 + + sq_SendCreatePassiveObjectPacketPos(obj, 23500, 0, x2, y2, zPos); + + } + } +} + + diff --git a/character/creatormage/iceplate/iceplate.nut b/character/creatormage/iceplate/iceplate.nut new file mode 100644 index 0000000000000000000000000000000000000000..a0ac037b3ce48d1d21d7eb70b76366766cc395cb GIT binary patch literal 2336 zcmbVOZEM?B6wX&0{2y)$1sPmhPFFT)v*6f@r%irAR_f-H(Cq6>iz;Q3+{`QcunzWV z8}yCLYeq@dx3p_1Y|s&!{hC=({>9F@SC-#0m)3+JpL_0ep7Wd+IhAazt>_J{ph>!1 zl6SRiI_U=D33?^R5F$9bnTXJIyQ0aiqrMzO4s)tyX0)!y4<35%kZh-eEwxR zmAsKkCd`g-2EP%P`d!z)1Sa^ioR(n`u+x@bF>GUlx?~BzXE&%{8#fE-i7RdD`B&?X z$Gu0l@!qOQtu`JCG9#8PQ|2qAGeoMcRrHctXexzuN!6=0wNg+RG^c{N>+^8&a157y z1zd3+G|$!S5Fv)YOf*@M^i`!+Q&D|Y)7L?%#0`?mk-@`9!5{wwdr!#Vr|04A{&KMU z8|j6w_Lm2HFT%gxWV7Iz7zz0;55P0na=fb}4Ves6(wQ#kg@s!p-d8$^QyN-Wy+CKc zL$(a+<0Uc_8wn=bLua_o)s$7KsL8deu1KpIR*703eT%Cqmp@^?*acW`VA2?85{E(Z z;KP&iHciXYEqa|=QI0%=2HF)g3ysfYMTuKEx{abf+CSNO865sX!q=})`uC5&e{pL1fD~8pjvGR;^$?y$S zeik1simqJI^BKaJu}a2RDvTIF4N6CO3d}1raWW>z*d>=cRzy&arU114bqLO4ShGt zezItBq{R#wtN1ViuwOB4!|gSE!}Xi435$lE#Rtq*+IHNwfI-uj68wX0aCERt!Y6Nn z{$p|us7>BkW%@CxCNtxS;bk1le-Cd3PoJGUI3R=Pcd?5G_jbaYFTsiXg?mqf-+yJ# zyjYb&SuW}@=4DCKn+3HhSIc_6w(_Z50!2RfNX#$d;N)^Zr$Oy@(WM}6RF@jtgLR{| zNqyWttX1Y9X2^w1JhS`>*Ay%%5MszNH~WF3SdF^j8rP^#-T&1%_81d8UKE(jEY_4K zlA5gBX_)z$vY+Plo{`^1b85j=r8P~B-WPMzTNFWST;-=4>uup&e8?`G>^~gbdj>6f>j&sk625wTeE)$E{Jk@{`{#1lKO*7ooxzX&Gq_ad zQWzpL9!O)`aBb7xs6a&7Zqu(h4fxNQj1Ahvkj`DLNa2)TEp(uBnmitF*ToAL#fuZu zoFR7CvRH9vTM;Zk>>b7-!iU%JuoK1`A9^Ti{Al^WuajQG>Dq1KtQx;7^kSi*!C;<6 NQt(bqB^MSJ{sZqh3Az9P literal 0 HcmV?d00001 diff --git a/character/creatormage/icerock/icerock.nut b/character/creatormage/icerock/icerock.nut new file mode 100644 index 0000000..5317cea --- /dev/null +++ b/character/creatormage/icerock/icerock.nut @@ -0,0 +1,41 @@ + +SUB_STATE_ICEROCK_0 <- 0 + + +function onMouseButtonDown_IceRock(obj) +{ + if (!obj) return; + + local objectManager = obj.getObjectManager(); + local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL); + local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), 0, ENUM_DRAWLAYER_NORMAL) + 20; + local zPos = 61; + + + if (yPos < TILE_FLOOR_START_Y) + { // 夥款桧 卫蒙?朝 y谢?塭贼.. + return; + } + + // 0.奢问溘 + + // 奢问溘 跷陛热纂 蒙机 + local level = sq_GetSkillLevel(obj, SKILL_CREATORICE); + + // 1.奢问溘 跷陛 热纂 (%) + local addValue = sq_GetLevelData(obj, SKILL_CREATORICE, SKL_LV_1, level); + local addRate = addValue.tofloat() / 100.0; + + local power = obj.sq_GetPowerWithPassive(SKILL_ICEROCK, STATE_ICEROCK, 0,-1,addRate.tofloat()); + + // 1. 棻钦?? 除问 + local multiHitTerm = sq_GetIntData(obj, SKILL_ICEROCK, 1); + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(power); // ? + sq_BinaryWriteDword(multiHitTerm); // 棻钦?? + sq_SendCreatePassiveObjectPacketPos(obj, 23503, 0, xPos, yPos, zPos); + + obj.sq_PlaySound("ICESTONE_READY"); +} + diff --git a/character/creatormage/iceshield/iceshield.nut b/character/creatormage/iceshield/iceshield.nut new file mode 100644 index 0000000..971de05 --- /dev/null +++ b/character/creatormage/iceshield/iceshield.nut @@ -0,0 +1,166 @@ + +SUB_STATE_ICESHIELD_0 <- 0 +SUB_STATE_ICESHIELD_1 <- 1 + +//STATE_ICESHIELD <- 58 +//SKILL_ICESHIELD <- 135 + + +function checkExecutableSkill_IceShield(obj) +{ + if (!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_ICESHIELD); + + if (b_useskill) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_ICESHIELD_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_ICESHIELD, STATE_PRIORITY_USER, true); + return true; + } + + return false; +} + +function checkCommandEnable_IceShield(obj) +{ + if(!obj) return false; + + local state = obj.sq_GetState(); + + local skill_level = obj.sq_GetSkillLevel(SKILL_ICESHIELD); + if(state == STATE_ATTACK) + { + return obj.sq_IsCommandEnable(SKILL_ICESHIELD); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + return true; +} + +function onSetState_IceShield(obj,state,datas,isResetTimer) +{ + if(!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + + if (substate == SUB_STATE_ICESHIELD_0) + { + //setCreatorSkillStateSkillIndex(obj, -1); + + local skill_level = obj.sq_GetSkillLevel(SKILL_ICESHIELD); + + obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_SHIELD); + + local speedRate = 1.0; + + obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); + + obj.getVar("state").clear_ct_vector(); + + obj.getVar("state").push_ct_vector(); + local t = obj.getVar("state").get_ct_vector(0); + t.Reset(); + t.Start(100000,0); + + + local multiHitTerm = obj.sq_GetIntData(SKILL_ICESHIELD, 0); // 0.棻钦?? 除问 + + obj.sq_timer_.setParameter(multiHitTerm, -1); + obj.sq_timer_.resetInstant(0); + + local skill_level = obj.sq_GetSkillLevel(SKILL_ICESHIELD); + // 0.嵘虽卫除 + local attackTime = obj.sq_GetLevelData(SKILL_ICESHIELD, SKL_LV_0, skill_level); + + obj.sq_PlaySound("R_CR_ICESHIELD"); + } + else if (substate == SUB_STATE_ICESHIELD_1) + { + + } +} + +function onProc_IceShield(obj) +{ + + if(!obj) return; + +} + +function onProcCon_IceShield(obj) +{ + + if(!obj) return; + +} + +function onEndCurrentAni_IceShield(obj) +{ + + if(!obj) return; + + if (!obj.isMyControlObject()) + { + return; + } + + local substate = obj.getSkillSubState(); + + //if (substate == SUB_STATE_FIREHURRICANE_0) + //{ + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + //} + +} + +function onKeyFrameFlag_IceShield(obj,flagIndex) +{ + if(!obj) return false; + + if (flagIndex == 1) + { + obj.sq_PlaySound("BREAKING_RUSH"); + if (obj.sq_IsMyControlObject()) + { + local skill_level = obj.sq_GetSkillLevel(SKILL_ICESHIELD); + // 0.嵘虽卫除 + local time = obj.sq_GetLevelData(SKILL_ICESHIELD, SKL_LV_0, skill_level); + + obj.sq_StartWrite(); + obj.sq_WriteWord(time); + obj.sq_SendCreatePassiveObjectPacket(23504, 0, 0, 0, 1); + } + } + + return true; + +} + +function onEndState_IceShield(obj,new_state) +{ + + if(!obj) return; + +} + +function onAfterSetState_IceShield(obj,state,datas,isResetTimer) +{ + + if(!obj) return; + +} + diff --git a/character/creatormage/mgrab/mgrab.nut b/character/creatormage/mgrab/mgrab.nut new file mode 100644 index 0000000..9b68a06 --- /dev/null +++ b/character/creatormage/mgrab/mgrab.nut @@ -0,0 +1,574 @@ + +SUB_STATE_MGRAB_0 <- 0 +SUB_STATE_MGRAB_1 <- 1 + +function setStateMouseGrab(obj) +{ + if (!obj) return; + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + //local grabNum = obj.sq_GetIntData(SKILL_MGRAB, 1); //1. 葆办蝶煎 濩击 热 毡朝 ?热 + + //obj.getVar("MouseGrab").clear_vector(); + //obj.getVar("MouseGrab").push_vector(grabNum); + // 觼葬缣桧搅暧 蝶鉴樯策蝶蒂 撮??栖棻. + + //setCreatorSkillStateSkillIndex(obj, SKILL_MGRAB); + //setCreatorSkillCount(obj, grabNum); + + releaseOutLine(obj, "grabobj"); + + + obj.getVar("mgrab").clear_vector(); + obj.getVar("mgrab").push_vector(0); + obj.getVar("mgrab").push_vector(0); + + obj.getVar("mgrab").clear_timer_vector(); + obj.getVar("mgrab").push_timer_vector(); + + local t = obj.getVar("mgrab").get_timer_vector(0); + t.setParameter(100, -1); + t.resetInstant(0); + + obj.getVar("mgrab").clear_ct_vector(); + obj.getVar("mgrab").push_ct_vector(); + local timer = obj.getVar("mgrab").get_ct_vector(0); + timer.Reset(); + timer.Start(10000,0); +} + +function grabThrowObject(obj) +{ + local hoverEnemyObject = getOverClickableEnemyObject(obj, IMouse.GetXPos(), IMouse.GetYPos()); + + if (hoverEnemyObject) + { + local grabable = sq_IsGrabable(obj, hoverEnemyObject); + + print(" grab:" + grabable + " holdable:" + sq_IsHoldable(obj, hoverEnemyObject)); + if (sq_IsHoldable(obj, hoverEnemyObject) == true && sq_IsGrabable(obj, hoverEnemyObject) == true) + { // 濩晦陛栋瞳桧塭贼 ?卫?栖棻. + + // 濩擎匙桧 毡朝 唳办缣虏 啪桧虽蒂 还罹鄹栖棻. + local consumeValue = getCreatorSkillConsumeValue(obj, SKILL_MGRAB); + + if (!useCreatorSkill(obj, SKILL_MGRAB, 0, 0, consumeValue)) + return; + // + + + obj.getVar("grabobj").push_obj_vector(hoverEnemyObject); // grabobj + + local activeobj = sq_GetCNRDObjectToActiveObject(hoverEnemyObject); + + if (activeobj) + { + // ?葆葬虏 濩朝棻. + local objListSize = obj.getVar("grabobj").get_obj_vector_size(); + + print(" objListSize:" + objListSize); + + for (local i =0;i 0) + { + data_l[i] = reciveData.readDword(); + } + } + + local targetObj = sq_GetObject(obj, data_l[0], data_l[1]); + + if (targetObj) + { + local xPos = data_l[2]; + local zPos = data_l[3]; + + if (zPos < 0) + zPos = 0; + + local stateTimer = obj.sq_GetStateTimer(); + + if (!obj.getVar("mgrab").get_vector(0)) + { + obj.getVar("mgrab").set_vector(0, xPos); + obj.getVar("mgrab").set_vector(1, zPos); + } + + local state = data_l[4]; + print(" on change state:" + state); + + //if (obj.isMyControlObject()) + { + if (state == 0) + { + if (targetObj.getState() != STATE_HOLD && targetObj.getState() != STATE_DOWN) + { + local act = sq_GetCNRDObjectToActiveObject(targetObj); + + if (act) + { + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_IntVectorPush(sq_GetGlobalIntVector(),0); + sq_AddSetStatePacketActiveObject(act, STATE_HOLD, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE); + print(" onchange setstate hold"); + } + } + } + else if (state == 1) + { + local act = sq_GetCNRDObjectToActiveObject(targetObj); + + if (act) + { + local direction = data_l[5]; + local nX = data_l[6]; + local nY = data_l[7]; + + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_IntVectorPush(sq_GetGlobalIntVector(),direction); + sq_IntVectorPush(sq_GetGlobalIntVector(),0); + sq_IntVectorPush(sq_GetGlobalIntVector(),1); + sq_IntVectorPush(sq_GetGlobalIntVector(),nX); + sq_IntVectorPush(sq_GetGlobalIntVector(),nY); + sq_AddSetStatePacketActiveObject(act,STATE_DOWN, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE); + print(" onchange setstate down:"); + } + } + } + + + sq_SetCurrentPos(targetObj, xPos, targetObj.getYPos(), zPos); + } + +} + + +function prepareDraw_Mgrab(obj) +{ + + if (!obj) return; + +} + +// 剪葬 桧? 颤啃击 琼嬴顶横 葬欐?朝 ?热殓栖棻. +function pushTargetDistanceMinObject(obj, targetObj, distance) +{ + if (!obj) + return; + + local objectManager = obj.getObjectManager(); + + if (objectManager == null) + return; + + if (!targetObj) + return; + + obj.getVar("mgrab").clear_obj_vector(); + + local grabObj = null; + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1) + { + local object = objectManager.getCollisionObject(i); + if (sq_IsHoldable(obj, object) == true && sq_IsGrabable(obj, object) == true) + { // 濩晦陛栋瞳桧塭贼 ?卫?栖棻. + if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE)) + { + local isSame = isSameObject(targetObj, object); + if (isSame) + continue; + + + local activeObj = sq_GetCNRDObjectToActiveObject(object); + // 舱羲 顶缣怃 陛潍 陛梱遴 瞳击 坚艇棻 + + if (activeObj) + { + if (!activeObj.isDead()) + { + local dis = sq_GetDistanceObject(targetObj, object, false); + + if (dis < distance) + { + distance = dis; + grabObj = activeObj; + //obj.getVar("mgrab").push_obj_vector(object); + } + } + } + } + } //if (sq_IsHoldable(obj, hoverEnemyObject) == false && sq_IsGrabable(obj, hoverEnemyObject) == true) + } + + if (grabObj) + { + obj.getVar("mgrab").push_obj_vector(grabObj); + } +} + + +function onProc_Mgrab(obj) +{ + + if (!obj) return; + + if (!obj.isMyControlObject()) + return; + + local objListSize = obj.getVar("grabobj").get_obj_vector_size(); + + if (objListSize <= 0) + return; + + local stage = sq_GetObjectManagerStage(obj); + + if (!stage) + return; + + local control = stage.getMainControl(); + + if (control.IsRBDown()) + { + onMouseMoveButtonDown_Mgrab(obj); + } + else + { + onMouseButtonUp_Mgrab(obj); + } +} + +// 葆办蝶 帼?击 机卫俪击 阳 籀葬?捡肾朝 睡碟殓栖棻. +function onMouseButtonUp_Mgrab(obj) +{ + local objListSize = obj.getVar("grabobj").get_obj_vector_size(); + + print(" onMouseButtonUp_Mgrab:" + objListSize); + for (local i = 0; i < objListSize;++i) + { + + local hoverEnemy = obj.getVar("grabobj").get_obj_vector(i); + if (hoverEnemy) + { + local activeobj = sq_GetCNRDObjectToActiveObject(hoverEnemy); + if (activeobj) + { + local srcX = obj.getVar("mgrab").get_vector(0); + local srcY = sq_GetYPos(activeobj); + local srcZ = obj.getVar("mgrab").get_vector(1); + + if (srcZ < 0) + srcZ = 0; + + local dstX = sq_GetXPos(activeobj); + local dstY = sq_GetYPos(activeobj); + local dstZ = sq_GetZPos(activeobj); + + if (dstZ < 0) + dstZ = 0; + + print(" sx:" + srcX + " sy:" + srcY + " sz:" + srcZ); + print(" dx:" + dstX + " dy:" + dstY + " dz:" + dstZ); + + local distance = sq_GetDistance( srcX, srcZ, dstX, dstZ, true); + + local width = sq_Abs(dstX - srcX); + local h = sq_Abs((dstZ) - (srcZ)); + + print(" h:" + h); + + if (h <= 0) + h = 10; + + local angle = sq_Atan2( h.tofloat(), width.tofloat()); + + local nRevision = distance; + + local cos = nRevision.tofloat() * sq_Cos(angle); + local sin = nRevision.tofloat() * sq_Sin(angle); + + local nX = sq_Abs( cos.tointeger() ) * 2; + local nY = sq_Abs( sin.tointeger() ) * 2; + + + local direction = sq_GetDirection(activeobj); + + if ((dstX - srcX) < 0) + { + nX = -nX; + } + + + direction = 0; + print(" nX:" + nX + " nY:" + nY + " offset:" + (dstX - srcX) + " direction:" + direction + " activeobj:" + activeobj); + sq_IntVectorClear(sq_GetGlobalIntVector()); + sq_IntVectorPush(sq_GetGlobalIntVector(),direction); + sq_IntVectorPush(sq_GetGlobalIntVector(),0); + sq_IntVectorPush(sq_GetGlobalIntVector(),1); + sq_IntVectorPush(sq_GetGlobalIntVector(),nX); + sq_IntVectorPush(sq_GetGlobalIntVector(),nY); + sq_AddSetStatePacketActiveObject(activeobj,STATE_DOWN, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE); + print(" activeobj:" + activeobj + " setstate down:"); + + + local group = sq_GetGroup(activeobj); + local uniqueId = sq_GetUniqueId(activeobj); + + sq_BinaryStartWrite(); + + sq_BinaryWriteDword(group); // 0 + sq_BinaryWriteDword(uniqueId); // 1 + sq_BinaryWriteDword(dstX); // 2 + sq_BinaryWriteDword(dstZ); // 3 + // 1廓擎 state_down鼻鹧殓栖棻. + sq_BinaryWriteDword(1); // 4 + sq_BinaryWriteDword(direction); // 5 + sq_BinaryWriteDword(nX); // 6 + sq_BinaryWriteDword(nY); // 7 + sq_SendChangeSkillEffectPacket(obj, SKILL_MGRAB); + print(" sq_SendChangeSkillEffectPacket down"); + } + } + } + + obj.getVar("mgrab").clear_vector(); + obj.getVar("mgrab").push_vector(0); + obj.getVar("mgrab").push_vector(0); + + releaseOutLine(obj, "grabobj"); + + if (objListSize) + { + obj.sq_PlaySound("R_THROW_MONSTER"); + } +} + +// 葆办蝶 帼?击 棻遴卫俪击 阳 籀葬?捡肾朝 睡碟殓栖棻. +function onMouseMoveCharacter_Mgrab(obj) +{ + onMouseMoveButtonDown_Mgrab(obj); +} + + +function onMouseMoveButtonDown_Mgrab(obj) +{ + local hoverEnemy = obj.getVar("grabobj").get_obj_vector(0); + + if (!hoverEnemy) + { + return; + } + else + { + local objectManager = obj.getObjectManager(); + + local objListSize = obj.getVar("grabobj").get_obj_vector_size(); + + local t = obj.getVar("mgrab").get_ct_vector(0); + local time = 0; + + if(t) + time = t.Get(); + + local skill_level = obj.sq_GetSkillLevel(SKILL_MGRAB); + + + local activeObj = sq_GetCNRDObjectToActiveObject(hoverEnemy); + + if (!activeObj) + { + onMouseButtonUp_Mgrab(obj); + return; + } + + // 跪 颤殓涤煎 濩坚毡朝 譆渠卫除桧 殖塭喂栖棻. + // 0. 橾奁跪 濩坚 毡击阳 譆渠卫除 + // 1. 啻歜萄 濩坚 毡击阳 譆渠卫除 + // 2. 尔蝶跪 濩坚 毡击阳 譆渠卫除 + // 3. ?跨蝶搅 濩坚 毡击阳 譆渠卫除 + // 4. apc 濩坚 毡击阳 譆渠卫除 + + // 橾奁橾隆 蚝岁0 + local columnIndex = SKL_LV_0; + if (sq_IsNamed(activeObj)) + { + // 啻歜萄 橾隆 蚝岁1 + columnIndex = SKL_LV_1; + } + else if (sq_IsBoss(activeObj)) + { + // 尔蝶 橾隆 蚝岁2 + columnIndex = SKL_LV_2; + } + else if (sq_IsHellMonster(activeObj)) + { + // ?跨蝶搅 橾隆 蚝岁3 + columnIndex = SKL_LV_3; + } + else if (sq_IsAiCharacter(activeObj)) + { + // apc橾隆 + columnIndex = SKL_LV_4; + } + + // 濩坚毡击 热 毡朝 譆渠卫除 + local maxTime = obj.sq_GetLevelData(SKILL_MGRAB, columnIndex, skill_level); + + print(" maxTime:" + maxTime + " time:" + time); + + if (time > maxTime) + { + onMouseButtonUp_Mgrab(obj); + } + else + { + for (local i =0;i 0) + return true; + } + + return false; +} + +// 釭暧 葆蝶搅暧 夔?煤螃粽薛?樯虽 羹觼?朝 ?热殓栖棻. +// 阔 ?塭嘐搅煎 瞪殖胀 obj陛 夔?煤 肾朝 ai chr樯虽 羹觼?朝 ?热 殓栖棻. +function isMasterControlObject(obj) +{ + if(!obj) + return false; + + + // 葆蝶搅 议葛搅(狱羹) CNUser::myCharacter_蒂 椭横鹿栖棻. + if(sq_GetMyMasterCharacter()) + { + // CNUser::myCharacter_ 缣怃 myControlObject_ 漱搅缣怃 find_if蒂 桧辨?罹 蜃朝虽 嬴棋虽 掘?鹿栖棻. + local bRet = sq_GetMyMasterCharacter().isMyControlObject(obj); + + return bRet; + } + return false; +} + + +// 蹂羶? varStr暧 obj_vector 缣 毡朝 obj菟暧 +// 谖婉摹击 棻 虽邺栖棻. +function releaseOutLine(obj, varStr) +{ + local objListSize = obj.getVar(varStr).get_obj_vector_size(); + for(local i =0;i destinationXPos_ && xMoveDirection_ == ENUM_DIRECTION_RIGHT) + //{ + //// x谢? 尔姜睡碟殓栖棻. 迹? 谢?尔棻 螃帼腑击 唳办 尔姜?朝 睡碟殓栖棻. + //// 螃艇薹戏煎 虽釭蚁击 阳 : 谢? 尔姜 ? 姜虽 + ////sq_MoveToNearMovablePos(obj, destinationXPos_, obj.getYPos(), obj.getZPos(), destinationXPos_, obj.getYPos(), obj.getZPos(), 100, -1, 5); + //obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); + //} + //else if (obj.getXPos() < destinationXPos_ && xMoveDirection_ == ENUM_DIRECTION_LEFT) + //{ + //// x谢? 尔姜睡碟殓栖棻. 迹? 谢?尔棻 螃帼腑击 唳办 尔姜?朝 睡碟殓栖棻. + //// 豭薹戏煎 虽釭蚁击 阳 : 谢? 尔姜 ? 姜虽 + ////sq_MoveToNearMovablePos(obj, destinationXPos_, obj.getYPos(), obj.getZPos(), destinationXPos_, obj.getYPos(), obj.getZPos(), 100, -1, 5); + //obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); + //} + //else if (obj.getXPos() < destinationXPos_) + + local offset = sq_Abs(obj.getXPos() - destinationXPos_); + if(offset <= 1) + { + sq_MoveToNearMovablePos(obj, destinationXPos_, obj.getYPos(), obj.getZPos(), destinationXPos_, obj.getYPos(), obj.getZPos(), 100, -1, 5); + obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); + } + else + { + //print(" offset:" + offset); + if (obj.getXPos() < destinationXPos_) + { + obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_RIGHT); + } + else if (obj.getXPos() > destinationXPos_) + { + obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_LEFT); + } + else + obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); + } + ////////////////////////////////////////////////// + + + // 办摹 y谢?缣 渠? 寞?击 扑姜?栖棻. + if (obj.getYPos() > destinationYPos_ && yMoveDirection_ == ENUM_DIRECTION_DOWN) + { + // y谢? 尔姜睡碟殓栖棻. 迹? 谢?尔棻 螃帼腑击 唳办 尔姜?朝 睡碟殓栖棻. + // 嬴楚薹戏煎 虽釭蚁击 阳 : 谢? 尔姜 ? 姜虽 + //sq_MoveToNearMovablePos(obj, obj.getXPos(), destinationYPos_, obj.getZPos(), obj.getXPos(), destinationYPos_, obj.getZPos(), 100, -1, 5); + obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); + } + else if (obj.getYPos() < destinationYPos_ && yMoveDirection_ == ENUM_DIRECTION_UP) + { + // y谢? 尔姜睡碟殓栖棻. 迹? 谢?尔棻 螃帼腑击 唳办 尔姜?朝 睡碟殓栖棻. + // 嫔薹戏煎 虽釭蚁击 阳 : 谢? 尔姜 ? 姜虽 + //sq_MoveToNearMovablePos(obj, obj.getXPos(), destinationYPos_, obj.getZPos(), obj.getXPos(), destinationYPos_, obj.getZPos(), 100, -1, 5); + obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); + } + else if (obj.getYPos() < destinationYPos_) + obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_DOWN); + else if (obj.getYPos() > destinationYPos_) + { + obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_UP); + local direction = obj.getVar("movedir").get_vector(DIR_Y_I); + } + else + obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); + ////////////////////////////////////////////////////////////////////////////// + + + + // 夸醮捡?朝 牖除击 羹觼?罹 夸跷啪 ?栖棻. + // 迹瞳虽缣 紫杂?剪釭 螃粽薛?暧 state陛 stand釭 dash鼻鹧陛 嬴栖塭贼 桧翕卫郦贼 寰腌栖棻. + // 伪擎 潍模蒂 啗楼 薯濠葬 务晦釭 嗨晦蒂 ?贼 寰肾晦 阳侥缣 ?营 谢?蒂 荡潍?棻陛 + // 棻挤?溯歜缣怃 绿掖?瑭怃 伪擎 谢?塭贼 翕蒙击 夸跷啪 ?栖棻. + + local state = obj.getState(); + local beforeXPos = obj.getVar("dstpos").get_vector(2); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (x) + local beforeYPos = obj.getVar("dstpos").get_vector(3); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (y) + + // 瞪?溯歜娄 翕橾? 阳 苹遴?蒂 棺溥丑怃 苹遴?陛 横替姜紫 獭击阳 桧翕碳陛塭 ?钦?罹 夸跷啪 ?栖棻. + // 夥煎 籀挤 桧翕?击隆 瞪?溯歜娄 横离? 谢?陛 伪晦阳侥缣 桧 伪擎 寞彻击 质蝗栖棻. + local samdCnt = obj.getVar("dstpos").get_vector(4); + if(beforeXPos == obj.getXPos() && beforeYPos == obj.getYPos()) + { + obj.getVar("dstpos").set_vector(4, samdCnt + 1); + samdCnt = obj.getVar("dstpos").get_vector(4); + } + + if(obj.isMyControlObject()) + { + local stage = sq_GetObjectManagerStage(obj); + local control = stage.getMainControl(); + + if(!control.IsRBDown()) + { + if(destinationXPos_ == obj.getXPos() && destinationYPos_ == obj.getYPos() || (state != STATE_STAND && state != STATE_DASH)) + { + //print(" arrived dstX:" + destinationXPos_ + " getX:" + obj.getXPos() + " samdCnt:" + samdCnt); + obj.getVar("dstpos").clear_vector(); + sq_SetVelocity(obj, 0, 0.0); + sq_SetVelocity(obj, 1, 0.0); + obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); + obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); + + local actobj = sq_GetCNRDObjectToActiveObject(obj); + if(actobj) + { + print(" state_stand"); + sq_AddSetStatePacketCollisionObject(actobj, STATE_STAND, null, STATE_PRIORITY_USER, true); + } + + return; + } + } + } + + + + // 楼溘 宪嬴顶晦 + local isDash = obj.getVar("dash").get_vector(0); + + // 晦狱瞳樯 表缰缣怃朝 晦狱楼紫陛 撮?腌栖棻. + local xNormalVel = X_NORMALMOVE_VELOCITY; + local yNormalVel = Y_NORMALMOVE_VELOCITY; + local xSlantVel = X_SLANTMOVE_VELOCITY; + local ySlantVel = Y_SLANTMOVE_VELOCITY; + + // 渠莲塭贼 楼紫蒂 殖葬撮??栖棻. + if(isDash) + { + xNormalVel = X_NORMALDASH_VELOCITY; + yNormalVel = Y_NORMALDASH_VELOCITY; + xSlantVel = X_SLANTDASH_VELOCITY; + ySlantVel = Y_SLANTDASH_VELOCITY; + } + + local xVelocity = xNormalVel; + local yVelocity = yNormalVel; + + xMoveDirection_ = obj.getVar("movedir").get_vector(DIR_X_I); + yMoveDirection_ = obj.getVar("movedir").get_vector(DIR_Y_I); + + if(yMoveDirection_ == ENUM_DIRECTION_NEUTRAL) + xVelocity = xNormalVel; + else + xVelocity = xSlantVel; + + if(xMoveDirection_ == ENUM_DIRECTION_NEUTRAL) + yVelocity = yNormalVel; + else + yVelocity = ySlantVel; + + if (xMoveDirection_ == ENUM_DIRECTION_NEUTRAL) + xVelocity = xVelocity.tofloat() * 0.0; + else if (xMoveDirection_ == ENUM_DIRECTION_LEFT) + xVelocity = xVelocity.tofloat() * -1.0; + + if (yMoveDirection_ == ENUM_DIRECTION_NEUTRAL) + yVelocity = yVelocity.tofloat() * 0.0; + else if (yMoveDirection_ == ENUM_DIRECTION_UP) + yVelocity = yVelocity.tofloat() * -1.0; + + sq_SetVelocity(obj, DIR_X_I, xVelocity.tofloat()); + sq_SetVelocity(obj, DIR_Y_I, yVelocity.tofloat()); + + // 伪擎 潍模蒂 啗楼 薯濠葬 务晦釭 嗨晦蒂 ?贼 寰肾晦 阳侥缣 ?营 谢?蒂 荡潍?棻陛 + // 棻挤?溯歜缣怃 绿掖?瑭怃 伪擎 谢?塭贼 翕蒙击 夸跷啪 ?栖棻. + obj.getVar("dstpos").set_vector(2, obj.getXPos()); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (x) + obj.getVar("dstpos").set_vector(3, obj.getYPos()); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (y) + +} + +// ?塭嘐搅煎 瞪殖胀 obj缣 渠鼻谢? 桧翕?朝 姜尔蒂 撮??栖棻. +function setMovGrabObj(obj, dstX, dstY, isDash) +{ + // 桧翕 陛栋? 谢?贼 + // 迹瞳虽 桧翕 掸? + local actobj = sq_GetCNRDObjectToActiveObject(obj); + + if(actobj) + { + actobj.getVar("dstpos").clear_vector(); + actobj.getVar("dstpos").push_vector(dstX); + actobj.getVar("dstpos").push_vector(dstY); + actobj.getVar("dstpos").push_vector(0); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (x) + actobj.getVar("dstpos").push_vector(0); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (y) + actobj.getVar("dstpos").push_vector(0); // 瞪?溯歜缣 桧翕?湍 谢?谛 翕橾? 阳 苹遴? 渗热 殓栖棻. + + actobj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); + actobj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); + + actobj.getVar("dash").clear_vector(); + actobj.getVar("dash").push_vector(isDash); + + local grabChr = sq_GetCNRDObjectToSQRCharacter(actobj); // chr煎 棻桧釭哔议蝶?击 ?栖棻. + + //if(grabChr) + //setCommandCheckerMyControlChracter(grabChr, false); + + //print(" move obj:" + obj + " dash:" + isDash); + if(isDash) + { + sq_AddSetStatePacketCollisionObject(actobj, STATE_DASH, null, STATE_PRIORITY_USER, true); + //sq_AddSetStatePacketActiveObject(actobj, STATE_DASH, null, STATE_PRIORITY_USER); + } + else + { + sq_AddSetStatePacketCollisionObject(actobj, STATE_STAND, null, STATE_PRIORITY_USER, true); + //sq_AddSetStatePacketActiveObject(actobj, STATE_STAND, null, STATE_PRIORITY_USER); + } + } + +} + + + +// 摹鸥胀 议葛搅暧 蝶鉴衙栖螳虏 撮??栖棻. 桧廓 ?煎餍颤殓缣怃朝 摹鸥击 ?紫 AI陛 夸跷贼 寰肾晦 阳侥缣 AI ?撩? 鼻鹧缣怃 蝶鉴 蜗煜虏 亿煎 撮??朝 掘亵煎 骨栖棻. +// 斜葬坚 帼?击 扬毓击阳虏 桧薯 醴裔萄羹醴蒂 撮??鄹栖棻. +function setSkillManagerMyControlChracter(aiChr) +{ + if(!aiChr) + return; + + local cmdChecker = aiChr.getCommandChecker(); + + if(cmdChecker) + { + local onlyAiChr = sq_GetCNRDObjectToAICharacter(aiChr); + sq_SetTargetObjectAICharacter(onlyAiChr, null, false); + // 棻挤寞戏煎 桧辨?晦 嫔? 噙樯 ?楚斜 殓栖棻. 顶陛 ai陛 夔?煤?朝 螃粽薛?樯虽 羹觼?朝 ?楚斜 殓栖棻 (irdsqrcharacter) + // 议葛桧 摹鸥肾涡塭紫 ai赅萄陛 面螳毡横捡?晦 阳侥缣 true煎 嵘虽卫面鄹栖棻. + aiChr.setAIModeByControlObject(true); + + local skillMgr = aiChr.getSkillManager(); + + if(skillMgr) + { + skillMgr.setParent(aiChr); + skillMgr.setCommandChecker(cmdChecker); // 蝶鉴衙栖荡谛 醴裔萄羹醴蒂 翱念 + local skillTree = aiChr.getCurrentSkillTree(); + skillMgr.addAllKeyCommand(skillTree); + aiChr.flushCommandEnable(); + } + } +} + + +// 蹂羶? ?塭嘐搅暧 aiChr蒂 夔?煤? 热 毡紫烟 醴裔萄羹醴谛 蝶鉴衙栖螳蒂 撮??栖棻. +function setMyControlChracter(aiChr) +{ + if(!aiChr) + return; + + local cmdChecker = aiChr.getCommandChecker(); + if(cmdChecker) + { + local onlyAiChr = sq_GetCNRDObjectToAICharacter(aiChr); + sq_SetTargetObjectAICharacter(onlyAiChr, null, false); + + aiChr.setAIModeByControlObject(false); // 棻挤寞戏煎 桧辨?晦 嫔? 噙樯 ?楚斜 殓栖棻. 顶陛 ai陛 夔?煤?朝 螃粽薛?樯虽 羹觼?朝 ?楚斜 殓栖棻 (irdsqrcharacter) + cmdChecker.setAIMode(false); // 醴裔? 羹觼缣怃 ai赅萄陛 on樯虽 off樯虽 羹觼?朝 ?楚斜蒂 撮??朝 ?热 殓栖棻. + cmdChecker.commandListReset(); + aiChr.initCommandChecker(cmdChecker, false); + aiChr.setCommandChecker(cmdChecker); + + local skillMgr = aiChr.getSkillManager(); + + if(skillMgr) + { + skillMgr.setParent(aiChr); + skillMgr.setCommandChecker(cmdChecker); // 蝶鉴衙栖荡谛 醴裔萄羹醴蒂 翱念 + local skillTree = aiChr.getCurrentSkillTree(); + skillMgr.addAllKeyCommand(skillTree); + aiChr.flushCommandEnable(); + } + } + +} + + +// 彰嫔顶缣 蜃朝 螃粽薛?陛 毡朝 羹觼?怃 毡戏贼.. 螃粽薛? 偌羹蒂 葬欐?栖棻. +function getOverClickableEnemyObject(obj, x, y) +{ + if(!obj) + return null; + + local group = -1; + local uniqueId = -1; + + local objectManager = obj.getObjectManager(); + + + if (objectManager == null) + return null; + + local target = null; + + //releaseOutLine(obj, "hoverd"); + + for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1) + { + local object = objectManager.getCollisionObject(i); + + if (object) + { + // 瞳桧 嬴栖坚 狱羹暧 濠冲桧坚 议葛搅桧坚 + if( (obj.isEnemy(object) == true && object.isInDamagableState(obj)) ) + { + //local width = sq_GetWidthObject(object); + //local height = sq_GetHeightObject(object); + //local screenX = sq_GetScreenXPos(object) - (width / 2); + //local screenY = sq_GetScreenYPos(object) - height; + // + //local isUnion = sq_IsIntersectRect(screenX, screenY, width, height, x, y, w, h); + local isUnion = object.isOverPos(x, y); + + if(isUnion) + { + group = sq_GetGroup(object); + uniqueId = sq_GetUniqueId(object); + //print(" group:" + group + " uniqueId:" + uniqueId); + //object.setCustomOutline(true, sq_RGBA(255, 255, 0, 255), false, 2); + //return group, uniqueId; + return object; + } + } + } + } + + return null; +} + + +// 涡绾憎紫办缣怃 濠褐暧 夔?煤螃粽薛?蒂 撮??朝 睡碟殓栖棻. 阔 +// #define getMyCharacter() (getMyControlCharacter()) 蒂 夥脯舆朝 睡碟殓栖棻. +function setConrolCharacter(obj, index) +{ + local controlSize = sq_GetMyControlObjectSize(obj); + + if(index < 0 || controlSize <= index) + return; + + releaseOutLine(obj, "grabobj"); + releaseOutLine(obj, "hoverd"); + // + local vObj = sq_GetMyControlObject(obj, index); // 摹鸥腆 议葛搅蒂 椭横蚂棻.. + // + local grabChr = sq_GetCNRDObjectToSQRCharacter(vObj); // chr煎 棻桧釭哔议蝶?击 ?栖棻. + // + if(grabChr) + { + // 夔?煤?朝 赅苌 螃粽薛?暧 醴裔萄 羹醴蒂 ai赅萄煎 瞪??栖棻. + setAIControlObjCommandChecker(obj); // 摹鸥胀 议葛搅暧 醴裔萄羹醴蒂 瞪睡 ai煎 夥羞棻. + //// 议葛搅 摹鸥 + obj.getVar("grabobj").push_obj_vector(vObj); // grabobj + // 摹鸥胀 议葛搅暧 蝶鉴衙栖螳虏 撮??栖棻. 桧廓 ?煎餍颤殓缣怃朝 摹鸥击 ?紫 AI陛 夸跷贼 寰肾晦 阳侥缣 AI ?撩? 鼻鹧缣怃 蝶鉴 蜗煜虏 亿煎 撮??朝 掘亵煎 骨栖棻. + // 斜葬坚 帼?击 扬毓击阳虏 桧薯 醴裔萄羹醴蒂 撮??鄹栖棻. + setSkillManagerMyControlChracter(grabChr); + // 夥樯注 ?热 殓栖棻. CNUser::setMyControlCharacter(character); grabChr陛 夔?煤?朝 议葛搅塭坚 宪溥鄹栖棻. + // CNUser::myControlCharacter_ = grabChr陛 腌栖棻. + sq_SetMyControlCharacter(grabChr); + } +} + \ No newline at end of file diff --git a/character/creatormage/passive_skill_creatormage.nut b/character/creatormage/passive_skill_creatormage.nut new file mode 100644 index 0000000..8949511 --- /dev/null +++ b/character/creatormage/passive_skill_creatormage.nut @@ -0,0 +1,349 @@ +///////////////////////////////////////////////////////// +// +// ?卫粽 蝶鉴籀葬 +// ?渡 蝶鉴暧 ?卫粽 蝶鉴暧 Appendage蛔烟/?薯 蛔蛔 +// +///////////////////////////////////////////////////////// + + +function ProcPassiveSkill_CreatorMage(obj, skill_index, skill_level) +{ + if (skill_index == SKILL_FIREWALL || skill_index == SKILL_FIREMETEO) + { // firewall + if (skill_level > 0) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, + "Character/CreatorMage/ap_creatormage_flame.nut", true); + + if (appendage) + { + local attributeSkill = SKILL_CREATORFLAME; + local level = sq_GetSkillLevel(obj, attributeSkill); + // 0.裟蝶 啪桧虽 热纂 + local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level); + + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT); + appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt); + + + if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST) + { + // 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻. + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt) + { + setCreatorSkillStateSkillIndex(obj, -1); + onAllChargeCreatorMageGauge(obj); + } + + // 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms) + local chargeTime = sq_GetIntData(obj, attributeSkill, 0); + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime); + + local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON); + + if (chargeMode) + { + local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt); + local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME); + + if ((chargeTime - time) > 0) + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time); + } + else + { + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0); + appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0); + //appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + } + } + } + else if (skill_index == SKILL_ICEROCK || skill_index == SKILL_ICEPLATE) + { + if (skill_level > 0) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, + "Character/CreatorMage/ap_creatormage_ice.nut", true); + + if (appendage) + { + local attributeSkill = SKILL_CREATORICE; + local level = sq_GetSkillLevel(obj, attributeSkill); + // 0.裟蝶 啪桧虽 热纂 + local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level); + + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT); + appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt); + + if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST) + { + // 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻. + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt) + { + setCreatorSkillStateSkillIndex(obj, -1); + onAllChargeCreatorMageGauge(obj); + } + + + // 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms) + local chargeTime = sq_GetIntData(obj, attributeSkill, 0); + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime); + + local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON); + + if (chargeMode) + { + local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt); + local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME); + + print(" chargeMode:" + chargeMode); + print(" delayTime:" + time); + + if ((chargeTime - time) > 0) + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time); + } + else + { + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0); + appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0); + //appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + } + } + } + else if (skill_index == SKILL_WOODFENCE || skill_index == SKILL_MGRAB) + { + if (skill_level > 0) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, + "Character/CreatorMage/ap_creatormage_disturb.nut", true); + + if (appendage) + { + local attributeSkill = SKILL_CREATORDISTURB; + local level = sq_GetSkillLevel(obj, attributeSkill); + // 0.裟蝶 啪桧虽 热纂 + local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level); + + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT); + appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt); + + if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST) + { + // 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻. + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt) + { + setCreatorSkillStateSkillIndex(obj, -1); + onAllChargeCreatorMageGauge(obj); + } + + //appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + //appendage.sq_var.set_vector(l_CHARGE_ON, 0); + + // 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms) + local chargeTime = sq_GetIntData(obj, attributeSkill, 0); + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime); + + local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON); + + if (chargeMode) + { + local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt); + local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME); + + print(" chargeMode:" + chargeMode); + print(" delayTime:" + time); + + if ((chargeTime - time) > 0) + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time); + } + else + { + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0); + appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0); + //appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + } + } + } + else if (skill_index == SKILL_FIREHURRICANE || skill_index == SKILL_ICESHIELD) + { + if (skill_level > 0) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, + "Character/CreatorMage/ap_creatormage_guardian.nut", true); + + if (appendage) + { + local attributeSkill = SKILL_CREATORGUARDIAN; + local level = sq_GetSkillLevel(obj, attributeSkill); + // 0.裟蝶 啪桧虽 热纂 + local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level); + + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT); + appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt); + + if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST) + { + // 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻. + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt) + { + setCreatorSkillStateSkillIndex(obj, -1); + onAllChargeCreatorMageGauge(obj); + } + + + // 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms) + local chargeTime = sq_GetIntData(obj, attributeSkill, 0); + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime); + + local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON); + + if (chargeMode) + { + local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt); + local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME); + + print(" chargeMode:" + chargeMode); + print(" delayTime:" + time); + + if ((chargeTime - time) > 0) + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time); + } + else + { + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0); + appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0); + //appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + } + } + } + else if (skill_index == SKILL_WINDPRESS || skill_index == SKILL_WINDSTORM) + { + // 孺萄 楼撩 + if (skill_level > 0) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, + "Character/CreatorMage/ap_creatormage_wind.nut", true); + + if (appendage) + { + local attributeSkill = SKILL_CREATORWIND; + local level = sq_GetSkillLevel(obj, attributeSkill); + // 0.裟蝶 啪桧虽 热纂 + local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level); + + if (appendage.sq_var.size_vector() == 0) + { + for (local i = 0; i < I_SIZE; i++) + appendage.sq_var.push_vector(0); + + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT); + appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt); + + if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST) + { + // 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻. + appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt) + { + setCreatorSkillStateSkillIndex(obj, -1); + onAllChargeCreatorMageGauge(obj); + } + + + // 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms) + local chargeTime = sq_GetIntData(obj, attributeSkill, 0); + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime); + + local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON); + + if (chargeMode) + { + local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT); + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt); + local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME); + + print(" chargeMode:" + chargeMode); + print(" delayTime:" + time); + + if ((chargeTime - time) > 0) + appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time); + } + else + { + appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0); + appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0); + //appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt); + } + + } + } + } + + return true; +} + + +function onUseSkillPassiveSkill_CreatorMage(obj,skillIndex, skillLevel) +{ + if(!obj) + return; + +} + + + + diff --git a/character/creatormage/windpress/po_windpress.nut b/character/creatormage/windpress/po_windpress.nut new file mode 100644 index 0000000..0acdb44 --- /dev/null +++ b/character/creatormage/windpress/po_windpress.nut @@ -0,0 +1,495 @@ + +S_PO_ATCL_0 <- 10 +S_PO_ATCL_1 <- 11 +S_PO_ATCL_2 <- 12 + +VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??) +VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬 +VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬 +VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬 +VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧 + +VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热 +VI_SKL_6 <- 6 // 6.虽楼卫除 +VI_SKL_7 <- 7 // 7.奢问溘(%) +VI_SKL_8 <- 8 // 8.棻钦?? ?热 +VI_SKL_9 <- 9 // 9.棻钦?? 除问 + + + +function sendChangeRotateObject(obj) +{ + if (!obj) + return; + + if (!obj.isMyControlObject()) + return; + + local chr = obj.getTopCharacter(); + + if (!chr) + return; + + local objectManager = obj.getObjectManager(); + + if (!objectManager) + return; + + local stage = sq_GetObjectManagerStage(obj); + local control = stage.getMainControl(); + + local zPos = obj.getZPos(); + local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL); + local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), zPos, ENUM_DRAWLAYER_NORMAL); + + // 夥塭尔朝 嫔纂缣 评塭怃 擅戏煎虏 ??紫烟 ?栖棻. + local offset = xPos - obj.getXPos(); + local len = sq_Abs(offset); + local direction = sq_GetDirection(chr); + + if (direction == ENUM_DIRECTION_LEFT) + { + xPos = obj.getXPos() - len; + } + else + { + xPos = obj.getXPos() + len; + } + + sq_BinaryStartWrite(); + sq_BinaryWriteDword(xPos); + sq_BinaryWriteDword(yPos); + sq_BinaryWriteDword(zPos); + + sq_SendChangeSkillEffectPacket(obj, SKILL_WINDPRESS); + +} + + +function setCustomData_po_CreatorWindPress(obj, reciveData) +{ + if (!obj) return; + + // 棻钦?? 除问 + local multiHitTerm = reciveData.readDword(); + // 颤问剪葬 + local hitLen = reciveData.readDword(); + // 模赅榆 + local consume = reciveData.readDword(); + // 颤问陕紫 + local rangeDir = reciveData.readDword(); + // 奢问溘 + local power = reciveData.readDword(); + + obj.getVar("rangeDir").clear_vector(); + obj.getVar("rangeDir").push_vector(rangeDir); + + obj.getVar("targetLen").clear_vector(); + obj.getVar("targetLen").push_vector(hitLen); + + obj.getVar("consume").clear_vector(); + obj.getVar("consume").push_vector(consume); + + obj.getVar("state").clear_vector(); + obj.getVar("state").push_vector(0); + + + local atk = sq_GetCurrentAttackInfo(obj); + + if (atk) + { + sq_SetCurrentAttackPower(atk, power); + } + + + if (obj.isMyControlObject()) + { + + local x = obj.getXPos(); + local y = obj.getYPos(); + local z = obj.getZPos(); + + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, x); + sq_IntVectorPush(pIntVec, y); + sq_IntVectorPush(pIntVec, z); + + obj.addSetStatePacket(S_PO_ATCL_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + + local t = obj.getVar().get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + local term = multiHitTerm; + initGetVarTimer(obj, 2, term, -1); + + sendChangeRotateObject(obj); +} + + + +function procRotateObjAnimation(obj, posX, posY, posZ) +{ + if (!obj) return; + //if (!pTargetChr) return; + + local X = obj.getXPos(); + local Y = obj.getYPos(); + local Z = obj.getZPos(); + + + local pAni = obj.getCurrentAnimation(); + + if (!pAni) + return; + + if (posX == -1) + return; + + local offset = posX - X; + if (offset < 0) + { + obj.setCurrentDirection(ENUM_DIRECTION_LEFT); + } + else + { + obj.setCurrentDirection(ENUM_DIRECTION_RIGHT); + } + + local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true); + + local w = posX - X; + local h = (posY - posZ) - (Y - Z); + + // 褒薯陕紫蒂 掘?狱棻. + //local tan = sq_Atan2( h.tofloat(), w.tofloat()); + + + + + if (w < 0) w = -w; + // ?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻. + local width = sq_Abs(posX - X); + local angle = sq_Atan2( h.tofloat(), width.tofloat()); + + local angleDir = sq_ToDegree(angle); + //print( " angleDir:" + angleDir); + + // 彰嫔 扑姜 + local rangeDir = obj.getVar("rangeDir").get_vector(0); + + local r = rangeDir / 2; + local d = sq_Abs(angleDir.tointeger()); + + if (angleDir < 0) + { + // ?啗陕紫蒂 剩横除棻贼.. + if (d > r) + angleDir = -r; + } + else + { + if (d > r) + angleDir = r; + } + + //print( " rangeDir:" + angleDir); + + angle = sq_ToRadian(angleDir.tofloat()); + // + local orgAngle = angle; + angle = -angle; + + local nRevision = distance; + + // 奢问滓? 蛔烟 襞襞?啪 蛔烟?棻.. + sq_ClearAttackBox(pAni); + // + local dis = 580; + //local realSize = 600; + local targetLen = obj.getVar("targetLen").get_vector(0); + local realSize = targetLen; // + local partNum = 10; + + local partLen = realSize.tofloat() / partNum.tofloat(); + local revision = 30; + + for (local i = 0; i < partNum; i++) + { + local attackL = 100; + local zAttackL = 60; + + local attackPosX = revision.tofloat() * sq_Cos(orgAngle); + local attackPosY = revision.tofloat() * sq_Sin(orgAngle); + + sq_AddAttackBox(pAni, + attackPosX.tointeger() - (attackL / 2), + attackPosY.tointeger(), + -zAttackL, + attackL, attackL, (zAttackL * 2) ); + + revision = revision + partLen.tointeger(); + } + + + // + sq_SetfRotateAngle(pAni, angle); + + + local cos_x = dis.tofloat() * sq_Cos(angle); + local sin_y = dis.tofloat() * sq_Sin(angle); + + //print("angle:" + angle); + + local nW = sq_Abs( cos_x.tointeger() ); + local nH = sq_Abs( sin_y.tointeger() ); + + local wRate = 1.0; + local hRate = 1.0; + + + + if (nW != 0.0 && realSize != 0.0) + { + wRate = realSize.tofloat() / nW.tofloat(); + } + + //if (nW != 0.0 && width != 0.0) + //{ + // wRate = width.tofloat() / nW.tofloat(); + //} + //if (h != 0.0 && nH != 0.0) + //{ + //hRate = h.tofloat() / nH.tofloat(); + //} + + //print(" wRate:" + wRate + " hRate:" + hRate + " nH:" + nH + " h:" + h + " angle:" + angle); + + pAni.setImageRateFromOriginal(wRate.tofloat(), hRate.tofloat()); +} + + + +function procAppend_po_CreatorWindPress(obj) +{ + if (!obj) + return; + + + local pChr = obj.getTopCharacter(); + + local state = obj.getVar("state").get_vector(0); + + if (!pChr) + { + if (state == S_PO_ATCL_0) + { + if (obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + return; + } + else + { + if (obj.isMyControlObject()) + sq_SendDestroyPacketPassiveObject(obj); + + return; + } + } + + + + if (pChr.getState() != STATE_WINDPRESS) + { + + if (state == S_PO_ATCL_0) + { + if (obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + return; + } + else if (state == S_PO_ATCL_1) + { + if (obj.isMyControlObject()) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + } + } + + sendChangeRotateObject(obj); + + + if (state == S_PO_ATCL_0) + { + // 蝶颤? 拥栖诡桧暮 + if (obj.isMyControlObject()) + { + local ani = obj.getCurrentAnimation(); + + local isEnd = sq_IsEnd(ani); + + if (isEnd) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } + else if (state == S_PO_ATCL_1) + { + // 瑞? 拥栖诡桧暮 + local t = obj.getVar().get_ct_vector(0); + local currentT = 0; + + currentT = t.Get(); + + local hitT = obj.getVar().get_timer_vector(0); + + if(hitT) + { + if(hitT.isOnEvent(currentT) == true) + { + local consumeValue = obj.getVar("consume").get_vector(0); + useCreatorSkill(pChr, SKILL_WINDPRESS, 0, 0, consumeValue); + + obj.resetHitObjectList(); + } + } + + // 陕紫 濩晦 + if (obj.isMyControlObject()) + { + local objectManager = obj.getObjectManager(); + + if (!objectManager) + return; + + local stage = sq_GetObjectManagerStage(obj); + local control = stage.getMainControl(); + + local remainRate = getCreatorTypeGaugeRate(pChr); + + if (!control.IsLBDown() || remainRate == 0.0) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(S_PO_ATCL_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + //sq_SendDestroyPacketPassiveObject(obj); + } + } + } + else if (state == S_PO_ATCL_2) + { + if (obj.isMyControlObject()) + { + local ani = obj.getCurrentAnimation(); + + local isEnd = sq_IsEnd(ani); + + if (isEnd) + { + sq_SendDestroyPacketPassiveObject(obj); + } + } + } + +} + + + +function destroy_po_CreatorWindPress(obj) +{ +} + + +function setState_po_CreatorWindPress(obj, state, datas) +{ + + if (!obj) return; + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + sendChangeRotateObject(obj); + + if (passiveState == S_PO_ATCL_0) + { + } + else if (passiveState == S_PO_ATCL_1) + { + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + } + else if (passiveState == S_PO_ATCL_2) + { + local ani = obj.getCustomAnimation(1); + obj.setCurrentAnimation(ani); + } +} + + + +function onChangeSkillEffect_po_CreatorWindPress(obj, skillIndex, reciveData) +{ + if (!obj) return; + + if (skillIndex != SKILL_WINDPRESS) + return; + + local dstX = reciveData.readDword(); + local dstY = reciveData.readDword(); + local dstZ = reciveData.readDword(); + + procRotateObjAnimation(obj, dstX, dstY, dstZ); + +} + + +function onDestroyObject_po_CreatorWindPress(obj, object) +{ + + if (!obj) return; + + if (!obj.isValid()) + return; +} + +function onKeyFrameFlag_po_CreatorWindPress(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_CreatorWindPress(obj) +{ + if (!obj) return; +} + \ No newline at end of file diff --git a/character/creatormage/windpress/windpress.nut b/character/creatormage/windpress/windpress.nut new file mode 100644 index 0000000..9522cfa --- /dev/null +++ b/character/creatormage/windpress/windpress.nut @@ -0,0 +1,352 @@ + +SUB_STATE_WINDPRESS_0 <- 0 +SUB_STATE_WINDPRESS_1 <- 1 +SUB_STATE_WINDPRESS_2 <- 2 +SUB_STATE_WINDPRESS_3 <- 3 +SUB_STATE_WINDPRESS_4 <- 4 + +function checkExecutableSkill_WindPress(obj) +{ + + if (!obj) return false; + + local b_useskill = obj.sq_IsUseSkill(SKILL_WINDPRESS); + + print("b_useskill : %d" + b_useskill); + + if (b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_WINDPRESS_0); // substate撮? + obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; +} + +function checkCommandEnable_WindPress(obj) +{ + + if (!obj) return false; + + local state = obj.sq_GetState(); + + if (state == STATE_ATTACK) + { + return obj.sq_IsCommandEnable(SKILL_WINDPRESS); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); + } + + return true; + +} + +function onSetState_WindPress(obj,state,datas,isResetTimer) +{ + if (!obj) return; + + local substate = obj.sq_GetVectorData(datas, 0); + obj.setSkillSubState(substate); + obj.sq_StopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + local t = obj.getVar().get_ct_vector(0); + if (t) + { + t.Reset(); + t.Start(10000,0); + } + + print(" onSetState_WindPress"); + + if (substate == SUB_STATE_WINDPRESS_0) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_WINDPRESS_CAST); + local pAni = obj.sq_GetCurrentAni(); + + // 议蝶? 楼紫蒂 评塭陛紫烟 扑姜 + // 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻. + // 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻. + local skillLevel = sq_GetSkillLevel(obj, SKILL_WINDPRESS); + + //local castTime = sq_GetCastTime(obj, SKILL_WINDPRESS, skillLevel); + //local animation = sq_GetCurrentAnimation(obj); + //local startTime = sq_GetFrameStartTime(animation, 16); + //local speedRate = startTime.tofloat() / castTime.tofloat(); + //obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, + //SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); +// + //sq_StartDrawCastGauge(obj, startTime, true); + obj.sq_PlaySound("R_CR_WINDPRESS"); + + } + else if (substate == SUB_STATE_WINDPRESS_1) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_WINDPRESS_START); + obj.sq_PlaySound("WINDPRESS_READY"); + } + else if (substate == SUB_STATE_WINDPRESS_2) + { + if (obj.isMyControlObject()) + { + sq_flashScreen(obj,0,300,0,100, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_SetShake(obj,1,300); + } + obj.sq_SetCurrentAnimation(CUSTOM_ANI_WINDPRESS); + obj.sq_PlaySound("WINDPRESS_BURST", 7571); + } + else if (substate == SUB_STATE_WINDPRESS_3) + { + obj.sq_SetCurrentAnimation(CUSTOM_ANI_WINDPRESS_END); + } +} + +function prepareDraw_WindPress(obj) +{ + + if (!obj) return; + +} + +function onProc_WindPress(obj) +{ + + if (!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + if (substate == SUB_STATE_WINDPRESS_2) + { + if (obj.isMyControlObject()) + { + local skill_level = obj.sq_GetSkillLevel(SKILL_WINDPRESS); + + //24355 `Character/Mage/CreatorWindPress.obj` // 觼葬缣桧搅 : 孺萄?溯蝶 + local passiveobj_cl = obj.sq_GetPassiveObject(24355); + + local objectManager = obj.getObjectManager(); + + if (!objectManager) + return; + + local stage = sq_GetObjectManagerStage(obj); + local control = stage.getMainControl(); + + if (!control.IsLBDown() || !passiveobj_cl) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_WINDPRESS_3); + obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_USER, true); + } + else + { + local t = obj.getVar().get_ct_vector(0); + + if (t) + { + local currentT = 0; + + currentT = t.Get(); + + print(" currentT:" + currentT); + if (currentT >= 300) + { + if (obj.isMyControlObject()) + { + print(" reset:" + currentT); + sq_flashScreen(obj,0,300,0,100, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + obj.sq_SetShake(obj,1,300); + } + t.Reset(); + t.Start(10000,0); + } + } + } + } + } +} + +function onProcCon_WindPress(obj) +{ + if (!obj) return; + + local substate = obj.getSkillSubState(); + + local pAni = obj.sq_GetCurrentAni(); + local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + if (substate == SUB_STATE_WINDPRESS_1) + { + if (frmIndex >= 2) + { + if (!obj.getVar().get_vector(0)) + { + obj.getVar().set_vector(0, 1); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + +//100 // 0.棻钦?? 除问 +//100 // 1.颤问剪葬 +//10 // 2. 模赅榆 +//30 // 3. 颤问陕紫 彰嫔 + + // 0.棻钦?? 除问 + local multiHitTerm = sq_GetIntData(obj, SKILL_WINDPRESS, 0); + // 1.颤问剪葬 + local targetLen = sq_GetIntData(obj, SKILL_WINDPRESS, 1); + // 2.模赅榆 + local consume = sq_GetIntData(obj, SKILL_WINDPRESS, 2); + // 3.颤问陕紫 + local dir = sq_GetIntData(obj, SKILL_WINDPRESS, 3); + + // 奢问溘 跷陛热纂 蒙机 + local level = sq_GetSkillLevel(obj, SKILL_CREATORWIND); + + // 1.奢问溘 跷陛 热纂 (%) + local addValue = sq_GetLevelData(obj, SKILL_CREATORWIND, SKL_LV_1, level); + local addRate = addValue.tofloat() / 100.0; + + + local power = obj.sq_GetPowerWithPassive(SKILL_WINDPRESS, STATE_STAND, SKL_LV_0, -1,addRate.tofloat()); + + obj.sq_StartWrite(); + sq_BinaryWriteDword(multiHitTerm); + sq_BinaryWriteDword(targetLen); + sq_BinaryWriteDword(consume); + sq_BinaryWriteDword(dir); + sq_BinaryWriteDword(power); + + local size = 50; + local offsetZ = 62; + local offset = sq_GetDistancePos(0, obj.getDirection(), size); + sq_SendCreatePassiveObjectPacketPos(obj, 24355, 0, posX + offset, posY - 1, posZ + offsetZ); + } + } + } +} + +function onEndCurrentAni_WindPress(obj) +{ + + if (!obj) return; + + //local pSickleObj = obj.sq_GetPassiveObject(24101); // sickle + + local substate = obj.getSkillSubState(); + + if (substate == SUB_STATE_WINDPRESS_0) + { + if (obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_WINDPRESS_1); + obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_USER, true); + } + } + else if (substate == SUB_STATE_WINDPRESS_1) + { + if (obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(SUB_STATE_WINDPRESS_2); + obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_USER, true); + } + } + else if (substate == SUB_STATE_WINDPRESS_2) + { + } + else if (substate == SUB_STATE_WINDPRESS_3) + { + if (obj.isMyControlObject()) + { + obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + else if (substate == SUB_STATE_WINDPRESS_4) + { + } + + +} + +function onKeyFrameFlag_WindPress(obj,flagIndex) +{ + + if (!obj) return false; + + return true; + +} + +function onEndState_WindPress(obj,new_state) +{ + + if (!obj) return; + + obj.stopSound(7571); + sq_EndDrawCastGauge(obj); +} + +function onAfterSetState_WindPress(obj,state,datas,isResetTimer) +{ + + if (!obj) return; + +} + +function onBeforeAttack_WindPress(obj,damager,boundingBox,isStuck) +{ + + if (!obj) return; + +} + +function onAttack_WindPress(obj,damager,boundingBox,isStuck) +{ + + if (!obj) return; + +} + +function onAfterAttack_WindPress(obj,damager,boundingBox,isStuck) +{ + + if (!obj) return 0; + + return 1; + +} + +function onBeforeDamage_WindPress(obj,attacker,boundingBox,isStuck) +{ + + if (!obj) return; + +} + +function onDamage_WindPress(obj,attacker,boundingBox) +{ + + if (!obj) return; + +} + +function onAfterDamage_WindPress(obj,attacker,boundingBox) +{ + + if (!obj) return; + +} + \ No newline at end of file diff --git a/character/creatormage/windstorm/po_windstorm.nut b/character/creatormage/windstorm/po_windstorm.nut new file mode 100644 index 0000000..8fb3cec --- /dev/null +++ b/character/creatormage/windstorm/po_windstorm.nut @@ -0,0 +1,335 @@ + +VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??) +VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬 +VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬 +VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬 +VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧 + +VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热 +VI_SKL_6 <- 6 // 6.虽楼卫除 +VI_SKL_7 <- 7 // 7.奢问溘(%) +VI_SKL_8 <- 8 // 8.棻钦?? ?热 +VI_SKL_9 <- 9 // 9.棻钦?? 除问 + + +function procAppend_po_CreatorWindStorm(obj) +{ + if (!obj) + return; + + local pChr = obj.getTopCharacter(); + + local state = obj.getVar("state").get_vector(0); + + if (!pChr) + { + if (state == PASSIVEOBJ_SUB_STATE_1 || state == PASSIVEOBJ_SUB_STATE_2) + { + if (obj.isMyControlObject()) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + return; + } + } + + local ani = obj.getCurrentAnimation(); + local isEnd = sq_IsEnd(ani); + + + + local objectManager = obj.getObjectManager(); + + if (!objectManager) + return; + + local stage = sq_GetObjectManagerStage(obj); + local control = stage.getMainControl(); + + + if (state == PASSIVEOBJ_SUB_STATE_0) + { + // 蝶颤? 拥栖诡桧暮 + if (obj.isMyControlObject()) + { + local skillState = getCreatorSkillStateSkillIndex(pChr); + //print(" skillState:" + skillState); + if (!control.IsRBDown() || skillState != CREATOR_TYPE_WIND) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + print(" wind PASSIVEOBJ_SUB_STATE_2"); + print(" wind PASSIVEOBJ_SUB_STATE_2"); + print(" wind PASSIVEOBJ_SUB_STATE_2"); + print(" wind PASSIVEOBJ_SUB_STATE_2"); + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + else + { + if (isEnd) + { + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } + } + else if (state == PASSIVEOBJ_SUB_STATE_1) + { + // 瑞? 拥栖诡桧暮 + local t = obj.getVar().get_ct_vector(0); + local currentT = 0; + + currentT = t.Get(); + + local hitT = obj.getVar().get_timer_vector(0); + + if(hitT) + { + if (hitT.isOnEvent(currentT) == true) + { + // 模赅榆 瞳辨 + local consumeValue = obj.getVar("consume").get_vector(0); + useCreatorSkill(pChr, SKILL_WINDSTORM, 0, 0, consumeValue); + + obj.resetHitObjectList(); + } + } + + // 陕紫 濩晦 + if (obj.isMyControlObject()) + { + + local remainRate = getCreatorTypeGaugeRate(pChr); + + local skillState = getCreatorSkillStateSkillIndex(pChr); + //print(" skillState:" + skillState); + if (!control.IsRBDown() || remainRate <= 0.0 || skillState != CREATOR_TYPE_WIND) + { + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, 0); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } + } + } + else if (state == PASSIVEOBJ_SUB_STATE_2) + { + if (obj.isMyControlObject()) + { + if (isEnd) + sq_SendDestroyPacketPassiveObject(obj); + } + } + +} + + +function setCustomData_po_CreatorWindStorm(obj, reciveData) +{ + if (!obj) return; + + + // 棻钦?? 除问 + local multiHitTerm = reciveData.readDword(); + // 模赅榆 + local consume = reciveData.readDword(); + // 奢问溘 + local power = reciveData.readDword(); + // ?渠徽 + local imageRate = reciveData.readDword(); + + + +// 2.庄横渡晦朝 X蹴 ? + local xVel = reciveData.readDword(); +// 3.庄横渡晦朝 Y蹴 ? + local yVel = reciveData.readDword(); + + obj.getVar("vel").clear_vector(); + obj.getVar("vel").push_vector(xVel); + obj.getVar("vel").push_vector(yVel); + + local atk = sq_GetCurrentAttackInfo(obj); + + if (atk) + { + sq_SetCurrentAttackPower(atk, power); + } + + obj.getVar("imagerate").clear_vector(); + obj.getVar("imagerate").push_vector(imageRate); + + // ?渠徽 瞳辨 + local ani = obj.getCurrentAnimation(); + + if (ani) + { + ani.setImageRateFromOriginal(imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0); + sq_SetAttackBoundingBoxSizeRate(ani, imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0, 1.0); + } + // + + + obj.getVar("consume").clear_vector(); + obj.getVar("consume").push_vector(consume); + + + obj.getVar("state").clear_vector(); + obj.getVar("state").push_vector(0); + + obj.getVar().clear_ct_vector(); + obj.getVar().push_ct_vector(); + + local t = obj.getVar().get_ct_vector(0); + t.Reset(); + t.Start(10000,0); + + local term = multiHitTerm; + initGetVarTimer(obj, 2, term, -1); + + + if (obj.isMyControlObject()) + { + + local x = obj.getXPos(); + local y = obj.getYPos(); + local z = obj.getZPos(); + + local pIntVec = sq_GetGlobalIntVector(); + + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, x); + sq_IntVectorPush(pIntVec, y); + sq_IntVectorPush(pIntVec, z); + + obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); + } +} + +function destroy_po_CreatorWindStorm(obj) +{ + if (!obj) + return; + + local parentObj = obj.getParent(); + //appendage.sq_DeleteAppendages(); + CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Appendage/Character/ap_common_suck.nut"); + +} + + +function setState_po_CreatorWindStorm(obj, state, datas) +{ + + if (!obj) return; + + local passiveState = state; + + obj.getVar("state").set_vector(0, passiveState); + + if (passiveState == PASSIVEOBJ_SUB_STATE_0) + { + // start + obj.sq_PlaySound("WINDSTORM_INHALE", 7570); + + } + else if (passiveState == PASSIVEOBJ_SUB_STATE_1) + { + // loop + local ani = obj.getCustomAnimation(0); + obj.setCurrentAnimation(ani); + + local imageRate = obj.getVar("imagerate").get_vector(0); + if (ani) + { + print(" imageRate:" + imageRate); + ani.setImageRateFromOriginal(imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0); + sq_SetAttackBoundingBoxSizeRate(ani, imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0, 1.0); + } + + + // 庄横菟桧朝 横?蛤虽 陛翕 + local parentObj = obj.getParent(); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_WINDSTORM, false, "Appendage/Character/ap_common_suck.nut", false); + + local suckVel = 200; + local ani = obj.getCurrentAnimation(); + local radiusSize = sq_GetAniRealImageSize(ani, 0); + radiusSize = sq_Abs(radiusSize); + + local boundBox = sq_GetAttackBoundRect(ani); + local bosXSize = sq_GetBoundingBoxXSize(boundBox); + local range = bosXSize; + + if(appendage) + { + //print( "range:" + range.tointeger()); + //appendage.sq_SetValidTime(20000); + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + + local auraAppendage = appendage.sq_getAuraMaster("winstorm"); + if(!auraAppendage) + auraAppendage = appendage.sq_AddAuraMaster("winstorm",parentObj, obj, 1200, 18, 5, 0); + + + local suckXVel = obj.getVar("vel").get_vector(0); + local suckYVel = obj.getVar("vel").get_vector(1); + + print(" suckXVel:" + suckXVel + " suckYVel:" + suckYVel + " range:" + range); + + auraAppendage.setAttractionInfo(suckXVel, suckYVel, range.tointeger(), 100); + } + ////////////////////////////////////////////////////////// + + } + else if (passiveState == PASSIVEOBJ_SUB_STATE_2) + { + // end + local ani = obj.getCustomAnimation(1); + obj.setCurrentAnimation(ani); + + local imageRate = obj.getVar("imagerate").get_vector(0); + if (ani) + { + ani.setImageRateFromOriginal(imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0); + sq_SetAttackBoundingBoxSizeRate(ani, imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0, 1.0); + } + + } +} + + + +function onDestroyObject_po_CreatorWindStorm(obj, object) +{ + + if (!obj) return; + + obj.stopSound(7570); + + if (!obj.isValid()) + return; +} + +function onKeyFrameFlag_po_CreatorWindStorm(obj, flagIndex) +{ + +} + +function onEndCurrentAni_po_CreatorWindStorm(obj) +{ + if (!obj) return; +} diff --git a/character/creatormage/windstorm/windstorm.nut b/character/creatormage/windstorm/windstorm.nut new file mode 100644 index 0000000000000000000000000000000000000000..285b0b75700b652b1ba1845e274b2c704ab13b39 GIT binary patch literal 1932 zcmbVNT~E_c81{Bc_8*QHCR;Mf2I_@imaz?8=svOz23MtS2dH$dc4xpO-Y9ryf_R}s zNaULc7%xz8BL8Nk`xn0Fv~*=KztUz|&wI}Eyytnpd|qLAKos)Pd_o*d<`RV{&x;{X ze-{e*t}}(HDeUvoXQHYWiL9weQ&U>Cf>YWIj!j9rR3umz3$j`gh^CkQ+M~xoG#5m* zfX_Sc^Lpe7?2$?nNLz=VAUf+&$5PKohc zw7^Hl5;-xQ$)%#a3$yk+%(2Uu>=Q6Ue};W#!G@^w@KQw?Q$NZld59#R$>eBMb9r$L zr1H$8?rzlB+BOc(jP+gAc)f2fuSAU1HB>XdY(yIChvv~K$HC5vfWTh}2nC0eA^9DHF~RurBtxxJ0$5>arLI!zfY_%PQ_fNTc;Evm64h*T<#NJ_PJ0|wqM zhl?PHgdtw!N5pUtG2dL-17JCcP^=4Bj%X8#CJ}!Cfq^wv( zVw`+zoc%;@@#Hd;s(s@YR!hM)D9hCtsF$SbxqN9wt%qyW7mU46#>u*|vO_a|)ck&g zB2K{OMp!!hBVA7iy51{vW0&b_|3%k(9UWW%1UNv{b+(n&#=3AQ?#V_<9XSxqnb z-L=Z1aNQ=m06W@QdUdoq0qnSg%H7dO#bHLc8oZDtJ-2)B+(qNgSm{ndhIGetEWv1T zMhpkh8~1qV0dx1%d~Kwf&q5cQP;^dB}pNdTjdUK6*FWjjy{LxQC^=!sa7E1L;LvdfhdBgjwawLps= z(^G#}1N2|y%??FUAFSjYYEU2Eotb?z^Y-nk*~nINFEi38uP0tU7rka>q)#LLW~13y ztYY7UNh~sDhO5jZ%L{3wmnPm&D`^t_CP{)T75l1{%-_0N`Qd|VHya0nXE5$w2>DIBw3yjRLx%hZ}sWJlOH@`4F@Il}rm_!lq$%^ysS)B|I5IA0l+ zoj+bD4{{!<@%*jwjZIW6WRxk3)e)Z%gDZk1oK{8g09WyFI8+Z^nGVrWQYY~_B;-RkrNOkB^pf-%_^TMEh`m@0!J z7&VdpJJe<}m`+Exm*evvz3J<7Z#o;yEM`DmHeZTAi__b^}OJhN@6eP_`|lDao12EQ83{kW?`d&h1+a0)x?S#>jKgxHu$~U$a4AV*bILp2E`b7w;Yw>2o6-Q@wrGfY zoIFy7xn+$Wl0j7qEx*293fD@gAdUhpIjT(kqD;pZ=}?IPWRp^k;dq;PRk*o=J*jK_R2#r&=MD)GZB0U2?5Ga+2+2nakXJDKvf0*QOH5;vU|O=T z&)Z^#5T=9Eoi&<;sv!G^8DB3pa<7!Es&00jBI@^NVkxb=U77bUZxRYtqsyo>V_fgI zCvw$;v4l)C>kr3M5@6HrXChb~lxlj)HUf(g@oT-=TekVk~gI?5Y?yx*<~EGNCzvlcmk#z2B|o{R<5^6jGJYAr>5`1D7suMaAB*{2{$8~ zQ5>ib`F)qJ#J~drAj92*Xm_o=d|a{GbwD@3cv9e>)Z-Q1tw=Cx<1R31;U5mYQ6ZGR lRD-(chhr9}e8437??^{W@3wmWPrn0BT)Vx$q+ES*;a-Eyv)v-Ijw8;?Cwtku> zHmQ?f6$Qb7p^1T}iS5Hi;n&nn{{`pVYsYco@FpfXYUOk9xzBl?^KzY@X)Z4)&6dc7QPEZHA?(23c1; zhdOv1nIo_=<9wx5oMneY5SojXYBdUL#BH<@kfjh>D%@_mD^zm}232hVcZ^$>Jm-p# zNZRaqa^?(iymiM_UFz>WogdjPwcAbVHqo-AYMay*#z+?lf3YN28giwzrYtv0vPfLp zqZ~#+0=__4*Wd@w1U2w}T$+N_?W$(GWTHBW!swl3rtt($HH#@?`C`jdk@$GcC+=lN_dpUIxhXIxsR#|LJ z$57rt^tiT`8D>;mQ;~5ZwpCYkMBS08L*16%r8dxlsXit)CKG=GrGo^HiH$X3*+pr%ft%hs%Wokp0bBu|1NNJ)wNG9xYdE7}Ei2nB0`43U4b59n(4jR7YPy-l6n3%^4a&MrcT~gRnHrGD zNJ4tCnT5QNIY`%G+bvh*(y9cFDmzTu*LWwE$@*goorbmfeq|Tz1~Pz}y4Q^f&Z?E^ zJ=R5`Pc2rJ>WY#TL-V+-OmInicEgyz4q-tmHt?_k8Lf|mZ4~A3;PQ(f->(pqoq6N^U`f^Pv%F=38S}Vy)y&=~mPHJ%0bQi3$ z`yzpyn&Krw@->73Sh7Li!ouq3$pzA?R7*;^+GxmlpOIV28jzT}%6j^PhyEWguw@@z ze++GU9+R^_`19BKqkB&V&z@&8urlbi=r&3Mj=ZfqF6Xld|K){V4kUtKFAsn7EN_NH zfuQk9s+ewa9YM2U;8?}LFnMrt^C`H22V-J>F3b@;n+1Y~Kn%??9j{AQRKue&ommYP zMy#(XC3J@eK{}4sV&aZ4RFRAxJ&U;b?I{2@GN5_7;En9!8!rH1TrNzh*uFP+Ay8rD zP|j#BGtzhl`-lF+=b$?fjBpu^DS)-0o2uQ1)?>S?w(jz|1ookcy)Euoc3VJTZ{r*G zHmTWWe8N4?arAA<%amXGa6~~hizI*c)6dSbeCIhN5=?8}x~?&dJO{_S$C7Pn@qPgs zB)1+6ls!p4AV-qi!1~GC!DJ6BL5RbSn&cPoN_H^pCTgzW0Ipq+ArH` zmzE86BTkXnfmdwM0ThUu0Z+bvgDHOPpF9V&VB>S_43q9C4t{M+JA*Mco*GgI+Rl63 zDkp%?c#hB*I}l&b#r6E>cQ=`>3Z7cyT$OoI!A&&6nr+rB8hXa dVXVl=8DmUkk$wQm-rD=S34vUFFxRI}y#o4JUJd{N literal 0 HcmV?d00001 diff --git a/character/creatormage_load_state.nut b/character/creatormage_load_state.nut new file mode 100644 index 0000000000000000000000000000000000000000..47a3bc31b554e7a212387ff57716ae3db9f9ffaa GIT binary patch literal 3794 zcmchZ-%ry}6vugmg#Y1&CoqO4B0lKDQnn7N+rV}UkG1P=pwO+P?etZG#26Gc7$Z?Y z`3(aJ@*|NS`q%V!`!Bq=YcHh%FQQxB+ELH`4M5WR$vH#I`gFS7N}PoU$wH_RCXXS3Y2Ob`5QASKn@d+S#cy zwc80x}!(d*T&_O=Guih9|Eie9n|U6V95?~M;&vW9a8`&IN}Q7;9u0`zUe zUR^?Sv%s`u3p&%Y0L^}KmX~VVGw92L{dyk%1+aGx(aH>{%^%w5r?s^sZ^9skn+NFo z9QyhZt(>;EH4Hf+o2L2{O6It#X;J_=z>4PAotb@S@c?b^ftdZK;`}%Vcu2KZhh#F& z{`2blofw7&&cZj`0p;o@U{P-)9+Af~Ifaf_K_-`tp{-v4pJ?^ni>Ryr&;Hh5qMyGn z2Cz7V=TQClIrg7hzUqn%)z@e+KX#o&rd7qzS<8}@ab`l7iWjcCX}7_hyFI--n)Kt*u0wTrJvh&Q|b+ zMDM1-ePHjN;MIzulRdn74Fmh7Twvb`0QUxf@BIx}#E+rkKLC?!QkiRp*RAC9*2|LT zTzz==2rv1*YJegUxlS&VOH1(qR$${@3KU0Gs1+D$`J6OB z8TmLT4)9zm;q%czBy4oU8EW}#G(g#g`AlL+;6%}9qk;OYublMFuS@9>L(VhqPq+59 zjozG!%>9|HY3^1KquGR1Iv8p-n-b4l(6Q`!zne`*T24a?>Tb`j)oe;kHl*PTN)TP6 z*@R@3>S94Hnlb``@YFl0$wlbDn7fW!l;}$R1>KF&?e?@MnPSsa9D=dG?07S3=CRzOqCYA;N7J8645-nmvHLbFd_c1*;gz81ZxCvg&=7hcwvKNgOyT2?O1ywHj u+`b 0) { + if(!isExecutableStateDevilStrike(obj)) return false; // 等网蝶?塭桧醴蒂 噙朝等 瞳渡? state樯虽 羹觼 + + return true; + } + } + + return false; +} + + +// 横渐荡 - 等网蝶?塭桧醴 蝶鉴击 乾坚 毡朝虽 羹觼?栖棻.. +function isInDevilStrikeSkill(obj) +{ + if(!obj) return false; + + local level = sq_GetSkillLevel(obj, SKILL_DEVILSTRIKE); + + if(level <= 0) return false; + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + + + if(appendage) { + if(appendage.isValid() && level > 0) { + return true; + } + } + + return false; +} + +// 晦奖击 噙朝 谛酝缣 棻钦??陛 菟横鬲击 阳 等网啪桧虽 坚楼醱瞪桧 桧瑞横虽朝匙击 虞晦嫔? 桧嘐 醱瞪肾历朝虽 羹觼?朝 ?热 殓栖棻.. +// 樯濠朝 state_throw缣怃 碟晦肾朝 睡碟紫 毡晦 阳侥缣 skl?橾暧 staticindex煎 绿掖?琐栖棻.. +function IsAddDevilGauge(obj, staticIndex) +{ + if(!obj) return false; + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + local use_index = -1; + + if(appendage) { + use_index = appendage.sq_var.get_vector(DS_APEND_ADD_FLAG); + } + //print("IsAddDevilGauge:" + use_index); + + if(use_index >= 0) { // -1桧剪釭 + return true; + } + + return false; +} + + + +// ?营 陴嬴毡朝 学葆啪桧虽谛 蹂羶?朝 等网蝶?塭桧醴 樯策蝶暧 学葆啪桧虽 模赅榆娄 +// 绿掖?怃 醱碟? 陴嬴毡棻贼 return true蒂 ?栖棻.. + +function IsEnableDevilStrike(obj, index) +{ + if(!obj) return false; + + if(!isInDevilStrike(obj)) return false; + + //SL_DS_ATTACK1_GAUGE_COMSUME <- 0 // 0.z郦 啪桧虽 模赅晔 + //SL_DS_ATTACK2_GAUGE_COMSUME <- 1 // 1.x郦 啪桧虽 模赅晔 + //SL_DS_ATTACK3_GAUGE_COMSUME <- 2 // 2.c郦 啪桧虽 模赅晔 + //SL_DS_ATTACK1_ATTACK_RATE <- 3 // 3.z郦 奢问溘(%) + //SL_DS_ATTACK2_ATTACK_RATE <- 4 // 4.x郦 奢问溘(%) + //SL_DS_ATTACK3_ATTACK_RATE <- 5 // 5.c郦 奢问溘(%) + // + // + //// 等网蝶?塭桧醴 樯策蝶 + //DEVILSTRIKE_ATTACK_1 <- 0 + //DEVILSTRIKE_ATTACK_2 <- 1 + //DEVILSTRIKE_ATTACK_3 <- 2 + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(!appendage) return false; + + if(appendage.sq_var.size_vector() > 1) { + //iKeyList[0] = E_ATTACK_COMMAND; + //iKeyList[1] = E_JUMP_COMMAND; + //iKeyList[2] = E_SKILL_COMMAND; + local leve_column = 0; + + if(index == 0) { // attack (x) + leve_column = 1; + } + else if(index == 1) { // jump (c) + leve_column = 2; + } + else if(index == 2) { // skill (z) + leve_column = 0; + } + + local consumeValue = getDevilStrikeConsumeValue(obj, leve_column); + + //DS_APEND_MAX_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂 + //DS_APEND_GAUGE <- 1 // ?营 学葆啪桧虽 热纂 + + local devil_gauge = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 0 + + if(devil_gauge >= consumeValue) return true; + else { + //obj.startCantUseSkillWarning(); + if (obj.isMessage()) { + sq_AddMessage(29002); // 29002>学葆啪桧虽陛 睡褶?栖棻. + } + return false; + } + + } + + + return false; +} + +// 藤颤歜桧 部釭 蒙翕陛栋? 颤歜击 葬欐?朝 ?热. +function getLoadSkillEnableTime(obj, skillIndex, intDataIndex) +{ + if(!obj) return 0; + + local skill = sq_GetSkill(obj, skillIndex); + local level = sq_GetSkillLevel(obj, skillIndex); + local enableTime = 0; + + if (skill == null) + return enableTime; + + enableTime = obj.sq_getIntData(skillIndex, intDataIndex); + + //print("enableTime:" + enableTime); + + return enableTime; + //return obj.sq_GetObjectWorldTime(obj).Get() + enableTime; +} + + + +// 陕 等网蝶?塭桧醴 蝶鉴击 踩 热 毡朝 晦奖菟击 髦?狱棻.. 陴嬴毡朝 学葆啪桧虽 热纂煎 羹觼?狱棻.. +// 斜 热纂缣 睡?肾朝 蝶鉴桧 毡棻贼 斜 蝶鉴缣 衙?肾横 毡朝 郦蒂 sq_SetKeyxEnable煎 援蒂 热 毡朝 鼻鹧煎 虏苌 ?缣 + +function isEnterDevilStrike(obj, commandIndex, devil_index) +{ + if(!obj) return false; + + local bEnable = false; + + + local beforeCommandEnable = sq_GetKeyxEnable(obj, commandIndex); + + sq_SetKeyxEnable(obj, commandIndex, true); + + + local bCommand = sq_IsEnterCommand(obj, commandIndex); + + //print("bCommand:" + bCommand + " commandIndex:" + commandIndex + " getstate:" + obj.getState()); + + if(bCommand) { + bEnable = IsEnableDevilStrike(obj, devil_index); // 啪桧虽 模赅榆 羹觼?怃 陛栋?虽 + } + //sq_SetKeyxEnable(obj, commandIndex, beforeCommandEnable); + //} + + return bEnable; +} + + +// 学葆啪桧虽榆击 椭横褫栖棻.. +function getDevilGauge(obj) +{ + if(!obj) return 0; + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + local v = 0; + + if(!appendage) return 0; + + if(appendage.sq_var.size_vector() > 1) { + //appendage.sq_var.set_vector(500); + v = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 1 + } + + return v; +} + +function getDevilMaxGaugeValue(obj) +{ + if(!obj) return 0; + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(!appendage) return 0; + + local v = 0; + if(appendage.sq_var.size_vector() > 1) { + v = appendage.sq_var.get_vector(DS_APEND_MAX_GAUGE); // gauge index 0 + } + + return v; +} + + +// 学葆啪桧虽蒂 撮??栖棻.. +function setDevilGauge(obj, value) +{ + if(!obj) return 0; + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(!appendage) return 0; + + if(appendage.sq_var.size_vector() > 1) { + appendage.sq_var.set_vector(DS_APEND_GAUGE, value); // gauge index 0 + } +} + +// 学葆啪桧虽 模绿榆击 剩啖舆贼 宪嬴怃 梗嬴鄹栖棻.. +function consumeDevilGauge(obj, consumeValue) +{ + if(!obj) return; + + local devil_value = getDevilGauge(obj); + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(appendage) { + //DS_APEND_MAX_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂 + //DS_APEND_GAUGE <- 1 // ?营 学葆啪桧虽 热纂 + //DS_APEND_LAST_GAUGE <- 2 // 虽陪 学葆啪桧虽 热纂 + + appendage.sq_var.set_vector(DS_APEND_LAST_GAUGE, devil_value); // 虽陪 啪桧虽热纂蒂 荡潍?棻.. + + appendage.getTimer().Reset(); + appendage.getTimer().Start(0,0); + } + + local value = devil_value - consumeValue; + + if(value < 0) + value = 0; + + setDevilGauge(obj, value); +} + +// 陕撩?卫粽 : 学跦(48溯涟) +// 1. 陕撩 渗褐 翕寰 陕撩晦 奢问溘桧 隶陛? +// 2. 等网 蝶?塭桧醴暧 学葆 啪桧虽 离朝榆 隶陛. +// 陕撩?卫粽 学跦击 乾坚 毡朝虽 羹觼?坚 乾坚 毡棻贼 学葆 啪桧虽 离朝榆击 隶陛卫面怃 葬欐?栖棻.. +function getDSGConvertbyNightmare(obj, addValue) // get DevilStrikeGauge Convert by Nightmare +{ + if(!obj) return 0; + + local level = sq_GetSkillLevel(obj, SKILL_NIGHTMARE); + + local gauge_bonus = sq_GetLevelData(obj, SKILL_NIGHTMARE, 0, level); // 0廓 樯策蝶 蚝岁 啪桧虽尔伞蝶(+) + + if(gauge_bonus < 0) + gauge_bonus = 0; + + local value = addValue + gauge_bonus; + + return value; +} + + +// 学葆啪桧虽蒂 醱瞪?栖棻.. +function addDevilGauge(obj, addValue) +{ + if(!obj) return; + + local devil_value = getDevilGauge(obj); + + // 陕撩?卫粽 学跦击 乾坚 毡朝虽 羹觼?坚 乾坚 毡棻贼 学葆 啪桧虽 离朝榆击 隶陛卫面怃 葬欐?栖棻.. + local result_addValue = getDSGConvertbyNightmare(obj, addValue); + + local add = result_addValue - addValue; + //print("addValue:" + addValue + " add:" + add + " result_addValue:" + result_addValue); + + local value = devil_value + result_addValue; + + local maxValue = getDevilMaxGaugeValue(obj); + if(value >= maxValue) + value = maxValue; + + + setDevilGauge(obj, value); + +} + + + +// 横渐螳陛 晦狱 state陛 nut?橾煎 晦殓肾横 毡击 鼻?橾阳 蕨蒂 菟贼 state_attack桧塭苌虽.. +// 桧匙桧 横渐螳辨 STATE_ATTACK桧 毡涡塭紫 鼻?缣 评塭 CNPriest::setState 薹戏煎 绪虽啪 ?溥贼 晦襄 掘亵煎朝 寞彻桧 桡棻.. 谒傍贼 onSetState朝 irdcharacter缣 毡戏嘎煎 +// 棻卫 剪绂煎 给嬴陛朝 掘亵朝 毡击 热 桡棻 斜楚怃 饵瞪缣 渗褐樯虽 羹觼?尔坚 斜溢棻贼.. state_attack戏煎 绪虽坚 嬴栖塭贼.. priest:: 煎 绪虽朝 掘亵煎 夥绂横捡?棻.. +// 桧匙桧 斜 葬欐高桧棻.. + +function isPriestFlow(obj, state) +{ + if(!obj) return true; + // 桧够缣怃 true蒂 葬欐?贼 irdcharacter:: 薹戏煎 陛朝匙桧 嬴栖塭 cnpriest 薹戏煎 陛啪 腌栖棻.. + if(!isGrowTypeAvenger(obj)) // 横渐荡陛 嬴棋 唳办 鼠亵勒 flowpriest煎 + return true; + + if(isAvengerAwakenning(obj) == true) { // 陕撩渗褐鼻鹧塭贼.. + if(state == STATE_DASH_ATTACK) { + return false; + } + } + + if(isAvengerAwakenning(obj) == false) { + //if(state == STATE_ATTACK) + // return false; + + return true; + } + + + return false; +} + +function flushCommandEnable_Avenger(obj) +{ + if(!obj) return S_FLOW_NORMAL; + + if(!obj.isInBattle()) { + sq_SetAllCommandEnable(obj, false); // 瞪瘫酝橾隆 赅苌 蝶鉴击 饵辨? 热 桡蝗栖棻. + return S_FLOW_RETURN; + } + + if(isAvengerAwakenning(obj) == true) { // 陕撩 渗褐鼻鹧塭贼 棻艇 蝶鉴擎 瞪睡 绿?撩? 卫面捡 ?棻..钦 陕撩 渗褐缣怃 螃朝 蝶鉴虏 狸坚 桧蒂才贼..钦舒渠 ? + // 籀?蝶鉴击 萄蛤横 ?撩?卫监棻.. + if(obj.isMyControlObject()) + sq_SetAllCommandEnable(obj, false); // 赅苌 state蒂 残嬴场朝棻.. + + local skill = sq_GetSkill(obj, SKILL_EXECUTION); + if(skill) { + if(obj.getState() != STATE_AVENGER_AWAKENING) // 渗褐翕蒙桧 嬴栖横捡?栖棻.. + { + // 籀?嬴桧夔桧 模赅榆尔棻 号击 阳虏 ?撩?肾紫烟 ?栖棻.. + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(appendage) { + local skillLevel = sq_GetSkillLevel(obj, SKILL_EXECUTION); + local consumeValue = sq_GetLevelData(obj, SKILL_EXECUTION, 7, skillLevel); + + //DS_APEND_MAX_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂 + //DS_APEND_GAUGE <- 1 // ?营 学 + local devil_gauge = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 0 + + if(devil_gauge >= consumeValue) { + skill.setCommandEnable(true); + } + } + } + } + + skill = sq_GetSkill(obj, SKILL_EX_DISASTER); + + if(skill) { + skill.setCommandEnable(true); + } + + skill = sq_GetSkill(obj, SKILL_PANDEMONIUM_EX); + + if(skill) { + skill.setCommandEnable(true); + } + + return S_FLOW_RETURN; + } + + return S_FLOW_NORMAL; +} + +function setState_Avenger(obj, state, datas, isResetTimer) +{ + if(!obj) return S_FLOW_PRIEST; + if(!isGrowTypeAvenger(obj)) return S_FLOW_PRIEST; + + // 等网蝶?塭桧醴 醱瞪蝶鉴 ?楚斜 蚂 + if(isInDevilStrikeSkill(obj)) { + if(state != obj.getState() || state == STATE_ATTACK) { // 虽陪 state陛 殖塭捡 桧薯 等网啪桧虽蒂 醱瞪? 热 毡朝匙殓栖棻.. + local staticIndex = getStaticDataIndexDevilGauge(obj, -1, state); + + + // ?营 议葛搅暧 state蒂 羹觼?罹 葬欐肾朝高桧 -1桧 嬴栖塭贼 醱瞪?丑捡?棻朝 暧嘐殓栖棻.. + if(staticIndex != -1) { // + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + if(appendage) { + //if(appendage.sq_var.get_vector(DS_APEND_ADD_FLAG) == -1) + //-2蒂 葬欐?捡 桧薯 啪桧虽蒂 醱瞪卫鉴 热 毡紫烟?棻..谒傍贼.. 伪擎 state蒂 啗楼 蹂羶?朝 唳办陛 毡晦阳侥缣.. + //print("\n setState_Avenger:" + obj.getState() + " DS_APEND_ADD_FLAG: staticIndex " + staticIndex); + appendage.sq_var.set_vector(DS_APEND_ADD_FLAG, staticIndex); // 醱瞪 卫郦朝 羹觼?楚斜蒂 霾栖棻.. + } + } + } + } + + if(state == STATE_THROW) + { + if(obj.getThrowIndex() == SKILL_CHANGE_HP_TO_MP && obj.getThrowState() == 0) { + local level = sq_GetSkillLevel(obj, SKILL_CHANGE_HP_TO_MP); + local gaugeUpValue = sq_GetLevelData(obj, SKILL_CHANGE_HP_TO_MP, 2, level); + addDevilGauge(obj,gaugeUpValue); + } + } + + + + if(isPriestFlow(obj, state) == true) { + return S_FLOW_PRIEST; + } + else { + if(isAvengerAwakenning(obj) == true) { + } + } + + return S_FLOW_NORMAL; +} + + + +function isRidingToObject_Avenger(obj) +{ + if(!obj) return -1; + + if(isAvengerAwakenning(obj) == true) { // 菸蝶陛蛤树戏煎 渗褐?朝等 骁匙击 颤贼 寰肾癒.. + //print("isRidingToObject_Avenger"); + return -1; + } + + return 1; + +} + +// 桧匙击 螃帼塭桧注 ?朝 桧嵘朝 ?葬蝶?-横渐螳:菸蝶陛蛤树缣怃 薄?帼?击 扬毓击 阳 奢问桧 釭陛捡?嘎煎 +// 紫酝缣 薄?state 蹂羶?朝匙击 ?缰?晦 嫔?殓栖棻.. +// 晦狱 flow朝 avenger_common.nut 缣怃 addSetStatePacket_Avenger 葬欐高桧 -1桧塭贼 IRDCollisionObject::addSetStatePacket蒂 ?轿?虽 强蝗栖棻. + +function addSetStatePacket_Avenger(obj, state, datas) +{ + if(!obj) + return -1; + + + if(state == STATE_JUMP_ATTACK) { + //print("\n STATE_JUMP_ATTACK" + " now_state:" + obj.sq_GetSTATE()); + } + + if(!obj.isMyControlObject()) + return -1; + + if(isAvengerAwakenning(obj) == true) { + if(state == STATE_JUMP) { + if(obj.getState() == STATE_DASH || obj.getState() == STATE_STAND) { + local var_awakening = obj.getVar("awakening"); + local t = var_awakening.get_ct_vector(0).Get(); + + if(var_awakening.get_ct_vector(0).Get() > var_awakening.get_vector(0)) { // 濠羹 藤颤歜 羹觼 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); // substate撮? + obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true); + } + else { // 藤颤歜桧 测 腑棻.. + obj.startCantUseSkillWarning(); + if (obj.isMessage()) // + { + sq_AddMessage(414); // 414>藤颤歜殓栖棻. + } + } + } + else { + obj.sq_addSetStatePacket(STATE_SIT, STATE_PRIORITY_USER, false); + } + return -1; + } + else if(state == STATE_DIE) { + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_awakening.nut"); + + if(appendage) { + appendage.setValid(false); + appendage.sq_var.set_vector(I_AVENGER_AWAKENING_VALID, 0); + obj.setObjectHeight(-1); + } + + return -1; + } + + if(state == STATE_THROW) { + //print("STATE_THROW"); + return -1; + } + } + + return 1; +} + +function isEnableBackStepState_Avenger(obj) +{ + if(!obj) return false; + + if(isAvengerAwakenning(obj) == true) { + return false; // 菸蝶陛蛤树 鼻鹧缣怃朝 寥蝶变击 虞嬴堤捡?栖棻.. + } + + + //print("isEnableBackStepState"); + + return obj.sq_isEnableBackStepState(); +} + +function getDefaultAttackInfo_Avenger(obj, index) +{ + local atk = null; + if(isAvengerAwakenning(obj) == true) { // 陕撩 渗褐鼻鹧塭贼 棻艇 蝶鉴擎 瞪睡 绿?撩? 卫面捡 ?棻..钦 陕撩 渗褐缣怃 螃朝 蝶鉴虏 狸坚 桧蒂才贼..钦舒渠 ? + atk = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACKINFO_AW_ATTACK1 + index); + } + else { + if(isInDevilStrikeSkill(obj)) { + atk = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACKINFO_AVENGER_ATTACK_1 + index); + } + } + + return atk; +} + + +// ?塭嘐搅煎 剩啖霞 郦 樯策蝶谛, 奢问寞彻桧 陛栋?虽 羹觼?罹 鳝娄?贼 ?卫粽螃粽薛?蒂 虏菟横 蛔烟?栖棻.. +function procEnterDevilStrike(obj, keyIndex, attackIndex) +{ + if(!obj) return; + + local bEnable = isEnterDevilStrike(obj, keyIndex, attackIndex); + + if(bEnable) { + // 学葆啪桧虽蒂 梗嬴遽棻.. + if(obj.isMyControlObject()) { + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(appendage) { + + //if (obj.getWorldTimer().Get() >= obj.getVar("devilStrike").get_vector(0)) { + local var_devil = obj.getVar("devilStrike"); + + local t = var_devil.get_ct_vector(0).Get(); + + //print("get_ct_vector:" + t + " get_vector(0):" + var_devil.get_vector(0)); + + if(var_devil.get_ct_vector(0).Get() > var_devil.get_vector(0)) { // 濠羹 藤颤歜 羹觼 + local leve_column = 0; + + if(attackIndex == 0) { // attack (x) + leve_column = 1; + } + else if(attackIndex == 1) { // jump (c) + leve_column = 2; + } + else if(attackIndex == 2) { // skill (z) + leve_column = 0; + } + + local consumeV = getDevilStrikeConsumeValue(obj, leve_column); + consumeDevilGauge(obj, consumeV); + + + // x郦暧 唳办 + // 伪擎 state顶缣怃 嫦当?朝 唳办 横鸥樯策蝶蒂 棺溥遽棻.. + local resultAttackIndex = attackIndex; + + if(keyIndex == E_ATTACK_COMMAND) { + resultAttackIndex = obj.getVar("devilStrike").get_vector(2); // 2廓樯策蝶 ?楚斜朝 翱楼 等网蝶?塭桧觼 + //print("resultAttackIndex:" + resultAttackIndex); + local Index = resultAttackIndex; + Index = Index + 1; + if(Index > 2) + Index = 0; + + obj.getVar("devilStrike").set_vector(2, Index); + } + + if(resultAttackIndex == 0) { // attack (x) + leve_column = 1; + } + else if(resultAttackIndex == 1) { // jump (c) + leve_column = 2; + } + else if(resultAttackIndex == 2) { // skill (z) + leve_column = 0; + } + + // 桧薯 奢问嫦翕 + local level = sq_GetSkillLevel(obj, SKILL_DEVILSTRIKE); + + //iKeyList[0] = E_ATTACK_COMMAND; + //iKeyList[1] = E_JUMP_COMMAND; + //iKeyList[2] = E_SKILL_COMMAND; + + //local firstAttackRate = obj.sq_getBonusRateWithPassive(SKILL_DEVILSTRIKE, state, 0, 1.0); + + // 等网蝶?塭桧醴暧 奢问溘(%) + //local attack_bonus_rate = sq_GetLevelData(obj, SKILL_DEVILSTRIKE, SL_DS_ATTACK1_ATTACK_RATE + leve_column, level); + local devilSkill = sq_GetSkill(obj, SKILL_DEVILSTRIKE); + local attack_bonus_rate = sq_GetAttackBonusRate(devilSkill, SL_DS_ATTACK1_ATTACK_RATE + leve_column, 1.0); + + //print("\n devilstrike attack_rate:" + attack_bonus_rate + " resultAttackIndex:" + leve_column); + + obj.sq_binaryData_startWrite(); + obj.sq_binaryData_writeDword(attack_bonus_rate); // 等网蝶?塭桧醴暧 奢问溘(%) + + obj.sq_p00_sendCreatePassiveObjectPacket(24104 + resultAttackIndex, 0, 0, 1, 0); + + // 藤颤歜 撮? + var_devil.get_ct_vector(0).Reset(); + var_devil.get_ct_vector(0).Start(0,0); + + local cooltime = getLoadSkillEnableTime(obj, SKILL_DEVILSTRIKE, SI_DS_COOLTIME); // 蛤?? 藤颤歜 + var_devil.set_vector(0, cooltime); + } + else { // 藤颤歜桧 测 腑棻.. + //obj.startCantUseSkillWarning(); + if (obj.isMessage()) // + { + sq_AddMessage(29001); // 29001>等网 蝶?塭桧醴 藤颤歜殓栖棻. + + } + } + // + } + } + + // 罹晦怃 桧薯 舆樯奢暧 桧??陛 殖塭虽朝匙桧棻..横舒表螺棻陛 嫩嬴虽朝 ?娄 + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_DEVILSTRIKE, true, "Appendage/Character/ap_avenger_effect.nut", true); + + } +} + +//sq_GetCustomAttackInfo + +function procAppend_Avenger(obj) +{ + if(!obj) return S_FLOW_PRIEST; + + // 橾奁 横渐荡樯 唳办 + // 桧够缣怃 等网蝶?塭桧醴 ?卫粽 蝶鉴桧 毡朝虽 羹觼?狱棻.. + if(isInDevilStrike(obj)) { // 等网蝶?塭桧醴 ?卫粽蝶鉴桧 嫦翕肾横 毡棻贼.. + // 陕 等网蝶?塭桧醴 蝶鉴击 踩 热 毡朝 晦奖菟击 髦?狱棻.. 陴嬴毡朝 学葆啪桧虽 热纂煎 羹觼?狱棻.. + // 斜 热纂缣 睡?肾朝 蝶鉴桧 毡棻贼 斜 蝶鉴缣 衙?肾横 毡朝 郦蒂 sq_SetKeyxEnable煎 援蒂 热 毡朝 鼻鹧煎 虏苌 ?缣 + // + + // 等网蝶?塭桧醴蒂 踩 热 毡朝 鼻?桧塭贼.. + // 1. 等网蝶?塭桧醴 ?卫粽 蝶鉴击 蝗菜?艘朝虽 + // 2. 等网蝶?塭桧醴陛 嫦翕? 热 毡朝 state鼻鹧樯虽 桧 赅苌匙桧 鳝娄陛 肾贼..桧薯 郦 羹觼蒂 ?狱棻.. + if(isInDevilStrike(obj)) { + + if(obj.getState() == STATE_ATTACK || obj.getState() == STATE_DASH_ATTACK) { + // ?颤塭贼 C郦 羹觼?栖棻.. + procEnterDevilStrike(obj, E_JUMP_COMMAND, DEVILSTRIKE_ATTACK_2); + } + else { + local size = 3; + local iKeyList =[]; + iKeyList.resize(size); + + iKeyList[0] = E_ATTACK_COMMAND; + iKeyList[1] = E_JUMP_COMMAND; + iKeyList[2] = E_SKILL_COMMAND; + + for(local i=0;i var_awakening.get_vector(0)) { // 濠羹 藤颤歜 羹觼 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); // substate撮? + obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true); + } + else { // 藤颤歜桧 测 腑棻.. + obj.startCantUseSkillWarning(); + if (obj.isMessage()) // + { + sq_AddMessage(414); // 414>藤颤歜殓栖棻. + } + } + } + } + } + } + + return S_FLOW_NORMAL; +} + +function drawAppend_Avenger(obj, isOver, x, y) +{ + if(!obj) return S_FLOW_PRIEST; + + if(isPriestFlow(obj, obj.getState()) == true) { + return S_FLOW_PRIEST; + } + + return S_FLOW_NORMAL; +} + +function prepareDraw_Avenger(obj) +{ + if(!obj) return; + if(isAvengerAwakenning(obj) == true) { // isPriestFlow 葬欐高桧 true塭贼.. 陕撩桧 嬴栖坚 罹楝陛虽 亵勒桧 ?葬蝶? flow煎 绪螳捡 ?棻.. + return S_FLOW_NORMAL; + } + + return S_FLOW_PRIEST; +} + +function getStayAni_Avenger(obj) +{ + if(!obj) return null; + + local sq_var = obj.getVar(); + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = sq_var.GetAnimationMap("Stay", "Character/Priest/Animation/AvengerAwakening/Stay.ani"); + } + else { + ani = obj.sq_getStayAni(); + } + + return ani; +} + +function getAttackAni_Avenger(obj, index) +{ + if(!obj) return null; + + local sq_var = obj.getVar(); + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + if(index == 0) { + ani = sq_var.GetAnimationMap("Attack1", "Character/Priest/Animation/AvengerAwakening/Attack1.ani"); + } + else if(index == 1) { + ani = sq_var.GetAnimationMap("Attack2", "Character/Priest/Animation/AvengerAwakening/Attack2.ani"); + } + else if(index == 2) { + ani = sq_var.GetAnimationMap("Attack3", "Character/Priest/Animation/AvengerAwakening/Attack3.ani"); + } + else if(index == 3) { + ani = sq_var.GetAnimationMap("Attack4", "Character/Priest/Animation/AvengerAwakening/Attack4.ani"); + } + else if(index == 4) { + ani = sq_var.GetAnimationMap("Attack5", "Character/Priest/Animation/AvengerAwakening/Attack5.ani"); + } + } + else { + if(isInDevilStrikeSkill(obj)) { // 横渐荡 - 等网蝶?塭桧醴 蝶鉴击 乾坚 毡戏贼 ?颤陛 夥荸栖棻.. + //print("getAttackAni_Avenger"); + if(index == 3) { // 横渐荡 - ?虞颤朝 鼠晦 谦盟缣 评塭 2陛虽煎 拥栖诡桧暮桧 夥莎棻 樵尘? 蜓?贼 ?娄陛 棻脑棻.. + // 褊濠陛 - 腻舆 + // 釭该虽 陷 + if(obj.getWeaponSubType() == WEAPON_SUBTYPE_CROSS || obj.getWeaponSubType() == WEAPON_SUBTYPE_ROSARY) { + ani = obj.sq_getCustomAni(CUSTOM_ANI_AVENGER_ATTACK_4_ROSARY); + } + else { + ani = obj.sq_getCustomAni(CUSTOM_ANI_AVENGER_ATTACK_4_SCYTHE); + } + } + else + ani = obj.sq_getCustomAni(CUSTOM_ANI_AVENGER_ATTACK_1 + index); + + } + else { + //print("obj.sq_getAttackAni"); + ani = obj.sq_getAttackAni(index); + } + } + + return ani; +} + + +function getMoveAni_Avenger(obj) +{ + if(!obj) return null; + + local sq_var = obj.getVar(); + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = sq_var.GetAnimationMap("Move", "Character/Priest/Animation/AvengerAwakening/Move.ani"); + } + else { + ani = obj.sq_getMoveAni(); + } + + return ani; +} + +function getSitAni_Avenger(obj) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + local sq_var = obj.getVar(); + ani = sq_var.GetAnimationMap("Sit", "Character/Priest/Animation/AvengerAwakening/Sit.ani"); + + } + else { + ani = obj.sq_getSitAni(); + } + + return ani; +} + +function getDamageAni_Avenger(obj, index) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = null; + } + else { + ani = obj.sq_getDamageAni(index); + } + + + return ani; +} + +function getDownAni_Avenger(obj) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = null; + } + else { + ani = obj.sq_getDownAni(); + } + + + //local ani = obj.sq_getDownAni(); + + return ani; +} + +function getOverturnAni_Avenger(obj) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = null; + } + else { + ani = obj.sq_getOverturnAni(); + } + + return ani; +} + +function getJumpAni_Avenger(obj) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + local sq_var = obj.getVar(); + ani = sq_var.GetAnimationMap("Sit", "Character/Priest/Animation/AvengerAwakening/Sit.ani"); + } + else { + ani = obj.sq_getJumpAni(); + } + + return ani; +} + +function getJumpAttackAni_Avenger(obj) +{ + if(!obj) return null; + + local ani = null; + + //if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + //ani = null; + //} + //else { + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + print("\n warning \n "); + print("\n warning \n "); + print("\n warning \n "); + print("\n warning \n "); + print("\n warning \n "); + print("\n warning \n "); + print("\n warning \n "); + print("(isAvengerAwakenning(obj) == true) getJumpAttackAni_Avenger"); + + } + + ani = obj.sq_getJumpAttackAni(); + //} + + //local ani = obj.sq_getJumpAttackAni(); + + return ani; +} + +function getRestAni_Avenger(obj) +{ + if(!obj) return null; + + local sq_var = obj.getVar(); + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + //ani = null; + ani = sq_var.GetAnimationMap("Stay", "Character/Priest/Animation/AvengerAwakening/Stay.ani"); + } + else { + ani = obj.sq_getRestAni(); + } + +// local ani = obj.sq_getRestAni(); + + return ani; +} + +function getThrowChargeAni_Avenger(obj, index) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = null; + } + else { + ani = obj.sq_getThrowChargeAni(index); + } + + //local ani = obj.sq_getThrowChargeAni(index); + + return ani; +} + +function getThrowShootAni_Avenger(obj, index) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = null; + } + else { + ani = obj.sq_getThrowShootAni(index); + } + + //local ani = obj.sq_getThrowShootAni(index); + + return ani; +} + +function getDashAni_Avenger(obj) +{ + if(!obj) return null; + + local sq_var = obj.getVar(); + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = sq_var.GetAnimationMap("Dash", "Character/Priest/Animation/AvengerAwakening/Dash.ani"); + } + else { + ani = obj.sq_getDashAni(); + } + + //local ani = obj.sq_getDashAni(); + + return ani; +} + +function getAttackCancelStartFrame_Avenger(obj, index) +{ + if(!obj) return null; + + local frm = 0; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + if(index == 0) { + frm = 4; // 锰瘫 奢问擎..?溯歜 3桧鼻缣怃 渗唳 + } + else if(index == 1) { + frm = 2; // 锰瘫 奢问擎..?溯歜 3桧鼻缣怃 渗唳 + } + else if(index == 2) { + frm = 8; // 葆虽虞 奢问擎 10?溯歜 桧鼻缣怃 渗唳 + } + } + else { + if(isInDevilStrikeSkill(obj)) { // 横渐荡 - 等网蝶?塭桧醴 蝶鉴击 乾坚 毡戏贼 ?颤陛 夥荸栖棻.. + if(index == 0) { + frm = 2; // 锰瘫 奢问擎..?溯歜 2桧鼻缣怃 渗唳 + } + else if(index == 1) { + frm = 3; // 锰瘫 奢问擎..?溯歜 3桧鼻缣怃 渗唳 + } + else if(index == 2) { + frm = 5; // 葆虽虞 奢问擎 5?溯歜 桧鼻缣怃 渗唳 + } + } + else + frm = obj.sq_getAttackCancelStartFrame(index); + } + + return frm; +} + + +function getAttackCancelStartFrameSize_Avenger(obj) +{ + if(!obj) return null; + + local frmSize = 0; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + //frmSize = 3; // 晦狱奢问桧 横渐螳 陕撩 渗褐擎 4偃棻.. + frmSize = 2; // 晦狱奢问桧 横渐螳 陕撩 渗褐擎 4偃棻.. + } + else { + if(isInDevilStrikeSkill(obj)) { // 横渐荡樯 唳办 ?颤陛 赁偃樯虽 + frmSize = 3; // 横渐荡朝 晦狱奢问桧 4偃 殓栖棻.. + } + else + frmSize = obj.sq_getAttackCancelStartFrameSize(); + } + + return frmSize; +} + + +function getDashAttackAni_Avenger(obj) +{ + if(!obj) return null; + + local ani = null; + local sq_var = obj.getVar(); + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = sq_var.GetAnimationMap("DashAttack", "Character/Priest/Animation/AvengerAwakening/DashAttack.ani"); + } + else { + ani = obj.sq_getDashAttackAni(); + } + + //local ani = obj.sq_getDashAttackAni(); + + return ani; +} + +function getGetItemAni_Avenger(obj) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + local sq_var = obj.getVar(); + ani = sq_var.GetAnimationMap("GetItem", "Character/Priest/Animation/AvengerAwakening/GetItem.ani"); + } + else { + ani = obj.sq_getGetItemAni(); + } + + //local ani = obj.sq_getGetItemAni(); + + return ani; +} + +function getBuffAni_Avenger(obj) +{ + if(!obj) return null; + + local ani = null; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + ani = null; + } + else { + ani = obj.sq_getBuffAni(); + } + + //local ani = obj.sq_getBuffAni(); + + return ani; +} + + +function getJumpAttackInfo_Avenger(obj) +{ + if(!obj) return null; + local atk = obj.sq_getJumpAttackInfo(); + + return atk; +} + + +function getDashAttackInfo_Avenger(obj) +{ + if(!obj) return null; + + local atk = null; + + // 陕撩?卫粽 : 学跦(48溯涟) + // 1. 陕撩 渗褐 翕寰 陕撩晦 奢问溘桧 隶陛? + // 2. 等网 蝶?塭桧醴暧 学葆 啪桧虽 离朝榆 隶陛. + // 陕撩?卫粽 学跦击 乾坚 毡朝虽 羹觼?坚 乾坚 毡棻贼 学葆 啪桧虽 离朝榆击 隶陛卫面怃 葬欐?栖棻.. + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + atk = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACKINFO_AW_DASHATTACK); + + local state = obj.sq_GetSTATE(); + local power = obj.sq_getBonusRateWithPassive(SKILL_AVENGER_AWAKENING, state, SL_DASH_MAGIC_ATK,1.0); + obj.sq_setCurrentAttackBonusRate(power); + + //sq_setAttackPowerWithPassive + } + + return atk; +} + +function getJumpUpStartFrame_Avenger(obj) +{ + if(!obj) return null; + local index = obj.sq_getJumpUpStartFrame(); + + return index; +} + +function getJumpDownStartFrame_Avenger(obj) +{ + if(!obj) return null; + local index = obj.sq_getJumpDownStartFrame(); + + return index; +} + +function getJumpLandStartFrame_Avenger(obj) +{ + if(!obj) return null; + local index = obj.sq_getJumpLandStartFrame(); + + return index; +} + + +// 蜗塭桧注 奢问击 ?击阳 +function getDashAttackSlideStopFrame_Avenger(obj) +{ + if(!obj) return null; + local index = -1; + + if(isAvengerAwakenning(obj) == true) { // 横渐螳 陕撩赅萄塭贼 + index = 15; + } + else { + index = obj.sq_getDashAttackSlideStopFrame(); + } + + return index; +} + +function drawDevilStrikeGauge(obj) +{ + if(!obj) return; + + // 等网蝶?塭桧醴 啪桧虽 斜葬晦 + local level = sq_GetSkillLevel(obj, SKILL_DEVILSTRIKE); + + if(level <= 0) return; // 等网蝶?塭桧醴暧 ?卫粽蝶鉴桧 桡棻贼 传 斜溥还 ?踵桡击匏栖棻.. 斜歇橾桧 毡击梱 赅脑啊虽虏.. + + local sq_var = obj.getVar(); + + local gaugebar_normal_base = sq_var.GetAnimationMap("4_gaugebar_normal_base", "Character/Priest/Effect/Animation/DevilStrike/gauge/4_gaugebar_normal_base.ani"); + local gaugebar_normal_flash = sq_var.GetAnimationMap("4_gaugebar_normal_flash", "Character/Priest/Effect/Animation/DevilStrike/gauge/4_gaugebar_normal_flash.ani"); + local gaugebar_normal_max = sq_var.GetAnimationMap("4_gaugebar_normal_max", "Character/Priest/Effect/Animation/DevilStrike/gauge/4_gaugebar_normal_max.ani"); + + local gauge_normal_bar = sq_var.GetAnimationMap("5_gauge_normal_bar", "Character/Priest/Effect/Animation/DevilStrike/gauge/5_gauge_normal_bar.ani"); + local gauge_normal_flash = sq_var.GetAnimationMap("5_gauge_normal_flash", "Character/Priest/Effect/Animation/DevilStrike/gauge/5_gauge_normal_flash.ani"); + local gauge_normal_max = sq_var.GetAnimationMap("5_gauge_normal_max", "Character/Priest/Effect/Animation/DevilStrike/gauge/5_gauge_normal_max.ani"); + local gauge_normal_max_f = sq_var.GetAnimationMap("5_gauge_normal_max_f", "Character/Priest/Effect/Animation/DevilStrike/gauge/5_gauge_normal_max_f.ani"); + + local x = 105; + local y = 525; + + local line_buff_num = 9; + + + if(sq_getMyBuffInfoCount() > line_buff_num) { // 2还橾隆 嫔煎 萤萼棻.. + local line_offset = 20; + local line_num = sq_getMyBuffInfoCount() / line_buff_num; // 帼?嬴桧夔戏煎 塭樯偎热 + + y = y - (line_offset * line_num); + } + + + + /////////////////////////////////////// + // 啪桧虽 夥 ? 斜葬晦 + sq_AnimationProc(gaugebar_normal_base); + sq_drawCurrentFrame(gaugebar_normal_base, x, y, false); + /////////////////////////////////////// + + local gaugeValue = getDevilGauge(obj); + local max_gaugeValue = getDevilMaxGaugeValue(obj); + local rate = gaugeValue.tofloat() / max_gaugeValue.tofloat(); + + // 啪桧虽 涧 + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(appendage) { + local lastValue = appendage.sq_var.get_vector(2); // 虽陪 啪桧虽 + + //print("lastValue:" + lastValue + " gaugeValue:" + gaugeValue); + + local CURRENT_HIT_WHITE_FLASH_TIME = 500; + + if(lastValue == max_gaugeValue) { // 譆渠热纂谛 葆虽虞 啪桧虽陛 伪棻贼..?仪戏煎 + CURRENT_HIT_WHITE_FLASH_TIME = 600; + } + + if(lastValue > gaugeValue) { //葆虽虞 啪桧虽陛 ?营 啪桧虽 尔棻 堪棻贼.. 啪桧虽涧蒂 ?药捡?棻.. + //DS_APEND_MAX_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂 + + local time = appendage.getTimer().Get(); + + local whitetrans = sq_GetUniformVelocity(255, 0, time, CURRENT_HIT_WHITE_FLASH_TIME); + local lv = sq_GetUniformVelocity(lastValue, gaugeValue, time, CURRENT_HIT_WHITE_FLASH_TIME); + + local flahbar_rate = lv.tofloat() / max_gaugeValue.tofloat(); + + if(lastValue == max_gaugeValue) { // 譆渠热纂谛 葆虽虞 啪桧虽陛 伪棻贼..?仪戏煎 + if(time < 200) { // ?仪啪桧虽虏 尔桧紫烟 200 tick桧?缣怃朝 罹晦怃 葬欐?帼董栖棻.. + sq_AnimationProc(gauge_normal_flash); + gauge_normal_flash.setImageRate(flahbar_rate, 1.0); + + local rgb = sq_RGB(255,255,255); + local alpha = sq_ALPHA(whitetrans); + + sq_drawCurrentFrameEffect_SIMPLE(gauge_normal_flash, x, y, rgb, alpha); + + // ?仪 啪桧虽夥紫 斜溥遽棻.. + sq_AnimationProc(gaugebar_normal_max); + sq_drawCurrentFrame(gaugebar_normal_max, x, y, false); + return; + } + } + + //print("flahbar_rate:" + flahbar_rate); + // 啪桧虽 斜葬晦 + sq_AnimationProc(gauge_normal_flash); + gauge_normal_flash.setImageRate(flahbar_rate, 1.0); + + local rgb = sq_RGB(255,255,255); + local alpha = sq_ALPHA(whitetrans); + + sq_drawCurrentFrameEffect_SIMPLE(gauge_normal_flash, x, y, rgb, alpha); + + // 啪桧虽 ?娄 部 + if(lv == gaugeValue) { + appendage.sq_var.set_vector(2, gaugeValue); + } + } + + } + + // 橾奁 啪桧虽蒂 斜葬朝等 裟蝶朝 觊 棻脑啪 斜溥丑捡?栖棻.. + if(gaugeValue == max_gaugeValue) { + // 橾奁 啪桧虽 斜葬晦 + sq_AnimationProc(gauge_normal_max); + gauge_normal_max.setImageRate(rate, 1.0); + sq_drawCurrentFrame(gauge_normal_max, x, y, false); + // + + // 裟蝶纂 啪桧虽夥紫 斜溥遽棻.. + sq_AnimationProc(gaugebar_normal_flash); + sq_drawCurrentFrame(gaugebar_normal_flash, x, y, false); + // + + + local max_gauge_offset_x = 150; + // 裟蝶纂 啪桧虽夥紫 斜溥遽棻.. + local size = 8; + local maxResWidth = 20; + local lineMoveLen = (max_gauge_offset_x + (maxResWidth * 2)); // ?塭樯 遗霜桧朝 剪葬 + + local time = (appendage.getTimer().Get() / 20) % lineMoveLen; + + //print("x:" + x + " y:" + y); + local xPos = x; + local yPos = y - 10; + setClip(xPos, yPos, xPos + max_gauge_offset_x + 16, yPos + 20); + + for(local i=0;i tipX && mouseY > tipY && mouseX < tipEndX && mouseY < tipEndY) { + sq_drawToolTip(x - 35, y - 13, sq_RGB(255,255,255), 0, 1, 29003, 0, 260, true); + } + +} + +// 横渐荡辨 drawcustomui 睡碟殓栖棻.. 渠?瞳戏煎 等网蝶?塭桧醴 啪桧虽蒂 斜葬溥坚 虏菟历蝗栖棻.. +function drawCustomUI_Avenger(obj) +{ + if(!obj) return; + //if(obj.sq_isMyCharacter()) // 釭暧 议葛搅陛 嬴栖塭贼 桧匙击 斜溥还 ?踵 桡击匏栖棻.. + //if(sq_getMyCharacter() != obj) { + // return; + //} + + + if(!obj.sq_isMyCharacter()) { + //print("!obj.sq_isMyCharacter()"); + return; + } + + + if(!isGrowTypeAvenger(obj)) return; // 横渐螳陛 嬴栖塭贼 传? 斜溥还 ?踵 桡击匏栖棻.. + + + + // 等网蝶?塭桧醴 啪桧虽 斜葬晦 + drawDevilStrikeGauge(obj); +} + + + + +function getStaticDataIndexDevilGauge(obj, passiveobjectIndex, newState) { // 螃粽薛? state 高缣 评塭 醱瞪腆 DevilStrike.skl 蝶鹧?等桧颤 樯策蝶蒂 掘?褫栖棻.. + if(!obj) return -1; + + local state = obj.getState(); + local staticIndex = -1; + if(newState != -1) { + state = newState; + } + + + if(state == STATE_THROW) { // 陛栋? skill 酝缣 state_throw煎 霞??朝 赁偃暧 蝶鉴桧 毡朝等 桧匙缣 妇?怃朝 热翕戏煎 羹觼?棻.. + //print("\n state == STATE_THROW:" + obj.getThrowIndex()); + if(obj.getThrowIndex() == SKILL_GRASP_HAND_OF_ANGER) { //GraspHandOfAnger // (碟喻暧 遗面锅) + staticIndex = SI_DS_GRASP_HANDOFANGER; + } + else if(obj.getThrowIndex() == SKILL_CHANGE_HP_TO_MP) { // ChangeHpToMp (坚鳝暧 ?翮) + staticIndex = SI_DS_CHANGE_HPTOMP; + } + else if(obj.getThrowIndex() == SKILL_SLOW_HEAL) { // SKILL_SLOW_HEAL + //SI_DS_SLOW_HEAL <- 20 // 蜗煎办? + staticIndex = SI_DS_SLOW_HEAL; + } + else if(obj.getThrowIndex() == SKILL_STRIKING) { // SKILL_STRIKING + //SKILL_STRIKING, /// 蝶?塭桧缰 + //SI_DS_STRIKING <- 22 // 蝶?塭桧缰 + staticIndex = SI_DS_STRIKING; + } + else if(obj.getThrowIndex() == SKILL_CURE) { // SKILL_CURE + //SKILL_CURE, /// 听横 - ??卫瞪 + //SI_DS_CURE <- 23 // 听横 + staticIndex = SI_DS_CURE; + } + else if(obj.getThrowIndex() == SKILL_BLESS) { // SKILL_BLESS + //SKILL_BLESS, /// 绾溯蝶 - 偃樯卫瞪 + //SI_DS_BLESS <- 25 // 虽?暧 蹴犒 + staticIndex = SI_DS_BLESS; + } + else if(obj.getThrowIndex() == SKILL_RISING_AREA) { // SKILL_RISING_AREA + //SKILL_RISING_AREA + //SI_DS_RISING_AREA <- 27 // 蝓茧霞 + staticIndex = SI_DS_RISING_AREA; + } + } + else if(state == STATE_ATTACK) { + if(isAvengerAwakenning(obj)) { + if(obj.getAttackIndex() == 3) { + staticIndex = SI_DS_DG_JUMP_ATTACK; + } + else { + staticIndex = SI_DS_DG_ATTACK; + } + } + else { + staticIndex = SI_DS_ATTACK; + } + } + else if(state == STATE_JUMP_ATTACK) { + staticIndex = SI_DS_JUMP_ATTACK; + } + else if(state == STATE_DASH_ATTACK) { + if(isAvengerAwakenning(obj)) { + staticIndex = SI_DS_DG_DASH_ATTACK; + } + else { + staticIndex = SI_DS_DASH_ATTACK; + } + } + else if(state == STATE_HIGH_SPEED_SPLASH) { + staticIndex = SI_DS_HIGH_SPEED_SLASH; + } + else if(state == STATE_EARTHQUAKE || passiveobjectIndex == 24103) { //24103 `Character/Priest/EarthQuakeRock.obj` + staticIndex = SI_DS_EARTH_QUAKE; + } + else if(state == STATE_SPINCUTTER) { + staticIndex = SI_DS_SPINCUTTER; + } + else if(state == STATE_HEDGEHOG) { + staticIndex = SI_DS_HEDGEHOG; + } + else if(state == STATE_FASTMOVE) { + staticIndex = SI_DS_FASTMOVE; + } + else if(state == STATE_EXECUTION) { + staticIndex = SI_DS_EXECUTION; + } + else if(state == STATE_RIPPER) { + staticIndex = SI_DS_RIPPER; + } + else if(state == STATE_POWER_OF_DARKNESS) { + staticIndex = SI_DS_DARK; + } + else if(state == STATE_ANTIAIR_UPPER) { +//SI_DS_ANTIAIR_UPPER <- 18 // 奢溜颤 + staticIndex = SI_DS_ANTIAIR_UPPER; + } + else if(state == STATE_SMASHER) { +//SI_DS_SMASHER <- 19// 蝶衙敷 + staticIndex = SI_DS_SMASHER; + } + else if(state == STATE_LUCKY_STRAIGHT) { +//SI_DS_LUCKY_STRAIGHT <- 21 // 楣郦 蝶?溯桧? + staticIndex = SI_DS_LUCKY_STRAIGHT; + } + else if(state == STATE_SECOND_UPPER) { + // STATE_SECOND_UPPER <- 30 // 撮钟萄横? +//SI_DS_SKILL_SECOND_UPPER <- 24 // 撮钟萄横? + staticIndex = SI_DS_SKILL_SECOND_UPPER; + } + else if(state == STATE_LUCKY_STRAIGHT) { +//SI_DS_LUCKY_STRAIGHT <- 21 // 楣郦 蝶?溯桧? + staticIndex = SI_DS_LUCKY_STRAIGHT; + } + else if(state == STATE_QUAKE_AREA) { + // STATE_QUAKE_AREA <- 26 // 钒瑰跷 +//SI_DS_QUAKE_AREA <- 26 // 钒瑰跷 + staticIndex = SI_DS_QUAKE_AREA; + } + else if(state == STATE_EX_DISASTER) { + // STATE_EX_DISASTER <- 74 // ex蝶鉴 - 营懈 + staticIndex = SI_DS_DISASTER; + } + else if(state == STATE_PANDEMONIUM_EX) { + // STATE_PANDEMONIUM_EX <- 73 // ex蝶鉴 - 犒葆瞪 + staticIndex = SI_DS_PANDEMONI; + } + + // + + //print("\n staticIndex:" + staticIndex); + return staticIndex; + +} + +// 横渐荡 state蒂 羹觼?罹 醱瞪桧 ?蹂? 鼻鹧塭贼 学葆啪桧虽蒂 醱瞪卫面鄹栖棻.. +// ?卫粽螃粽薛? 樯策蝶蒂 跷陛? 桧嵘朝 舆樯奢 state陛 桧嘐 棻艇鼻鹧煎 渗唳?击 阳 庵棵啪 等嘐虽陛 菟横鬲击 阳蒂 籀葬?晦 嫔?怃 殓栖棻.. +function procDevilStrikeGauge(obj, passiveobjectIndex) +{ + if(!obj) return; + + local staticIndex = getStaticDataIndexDevilGauge(obj, passiveobjectIndex, -1); + //local passive_attack_staticIndex = getStaticDataIndexDevilGauge(obj, passiveobjectIndex); + + // ?营 议葛搅暧 state蒂 羹觼?罹 葬欐肾朝高桧 -1桧 嬴栖塭贼 醱瞪?丑捡?棻朝 暧嘐殓栖棻.. + //print("procDevilStrikeGauge:" + staticIndex); + if(staticIndex != -1) { // + if(!IsAddDevilGauge(obj, staticIndex)) { + //print(" \n IsAddDevilGauge(obj, staticIndex) == false"); + return; // 醱瞪?楚斜蒂 羹觼?怃 -1桧 葬欐肾贼 FALSE蒂 葬欐?朝等 桧歇隆 醱瞪?怃朝 寰腌栖棻.. + } + + //print("addDevilGauge staticIndex :" + staticIndex); + local addValue = sq_GetIntData(obj, SKILL_DEVILSTRIKE, staticIndex); + //print("addValue:" + addValue + " maxValue:" + getDevilMaxGaugeValue(obj)); + addDevilGauge(obj, addValue); // 学葆啪桧虽蒂 陕 state涤煎 蜃啪 醱瞪?栖棻 + + //obj.getVar("devilStrike").set_vector(0, -1); // 醱瞪桧 腑戏栖..桧薯 醱瞪斜虏~ + // 桧 晦奖缣 渠?怃朝 桧薯 涡桧鼻 醱瞪?贼 寰肾晦 阳侥缣 ?楚斜蒂 -1高戏煎 撮? + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(appendage) { + //print("appendage.sq_var.set_vector(DS_APEND_ADD_FLAG, -1);"); + appendage.sq_var.set_vector(DS_APEND_ADD_FLAG, -1); + } + + } +} + +// 横渐荡 attack妇湿 属寥?热菟 殓栖棻.. +function onBeforeAttack_Avenger(obj, damager, bounding_box, is_stuck) +{ + + return 1; +} + +function onAttack_Avenger(obj, damager, bounding_box, is_stuck) +{ + if(!obj) return -1; + //print(" onAttack_Avenger" + isGrowTypeAvenger(obj)); + + if(!isGrowTypeAvenger(obj)) return -1; // 横渐螳陛 嬴栖塭贼 传? 斜溥还 ?踵 桡击匏栖棻.. + + procDevilStrikeGauge(obj, -1); // 横渐荡 state蒂 羹觼?罹 醱瞪桧 ?蹂? 鼻鹧塭贼 学葆啪桧虽蒂 醱瞪卫面鄹栖棻.. + + return 1; +} + +function onAfterAttack_Avenger(obj, damager, bounding_box, is_stuck) +{ + return 1; +} + + +function onAfterAttack_PassiveObject(passiveobj, damager, bounding_box, is_stuck) +{ + return 1; +} + + +function setEnableCancelSkill_Avenger(obj, isEnable) +{ + if(!obj) return false; + + if(!isGrowTypeAvenger(obj)) return false; // 横渐螳陛 嬴栖塭贼 ?葬蝶?蒂 埠潍 桧翕?紫烟 + + + if(!obj.isMyControlObject()) return false; + + + if(!isEnable) { + return true; + } + + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + //if(sq_isPVPMode()) + { + //127 `Priest/CancelFastmove.skl` // 警蜗 坚楼桧翕 + obj.setSkillCommandEnable(SKILL_FASTMOVE, isEnable); + //128 `Priest/CancelHighSpeedSlash.skl` // 警蜗 坚楼漆晦 + obj.setSkillCommandEnable(SKILL_HIGH_SPEED_SLASH, isEnable); + //129 `Priest/CancelEarthQuake.skl` // 警蜗 虽煆霞 + obj.setSkillCommandEnable(SKILL_EARTH_QUAKE, isEnable); + //130 `Priest/CancelHedgehog.skl` // 警蜗 尔?暧 陛卫(?虽?斜) + obj.setSkillCommandEnable(SKILL_HEDGEHOG, isEnable); + //132 `Priest/CancelSpincutter.skl` // 警蜗 蝶?醴搅 + obj.setSkillCommandEnable(SKILL_SPINCUTTER, isEnable); + //170 `Priest/CancelBackStep.skl` // 警蜗 寥蝶变 + +//133 `Priest/PandemoniumEx.skl` // ?撩 : 犒葆瞪 +//SKILL_PANDEMONIUM_EX <- 133 // 犒葆瞪 + obj.setSkillCommandEnable(SKILL_PANDEMONIUM_EX, isEnable); +//134 `Priest/DisasterEx.skl` // ?撩 : 营懈 +//SKILL_EX_DISASTER <- 134 // ex蝶鉴 - 营懈 + obj.setSkillCommandEnable(SKILL_EX_DISASTER, isEnable); + // + } + // 警蜗晦 饷薯 蒙机殓栖棻. (2012.04.12) + return true; + + //local size = 5; + local size = 4; + local cancel_skill_l =[]; + local skill_l =[]; + cancel_skill_l.resize(size); + skill_l.resize(size); + + cancel_skill_l[0] = SKILL_CANCEL_FASTMOVE; + cancel_skill_l[1] = SKILL_CANCEL_HIGH_SPEED_SLASH; + cancel_skill_l[2] = SKILL_CANCEL_EARTH_QUAKE; + cancel_skill_l[3] = SKILL_CANCEL_HEDGEHOG; + //cancel_skill_l[4] = SKILL_CANCEL_SPINCUTTER; + + skill_l[0] = SKILL_FASTMOVE; + skill_l[1] = SKILL_HIGH_SPEED_SLASH; + skill_l[2] = SKILL_EARTH_QUAKE; + skill_l[3] = SKILL_HEDGEHOG; + //skill_l[4] = SKILL_SPINCUTTER; + + for(local i=0;i 0) { + if(isEnable) { + // 罹晦缣怃 菸蝶陛蛤树樯虽 羹觼?瑭捡?棻.. 菸蝶陛蛤树 渗褐鼻鹧缣怃 橾奁 警蜗晦陛 釭陛贼 堆坞?虽 强朝陛.. + if(!isAvengerAwakenning(obj)) + bRet = true; + else { + return false; + } + } + } + + //print("\n cancel_skill_l[i]:" + cancel_skill_l[i] + " level:" + level + " bRet:" + bRet + " skill_l[i]:" + skill_l[i]); + obj.setSkillCommandEnable(skill_l[i], bRet); + } + + + return true; +} + +function playDashAttackSound_Avenger(obj) // 渠莲饵遴萄蒂 撮??朝 螃帼塭桧注胀 ?热殓栖棻.. +{ + if(!obj) return 0; + if(!isGrowTypeAvenger(obj)) return 0; // 横渐螳陛 嬴栖塭贼 传? 斜溥还 ?踵 桡击匏栖棻.. + + if(isAvengerAwakenning(obj)) return 1; // 陕撩橾隆 评煎 渠莲饵遴萄 撮??栖棻.. + + return 0; +} + + + +function setActiveStatus_Avenger(obj, activeStatus, power) +{ + if(!obj) return 0; + if(isAvengerAwakenning(obj)) + { + return 0; // 陕撩橾隆 评煎 鼻鹧桧鼻击 虞嬴帼董栖棻.. + } + + return 1; +} + +// setcurrentanimation桧 胀 ?缣 桧??瘫赀紫 娄湿 亵瞰击 嫔? 赅苌 setcurrentanimation?缣 夔?煤 ? 热 毡朝 squirrel function?轿击 ?栖棻.. +function setCurrentAnimation_Avenger(obj, animation) +{ + if(!obj) return; + if(!animation) return; + + if(isAvengerAwakenning(obj)) { // 陕撩 菸蝶陛蛤树 渗褐 ?塭贼 setcurrentanimation 肾朝 赅苌 animation擎 瘫赀紫 亵瞰妇湿 ?楚斜蒂 螃?卫霾栖棻.. + if(animation) { + animation.setNeverApplyAnotherPlayersEffectAlphaRate(false); + animation.setIsApplyAnotherPlayersEffectAlphaRate(false); + } + } +} + +//湍瞪击 亿煎 卫蒙? 阳 ?轿肾朝 葬掸 ?热 +function resetDungeonStart_Avenger(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount) +{ + if(!obj) return -1; + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(appendage) { + if(appendage.sq_var.size_vector() == 5) { // 亿煎 殓潍?朝匙桧塭贼 学葆啪桧虽 热纂蒂 葬掸?栖棻.. + appendage.sq_var.set_vector(1, 0); // ?营 学葆啪桧虽 热纂 樯策蝶 1 + } + } + + local awakening_appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_awakening.nut"); + + if(awakening_appendage) { + if(isAvengerAwakenning(obj)) { + awakening_appendage.setValid(false); + awakening_appendage.sq_var.set_vector(I_AVENGER_AWAKENING_VALID, 0); + obj.setObjectHeight(-1); + } + } + + return 1; + +} + +function takingAwakenSkillBack_Avenger(obj) +{ + if(!obj) return false; + if(!isGrowTypeAvenger(obj)) // 横渐荡陛 嬴棋 唳办 鼠亵勒 flowpriest煎 + return false; + + local state = obj.getState(); + + print("\n takingAwakenSkillBack:" + state + " isAvengerAwakenning(obj):" + isAvengerAwakenning(obj)); + + if(isAvengerAwakenning(obj) || state == STATE_AVENGER_AWAKENING) { // 陕撩 渗褐 - 菸蝶陛蛤树 鼻鹧塭贼 ?擎 // 渗褐 酝橾 鼻鹧橾阳紫 桧够缣 菟横陛捡?栖棻.. + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); // substate撮? + obj.sq_addSetStatePacket(STATE_AWAKENING_TURN_OFF, STATE_PRIORITY_IGNORE_FORCE, true); + } + + if(obj.getVar("takingAwakenSkillBack").size_vector() == 0) { + obj.getVar("takingAwakenSkillBack").push_vector(0); + obj.getVar("takingAwakenSkillBack").push_vector(0); + } + + obj.getVar("takingAwakenSkillBack").set_vector(0, 1); + + return true; +} \ No newline at end of file diff --git a/character/priest/avenger_header.nut b/character/priest/avenger_header.nut new file mode 100644 index 0000000..e9069b1 --- /dev/null +++ b/character/priest/avenger_header.nut @@ -0,0 +1,203 @@ + +// 桧够擎 湍?模蝶缣 桡朝 牖热 蝶觼董?煎虏 偃嫦?贼怃 ?蹂? 蝶鉴偃嫦缣 ?蹂? 鼻热,enum 跷陛高击 摹树?朝 睡碟殓栖棻. +// 湍?模蝶缣 毡朝 高击 桧够缣 厥戏卫贼 寰腌栖棻.. + +// 横渐螳 state 妇湿 睡碟殓栖棻 +STATE_PRIEST_TEST <- 60 // 蛤?滓? 错[鬼?] +STATE_SPINCUTTER <- 61 // 蝶?醴搅(横渐螳) +STATE_PRIEST_SCYTHE_MASTERY <- 62 // 横渐螳 : 饵桧萄 葆蝶搅葬 +STATE_HEDGEHOG <- 63 // ?虽?斜 +STATE_FASTMOVE <- 64 // 横渐螳 : 绪艇桧翕 +STATE_RIPPER <- 65 // 横渐螳 : 葬? +STATE_EARTHQUAKE <- 66 // 横渐螳 : 横蝶蠡桧觼 +STATE_AVENGER_AWAKENING <- 67 // 横渐螳 : 陕撩渗褐 +STATE_EXECUTION <- 68 // 横渐螳 : 籀? + +STATE_AWAKENING_TURN_OFF <- 69 // 横渐螳 : 陕撩 - 给嬴螃晦 +STATE_HIGH_SPEED_SPLASH <- 70 // 坚楼漆晦 +STATE_POWER_OF_DARKNESS <- 71 // 横菸暧 掏栋 +STATE_FALLING_SOUL <- 72 // 跷块?朝 舱? + +STATE_PANDEMONIUM_EX <- 73 // 横渐螳 ?撩 : 犒葆瞪 +STATE_EX_DISASTER <- 74 // EX 蝶鉴 : 营懈 + + +// 横渐螳 skill妇湿 睡碟殓栖棻. +SKILL_CHANGE_HP_TO_MP <- 10 // 坚鳝暧 ?翮 +SKILL_SPINCUTTER <- 113 // 蝶?醴搅 (横渐螳) +SKILL_SCYTHE_MASTERY <- 114 // 横渐螳 : 饵桧萄 葆蝶搅葬 +SKILL_FASTMOVE <- 115 // 坚楼桧翕(横渐螳) +SKILL_HEDGEHOG <- 116 // ?虽?斜 +SKILL_RIPPER <- 117 // 阗横嫦晦晦 +SKILL_EARTH_QUAKE <- 118 // 横蝶蠡桧觼 +SKILL_AVENGER_AWAKENING <- 119 // 横渐螳 陕撩 +SKILL_EXECUTION <- 120 // 籀? +SKILL_HEARTHINGS <- 121 // ?羶 +SKILL_NIGHTMARE <- 122 // 陕撩 ?卫粽学跦(48溯涟) +SKILL_DEVILSTRIKE <- 123 // 等网蝶?塭桧醴 +SKILL_HIGH_SPEED_SLASH <- 124 // 坚楼漆晦 +SKILL_POWER_OF_DARKNESS <- 125 // 樵菸暧 掏栋 + +SKILL_CANCEL_FASTMOVE <- 127 // 警蜗 坚楼桧翕 +SKILL_CANCEL_HIGH_SPEED_SLASH <- 128 // 警蜗 坚楼漆晦 +SKILL_CANCEL_EARTH_QUAKE <- 129 // 警蜗 虽煆霞 +SKILL_CANCEL_HEDGEHOG <- 130 // 警蜗 尔?暧 陛卫(?虽?斜) +SKILL_FALLING_SOUL <- 131 // 跷块?朝 舱? +SKILL_CANCEL_SPINCUTTER <- 132 // 警蜗 蝶?醴搅 + +SKILL_PANDEMONIUM_EX <- 133 // 犒葆瞪 + +SKILL_EX_DISASTER <- 134 // ex蝶鉴 - 营懈 + +SKILL_FASTMOVE_EX <- 164 // ex蝶鉴 - 坚楼桧翕 鬼? +SKILL_RIPPER_EX <- 165 // ex蝶鉴 - 葬?鬼? + +// 横渐螳 animation 妇湿 睡碟殓栖棻.. +CUSTOM_ANI_SPINCUTTER1 <- 79 // 蝶?醴搅 THROW +CUSTOM_ANI_SPINCUTTER2 <- 80 // 蝶?醴搅 RE CALL +CUSTOM_ANI_SPINCUTTER3 <- 81 // 蝶?醴搅 ARRIVAL +CUSTOM_ANI_FASTMOVE1 <- 82 // 坚楼桧翕 卫翕 +CUSTOM_ANI_FASTMOVE2 <- 83 // 坚楼桧翕 瑞? +CUSTOM_ANI_FASTMOVE3 <- 84 // 坚楼桧翕 霞? +CUSTOM_ANI_FASTMOVE4 <- 85 // 坚楼桧翕 谦猿 +// 陕撩 横渐螳 渗褐 +CUSTOM_ANI_AVENGER_AWAKENING1 <- 86 // 陕撩 横渐螳 +CUSTOM_ANI_AVENGER_AWAKENING2 <- 87 // 陕撩 横渐螳 +CUSTOM_ANI_AVENGER_AWAKENING3 <- 88 // 陕撩 横渐螳 +CUSTOM_ANI_AVENGER_AWAKENING4 <- 89 // 陕撩 横渐螳 +CUSTOM_ANI_HEDGEHOG <- 90 // ?虽?斜 +CUSTOM_ANI_RIPPER <- 91 // 葬? +CUSTOM_ANI_EARTH_QUAKE <- 92 // 横蝶蠡桧觼 + +CUSTOM_ANI_EXC_GRAB <- 93 // 栉蝶听暮 濩晦 +CUSTOM_ANI_EXC_GRAB_EX <- 94 // 栉蝶听暮 庵煎 湍虽晦 +CUSTOM_ANI_EXC_TURNOVER <- 95 // 栉蝶听暮 庵煎 湍虽晦 +CUSTOM_ANI_EXC_RUN <- 96 // 栉蝶听暮 殖葬晦 +CUSTOM_ANI_EXC_LAST <- 97 // 栉蝶听暮 虞颤 +CUSTOM_ANI_EXC_FAILED <- 98 // 栉蝶听暮 褒? + +CUSTOM_ANI_AWAKENING_TURN_OFF <- 99 // 陕撩-渗褐 ?薯 + +CUSTOM_ANI_HIGH_SPEED_READY <- 100 // 坚楼 漆晦 +CUSTOM_ANI_HIGH_SPEED_ATTACK_1 <- 101 // 坚楼 漆晦 +CUSTOM_ANI_HIGH_SPEED_ATTACK_2 <- 102 // 坚楼 漆晦 +CUSTOM_ANI_HIGH_SPEED_ATTACK_3 <- 103 // 坚楼 漆晦 +CUSTOM_ANI_HIGH_SPEED_ATTACK_4 <- 104 // 坚楼 漆晦 +CUSTOM_ANI_HIGH_SPEED_LAST <- 105 // 坚楼 漆晦 + +CUSTOM_ANI_AVENGER_ATTACK_1 <- 106 // 横渐荡 - ?颤1 +CUSTOM_ANI_AVENGER_ATTACK_2 <- 107 // 横渐荡 - ?颤2 +CUSTOM_ANI_AVENGER_ATTACK_3 <- 108 // 横渐荡 - ?颤3 +CUSTOM_ANI_AVENGER_ATTACK_4_SCYTHE <- 109 // 横渐荡 ?颤 4 (陷 帼瞪) +CUSTOM_ANI_AVENGER_ATTACK_4_ROSARY <- 110 // 横渐荡 ?颤 4 (腻舆 帼瞪) + +CUSTOM_ANI_POWER_OF_DARKNESS_START <- 111 // 横菸暧 掏栋 +CUSTOM_ANI_POWER_OF_DARKNESS_STAY <- 112 // 横菸暧 掏栋 +CUSTOM_ANI_POWER_OF_DARKNESS_END <- 113 // 横菸暧 掏栋 + +CUSTOM_ANI_AWAKENING_TURN_OFF_2 <- 114 // 陕撩-渗褐 ?薯2 + +CUSTOM_ANI_PANDEMONIUM_START <- 115 // 犒葆瞪 +CUSTOM_ANI_PANDEMONIUM_END <- 116 // 犒葆瞪 + +CUSTOM_ANI_EX_DISASTER_1 <- 117 // EX蝶鉴 - 营懈1 +CUSTOM_ANI_EX_DISASTER_2 <- 118 // EX蝶鉴 - 营懈1 +CUSTOM_ANI_EX_DISASTER_3 <- 119 // EX蝶鉴 - 营懈1 +CUSTOM_ANI_EX_DISASTER_4 <- 120 // EX蝶鉴 - 营懈1 +CUSTOM_ANI_EX_DISASTER_5 <- 121 // EX蝶鉴 - 营懈1 + + + +// 横渐螳 atk?橾 妇湿 睡碟殓栖棻. +CUSTOM_ATTACKINFO_SPINCUTTER <- 70 // 蝶?醴搅 蟾晦颤 +CUSTOM_ATTACKINFO_FASTMOVE <- 71 // 坚楼桧翕 +CUSTOM_ATTACKINFO_HEDGEHOG <- 72 // ?虽?斜 +CUSTOM_ATTACKINFO_RIPPER <- 73 // 葬? + +CUSTOM_ATTACKINFO_EXCUTION_1 <- 74 // 濩晦 +CUSTOM_ATTACKINFO_EXCUTION_2 <- 75 // 濩晦 ?嫦 +CUSTOM_ATTACKINFO_EXCUTION_3 <- 76 // 给溥怃 镒晦 +CUSTOM_ATTACKINFO_EXCUTION_4 <- 77 // 殖葬晦 +CUSTOM_ATTACKINFO_EXCUTION_5 <- 78 // 夥款缣 援脑晦 +CUSTOM_ATTACKINFO_EXCUTION_6 <- 79 // 虞颤 + +CUSTOM_ATTACKINFO_AW_ATTACK1 <- 80 // 陕撩 - 渗褐 晦狱奢问1 80 +CUSTOM_ATTACKINFO_AW_ATTACK2 <- 81 // 陕撩 - 渗褐 晦狱奢问2 81 +CUSTOM_ATTACKINFO_AW_ATTACK3 <- 82 // 陕撩 - 渗褐 晦狱奢问3 82 +CUSTOM_ATTACKINFO_AW_ATTACK4 <- 83 // 陕撩 - 渗褐 晦狱奢问4 83 + + +CUSTOM_ATTACKINFO_AW_DASHATTACK <- 84 // 陕撩 - 渗褐 晦狱奢问4 84 +CUSTOM_ATTACKINFO_RIPPER_EXPLOSION <-85 +CUSTOM_ATTACKINFO_HIGH_SPEED_SLASH <-86 // 坚楼漆晦 + +CUSTOM_ATTACKINFO_AVENGER_ATTACK_1 <-87 +CUSTOM_ATTACKINFO_AVENGER_ATTACK_2 <-88 +CUSTOM_ATTACKINFO_AVENGER_ATTACK_3 <-89 +CUSTOM_ATTACKINFO_AVENGER_ATTACK_4 <-90 + +CUSTOM_ATTACKINFO_HIGH_SPEED_SLASH_LAST <-91 // 坚楼漆晦 +CUSTOM_ATTACKINFO_POWER_OF_DARKNESS <- 92 + +CUSTOM_ATTACKINFO_AVENGER_ATTACK_3_2 <-93 // 横渐荡 - ?颤 虞颤镒晦 横鸥 +CUSTOM_ATTACKINFO_AVENGER_ATTACK_4_2 <-94 // 横渐荡 - ?颤 虞颤镒晦 横鸥 + +CUSTOM_ATTACKINFO_DISASTER <-95 // 横渐荡 ex蝶鉴 营懈 + +CUSTOM_ATTACKINFO_PANDEMONIUM_EX_ON_START <- 96 // 横渐螳 犒葆瞪 罗颤 奢问 +CUSTOM_ATTACKINFO_AWAKENING_PANDEMONIUM_START <- 97 // 横渐螳 犒葆瞪 罗颤 奢问 (陕撩) + + +E_ATTACK_COMMAND <- 0 +E_JUMP_COMMAND <- 1 +E_DASH_COMMANDS_1 <- 2 +E_DASH_COMMANDS_2 <- 3 +E_CREATURE_COMMAND <- 4 +E_BUFF_COMMAND <- 5 +E_SKILL_COMMAND <- 6 +E_COMMAND_COUNT <- 7 + +// 横渐荡 - 等网蝶?塭桧醴(?卫粽蝶鉴) 蝶鹧鸥 等桧颤 ENUM INDEX +SI_DS_MAX_DEVIL_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂 +// 桧? 等网蝶?塭桧醴 陕 蝶鉴涤 啪桧虽 离朝 晔 +SI_DS_ATTACK <- 1 // (?颤) +SI_DS_JUMP_ATTACK <- 2 // (薄?奢问) +SI_DS_DASH_ATTACK <- 3 // (渠卫奢问) +SI_DS_DG_ATTACK <- 4 // (渗褐 ?颤奢问) +SI_DS_DG_DASH_ATTACK <- 5 // (渗褐 渠卫奢问) +SI_DS_DG_JUMP_ATTACK <- 6 // (渗褐 薄?奢问) +SI_DS_HIGH_SPEED_SLASH <- 7 // (坚楼漆晦) +SI_DS_GRASP_HANDOFANGER <- 8 // GraspHandOfAnger // (碟喻暧 遗面锅) +SI_DS_CHANGE_HPTOMP <- 9 // ChangeHpToMp (坚鳝暧 ?翮) +SI_DS_EARTH_QUAKE <- 10 // EarthQuake (横蝶蠡桧觼) +SI_DS_SPINCUTTER <- 11 // (蝶?醴搅) +SI_DS_HEDGEHOG <- 12 // Hedgehog (?虽?斜) +SI_DS_FASTMOVE <- 13 // (坚楼桧翕) +SI_DS_RIPPER <- 14 // (葬?) +SI_DS_EXECUTION <- 15 // (籀?) +SI_DS_DARK <- 16 // (横菸暧 掏栋) +SI_DS_COOLTIME <- 17 // 蛤?? 藤颤歜 +SI_DS_ANTIAIR_UPPER <- 18 // 奢溜颤 +SI_DS_SMASHER <- 19// 蝶衙敷 +SI_DS_SLOW_HEAL <- 20 // 蜗煎办? +SI_DS_LUCKY_STRAIGHT <- 21 // 楣郦 蝶?溯桧? +SI_DS_STRIKING <- 22 // 蝶?塭桧缰 +SI_DS_CURE <- 23 // 听横 +SI_DS_SKILL_SECOND_UPPER <- 24 // 撮钟萄横? +SI_DS_BLESS <- 25 // 虽?暧 蹴犒 +SI_DS_QUAKE_AREA <- 26 // 钒瑰跷 +SI_DS_RISING_AREA <- 27 // 蝓茧霞 +SI_DS_DISASTER <- 28 // EX蝶鉴 - 营懈 +SI_DS_PANDEMONI <- 29 // EX蝶鉴 - 犒葆瞪 +//PandemoniumEx + + +// 横渐荡 - 陕撩 横?蛤虽 sq_var 漱搅 樯策蝶 殓栖棻.. +I_AVENGER_AWAKENING_TIME <- 0 // 渗褐 卫除 +I_DOOMS_HP <- 1 // 菸蝶陛蛤树 HP +I_AVENGER_AWAKENING_VALID <- 2 +// 葬橡 寨葬萄 ?楚斜煎 噩 詹帼殓栖棻.. 谒 桧楛冲桧 腑傍贼.. +// 横渐荡陛 state_stand鼻鹧缣怃虏 渗褐?薯陛 肾横捡 ?栖棻 +// 斜楚怃 valid陛 false陛 胀棻坚 ?怃 埠潍 渗褐?薯 腑棻坚 除舆?怃朝 寰腌栖棻 罹楝寞彻击 当陕?鱼 念娄 桧 寞彻桧 陛潍 梃莠?剪 伪嬴怃 殓栖棻.. +// 该 噙桧朝 够紫 桡戏栖梱 + \ No newline at end of file diff --git a/character/priest/avengerattack.nut b/character/priest/avengerattack.nut new file mode 100644 index 0000000..b73865f --- /dev/null +++ b/character/priest/avengerattack.nut @@ -0,0 +1,434 @@ + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_AvengerAttack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(isAvengerAwakenning(obj) == false) { + obj.getVar().clear_vector(); + + obj.getVar().push_vector(0); // 0廓樯策蝶 + obj.getVar().push_vector(0); // 1廓樯策蝶 + obj.getVar().push_vector(0);// 2廓樯策蝶 + obj.getVar().push_vector(0);// 3廓樯策蝶 + obj.getVar().push_vector(0);// 4廓樯策蝶 + + if(obj.getAttackIndex() == 0) + { + obj.setAttackXVelocity(100); + obj.setAttackXAccel(-300); + obj.setAttackXVelocityFast(200); + obj.setAttackXAccelFast(-300); + } + + if(obj.getAttackIndex() == 1) { // + obj.setAttackXVelocity(50); + obj.setAttackXAccel(-300); + obj.setAttackXVelocityFast(50); + obj.setAttackXAccelFast(-300); + } + + if(obj.getAttackIndex() == 2) { // + obj.setAttackXVelocity(20); + obj.setAttackXAccel(-300); + obj.setAttackXVelocityFast(50); + obj.setAttackXAccelFast(-30); + } + if(obj.getAttackIndex() == 3) + { // + + } + return; + } + + obj.sq_stopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + local dir = sq_GetDirection(obj); + + obj.getVar().clear_vector(); + obj.getVar().push_vector(0); + + obj.setAttackXVelocity(0); + obj.setAttackXAccel(0); + obj.setAttackXVelocityFast(0); + obj.setAttackXAccelFast(0); + + +} + + +function onAfterSetState_AvengerAttack(obj, state, datas, isResetTimer) +{ + if(!obj) return; + + if(isAvengerAwakenning(obj) == false) { + return; + } + + print(" onAfterSetState_AvengerAttack obj.getAttackIndex():" + obj.getAttackIndex()); + + // Awakening.skl 蝶鉴溯涟 才桧绾 + //SL_PERFECT_CHANGE_HP <- 0 // (0) 谏瞪 渗褐羹 HP + //SL_CHANGE_TIME <- 1 // (1) 虽楼卫除 + //SL_DEF_INC <- 2 // (2) 寞横溘隶陛(+) + //SL_ATK_SPD <- 3 // (3) 奢问楼紫(+) + //SL_MOV_SPD <- 4 // (4) 桧翕楼紫(+) + //SL_1_HIT_MAGIC_ATK <- 5 // (5) 1颤 葆彻奢问溘(+) + //SL_2_HIT_MAGIC_ATK <- 6 // (6) 2颤 葆彻奢问溘(+) + //SL_3_HIT_MAGIC_ATK <- 7 // (7) 3颤 葆彻奢问溘(+) + //SL_DASH_MAGIC_ATK <- 8 // (8) 渠卫 葆彻奢问溘(+) + //SL_JUMP_MAGIC_ATK <- 9 // (9) C(薄?) 葆彻奢问溘(+) + + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + local dir = sq_GetDirection(obj); + local power = 0; + + + if(obj.getAttackIndex() == 0) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼.. + local v = 5; + local dstX = sq_GetDistancePos(posX, obj.getDirection(), v); + + if(obj.isMovablePos(dstX, posY)) { + obj.setCurrentPos(dstX, posY, posZ); + } + + obj.setAttackXVelocity(50); + obj.setAttackXAccel(-300); + obj.setAttackXVelocityFast(100); + obj.setAttackXAccelFast(-300); + + //print(" sqr_CreatePooledObject 4_dust_normal.ani"); + sqr_CreatePooledObject(obj, "Effect/Animation/Awakening/attack/attack1/4_dust_normal.ani", posX, posY + 1, posZ, dir); + + } + if(obj.getAttackIndex() == 1) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼.. + obj.getVar().push_vector(0); + + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + + //print(" sqr_CreatePooledObject 4_dust_normal_0.ani"); + //print(" sqr_CreatePooledObject 4_dust_normal_1.ani"); + + sqr_CreatePooledObject(obj, "Effect/Animation/Awakening/attack/attack2/4_dust_normal_0.ani", posX, posY + 1, posZ, dir); + sqr_CreatePooledObject(obj, "Effect/Animation/Awakening/attack/attack2/4_dust_normal_1.ani", posX, posY + 1, posZ, dir); + } + if(obj.getAttackIndex() == 2) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼.. + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); + } + if(obj.getAttackIndex() == 3) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼.. + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); // 2廓 ?楚斜 醱瞪酝樯虽 嬴棋虽 ?钦?朝 ?楚斜 + obj.getVar().push_vector(0); + } + + if(obj.getAttackIndex() == 4) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼.. + obj.getVar().push_vector(0); + obj.getVar().push_vector(0); // 2廓 ?楚斜 醱瞪酝樯虽 嬴棋虽 ?钦?朝 ?楚斜 + obj.getVar().push_vector(0); + } + + + // 陕撩?卫粽 : 学跦(48溯涟) + // 1. 陕撩 渗褐 翕寰 陕撩晦 奢问溘桧 隶陛? + // 2. 等网 蝶?塭桧醴暧 学葆 啪桧虽 离朝榆 隶陛. + // 陕撩?卫粽 学跦击 乾坚 毡朝虽 羹觼?坚 乾坚 毡棻贼 学葆 啪桧虽 离朝榆击 隶陛卫面怃 葬欐?栖棻.. + + if(obj.getAttackIndex() < 3) { + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AW_ATTACK1 + obj.getAttackIndex()); + // + + local rate = obj.sq_getPassiveAttackRate(0, state, 1.0); + + //print("sq_getPassiveAttackRate:" + rate.tofloat()); + + power = obj.sq_getBonusRateWithPassive(SKILL_AVENGER_AWAKENING, state, SL_1_HIT_MAGIC_ATK + obj.getAttackIndex(),1.0); + + //local before_power = obj.sq_getSkillPower(SKILL_AVENGER_AWAKENING, SL_1_HIT_MAGIC_ATK + obj.getAttackIndex()); + + + //print("before CUSTOM_ATTACKINFO_AW_ATTACK1:" + before_power); + //print("CUSTOM_ATTACKINFO_AW_ATTACK1:" + power); + } + + if(obj.getAttackIndex() >= 4) + { // 横渐荡 - 菸蝶陛蛤树 虞颤 奢问溘 醱瞪缣 评塭 离桧蒂 尔殓栖棻.. + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AW_ATTACK4); + //power = obj.sq_getSkillPower(SKILL_AVENGER_AWAKENING, SL_JUMP_MAGIC_ATK); + + //power = obj.sq_getPowerWithPassive(SKILL_AVENGER_AWAKENING,SL_1_HIT_MAGIC_ATK + obj.getAttackIndex(),-1,1.0); + //print("CUSTOM_ATTACKINFO_AW_ATTACK4:" + power); + + /////////////////////////////////// + local chargeTime = sq_GetIntData(obj, SKILL_AVENGER_AWAKENING, 0); //薄? 葆彻 奢问 譆渠 醱瞪卫除 + + //local level = sq_GetSkillLevel(obj, SKILL_AVENGER_AWAKENING); + //local AtkAdd = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_JUMP_MAGIC_ATK, level); + //local fullchargeAtkAdd = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_JUMP_FULLCHARGE_MAGIC_ATK, level); + //local offset = fullchargeAtkAdd - AtkAdd; // ?醱瞪 奢问溘娄 晦狱 奢问溘 饵桧暧 offset高击 掘?鱼棻.. + //local stateTimer = obj.getStateTimer(); + + local basePower = obj.sq_getBonusRateWithPassive(SKILL_AVENGER_AWAKENING, state, SL_JUMP_MAGIC_ATK,1.0); + local maxPower = obj.sq_getBonusRateWithPassive(SKILL_AVENGER_AWAKENING, state, SL_JUMP_FULLCHARGE_MAGIC_ATK,1.0); + + local stateTimer = obj.sq_getVectorData(datas, 1); // 罗廓箪 substate殓栖棻.. + + local resultPower = sq_GetUniformVelocity(basePower, maxPower, stateTimer, chargeTime); // 醱瞪高 + + // ?姜溯涟 桧鼻橾唳办 鼠亵勒 裟蝶 ?表 + if(obj.isOverSkillLevel(SKILL_AVENGER_AWAKENING, 3)) + resultPower = maxPower; + + power = resultPower; + + //print("stateTimer:" + stateTimer + " chargeTime:" + chargeTime); + print("basePower:" + basePower + " maxPower:" + maxPower + " resultPower:" + resultPower + " timer:" + stateTimer); + ////////////////////////////////// + + local awakening_var = obj.getVar("awakening"); + awakening_var.get_ct_vector(0).Reset(); + awakening_var.get_ct_vector(0).Start(0,0); + + local cooltime = getLoadSkillEnableTime(obj, SKILL_AVENGER_AWAKENING, 1); // 蛤?? 藤颤歜 + awakening_var.set_vector(0, cooltime); // 藤颤歜撮? + + } + + obj.sq_setCurrentAttackBonusRate(power); +} + + +// prepareDraw ?热 殓栖棻.. +function prepareDraw_AvengerAttack(obj) +{ +} + + +// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻. +function onProc_AvengerAttack(obj) +{ + if(!obj) return; + if(isAvengerAwakenning(obj) == false) { + return; + } + + local substate = obj.getSkillSubState(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local pAni = obj.sq_getCurrentAni(); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + local currentT = sq_GetCurrentTime(pAni); + + + if(obj.getAttackIndex() == 2) { + // 撮廓箪 ?纂朝 楼紫蒂 觊 绪脑啪 + if(!obj.getVar().get_vector(0)) { + if(frmIndex >= 0 && frmIndex < 5) { + local pA = obj.sq_getCurrentAni(); + obj.sq_setAnimationSpeedRate(pA, 160.0); + obj.getVar().set_vector(0, 1); + } + } + + if(!obj.getVar().get_vector(1)) { + if(frmIndex >= 5) { + local pA = obj.sq_getCurrentAni(); + obj.sq_setAnimationSpeedRate(pA, 100.0); + obj.getVar().set_vector(1, 1); + } + } + + if(frmIndex >= 6) { + local dustFlag = obj.getVar().get_vector(3); + if(!dustFlag) { + obj.getVar().set_vector(3, 1); + //print("size_vector:" + obj.getVar().size_vector()); + + //local dustN = obj.getVar().GetAnimationMap("15_dust_normal","Character/Priest/Effect/Animation/Awakening/attack/attack3/15_dust_normal.ani"); + //pAni.addLayerAnimation(1, dustN, false); + + // 奢问 试虽 当撩 + local dust_n_Ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/attack/attack3/15_dust_normal.ani"); + local dustObj = obj.sq_createCNRDPooledObject(dust_n_Ani, true); + dustObj.setCurrentDirection(obj.getDirection()); + + + dustObj.setCurrentPos(posX, posY + 2, 0); + obj.sq_AddObject(dustObj); + + //print("dustFlag:" + dustFlag); + + } + } + } + + if(obj.getAttackIndex() == 3) { // 葆虽虞 顶溥镒晦 醱瞪 酝 + // 撮廓箪 ?纂朝 楼紫蒂 觊 绪脑啪 + local chargeTime = sq_GetIntData(obj, SKILL_AVENGER_AWAKENING, 0); //薄? 葆彻 奢问 譆渠 醱瞪卫除 + local stateTimer = obj.sq_getStateTimer(); + + if(chargeTime <= stateTimer && !obj.getVar().get_vector(0)) { + print("\n fullCharge"); + local pfullChargeAni = obj.getVar().GetAnimationMap("Attack4_2", "Character/Priest/Animation/AvengerAwakening/Attack4_2.ani"); + if(pfullChargeAni) { + obj.setCurrentAnimation(pfullChargeAni); + } + obj.getVar().set_vector(0, 1); + } + } + + + if(obj.getAttackIndex() == 4) { // 葆虽虞 顶溥镒晦 奢问 + // 撮廓箪 ?纂朝 楼紫蒂 觊 绪脑啪 + if(!obj.getVar().get_vector(1)) { + local pA = obj.sq_getCurrentAni(); + obj.sq_setAnimationSpeedRate(pA, 100.0); + obj.getVar().set_vector(1, 1); + } + } + + +} + +// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻. +function onProcCon_AvengerAttack(obj) +{ + if(!obj) return; + if(isAvengerAwakenning(obj) == false) { + local pAni = obj.sq_getCurrentAni(); + local bEnd = obj.sq_ani_IsEnd(pAni); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + + + if(obj.getAttackIndex() == 2) // 虏擒 3颤 箪塭贼.. + { + // (梦姜谏噢 ?棚) + if(frmIndex >= 5) // 6廓 ?溯歜 桧鼻桧塭贼. + { + if(obj.getVar().get_vector(2) == 0) + { // 2廓 ?楚斜陛 0桧塭贼 + obj.getVar().set_vector(2, 1); // 2廓?楚斜蒂 1煎 夥羞棻 谒傍?贼 词 ?廓虏 桧寰戏煎 菟横谛捡?晦阳侥缣.. + //print("CUSTOM_ATTACKINFO_AVENGER_ATTACK_3_2:" + CUSTOM_ATTACKINFO_AVENGER_ATTACK_3_2); + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AVENGER_ATTACK_3_2); // 镒晦 奢问击 嫔? + } + } + } + + // 锰?朝匙击 礼棻.. + if(obj.getAttackIndex() == 3) // 虏擒 4颤 箪塭贼.. + { + if(frmIndex >= 7) { + if(obj.getVar().get_vector(3) == 0) + { // 3廓 ?楚斜陛 0桧塭贼 + // 横渐荡 ?虞颤 2廓箪 atk?橾击 撮??晦 嫔?桧棻.. 镒晦奢问戏煎 夥绂晦 嫔?怃殓栖棻.. + //print("obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AVENGER_ATTACK_4_2);"); + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AVENGER_ATTACK_4_2); + + obj.getVar().set_vector(3, 1); // 2廓?楚斜蒂 1煎 夥羞棻 谒傍?贼 词 ?廓虏 桧寰戏煎 菟横谛捡?晦阳侥缣.. + + } + } + if(frmIndex >= 8) // 8廓 ?溯歜 桧鼻桧塭贼. + { + if(obj.getVar().get_vector(2) == 0) + { // 2廓 ?楚斜陛 0桧塭贼 + obj.sq_setShake(obj, 1, 200); // 虽霞击 橾戏监棻.. + obj.getVar().set_vector(2, 1); // 2廓?楚斜蒂 1煎 夥羞棻 谒傍?贼 词 ?廓虏 桧寰戏煎 菟横谛捡?晦阳侥缣.. + } + } + } + + + return; + } + + local pAni = obj.sq_getCurrentAni(); + local bEnd = obj.sq_ani_IsEnd(pAni); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + + local substate = obj.getSkillSubState(); + + //if (obj.getAttackIndex() < obj.sq_getAttackCancelStartFrameSize() && + //frmIndex >= obj.sq_getAttackCancelStartFrame(obj.getAttackIndex()) && + //sq_IsEnterCommand(obj, 1) + //) + + + + if(obj.getAttackIndex() == 2) { // 陕撩 渗褐鼻鹧 晦狱 奢问 葆虽虞桧塭贼.. + + if(frmIndex >= 5) { + if(obj.getVar().get_vector(2) == 0) { + obj.getVar().set_vector(2, 1); + obj.sq_setShake(obj, 2, 500); + } + } + } + + if(obj.getAttackIndex() < 3) { + + sq_SetKeyxEnable(obj, 1, true); + + local bCommand = sq_IsEnterCommand(obj, 1); + + if (bCommand) + { + local var_awakening = obj.getVar("awakening"); + local t = var_awakening.get_ct_vector(0).Get(); + + //print("var_awakening.get_ct_vector(0).Get():" + t + "var_awakening.get_vector(0):" + var_awakening.get_vector(0)); + + if(var_awakening.get_ct_vector(0).Get() > var_awakening.get_vector(0)) { // 濠羹 藤颤歜 羹觼 + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); // substate撮? + obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true); + } + else { // 藤颤歜桧 测 腑棻.. + obj.startCantUseSkillWarning(); + if (obj.isMessage()) { + sq_AddMessage(414); // 414>藤颤歜殓栖棻. + } + } + return; + } + + } + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + if(obj.getAttackIndex() == 3) { + + local bDownKey = sq_IsDownKey(obj, 1, false); + local chargeTime = sq_GetIntData(obj, SKILL_AVENGER_AWAKENING, 0) * 2; //薄? 葆彻 奢问 譆渠 醱瞪卫除 + local stateTimer = obj.sq_getStateTimer(); + print("\n chargeTime:" + chargeTime + " stateTimer:" + stateTimer); + + // 蹂羶饵? + // 谏醱 ?缣 谏醱卫除虏踯 ?脑贼 濠翕戏煎 剩横骨栖棻.. + if(!bDownKey || stateTimer >= chargeTime) { // 桨击 嗥历棻朝匙擎.. + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(4); // substate撮? + obj.sq_IntVectPush(stateTimer); // 晦狱缣怃 跷陛 奢问溘 + + + obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true); + return; + } + } + +} + \ No newline at end of file diff --git a/character/priest/avengerjump.nut b/character/priest/avengerjump.nut new file mode 100644 index 0000000..7ff0b28 --- /dev/null +++ b/character/priest/avengerjump.nut @@ -0,0 +1,87 @@ + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_AvengerJump(obj, state, datas, isResetTimer) +{ + if(!obj) return; + if(isAvengerAwakenning(obj) == false) { + return; + } + + + obj.sq_stopMove(); + + obj.setAttackXVelocity(0); + obj.setAttackXAccel(0); + obj.setAttackXVelocityFast(0); + obj.setAttackXAccelFast(0); +} + + +// prepareDraw ?热 殓栖棻.. +function prepareDraw_AvengerJump(obj) +{ + if(!obj) return; +} + + +// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻. +function onProc_AvengerJump(obj) +{ + if(!obj) return; + if(isAvengerAwakenning(obj) == false) { + return; + } +} + +// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻. +function onProcCon_AvengerJump(obj) +{ + if(!obj) return; + if(isAvengerAwakenning(obj) == false) { + return; + } + + + if(obj.getAttackIndex() != 3) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(3); // substate撮? + obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true); + } + + local pAni = obj.sq_getCurrentAni(); + local bEnd = obj.sq_ani_IsEnd(pAni); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + + local substate = obj.getSkillSubState(); + + if(bEnd) { + + } +} + +// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻. +function onEndState_AvengerJump(obj, new_state) +{ + if(!obj) return; + if(isAvengerAwakenning(obj) == false) { + return; + } + + //obj.sq_IntVectClear(); + //obj.sq_IntVectPush(2); // substate撮? + //obj.sq_addSetStatePacket(STATE_ATTACK, STATE_PRIORITY_USER, true); +// +} + +function onAfterSetState_AvengerJump(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_stopMove(); + + obj.setAttackXVelocity(0); + obj.setAttackXAccel(0); + obj.setAttackXVelocityFast(0); + obj.setAttackXAccelFast(0); +} + diff --git a/character/priest/awakening.nut b/character/priest/awakening.nut new file mode 100644 index 0000000..5a2649a --- /dev/null +++ b/character/priest/awakening.nut @@ -0,0 +1,542 @@ + +// sub state +//S_FASTMOVE_PLAY <- 0 +//S_FASTMOVE_LOOP <- 1 +//S_FASTMOVE_PRO <- 2 +//S_FASTMOVE_END <- 3 +// + +// sub state +S_AWAKENING_0 <- 0 +S_AWAKENING_1 <- 1 +S_AWAKENING_2 <- 2 +S_AWAKENING_3 <- 3 + +// 蝶鹧? 等桧颤 樯策蝶 +FM_SI_C_TIME <- 0 // ?瞪 ? 体陈桧 谏瞪 当撩肾朝 卫除 +FM_SI_MULTI_HIT_COUNT <- 1 // 棻钦?? 除问 +FM_SI_MOVE_VEL <- 2 // 体陈 桧翕楼紫 + +// 溯涟樯? 樯策蝶 +FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%) +FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px) + +VECTOR_I_SRC_X <- 0 // 卫蒙虽薄击 荡潍? 漱搅 樯策蝶 + + + + +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_Awakening(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_AVENGER_AWAKENING); + if(b_useskill) { + //print("\n sq_getSendState:" + obj.sq_getSendState()); // 罹晦怃 -1桧 嬴栖塭贼 蝶鉴桧 壅?啪 腌栖棻.. + // + //if(obj.sq_getSendState() != -1) { + //print("\n warning warning skill skip :" + obj.sq_getSendState()); // 罹晦怃 -1桧 嬴栖塭贼 蝶鉴桧 壅?啪 腌栖棻.. + //print("\n warning warning skill skip :" + obj.sq_getSendState()); // 罹晦怃 -1桧 嬴栖塭贼 蝶鉴桧 壅?啪 腌栖棻.. + //print("\n warning warning skill skip :" + obj.sq_getSendState()); // 罹晦怃 -1桧 嬴栖塭贼 蝶鉴桧 壅?啪 腌栖棻.. + //} + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_AWAKENING_0); // substate撮? + obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true); + return true; + } + + return false; +} + +// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.) +function checkCommandEnable_Awakening(obj) +{ + if(!obj) return false; + + if(obj.getVar("takingAwakenSkillBack").size_vector() == 0) { + obj.getVar("takingAwakenSkillBack").push_vector(0); + obj.getVar("takingAwakenSkillBack").push_vector(0); + } + + local var_takingAwakenSkillBack = obj.getVar("takingAwakenSkillBack").get_vector(0); + + local bRet = false; + + if(!var_takingAwakenSkillBack) + bRet = true; + else { + obj.getVar("takingAwakenSkillBack").set_vector(0, 0); + bRet = false; + } + + return bRet; +} + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_Awakening(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻.. + obj.setSkillSubState(substate); //set substate + obj.sq_stopMove(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + local sq_var = obj.getVar(); + + local skill_level = sq_GetSkillLevel(obj, SKILL_AVENGER_AWAKENING); + + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_FASTMOVE); + + //local attack_rate = obj.sq_getSkillAttackBonusRate(SKILL_SPINCUTTER, FM_LI_HIT_RATE); + //obj.sq_setCurrentAttackBonusRate(attack_rate); + // + if(substate == S_AWAKENING_0) { + //local time = obj.sq_getIntData(SKILL_AVENGER_AWAKENING, FM_SI_C_TIME); + //obj.sq_var.push_vector(time); + //obj.sq_var.push_vector(0); + sq_var.clear_vector(); + sq_var.clear_obj_vector(); + sq_var.clear_ani_vector(); + sq_var.push_vector(0); + + obj.sq_setCurrentAnimation(CUSTOM_ANI_AVENGER_AWAKENING1); + } + else if(substate == S_AWAKENING_1) { + //.func(&CSQStateVar::clear_ani_vector, NTEXT("clear_ani_vector")) + //.func(&CSQStateVar::push_ani_vector, NTEXT("push_ani_vector")) + //local bodyN = obj.sq_var.GetAnimationMap("2_body_normal","Effect/Animation/Awakening/Transform/01/2_body_normal.ani"); + local p_body_normal_ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/Transform/01/2_body_normal.ani"); + sq_var.push_ani_vector(p_body_normal_ani); + sq_var.push_vector(0); + obj.sq_setCurrentAnimation(CUSTOM_ANI_AVENGER_AWAKENING2); + } + else if(substate == S_AWAKENING_2) { + local dstZ = sq_var.get_vector(0); + obj.setCurrentPos(posX, posY, dstZ); + + obj.sq_setCurrentAnimation(CUSTOM_ANI_AVENGER_AWAKENING3); + + // 横?蛤虽 煎注 map戏煎 ?卫 skill?橾缣怃 卫除 晦颤蛔蛔 姜尔 殓溘 + // + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_AVENGER_AWAKENING, false, "Appendage/Character/ap_avenger_awakening.nut", false); + + local change_time = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_CHANGE_TIME, skill_level); + + appendage.sq_SetValidTime(change_time); // 横?蛤虽 颤歜 撮? + + // 帼? UI 轿溘 横?萄蒂 勘横舆晦 瞪缣 ?轿肾横捡 ?栖棻.. + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_AVENGER_AWAKENING, skill_level); + // + + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + // + + // Awakening.skl 蝶鉴溯涟 才桧绾 + //SL_PERFECT_CHANGE_HP <- 0 // (0) 谏瞪 渗褐羹 HP + //SL_CHANGE_TIME <- 1 // (1) 虽楼卫除 + //SL_DEF_INC <- 2 // (2) 寞横溘隶陛(+) + //SL_ATK_SPD <- 3 // (3) 奢问楼紫(+) + //SL_MOV_SPD <- 4 // (4) 桧翕楼紫(+) + //SL_1_HIT_MAGIC_ATK <- 5 // (5) 1颤 葆彻奢问溘(+) + //SL_2_HIT_MAGIC_ATK <- 6 // (6) 2颤 葆彻奢问溘(+) + //SL_3_HIT_MAGIC_ATK <- 7 // (7) 3颤 葆彻奢问溘(+) + //SL_DASH_MAGIC_ATK <- 8 // (8) 渠卫 葆彻奢问溘(+) + //SL_JUMP_MAGIC_ATK <- 9 // (9) C(薄?) 葆彻奢问溘(+) + + // 奢楼隶陛, 檩楼撩 荡?隶陛, 赀楼撩 荡?马模 + if(appendage) { + + local dooms_hp = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_PERFECT_CHANGE_HP, skill_level); + + local def_inc = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_DEF_INC, skill_level); + local atk_spd = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_ATK_SPD, skill_level); + local mov_spd = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_MOV_SPD, skill_level); + + // 帼? UI 轿溘 + appendage.setAppendCauseSkill(2, sq_getJob(obj), SKILL_AVENGER_AWAKENING, skill_level); + + // + + appendage.sq_var.clear_vector(); + appendage.sq_var.push_vector(change_time); // 虽楼卫除 + + + + local awakening_var = obj.getVar("awakening"); + awakening_var.clear_ct_vector(); + awakening_var.push_ct_vector(); + + awakening_var.get_ct_vector(0).Reset(); + awakening_var.get_ct_vector(0).Start(0,0); + + + if(awakening_var.size_vector() == 0) { // 颤桧该煎 噙橾 詹帼 + awakening_var.push_vector(0); + } + else { + awakening_var.set_vector(0, 0); + } + + + // 菸蝶陛蛤树 hp撮? + local convert_rate = sq_GetAbilityConvertRate(obj, CONVERT_TABLE_TYPE_HP) + local dooms_con_hp = dooms_hp.tofloat() * convert_rate.tofloat(); + appendage.sq_var.push_vector(dooms_con_hp.tointeger()); // 谏瞪 渗褐羹 HP + /////// + + appendage.sq_var.push_vector(1); // index 2 + // 葬橡 寨葬萄 ?楚斜煎 噩 詹帼殓栖棻.. 谒 桧楛冲桧 腑傍贼.. + // 横渐荡陛 state_stand鼻鹧缣怃虏 渗褐?薯陛 肾横捡 ?栖棻 + // 斜楚怃 valid陛 false陛 胀棻坚 ?怃 埠潍 渗褐?薯 腑棻坚 除舆?怃朝 寰腌栖棻 罹楝寞彻击 当陕?鱼 念娄 桧 寞彻桧 陛潍 梃莠?剪 伪嬴怃 殓栖棻.. + // 该 噙桧朝 够紫 桡戏栖梱 + + local change_appendage = appendage.sq_getChangeStatus("changeStatus"); + + if(!change_appendage) + change_appendage = appendage.sq_AddChangeStatus("changeStatus",obj, obj, change_time, CHANGE_STATUS_TYPE_ATTACK_SPEED, true, atk_spd); + + if(change_appendage) { + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, def_inc.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, def_inc.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, atk_spd.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, mov_spd.tofloat()); + + } + + /////////////////////////////////////////////////////////////////// + // _C_2011_PASSIVE_SKILL_UPGRADE_OCTOBER_ + // 学葆? 渗唳 学葆?鼻鹧暧 hP蒂 濠褐暧 HP谛 奢嵘?紫烟 渗唳腌栖棻. + local hpmaxup_appendage = appendage.sq_getHpMaxUp("HpMaxUp"); + + if(!hpmaxup_appendage) + hpmaxup_appendage = appendage.sq_AddHpMaxUp("HpMaxUp",obj, obj, change_time, dooms_hp, 0); + /////////////////////////////////////////////////////////////////// + + } + //appendage.sq_AddChangeStatus("2",obj, obj, 0, CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK, false, dark_element); + //appendage.sq_AddChangeStatus("3",obj, obj, 0, CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, light_element); + + // 罹晦缣怃 渗褐 翕蒙 拥栖诡桧暮 煎注 map戏煎 ?卫 + // + + //obj.sq_var.push_vector(posX); // 漱搅 樯策蝶 1 + } + else if(substate == S_AWAKENING_3) { + obj.getVar().clear_vector(); + obj.getVar().push_vector(posZ); // 漱搅 樯策蝶 1 + obj.getVar().push_vector(0); // 虽霞 ?楚斜 + obj.getVar().set_vector(1, 0); + + obj.getVar().get_vector(0); // 漱搅 樯策蝶 1 + + + //DWORD rgb = obj.sq_getRGB(0,0,0); + obj.sq_bottomcreateFlash(0, 240, 280, 150, 0); + + //obj.sq_setCurrentAnimation(CUSTOM_ANI_AVENGER_AWAKENING4); + local awakening_ani = obj.getVar().GetAnimationMap("Awakening4", "Character/Priest/Animation/Awakening4.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + obj.setCurrentAnimation(awakening_ani); + + // 掘?..蛔烟 + local ch_ld_0_ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/Transform/03/1_change_light_dodge_00.ani"); // 掘? ?董?桧塭怃 评煎 跷陛?丑捡?栖棻.. + local p_change_light_obj = obj.sq_createCNRDPooledObject(ch_ld_0_ani, true); + if(p_change_light_obj) { + // 15 -2 75 + local dstX = sq_GetDistancePos(posX, obj.getDirection(), 15); + p_change_light_obj.setCurrentPos(dstX, posY - 2, posZ + 75); + obj.sq_AddObject(p_change_light_obj); + } + + // 9溯涟 桧鼻桧贼 + if(obj.isOverSkillLevel(SKILL_AVENGER_AWAKENING, 4)) + { + obj.endSkillCoolTime(SKILL_PANDEMONIUM_EX); + obj.endSkillCoolTime(SKILL_EX_DISASTER); + + } + } + + +} + + +// prepareDraw ?热 殓栖棻.. +function prepareDraw_Awakening(obj) +{ + if(!obj) return; +} + + +// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻. +function onProc_Awakening(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local pAni = obj.sq_getCurrentAni(); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + + local currentT = sq_GetCurrentTime(pAni); + local sq_var = obj.getVar(); + +//S_AWAKENING_0 <- 0 +//S_AWAKENING_1 <- 1 +//S_AWAKENING_2 <- 2 +//S_AWAKENING_3 <- 3 + + //print("substate:" + substate); + + if(substate == S_AWAKENING_0) { + } + else if(substate == S_AWAKENING_1) { + //local time = obj.sq_getIntData(SKILL_AVENGER_AWAKENING, FM_SI_C_TIME); // 体陈桧 谏瞪 当撩肾朝 卫除.. + //local time = 1600; // 体陈桧 谏瞪 当撩肾朝 卫除.. + local time = 1200; // 体陈桧 谏瞪 当撩肾朝 卫除.. + + local up_t = time; + local up_l = 40; + + local move_l = 0; + + move_l = sq_GetAccel(0, up_l, currentT, up_t, true); + + obj.setCurrentPos(posX, posY, move_l); + + if(move_l >= up_l) { + + local body_n_ani = sq_var.get_ani_vector(0); + + + local b_body_n = sq_var.get_vector(1); // + //// 虏擒缣 ?娄陛 跷陛肾横 毡虽 强懊棻贼.. + if(!b_body_n) { + pAni.addLayerAnimation(10010, body_n_ani, true); + sq_var.set_vector(1, 1); + } + + + local bEnd = sq_IsEnd(body_n_ani); + local index_bodyani = obj.sq_ani_GetCurrentFrameIndex(body_n_ani); + local body_currentT = sq_GetCurrentTime(body_n_ani); + + //print("proc substate:" + substate + " index_bodyani:" + index_bodyani + " b_body_n:" + b_body_n); + + if(bEnd == true) { + local backlight_dodge_obj = pAni.getLastAlsObject(); + //print("backlight_dodge_obj:" + backlight_dodge_obj); + + + //if(backlight_dodge_obj) { + //print("setValid:" + backlight_dodge_objj); + //backlight_dodge_obj.setValid(false); + //} + + sq_var.set_vector(0, move_l); // 葆虽虞 ?溯歜暧 堪桧蒂 ?卫?棻.. + + if(obj.isMyControlObject()) { + //obj.sq_IntVectClear(); + //obj.sq_IntVectPush(S_AWAKENING_2); + //obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true); + //local backlight_dodge = obj.sq_getAutoLayerWorkAnimation(pAni, "1_e_bl_d"); + //pAni.removeLayerAnimation(backlight_dodge); + + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_AWAKENING_2); + obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true); + //obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } + } + else { + + if(move_l >= (up_l - 10)) { + local b_body_n = sq_var.get_vector(1); // + if(!b_body_n) { + //local bodyN = sq_var.GetAnimationMap("2_body_normal","Effect/Animation/Awakening/Transform/01/2_body_normal.ani"); + local body_n_ani = sq_var.get_ani_vector(0); + pAni.addLayerAnimation(10010, body_n_ani, true); + sq_var.set_vector(1, 1); + } + } + //pAni.addLayerAnimation() + //addLayerAnimation( + } + } + else if(substate == S_AWAKENING_2) { + local dstZ = sq_var.get_vector(0); + + local up_t = pAni.getDelaySum(false); // + local up_l = 3; + + local move_l = 0; + + move_l = sq_GetAccel(0, up_l, currentT, up_t, false); + + obj.setCurrentPos(posX, posY, dstZ + move_l); + + } + else if(substate == S_AWAKENING_3) { // 渗褐桧 胀 鼻鹧.. + + local fIndex = 2; + local delay = pAni.getDelaySum(0, fIndex); // + local down_t = 120; // + + if(frmIndex > fIndex && (delay + down_t) >= currentT) { + local dstZ = obj.getVar().get_vector(0); + //local down_t = 180; // + local move_l = 0; + + + + move_l = sq_GetAccel(dstZ, 0, currentT - delay, down_t, false); + + local t = currentT - delay; + + obj.setCurrentPos(posX, posY, move_l); + } + else if(frmIndex <= fIndex) { + local dstZ = obj.getVar().get_vector(0); + obj.setCurrentPos(posX, posY, dstZ); + } + + if(obj.getVar().get_vector(1) == 0 && obj.getZPos() == 0 && (delay + down_t) < currentT) { // 虽霞 ?楚斜 + //sq_SetMyShake(obj,4,1000); + + + obj.sq_setShake(obj, 2, 500); + + // 醱问? 嫦当 + local p_shockwave_ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/Transform/03/sub_dodge.ani"); + local p_obj_1 = obj.sq_createCNRDPooledObject(p_shockwave_ani, true); + p_obj_1.setCurrentDirection(obj.getDirection()); + + local v = 25; + local dstX = sq_GetDistancePos(posX, obj.getDirection(), v); + + p_obj_1.setCurrentPos(dstX, posY - 1, 0); + obj.sq_AddObject(p_obj_1); + + + local p_shock_ani = obj.sq_createCNRDAnimation("Effect/Animation/Awakening/Transform/03/5_crack_normal.ani"); + local p_obj_2 = obj.sq_createCNRDPooledObject(p_shock_ani, true); + + p_obj_2.setCurrentDirection(obj.getDirection()); + p_obj_2.setCurrentPos(posX, posY + 1, 0); + obj.sq_AddObject(p_obj_2); + + obj.getVar().set_vector(1, 1); + } + + + } + + +} + +// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻. +function onProcCon_Awakening(obj) +{ + if(!obj) return; + local pAni = obj.sq_getCurrentAni(); + local bEnd = obj.sq_ani_IsEnd(pAni); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + + local substate = obj.getSkillSubState(); + + if(substate == S_AWAKENING_0) { + } + else if(substate == S_AWAKENING_1) { + } + else if(substate == S_AWAKENING_2) { + } + else if(substate == S_AWAKENING_3) { + } + + + if(obj.getVar("takingAwakenSkillBack").size_vector() > 0) { + if(obj.getVar("takingAwakenSkillBack").get_vector(0)) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); // substate撮? + obj.sq_addSetStatePacket(STATE_AWAKENING_TURN_OFF, STATE_PRIORITY_IGNORE_FORCE, true); + return; + } + } + + + + + if(bEnd) { + if(substate == S_AWAKENING_0) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_AWAKENING_1); + obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true); + } + else if(substate == S_AWAKENING_1) { + } + else if(substate == S_AWAKENING_2) { + //obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_AWAKENING_3); + obj.sq_addSetStatePacket(STATE_AVENGER_AWAKENING, STATE_PRIORITY_USER, true); + } + else if(substate == S_AWAKENING_3) { + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } +} + +// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛 +// 毡棻贼 桧 ?热蒂 桧辨?栖棻. + +function onAfterSetState_Awakening(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +// onbeforeattack 属寥?热 殓栖棻 +function onBeforeAttack_Awakening(obj, damager, boundingBox) +{ + +} + +// onAttack 属寥?热 殓栖棻 +function onAttack_Awakening(obj, damager, boundingBox) +{ + +} + +// onAfterAttack 属寥?热 殓栖棻 +function onAfterAttack_Awakening(obj, damager, boundingBox) +{ + +} + +// onBeforeDamage 属寥?热 殓栖棻 +function onBeforeDamage_Awakening(obj, attacker, boundingBox) +{ + +} + +// onDamage 属寥?热 殓栖棻 +function onDamage_Awakening(obj, attacker, boundingBox) +{ + +} + +// onAfterDamage 属寥?热 殓栖棻 +function onAfterDamage_Awakening(obj, attacker, boundingBox) +{ + +} + + diff --git a/character/priest/awakenningturnoff.nut b/character/priest/awakenningturnoff.nut new file mode 100644 index 0000000000000000000000000000000000000000..79ebea1af4ed8e601903d5ac589a21358f18fbfd GIT binary patch literal 4708 zcmcgvZBr9h6!t63@E>mZluYBs`lT~`*2-hjp^Io>MzW@@z`Cg zd9#0n8Ulf~)>2h3*qWg;L+|HyKiSD=zfn(dUDx#CfvTzZlu8L>=3V zhS>>q318=)zhA0>$mDpm&1GR(_6mF3fU1l;O!}`T<)(939l1@4WR>`g_na1 zr}LI=RE`*&)ku65os~IfbKSYH&YaC#z=}*`ZG$R5pl9f7OvUG18$M|# zc7GD@ZP-8~1*pLG?-x@eJ@i2c7CWlwSl!O*+K5UxnCLj#KhSd|pY4VZq3waAeckz< zLx*HT$pIjQ%NwOqUe&dx0aq{#p~fR>1#|F*s`eCXk7lCR)VO7*!%Jz20X_u7iUKPb z5Q0Yld41*vvhU0e#?Qb1^=biKhF+bj&(>tWG57KUlI^Y3s0??WQkhXkZ+erO z$6K9=HJ+kST6|P}BO~!Z!vu4T7i-GzC;mMC*X-u^%KWyqk~^|eWJ0zFU@mA6z@J~v zmOw6mvRD%V>|{eo8H~SsX%cB`TzJBq=RXq^%soLqs7EvCc{1pOTSYZ(4XD^*ax6r` zZ{G)v&CW%SdW-U$rze+%D~cTT0Z#0XIrcI-$op#Vsgmy zPE-AcW$F`8;=mH)DKW9_iAoY=1gg-=e)~Ts8mQMaW5bw{(y4=OD`?g{~QMs3*i>i z6{A_brcwBpo^Q{hP|vLlNaPox%Z{MJN4WH1NKK?1NaZU>`Qb@~8iG18{75%S=15L2 z@-vY%kc^ttzj4S^N4StkRG^e%2(1((I1hx4?cX8N8A=Dq*_LTRmEU9Nu${`zGJw_$ zZQ1(eHFt4^>MDy&&!P%Ty4_e_^f@U5=wRS%F6cSr2w^hL8E$7OD}FMVa~#%unO;0aMUQeA8l;$uCQ&F zlQjLHyqI(HE#isM{b=LM-F7;k)5Tjy2k~7=@%^Ddc z;N#p*^bceQy0+m5DJD;P`*J;fxq;*Pqy1fdDQ271I2Zk=-5G3Q38PzyP3Y^}9D?y~ zP^4{rXd=V_Lmv+X_-bac5D;{qKZIS4H;&y0Sgx-#i`6m8rDvaghNc%Op+mKVEg4J! zFN{-**Vg<^xF)pBK13G_g!sDx%aguI`v&m#)RL)Zd>cFUAz7Ud4dxk literal 0 HcmV?d00001 diff --git a/character/priest/dashattack.nut b/character/priest/dashattack.nut new file mode 100644 index 0000000000000000000000000000000000000000..5ba55c03af90563f850e7493879e055c6301be1e GIT binary patch literal 5302 zcmcgwZEqXL5%yOK(0|zKLqH-lPmRi7s!b_KfuUCS< zy(oy@>hTRbcZPyX5Q?X=)>{KUBf1xC$Sv#9`=YE@K z>v=J6O4H8^+dpCXmYlVlmX{kI`Y!`bEWpktuU&F1L4bgJ_55z%1 zLT4=b!Hny(Ks{;i*nl1bJ$?@O`=ho&t#X(JX+&7zep zIFgV2n6y1hon$tb7mJa{+R2lqm(3Mw4a@YZix6}1BN<3dx7z+fG)t;;?+Apx^QQ;l z@@ly92Qj+S0&p&zF&t}@5dKfT1oul zb`frOmu^Dc>Rr)!@I^6rd`+XYFpMOKF#(V+08Na{vAh_2dlYU#03XK-fm$@ZB+BaW zlW?|7Pud6thZK?pgf$wR@GNA2chqcUM-G|3B>0Ww#mK~h>6tam7&D%2`O=uG*AYi! zMk_N&xC!AxOE$0ofmKc+fZ>ztIE!L2e7+`nw{Bze;gdTmk>N4>s*xcnr6L5V<$78n zV_=rBG1_@?E!cR{eYAq)-r7)NV>=~dDJ7^Iz2&>bV&ZBhlS&VnoEx&Qn(~SRAqyxE zI2f~O;lQ$QkLJbxF|{38@Thc@9m*k@jpGI<4I{SPU3%2H_Z7zQMJb4ibjWMM^w

r*icL6WDsF=;i-^Obfp3-{((J)=9Ve!-R#4(*vz zl?{{~If+u3tsE{NIZ`d1oH{l=b)s5&zjS!&Sozp=UW~_Sg5>Soxz+pgV-fEzeDpE$ zM-;Kkv?ZLC+MwDW3aYmJYcZ{RT8!o`syUCOz|<+N((AbKG_M#0J_<4y^^d z+T2+Z8x7ZOiSF8Z_two=JK9t8e9d*F=QgM{_P%)-e)};JP;`F$A-Hx$bYDH~ym}rk zeI&x?m%`63Q(%$F)I!(qQBCUHzDYHy^XdKW4;Rr;lYW}&mNTAP+pEj8i`Q<3x~R41 z6baBsL_8~J?M9>0o>M*h|J@=H34FT4?vil?1(vLP&9XCZ{XR(_)3K?G>Kr{pH9|>b zDJ>P)cx8=~SR*)DL98Q@ja||S3_DyOQWJa4dMrYmVxNC?Fs=(sQ*8&`l~0 zRI22Jwg_*;h0#H#Ey(~uuY|1xTHt)D8v$a7QW!*Lis@SpEhRycurJ13{vO&eM`lpC~HT zi7lv>GSTvEkSQ@De>o!F6jGfUwkLC#r4~xLDv_zjohe+$WRzaB>K>-DT4xhm9iYOA z4?w}d-2a9qN6dv&Co^E9fZL`7%hqg>&^ahk0o{zRV^n&$WDx0$b@Sd{<0`j*93?$g zvyEvkxQXdE$A5uEboTrg0$rM)pV60vO1LVo3t^nBxYYe$EV@&F+zmLYG|^SxrfI!YesSIjOvP*Oq*s zM{qTdd64F!NWk4#qA23>RK$%{bU%BF+Z542CG>w&?GH?vhpdrErraAGu-!koZz3TdLzygEFDG^1%7- z_P)jH2cNfi^tDMnp%+I92x;EK?`>tL?q(<6tIQrhS}o1amL?9Dj~zOWyJdB^56N&vB*J=AF@R0GoEf;1?-?#CIw(WIQfjBQJN0gE3(b9Bz0@e@b a#|r9(PG`K0zp){_g~17O?ZUo&`~D58^h8_$ literal 0 HcmV?d00001 diff --git a/character/priest/disasterex.nut b/character/priest/disasterex.nut new file mode 100644 index 0000000..fdfd6e1 --- /dev/null +++ b/character/priest/disasterex.nut @@ -0,0 +1,472 @@ + +S_DISASTER_0 <- 0 +S_DISASTER_1 <- 1 +S_DISASTER_2 <- 2 +S_DISASTER_3 <- 3 +S_DISASTER_4 <- 4 + +//750 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦 +//500 // 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔 +//2000 // 颤啪? 卫除 (ms 钦嫔) +//500 // 颤啃暧 x蹴 桧翕卫除 +//500 // 颤啃暧 y蹴 桧翕卫除 +//250 // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤) +//125 // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫 + + +SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦 +SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔 +SD_I_TARGET_TIME <- 2 // 颤啪? 卫除 (ms 钦嫔) +SD_I_TARGET_MOV_X <- 3 // 颤啃暧 X蹴 桧翕卫除 +SD_I_TARGET_MOV_Y <- 4 // 颤啃暧 y蹴 桧翕卫除 +SD_I_TARGET_SUCK_LEN <- 5 // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤) +SD_I_TARGET_SUCK_VEL <- 6 // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫 + + + +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_DisasterEx(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_EX_DISASTER); + if(b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_DISASTER_0); // substate撮? + obj.sq_IntVectPush(obj.getDirection()); // substate撮? + obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; +} + +// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.) +function checkCommandEnable_DisasterEx(obj) +{ + if(!obj) return false; + + local state = obj.sq_GetSTATE(); + + if(state == STATE_ATTACK) { + return obj.sq_IsCommandEnable(SKILL_EX_DISASTER); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_EARTH_QUAKE); + } + + + return true; +} + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_DisasterEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local sq_var = obj.getVar(); + local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻.. + local direction = obj.sq_getVectorData(datas, 1); // 罗廓箪 substate殓栖棻.. + obj.setSkillSubState(substate); //set substate + obj.sq_stopMove(); + + + sq_var.clear_vector(); + sq_var.push_vector(0); + sq_var.push_vector(0); + sq_var.push_vector(0); + + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + +//CUSTOM_ANI_EX_DISASTER_1 <- 118 // EX蝶鉴 - 营懈1 +//CUSTOM_ANI_EX_DISASTER_2 <- 119 // EX蝶鉴 - 营懈1 +//CUSTOM_ANI_EX_DISASTER_3 <- 120 // EX蝶鉴 - 营懈1 +//CUSTOM_ANI_EX_DISASTER_4 <- 121 // EX蝶鉴 - 营懈1 +//CUSTOM_ANI_EX_DISASTER_5 <- 122 // EX蝶鉴 - 营懈1 + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_DISASTER); + + local attack_rate = 1.0; + + //SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦 + //SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔 + + if(isAvengerAwakenning(obj)) { + local inc = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_DAMAGE_INC); // 颤啃暧 X蹴 桧翕卫除 + local inc_rate = inc.tofloat() / 100.0; + print("\n inc_rate:" + inc_rate); + attack_rate += inc_rate; + } + + obj.stopSound(7575); + obj.sq_setAttackPowerWithPassive(SKILL_EX_DISASTER, state, -1, 0, attack_rate); + + + if(substate == S_DISASTER_0) { + if(isAvengerAwakenning(obj)) { + local ani = obj.getVar().GetAnimationMap("Disaster1", "Character/Priest/Animation/disasterEx/Disaster1.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + obj.setCurrentAnimation(ani); + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_AVENGER_AWAKENING, false, "Appendage/Character/ap_avenger_awakening.nut", false); + if(appendage) { // 陕撩鼻鹧塭贼 陕撩卫除击 棺溥丑捡?栖棻. + local skill_level = obj.sq_getSkillLevel(SKILL_AVENGER_AWAKENING); + local t = sq_GetLevelData(obj, SKILL_AVENGER_AWAKENING, SL_CHANGE_TIME, skill_level); + local awakening_inc_t = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_AWAKENING_INC); // 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔 + appendage.sq_var.set_vector(I_AVENGER_AWAKENING_TIME, t + awakening_inc_t); + appendage.sq_SetValidTime(t + awakening_inc_t); // 横?蛤虽 颤歜 撮? + } + } + else { + obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_1); + } + + local pAni = obj.sq_getCurrentAni(); + } + else if(substate == S_DISASTER_1) { + obj.sq_setShake(obj, 3, 160); + + if(isAvengerAwakenning(obj)) { + // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + local ani = obj.getVar().GetAnimationMap("Disaster2", "Character/Priest/Animation/disasterEx/Disaster2.ani"); + obj.setCurrentAnimation(ani); + } + else { + obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_2); + } + + ///////////////////////////////////////////// + //if(obj.isMyControlObject()) { + //obj.sq_binaryData_startWrite(); + //obj.sq_binaryData_writeDword(0); + //obj.sq_p00_sendCreatePassiveObjectPacket(24101, 0, 0, 0, 0); + //} + /////////////////////////////////////////////// + local pA = obj.sq_getCurrentAni(); + + local iX = posX; + local iY = posY; + + //int offsetX = lua_getIntData(SKILL_SPIRAL_COLUMN_EX, 0); + //offsetX = lua_getDistancePos(iX, sq_GetDirection(this), offsetX); + + //int vX = lua_getIntData(SKILL_SPIRAL_COLUMN_EX, 1); + //int vY = 0; + + //SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦 + //SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔 + //SD_I_TARGET_TIME <- 2 // 颤啪? 卫除 (ms 钦嫔) + //SD_I_TARGET_MOV_X <- 3 // 颤啃暧 X蹴 桧翕卫除 + //SD_I_TARGET_MOV_Y <- 4 // 颤啃暧 y蹴 桧翕卫除 + //SD_I_TARGET_SUCK_LEN <- 5 // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤) + //SD_I_TARGET_SUCK_VEL <- 6 // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫 + // + // + local vX = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_MOV_X); // 颤啃暧 X蹴 桧翕卫除 + local vY = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_MOV_Y); // 颤啃暧 Y蹴 桧翕卫除 + + obj.sq_addAttractAimPointMark(iX, iY, vX, vY); + //450 // 庄横菟桧朝 彰嫔 (x蹴 虽荤) + //180 // 庄横菟桧朝 瞳暧 譆渠 堪桧 + local range = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_SUCK_LEN); // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤) + local suck_vel = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_SUCK_VEL); // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫 + obj.sq_setAttractAimInfo(suck_vel, suck_vel, range / 2, 180); + //obj.sq_setAttractAimInfo(91, 113, range / 2, 180); + + + } + else if(substate == S_DISASTER_2) { + // + //CUSTOM_ATTACKINFO_DISASTER + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_DISASTER); + + if(isAvengerAwakenning(obj)) { + // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + local ani = obj.getVar().GetAnimationMap("Disaster3", "Character/Priest/Animation/disasterEx/Disaster3.ani"); + obj.setCurrentAnimation(ani); + } + else { + obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_3); + } + + obj.sq_PlaySound("DISASTER_CIRCLE_LOOP", 7575); + + } + else if(substate == S_DISASTER_3) { + + if(isAvengerAwakenning(obj)) { + // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + local ani = obj.getVar().GetAnimationMap("Disaster4", "Character/Priest/Animation/disasterEx/Disaster4.ani"); + obj.setCurrentAnimation(ani); + } + else { + obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_4); + } + + + } + else if(substate == S_DISASTER_4) { + if(isAvengerAwakenning(obj)) { + // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + local ani = obj.getVar().GetAnimationMap("Disaster5", "Character/Priest/Animation/disasterEx/Disaster5.ani"); + obj.setCurrentAnimation(ani); + } + else { + obj.sq_setCurrentAnimation(CUSTOM_ANI_EX_DISASTER_5); + } + } +} + +// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛 +// 毡棻贼 桧 ?热蒂 桧辨?栖棻. + +function onAfterSetState_DisasterEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +// onbeforeattack 属寥?热 殓栖棻 +function onBeforeAttack_DisasterEx(obj, damager, boundingBox) +{ + +} + + + +// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻. +function onProc_DisasterEx(obj) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local sq_var = obj.getVar(); + local pAni = obj.sq_getCurrentAni(); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + + local currentT = sq_GetCurrentTime(pAni); + + if(substate == S_DISASTER_0) { + } + else if(substate == S_DISASTER_1) { + if(frmIndex >= 0) { + local flag = sq_var.get_vector(0); + if(!flag) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_EX_DISASTER, true, "Appendage/Character/ap_avenger_effect.nut", true); + sq_var.set_vector(0, 1); + } + } + //isAvengerAwakenning() + } + else if(substate == S_DISASTER_2) { + local stateTimer = obj.sq_getStateTimer(); + //SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦 + //SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔 + //SD_I_TARGET_TIME <- 2 // 颤啪? 卫除 (ms 钦嫔) + //SD_I_TARGET_MOV_X <- 3 // 颤啃暧 X蹴 桧翕卫除 + //SD_I_TARGET_MOV_Y <- 4 // 颤啃暧 y蹴 桧翕卫除 + //SD_I_TARGET_SUCK_LEN <- 5 // 模辨给桧陛 瞳击 庄横菟桧朝 彰嫔(x蹴 虽荤) + //SD_I_TARGET_SUCK_VEL <- 6 // 模辨给桧陛 瞳击 庄横菟桧朝 楼紫 + //local t = 1000; + local t = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_TARGET_TIME); // 颤啪? 卫除 (ms 钦嫔) + + //print("\n stateTimer:" + stateTimer); + + if(stateTimer > (t - 750)) { + local flag = sq_var.get_vector(1); + if(!flag) { + local iX = obj.getXPos(); + local iY = obj.getYPos(); + local iPX = obj.sq_getAttractAimPosX(iX,iY, false); + local iPY = obj.sq_getAttractAimPosY(iX,iY, false) + 2; + + print("\n posX:" + posX + " posY:" + posY + " aimposX:" + iPX + " aimposY:" + iPY); + + sq_MoveToNearMovablePos(obj, iPX, iPY, 0, iX, iY, posZ, 200, -1, 3); + obj.sq_removeAttractAimPointMark(); + sq_var.set_vector(1, 1); + } + } + + if(stateTimer > t) { + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_DISASTER_3); + obj.sq_IntVectPush(obj.getDirection()); // substate撮? + obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true); + } + } + + } + else if(substate == S_DISASTER_3) { + if(frmIndex >= 5) { + local flag = sq_var.get_vector(0); + if(!flag) { + if(obj.isMyControlObject()) { + + //SD_I_DAMAGE_INC <- 0 // 学葆? 鼻鹧橾 阳, 等嘐虽 隶?睦 + //SD_I_AWAKENING_INC <- 1 //// 学葆? 鼻鹧橾 阳, 学葆? 虽楼卫除 隶陛,ms 钦嫔 + + local attack_rate = 1.0; + if(isAvengerAwakenning(obj)) { + local inc = obj.sq_getIntData(SKILL_EX_DISASTER, SD_I_DAMAGE_INC); // 颤啃暧 X蹴 桧翕卫除 + local inc_rate = inc.tofloat() / 100.0; + attack_rate += inc_rate; + } + + local bonus_rate = obj.sq_getBonusRateWithPassive(SKILL_EX_DISASTER, STATE_EX_DISASTER, 1, attack_rate); + + obj.sq_binaryData_startWrite(); + obj.sq_binaryData_writeDword(bonus_rate); + obj.sq_p00_sendCreatePassiveObjectPacket(24109, 0, 0, 0, 0); // ?嫦 + } + + + if(isAvengerAwakenning(obj)) { + //local particleCreater = sq_var.GetparticleCreaterMap("GuillotineSub", "PassiveObject/Character/Thief/Particle/GuillotineSub.ptl", obj); + local particleCreater = sq_var.GetparticleCreaterMap("GuillotineSub6", "Character/Priest/Effect/Particle/DisasterStonsSmall.ptl", obj); + particleCreater.Restart(0); + //local dstX = sq_GetDistancePos(posX, obj.getDirection(), -20); + particleCreater.SetPos(posX, posY, posZ); + sq_AddParticleObject(obj, particleCreater); + + obj.sq_PlaySound("PR_DGUARDIAN_DISASTER"); // 学葆? 渗褐 ? 葆虽虞 阶缣 睡??貊 廓偃舰阳 尔桧蝶 + } + else { + obj.sq_PlaySound("PR_DISASTER"); // 葆虽虞 阶缣 睡??貊 廓偃舰阳 尔桧蝶 + } + + local fScreen = sq_flashScreen(obj,0,320,320,200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + + obj.sq_setShake(obj, 6, 320); + + obj.sq_removeAttractAimPointMark(); + sq_var.set_vector(0, 1); + } + } + + } + else if(substate == S_DISASTER_4) { + } + + + + if(substate == S_DISASTER_4) { + if(frmIndex >= 4) { + local flag = sq_var.get_vector(0); + if(!flag) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_EX_DISASTER, true, "Appendage/Character/ap_avenger_effect.nut", true); + sq_var.set_vector(0, 1); + } + } + } + + +} + +// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻. +function onProcCon_DisasterEx(obj) +{ + if(!obj) return; + local pAni = obj.sq_getCurrentAni(); + local bEnd = obj.sq_ani_IsEnd(pAni); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + local sq_var = obj.getVar(); + // + + local subState = obj.getSkillSubState(); + + if(subState == S_DISASTER_1) { + } + else if(subState == S_DISASTER_2) { + } + else if(subState == S_DISASTER_3) { + } + + + if(bEnd) { + if(subState == S_DISASTER_0) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_DISASTER_1); + obj.sq_IntVectPush(obj.getDirection()); // substate撮? + obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(subState == S_DISASTER_1) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_DISASTER_2); + obj.sq_IntVectPush(obj.getDirection()); // substate撮? + obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(subState == S_DISASTER_2) { + } + else if(subState == S_DISASTER_3) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_DISASTER_4); + obj.sq_IntVectPush(obj.getDirection()); // substate撮? + obj.sq_addSetStatePacket(STATE_EX_DISASTER, STATE_PRIORITY_IGNORE_FORCE, true); + } + else if(subState == S_DISASTER_4) { + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } +} + +// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻. +function onEndState_DisasterEx(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_EX_DISASTER) { + obj.sq_removeAttractAimPointMark(); + } + obj.stopSound(7575); +} + +// onAttack 属寥?热 殓栖棻 +function onAttack_DisasterEx(obj, damager, boundingBox) +{ + +} + +// onAfterAttack 属寥?热 殓栖棻 +function onAfterAttack_DisasterEx(obj, damager, boundingBox) +{ + +} + +// onBeforeDamage 属寥?热 殓栖棻 +function onBeforeDamage_DisasterEx(obj, attacker, boundingBox) +{ + +} + +// onDamage 属寥?热 殓栖棻 +function onDamage_DisasterEx(obj, attacker, boundingBox) +{ + +} + +// onAfterDamage 属寥?热 殓栖棻 +function onAfterDamage_DisasterEx(obj, attacker, boundingBox) +{ + +} + +function getScrollBasisPos_DisasterEx(obj) +{ + if(!obj) return; + + local substate = obj.getSkillSubState(); + + if(substate == S_DISASTER_2 || substate == S_DISASTER_1) { + if(obj.isMyControlObject()) { + local iX = obj.getXPos(); + local iY = obj.getYPos(); + local iPX = obj.sq_getAttractAimPosX(iX,iY, false); + local iPY = obj.sq_getAttractAimPosY(iX,iY, false); + obj.sq_SetCameraScrollPosition(iPX, iPY, 0); + return true; + } + } + + return false; +} + \ No newline at end of file diff --git a/character/priest/earthquake.nut b/character/priest/earthquake.nut new file mode 100644 index 0000000..3af3e59 --- /dev/null +++ b/character/priest/earthquake.nut @@ -0,0 +1,67 @@ +EARTHQUAKE_ROCK_MAX <- 3; +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_EarthQuake(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_EARTH_QUAKE); + if(b_useskill) { + obj.sq_addSetStatePacket(STATE_EARTHQUAKE , STATE_PRIORITY_USER, false); + return true; + } + + return false; +} + +// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.) +function checkCommandEnable_EarthQuake(obj) +{ + if(!obj) return false; + + local state = obj.sq_GetSTATE(); + + if(state == STATE_ATTACK) { + return obj.sq_IsCommandEnable(SKILL_EARTH_QUAKE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_EARTH_QUAKE); + } + + return true; +} + +//------------------------------------------------------------------------------ + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_EarthQuake(obj, state, datas, isResetTimer) +{ + if(!obj) return; + obj.sq_stopMove(); + obj.sq_setCurrentAnimation(CUSTOM_ANI_EARTH_QUAKE); + obj.sq_setXScroll(50,200,200,0); +} + +function onEndCurrentAni_EarthQuake(obj) +{ + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + + local x = sq_GetDistancePos(obj.getXPos(),obj.getDirection(),40); + if(obj.isMovablePos(x,obj.getYPos())) + obj.setCurrentPos(x, obj.getYPos(), obj.getZPos()); +} + +function onKeyFrameFlag_EarthQuake(obj,flagIndex) +{ + local isMycontrolObject = obj.sq_isMyControlObject(); + + if(isMycontrolObject && flagIndex == 1) // 霞翕,廓翻 桧??朝 釭缣啪虏 尔樯棻. + { + local gap = obj.sq_getIntData(SKILL_EARTH_QUAKE,0); // ?卫粽 当撩 除问 + local state = obj.sq_GetSTATE(); + local dmg = obj.sq_getBonusRateWithPassive(SKILL_EARTH_QUAKE, state, 0,1.0); + + + obj.sq_binaryData_startWrite(); + obj.sq_binaryData_writeWord(EARTHQUAKE_ROCK_MAX); // ?卫粽 营敝 当撩 偎热 + obj.sq_binaryData_writeWord(gap); // ?卫粽 当撩 除问 + obj.sq_binaryData_writeDword(dmg); // ?卫粽 当撩 除问 + obj.sq_p00_sendCreatePassiveObjectPacket(24103, 0, 120, 1, 0); + } + return true; +} diff --git a/character/priest/execution.nut b/character/priest/execution.nut new file mode 100644 index 0000000..494bc71 --- /dev/null +++ b/character/priest/execution.nut @@ -0,0 +1,618 @@ +EXECUTION_SUB_STATE_GRAB <- 0 +EXECUTION_SUB_STATE_GRAB_EX <- 1 +EXECUTION_SUB_STATE_TURNOVER <- 2 +EXECUTION_SUB_STATE_RUN <- 3 +EXECUTION_SUB_STATE_LAST <- 4 +EXECUTION_SUB_STATE_FAILED <- 5 + +TEST_MODE_EXCUTION <- DEBUG; + +EXC_READY_FOR_THROW <- 0; + +function sendSubState_Execution(obj,subState) +{ + if(!obj) return; + + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState); // substate撮? + obj.sq_addSetStatePacket(STATE_EXECUTION, STATE_PRIORITY_USER, true); + } +} +//------------------------------------------------------------------------------ + + +// 籀?擎 学葆啪桧虽煎 亵瞰胀棻..斜楝嘎煎 学葆啪桧虽 comsume睡碟击 籀?缣 ?热?蒂 卫面捡?栖棻.. +function IsEnableExecution(obj) +{ + if(!obj) return false; + + //if(TEST_MODE_EXCUTION) + // return true; + + //if(!isInDevilStrike(obj)) return false; + if(!isInDevilStrikeSkill(obj)) return false; + + + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + + if(!appendage) return false; + print("appendage.sq_var.size_vector():" + appendage.sq_var.size_vector()); + + if(appendage.sq_var.size_vector() > 1) { + // 7. 学葆啪桧虽 模赅榆 + local skillLevel = sq_GetSkillLevel(obj, SKILL_EXECUTION); + local consumeValue = sq_GetLevelData(obj, SKILL_EXECUTION, 7, skillLevel); + + //DS_APEND_MAX_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂 + //DS_APEND_GAUGE <- 1 // ?营 学 + + + local devil_gauge = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 0 + + if(devil_gauge >= consumeValue) + { + consumeDevilGauge(obj, consumeValue); // 学葆啪桧虽蒂 还罹鄹栖棻.. + return true; + } + else { + obj.startCantUseSkillWarning(); + if (obj.isMessage()) { + sq_AddMessage(29002); // 29002>学葆啪桧虽陛 睡褶?栖棻. + } + return false; + } + + } + + + return false; +} + + +function onEndState_Execution(obj, newState) +{ + if(newState != STATE_EXECUTION) + removeAllExcutionAppendage(obj); +} + + + +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_Execution(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_EXECUTION); + + if(b_useskill) { + if(IsEnableExecution(obj)) { // 学葆啪桧虽煎 籀?击 噩 热 毡蝗栖棻.. + sendSubState_Execution(obj,EXECUTION_SUB_STATE_GRAB); + return true; + } + } + + return false; +} + +// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.) +function checkCommandEnable_Execution(obj) +{ //橾奁 鼻?缣怃 绿?撩? 卫监棻.. 桧匙击 ?撩? 卫郦朝 钦啗朝 螃煎虽.. 渗褐-陕撩击 ?朝 钦啗缣怃 殓栖棻. + + //if(TEST_MODE_EXCUTION) + // return true; + return false; +} + +//------------------------------------------------------------------------------ + +//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥. +function onIsCheckHitCollision_Execution(obj,damager) +{ + local subState = obj.getSkillSubState(); + if(subState == EXECUTION_SUB_STATE_GRAB) //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?. + return obj.isMyControlObject(); + + //晦狱瞳戏烦 釭暧 螃粽薛?陛 嬴栖贼 false棻. 罹晦怃 false蒂 ?啪 肾贼 釭暧 螃粽薛? 樯虽 念娄陛 葬欐胀棻. + return (damager && damager.isMyControlObject()); +} + +function isForceHitCheck_Execution(obj) +{ + if(obj.isMyControlObject()) { + local subState = obj.getSkillSubState(); + if(subState == EXECUTION_SUB_STATE_GRAB) { //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?. + return true; + } + } + return false; +} + + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_Execution(obj, state, datas, isResetTimer) +{ + if(!obj) return; + // 怃粽 蝶才桧? 扑姜 + local sq_var = obj.getVar(); + local subState = obj.sq_getVectorData(datas, 0); + obj.setSkillSubState(subState); + + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + sq_var.clear_vector(); // als缣怃 create draw only object 蒂 跤噙晦 阳侥缣 ?溯歜 郦 ?楚斜煎 桧辨?啊蝗栖棻.. + sq_var.push_vector(0); // index : 0 + sq_var.push_vector(0); // index : 1 + sq_var.push_vector(0); // index : 2 + sq_var.push_vector(0); // index : 3 + sq_var.push_vector(0); // index : 4 + sq_var.push_vector(0); // index : 5 + + local ani = null; // 蝶监嬴夥颤 阳侥缣 getcustomani蒂 桧辨?虽 跤?栖棻.. 瞪睡 谖睡缣怃 拥栖诡桧暮击 煎注?怃 陛螳褫栖棻.. + + if(subState == EXECUTION_SUB_STATE_GRAB) + { + obj.sq_stopMove(); + //obj.sq_setCurrentAnimation(CUSTOM_ANI_EXC_GRAB); + ani = obj.getVar().GetAnimationMap("EXC_GRAB", "Character/Priest/Animation/execution/grab.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + obj.setCurrentAnimation(ani); + + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_1); + obj.sq_PlaySound("PR_EXECUTION_READY"); + sq_var.setBool(EXC_READY_FOR_THROW,false); + } + else if(subState == EXECUTION_SUB_STATE_GRAB_EX) + { + obj.sq_stopMove(); + //obj.sq_setCurrentAnimation(CUSTOM_ANI_EXC_GRAB_EX); + ani = obj.getVar().GetAnimationMap("EXC_GRAB_EX", "Character/Priest/Animation/execution/grabEx.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + obj.setCurrentAnimation(ani); + + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_2); + + obj.sq_setAttackPowerWithPassive(SKILL_EXECUTION,state, 0,-1,1.0); // 0廓 樯策蝶 奢问溘 虽姜 + } + else if(subState == EXECUTION_SUB_STATE_TURNOVER) + { + //obj.sq_setCurrentAnimation(CUSTOM_ANI_EXC_TURNOVER); + ani = obj.getVar().GetAnimationMap("EXC_TURNOVER", "Character/Priest/Animation/execution/turnOver.ani"); // 蝶监嬴夥颤 阳侥缣 谖睡缣怃 拥栖诡桧暮击 陛虽坚 谛捡 ?栖棻.. + obj.setCurrentAnimation(ani); + + + local sizeRate = obj.sq_getLevelData(3); + local explosionSizeRate = sizeRate.tofloat()/100.0; + + + local pAni = obj.sq_getCurrentAni(); + pAni.applyBoundingBoxRate(explosionSizeRate,0,0); // 醱问? 彰嫔 瞳辨 + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_EXCUTION_3); + + local sq_var = obj.getVar(); + local i=0; + local objectsSize = sq_var.get_obj_vector_size(); + for(;i= 0 && !sq_var.get_vector(0)) { + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", posX, posY + 50, posZ, dir); + sq_var.set_vector(0, 1); + } + + if(frmIndex >= 1 && !sq_var.get_vector(1)) { + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", posX, posY - 1, posZ, dir); + sq_var.set_vector(1, 1); + } + + if(frmIndex >= 2 && !sq_var.get_vector(2)) { + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", posX, posY + 50, posZ, dir); + sq_var.set_vector(2, 1); + } + + if(frmIndex >= 3 && !sq_var.get_vector(3)) { + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", posX, posY - 1, posZ, dir); + sq_var.set_vector(3, 1); + } + + if(frmIndex >= 4 && !sq_var.get_vector(4)) { + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", posX, posY + 50, posZ, dir); + sq_var.set_vector(4, 1); + } + + if(frmIndex >= 5 && !sq_var.get_vector(5)) { + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", posX, posY - 1, posZ, dir); + sq_var.set_vector(5, 1); + } + + // + } + else if(subState == EXECUTION_SUB_STATE_LAST) { + //[use animation] `../../Effect/Animation/execution/run/26_dust_a_normal.ani` `3` + //[use animation] `../../Effect/Animation/execution/run/1_dust_a_normal.ani` `2` + + //[create draw only object] 3 `3` 60 50 0 + //[create draw only object] 1 `3` 30 50 0 + + //[create draw only object] 0 `2` 30 -1 0 + //[create draw only object] 2 `2` 60 -1 0 + // + + if(frmIndex >= 0 && !sq_var.get_vector(0)) { + local dstX = sq_GetDistancePos(posX, obj.getDirection(), 30); + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", dstX, posY - 1, posZ, obj.getDirection()); + sq_var.set_vector(0, 1); + } + + if(frmIndex >= 0 && !sq_var.get_vector(4)) { + local dstX = sq_GetDistancePos(posX, obj.getDirection(), 90); + sqr_CreatePooledObject(obj, "Effect/Animation/execution/last/drawOnly/drawOnlyBase.ani", dstX, posY + 1, posZ, obj.getDirection()); + sq_var.set_vector(4, 1); + } + + if(frmIndex >= 1 && !sq_var.get_vector(1)) { + local dstX = sq_GetDistancePos(posX, obj.getDirection(), 30); + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", dstX, posY + 50, posZ, obj.getDirection()); + sq_var.set_vector(1, 1); + } + + if(frmIndex >= 2 && !sq_var.get_vector(2)) { + local dstX = sq_GetDistancePos(posX, obj.getDirection(), 60); + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/1_dust_a_normal.ani", dstX, posY - 1, posZ, obj.getDirection()); + sq_var.set_vector(2, 1); + } + + if(frmIndex >= 3 && !sq_var.get_vector(3)) { + local dstX = sq_GetDistancePos(posX, obj.getDirection(), 60); + sqr_CreatePooledObject(obj, "Effect/Animation/execution/run/26_dust_a_normal.ani", dstX, posY + 50, posZ, obj.getDirection()); + sq_var.set_vector(3, 1); + } + } + + + if(obj.isMyControlObject()) + { + if(subState == EXECUTION_SUB_STATE_RUN) + { + local pAni = obj.sq_getCurrentAni(); + local currentT = pAni.getCurrentTime(); + + + if (obj.sq_timer_.isOnEvent(currentT) == true) + { + sendSubState_Execution(obj,EXECUTION_SUB_STATE_LAST); + } + obj.setSkillCommandEnable(SKILL_EXECUTION,true); + + local b_useskill = obj.sq_IsEnterSkill(SKILL_EXECUTION); + if(b_useskill != -1) + sendSubState_Execution(obj,EXECUTION_SUB_STATE_LAST); + } + } +} + + +function onTimeEvent_Execution(obj, timeEventIndex, timeEventCount) +{ + if(obj.isMyControlObject()) + { + local subState = obj.getSkillSubState(); + if(subState == EXECUTION_SUB_STATE_RUN) + { + local power = obj.sq_getPowerWithPassive(SKILL_EXECUTION, STATE_EXECUTION, 4,-1,1.0); + sq_createAttackObjectWithPath(obj, "Character/Priest/Effect/Animation/execution/run/runDamage.ani","PassiveObject/Character/Priest/AttackInfo/excutionBox.atk",false,power,100,0,0,0); + } + } + return false; // true贼 属寥 酝钦 +} + +function isExcutionGrabable(obj) +{ + local sq_var = obj.getVar(); + local i=0; + local objectsSize = sq_var.get_obj_vector_size(); + + for(;i 0) + { + //?问 螃粽薛?陛 ?涡绾桧贼 EXECUTION_SUB_STATE_TURNOVER 嬴栖贼 EXECUTION_SUB_STATE_GRAB_EX + if(isExcutionGrabable(obj)) { + sendSubState_Execution(obj,EXECUTION_SUB_STATE_TURNOVER); + } + else { + sendSubState_Execution(obj,EXECUTION_SUB_STATE_GRAB_EX); + } + } + else + { + sendSubState_Execution(obj,EXECUTION_SUB_STATE_FAILED); + } + } + else if(subState == EXECUTION_SUB_STATE_TURNOVER) + { + sendSubState_Execution(obj,EXECUTION_SUB_STATE_RUN); + + local gap = obj.sq_getIntData(SKILL_EXECUTION,4); + obj.setTimeEvent(0,gap,0,true); + } + else if(subState == EXECUTION_SUB_STATE_RUN) + { + sendSubState_Execution(obj,EXECUTION_SUB_STATE_LAST); + } + else if(subState == EXECUTION_SUB_STATE_LAST || subState == EXECUTION_SUB_STATE_GRAB_EX || subState == EXECUTION_SUB_STATE_FAILED) //虞颤 部釭贼 stand + { + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + + removeAllExcutionAppendage(obj); + } +} + +// onAttack 属寥?热 殓栖棻 +function onAttack_Execution(obj, damager, boundingBox) +{ + local sq_var = obj.getVar(); + local subState = obj.getSkillSubState(); + + if(subState == EXECUTION_SUB_STATE_GRAB) + { + if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager,"Appendage/Character/executionAppendage.nut")) // 桧嘐 称横 毡朝 拥菟擎 称桧虽 强朝棻. + { + local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_EXECUTION, false, "Appendage/Character/executionAppendage.nut", true); + + if(masterAppendage) { + sq_HoldAndDelayDie(damager, obj, true, true, true, 300, 300, ENUM_DIRECTION_NEUTRAL , masterAppendage); + damager.setCurrentDirection(sq_GetOppositeDirection(obj.getDirection())); + + sq_var.push_obj_vector(damager); + } + } + } + + + local isLastThrowMode = sq_var.getBool(EXC_READY_FOR_THROW); + if(isLastThrowMode && damager) + CNSquirrelAppendage.sq_RemoveAppendage(damager, "Appendage/Character/executionAppendage.nut"); + +} + + + + + +function onKeyFrameFlag_Execution(obj,flagIndex) +{ + local sq_var = obj.getVar(); + local i=0; + local objectsSize = sq_var.get_obj_vector_size(); + + + // 赅苌 横?蛤虽缣 瞪殖 + for(;i 1) { + // 7. 学葆啪桧虽 模赅榆 + local skillLevel = sq_GetSkillLevel(obj, SKILL_FALLING_SOUL); + local consumeMax = sq_GetIntData(obj, SKILL_FALLING_SOUL, 0, skillLevel); + local time = sq_GetLevelData(obj, SKILL_FALLING_SOUL, 1, skillLevel); + local darkPower = sq_GetLevelData(obj, SKILL_FALLING_SOUL, 2, skillLevel); + + //DS_APEND_MAX_GAUGE <- 0 // 譆渠 学葆啪桧虽 热纂 + //DS_APEND_GAUGE <- 1 // ?营 学葆啪桧虽 热纂 + + local consumeValue = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 0 + if(consumeValue == 0) + { + obj.startCantUseSkillWarning(); + if (obj.isMessage()) + sq_AddMessage(29002); // 29002>学葆啪桧虽陛 睡褶?栖棻. + return false; + } + + if(consumeMax < consumeValue) + consumeValue = consumeMax; + + + local consumeRate = sq_GetLevelData(obj, SKILL_FALLING_SOUL, 0, skillLevel); + consumeRate = consumeRate.tofloat()/100.0; + + + //print("---- Falling Soul info -----------------------") + //print("consume : " + consumeValue + " / " + consumeRate); + + local magicPowerUpValue = (consumeValue*consumeRate) + 0.5; + + print("magicPowerUpValue : " + magicPowerUpValue); + + magicPowerUpValue = magicPowerUpValue.tointeger(); + + print("magicPowerUpValue : " + magicPowerUpValue); + //print("time : " + time); + + + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_FALLING_SOUL, false, "FallingSoul", false); + + // 帼? UI 轿溘 横?萄蒂 勘横舆晦 瞪缣 ?轿肾横捡 ?栖棻.. + local skill_level = sq_GetSkillLevel(obj, SKILL_FALLING_SOUL); + appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_FALLING_SOUL, skill_level); + // + + // 罹晦怃 append 蒙机 + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + + + local change_appendage = appendage.sq_getChangeStatus("FallingSoulMagic"); + if(!change_appendage) { + change_appendage = appendage.sq_AddChangeStatus("FallingSoulMagic",obj, obj, time, CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, magicPowerUpValue.tointeger()); + } + + // 奢楼隶陛, 檩楼撩 荡?隶陛, 赀楼撩 荡?马模 + if(change_appendage) { + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, magicPowerUpValue.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, darkPower.tofloat()); + //local appendageInfo = change_appendage.getAppendageInfo(); + //appendageInfo.setValidTime(time); + } + + local appendageInfo = appendage.getAppendageInfo(); + appendageInfo.setValidTime(time); + + consumeDevilGauge(obj, consumeValue); // 学葆啪桧虽蒂 还罹鄹栖棻.. + + return true; + } + + + return false; +} + +function checkCommandEnable_FallingSoul(obj) +{ + + if(!obj) return false; + + local bRet = true; + + local state = obj.sq_GetSTATE(); + + if(state == STATE_ATTACK) { + ////警蜗晦 饷薯 蒙机 (2012.04.12) bRet = obj.sq_IsCommandEnable(SKILL_FALLING_SOUL); + bRet = obj.sq_IsCommandEnable(SKILL_FALLING_SOUL); + } + + if(!bRet) return false; + + + local appendage = obj.GetSquirrelAppendage("Appendage/Character/ap_avenger_devilstrike.nut"); // 等网蝶?塭桧醴 横?蛤虽 + if(!appendage) + return false; + + local consumeValue = appendage.sq_var.get_vector(DS_APEND_GAUGE); // gauge index 0 + if(consumeValue == 0) + return false; + + return true; +} + + + + + +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_FallingSoul(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_FALLING_SOUL); + + + if(b_useskill) { + if(IsCheckUseFallingSoul(obj)) { // 学葆啪桧虽煎 籀?击 噩 热 毡蝗栖棻.. + if(obj.isMyControlObject()) + { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(0); + obj.sq_IntVectPush(0); //THROW_TYPE_SKILL + obj.sq_IntVectPush(SKILL_FALLING_SOUL); + obj.sq_IntVectPush(500); + obj.sq_IntVectPush(500); + obj.sq_IntVectPush(3); + obj.sq_IntVectPush(4); //SPEED_TYPE_CAST_SPEED + obj.sq_IntVectPush(4); //SPEED_TYPE_CAST_SPEED + obj.sq_addSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true); + } + + return true; + } + } + + return false; +} + + +//------------------------------------------------------------------------------ + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_FallingSoul(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} \ No newline at end of file diff --git a/character/priest/fastmove.nut b/character/priest/fastmove.nut new file mode 100644 index 0000000..1c4836b --- /dev/null +++ b/character/priest/fastmove.nut @@ -0,0 +1,591 @@ + +// sub state +S_FASTMOVE_PLAY <- 0 +S_FASTMOVE_LOOP <- 1 +S_FASTMOVE_PRO <- 2 +S_FASTMOVE_END <- 3 + +// 蝶鹧? 等桧颤 樯策蝶 +FM_SI_C_TIME <- 0 // ?瞪 ? 体陈桧 谏瞪 当撩肾朝 卫除 +FM_SI_MULTI_HIT_COUNT <- 1 // 棻钦?? 除问 +FM_SI_MOVE_VEL <- 2 // 体陈 桧翕楼紫 +FM_SI_Y_AXIS_MOVESPEED <- 3 // 体陈 鼻? 桧翕楼紫 + +// 溯涟樯? 樯策蝶 +FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%) +FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px) + +VECTOR_I_SRC_X <- 0 // 卫蒙虽薄击 荡潍? 漱搅 樯策蝶 + + + +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_Fastmove(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_FASTMOVE); + if(b_useskill) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_FASTMOVE_PLAY); // substate撮? + obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_IGNORE_FORCE, true); + return true; + } + + return false; +} + +// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.) +function checkCommandEnable_Fastmove(obj) +{ + if(!obj) return false; + + local state = obj.sq_GetSTATE(); + + if(state == STATE_ATTACK) { + return obj.sq_IsCommandEnable(SKILL_FASTMOVE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_FASTMOVE); + } + + return true; +} + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_fastmove(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻.. + obj.setSkillSubState(substate); //set substate + + + local sq_var = obj.getVar(); + sq_var.clear_vector(); + sq_var.push_vector(0); + +// 蝶鹧? 等桧颤 樯策蝶 +//FM_SI_C_TIME <- 0 // ?瞪 ? 体陈桧 谏瞪 当撩肾朝 卫除 +//FM_SI_MULTI_HIT_COUNT <- 1 // 棻钦?? 除问 + +// 溯涟樯? 樯策蝶 +//FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%) +//FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px) + + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local particle = sq_var.GetparticleCreaterMap("FastMove", "Character/Priest/Effect/Particle/Fastmove.ptl", obj); + + + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_FASTMOVE); + + obj.sq_setAttackPowerWithPassive(SKILL_FASTMOVE, state, -1,FM_LI_HIT_RATE,1.0); + + if(substate == S_FASTMOVE_PLAY) { + obj.sq_stopMove(); + local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME); + sq_var.push_vector(time); + sq_var.push_vector(0); + + obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE1); + } + else if(substate == S_FASTMOVE_LOOP) { + obj.sq_stopMove(); + //obj.sq_var.push_vector(posZ); + //local pAni = obj.sq_getCurrentAni(); + + sq_var.push_vector(posZ); // index : 1 // srcZ + local jumpstate = 0; + + //print("sq_GetVelocityZ:" + sq_GetVelocity(obj, 2)); + //print("getDownDownFrame:" + obj.getDownDownFrame() + " getDownUpFrame:" + obj.getDownUpFrame() + " getDownBounceUpFrame:" + obj.getDownBounceUpFrame() + " getDownLieFrame:" + obj.getDownLieFrame()); + //print("getJumpUpStartFrame:" + obj.getJumpUpStartFrame() + " getJumpDownStartFrame:" + obj.getJumpDownStartFrame() + " getJumpLandStartFrame:" + obj.getJumpLandStartFrame()); + + + if(posZ > 0) { + //local frmIndex = obj.getDownUpFrame(); + + if(sq_GetVelocity(obj, 2) < 0) { + jumpstate = 2; // ?鬼酝 + } + else { + jumpstate = 1; // 鼻蝓酝 + } + } + sq_var.push_vector(jumpstate); // index : 2 // 薄??楚斜 0 : 裔阶缣 毡历击 阳 1 : 萤塭陞 阳 毡历击阳 2 : 顶溥陛朝 牖除 毡历击 阳 + sq_var.push_vector(0); // index : 3 // + sq_var.push_vector(0); // index : 4 // + + obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE2); + } + else if(substate == S_FASTMOVE_PRO) { + //CUSTOM_ATTACKINFO_FASTMOVE + local max_break_v = obj.sq_getVectorData(datas, 1); // 舒廓箪 vector高擎 马楼 高 + obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE3); + sq_var.push_vector(posX); // 漱搅 樯策蝶 1 + + local pAni = obj.sq_getCurrentAni(); + local initDelay = pAni.GetFrameStartTime(3); + + //local vel = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MOVE_VEL); // 桧翕楼紫 + local vel = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MOVE_VEL); // 桧翕楼紫 + local d = obj.sq_getLevelData(SKILL_FASTMOVE, FM_LI_MOVE_LEN, 1); + + //local moveT = (d * 10) / vel; // 桧翕 识 卫除 掘?晦 + local v_rate; + if(!(sq_GetCurrentModuleType() == 4) && !(sq_GetCurrentModuleType() == 5)) //?营赅菊桧 pvp赅菊桧釭 fair_pvp赅菊橾 唳办 + { + v_rate = (vel - max_break_v); + } + else + { + v_rate = vel; + } + + if(v_rate <= 0) + { + v_rate = 1; + } + local moveT = (d * 800) / (v_rate); // 桧翕 识 卫除 掘?晦 + + sq_var.push_vector(moveT); // 桧翕 识 卫除 漱搅 樯策蝶 2 + sq_var.push_vector(0); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻.. + sq_var.push_vector(posY); // 樯策蝶4 夥煎 瞪 posY谢?蒂 荡潍?朝 睡碟殓栖棻.. 体陈奢问桧 鼻?煎 桧翕桧 陛栋?虽贼怃 桧翕?楚斜妇湿 籀葬蒂 亿照啪 ?捡?栖棻.. + local len = obj.sq_getLevelData(SKILL_FASTMOVE, FM_LI_MOVE_LEN, 1); + //len = len - break_len; // 马楼胀 高击 梗朝棻.. + sq_var.push_vector(len); // 樯策蝶5 + sq_var.push_vector(0); // 樯策蝶6 饵遴萄 ?楚斜 + + local hitCnt = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MULTI_HIT_COUNT); // 棻钦?? + + local term = moveT / hitCnt; + + obj.sq_setShake(obj, 2, moveT); + //obj.sq_setShake(obj, 4, moveT); + // 赝葬? + sq_CurrentAnimationProc(pAni); + + // local alsSpinNormal = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sn"); +// local alsSpinDodge = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sd"); + // if(alsSpinNormal) + // alsSpinNormal.setCustomClipArea(true, 0, 0, 10, 10, false); + + //if(alsSpinDodge) + //alsSpinDodge.setCustomClipArea(true, 0, 0, 10, 10, false); + // + + sq_var.clear_timer_vector(); + sq_var.push_timer_vector(); + + local t = sq_var.get_timer_vector(0); + //t.setParameter(35, -1); + t.setParameter(60, -1); + t.resetInstant(0); + + obj.sq_timer_.setParameter(term, hitCnt); + obj.sq_timer_.resetInstant(initDelay); + + // 坚楼桧翕 y蹴 桧翕 陛栋?紫烟 热姜蒙机 + // 蝶鹧? 等桧颤煎 鼻?桧翕 楼紫 跷陛 + // FM_SI_Y_AXIS_MOVESPEED <- 3 // 体陈 鼻? 桧翕楼紫 + local y_axis_movespeed = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_Y_AXIS_MOVESPEED); + //obj.sq_setMoveDirection(ENUM_DIRECTION_DOWN, ENUM_DIRECTION_DOWN); + //obj.setAxisMoveDirection(1, ENUM_DIRECTION_DOWN, true, true); + //obj.sq_setStaticMoveInfo(1, 263, 0, true, 0, 0); + //obj.sq_setStaticMoveInfo(1, 200, 0, true, 0, 0); + //obj.sq_setStaticSpeedInfo(1, 1); + // + obj.sq_setStaticMoveInfo(1,y_axis_movespeed,y_axis_movespeed,true); + obj.sq_setMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); + // + } + else if(substate == S_FASTMOVE_END) { + obj.sq_stopMove(); + sq_var.push_vector(posX); // 漱搅 樯策蝶 1 + obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE4); + } + + +} + + +// prepareDraw ?热 殓栖棻.. +function prepareDraw_fastmove(obj) +{ +if(!obj) return; +// local substate = obj.getSkillSubState(); + + //if(substate == S_FASTMOVE_PRO) { + //local pAni = obj.sq_getCurrentAni(); + + //local alsSpinNormal = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sn"); + //local alsSpinDodge = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sd"); + + //if(alsSpinNormal) + // alsSpinNormal.setCustomClipArea(true, 5, 5, 5, 5, false); + + //if(alsSpinDodge) +// alsSpinDodge.setCustomClipArea(true, 0, 0, 0, 0, false); +// } +} + + +// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻. +function onProc_fastmove(obj) +{ + if(!obj) return; + local substate = obj.getSkillSubState(); + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + local pAni = obj.sq_getCurrentAni(); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + + local sq_var = obj.getVar(); + local currentT = sq_GetCurrentTime(pAni); + + +//S_FASTMOVE_PLAY <- 0 +//S_FASTMOVE_LOOP <- 1 +//S_FASTMOVE_PRO <- 2 +//S_FASTMOVE_END <- 3 + + if(substate == S_FASTMOVE_PLAY) { + } + else if(substate == S_FASTMOVE_LOOP) { + local max_break_v = 0; + //local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME); + local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME); // 体陈桧 谏瞪 当撩肾朝 卫除.. + + if(obj.isMyControlObject()) { + if(sq_GetSkillLevel(obj, SKILL_FASTMOVE_EX) > 0) // 坚楼桧翕鬼? 妇湿 蒙机 + { + local direction = obj.sq_getInputDirection(0); + + if(direction == ENUM_DIRECTION_NEUTRAL) { + sq_var.set_vector(4, currentT); // 嬴鼠匙紫 寰扬毓击阳 卫除击 羹觼?棻.. + } + + if(direction == ENUM_DIRECTION_LEFT || direction == ENUM_DIRECTION_RIGHT) { + if(obj.getDirection() == ENUM_DIRECTION_LEFT || obj.getDirection() == ENUM_DIRECTION_RIGHT) { + if(direction != obj.getDirection()) { + //local max_break = 200; + local max_break = obj.sq_getIntData(SKILL_FASTMOVE_EX, 4); //替葬啪 桧翕?朝 绿徽 (0~300) // 0 戏煎 ?贼 晦襄 楼紫陛 釭螃啪 肾坚 高桧 棺横釭贼 楼紫陛 替溥喂栖棻.. + local t = time - sq_var.get_vector(4); + local c_t = currentT - sq_var.get_vector(4); + local v = sq_GetUniformVelocity(0, max_break, c_t, t); + + max_break_v = v; + //print("\n v:" + v + " c_t:" + c_t + " t:" + t); + } + } + } + } + } + + + //sq_var.push_vector(posZ); // index : 1 // srcZ + + local srcZ = sq_var.get_vector(1); // 卫瞪 卫蒙 堪桧 + local jumpstate = sq_var.get_vector(2); // jumpstate : 0 : 夥款 1 : 鼻蝓酝 2 : ?鬼酝 + + local up_t = time / 2; + local up_l = 20 + srcZ; + + local move_l = 0; + + //if(srcZ <= 0) { + + if(jumpstate == 0) { + + if(up_t > currentT) { + //move_l = sq_GetAccel(0, up_l, currentT, up_t, true); + move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true); + } + else { + move_l = sq_GetAccel(up_l, 0, currentT - up_t, up_t, false); + } + + if(currentT >= time) { + obj.setCurrentPos(posX, posY, 0); + + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_FASTMOVE_PRO); + obj.sq_IntVectPush(max_break_v); + obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true); + } + } + else { + obj.setCurrentPos(posX, posY, move_l); + } + + } + else if(jumpstate == 1) { + up_t = 100; + local down_t = 400; + up_l = 10 + srcZ; + + move_l = 0; + + //print("\n uprising"); + + + if(up_t > currentT) { + move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true); + } + else { + move_l = sq_GetAccel(up_l, 0, currentT - up_t, down_t, false); + } + + if(currentT >= (down_t + up_t) ) { + obj.setCurrentPos(posX, posY, 0); + + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_FASTMOVE_PRO); + obj.sq_IntVectPush(max_break_v); + obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true); + } + } + else { + obj.setCurrentPos(posX, posY, move_l); + } + } + else if(jumpstate == 2) { // ?鬼酝 + up_t = 50; + local down_t = 400; + up_l = srcZ; + + move_l = 0; + //print("\n downing"); + + if(up_t > currentT) { + move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true); + } + else { + move_l = sq_GetAccel(up_l, 0, currentT - up_t, down_t, false); + } + + if(currentT >= (down_t + up_t) ) { + obj.setCurrentPos(posX, posY, 0); + + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_FASTMOVE_PRO); + obj.sq_IntVectPush(max_break_v); + obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true); + } + } + else { + obj.setCurrentPos(posX, posY, move_l); + } + } + } + else if(substate == S_FASTMOVE_PRO) { +//FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%) +//FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px) + local initDelay = pAni.GetFrameStartTime(2); + + if(initDelay <= currentT) { + local delayT = sq_var.get_vector(2); // 漱搅樯策蝶 2 识 桧翕卫除 + //print(delayT); + local len = sq_var.get_vector(5); + //print(len); + + + if(sq_var.get_vector(6) == 0) // 樯策蝶6 饵遴萄 ?楚斜 + { + obj.sq_PlaySound("FMOVE_DASH_LOOP", 7575); + sq_var.set_vector(6, 1); + } + + local v = sq_GetAccel(0, len, currentT - initDelay, delayT, false); + //local v = sq_GetUniformVelocity(0, len, currentT - initDelay, delayT); + + local srcX = sq_var.get_vector(1); // 漱搅 樯策蝶 1 + + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + + if(sq_var.get_vector(3)) { // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼.. + if(sq_var.get_vector(4) != posY) { // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼.. + sq_var.set_vector(3, 0); // 桧翕?楚斜蒂 off?鄹栖棻.. + sq_var.set_vector(4, posY); + } + } + + if(obj.isMovablePos(dstX, posY) && !sq_var.get_vector(3)) { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕 + //obj.setCurrentPos(dstX, posY, posZ); + sq_setCurrentAxisPos(obj, 0, dstX); + } + else { // 桧翕? 热 桡朝 虽羲击 虏陬棻.. + sq_var.set_vector(3,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻.. + local offset = dstX - posX; + + if(offset != 0) { + if(offset < 0) + offset = -offset; + + local totalLen = sq_var.get_vector(5); + sq_var.set_vector(5, totalLen - offset); + } + } + + if (obj.sq_timer_.isOnEvent(currentT) == true) + obj.resetHitObjectList(); + + if(v >= len) { // 迹瞳虽缣 紫杂?击 阳 sub state蒂 夥羞棻.. + obj.stopSound(7575); + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_FASTMOVE_END); + obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true); + } + } + + + + + // 坚楼桧翕 y蹴 桧翕 陛栋?紫烟 热姜蒙机 + // 蝶鹧? 等桧颤煎 鼻?桧翕 楼紫 跷陛 + + // 试虽 ??赝 当撩 + local t = sq_var.get_timer_vector(0); + + if(t.isOnEvent(currentT) == true) { + //local dust_type = obj.getDustParticleType(LANDPARTICLE_MOVE); + //local particleCreater = sq_GetobjectParticleCreaters(dust_type); + //if(obj.getDirection() == ENUM_DIRECTION_LEFT) + //particleCreater.getParticleInfo().xFlip = true; + //else + //particleCreater.getParticleInfo().xFlip = false; + //OBJECT_VECTOR objects = chargeSpearParticleCreator_->createObjectParticle(); + + local particleCreater = sq_var.GetparticleCreaterMap("FastMove", "Character/Priest/Effect/Particle/Fastmove.ptl", obj); + + particleCreater.Restart(0); + //particleCreater.SetPos(posX, posY, posZ-1); + local dstX = sq_GetDistancePos(posX, obj.getDirection(), -20); + particleCreater.SetPos(dstX, posY, posZ+28); + + sq_AddParticleObject(obj, particleCreater); + } + + } + } + else if(substate == S_FASTMOVE_END) { + local len = 40; + local delaySum = 400; + local v = sq_GetAccel(0, len, currentT, delaySum, false); + //local v = sq_GetUniformVelocity(0, len, currentT - initDelay, delayT); + + local srcX = sq_var.get_vector(1); // 漱搅 樯策蝶 1 + + local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); + + if(obj.isMovablePos(dstX, posY)) { + obj.setCurrentPos(dstX, posY, posZ); + } + } + + +} + +// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻. +function onProcCon_fastmove(obj) +{ + if(!obj) return; + local pAni = obj.sq_getCurrentAni(); + local bEnd = obj.sq_ani_IsEnd(pAni); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + + // + + local substate = obj.getSkillSubState(); + + if(substate == S_FASTMOVE_PLAY) { + } + else if(substate == S_FASTMOVE_LOOP) { + } + else if(substate == S_FASTMOVE_PRO) { + } + else if(substate == S_FASTMOVE_END) { + } + + + if(bEnd) { + if(substate == S_FASTMOVE_PLAY) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_FASTMOVE_LOOP); + obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true); + //obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(substate == S_FASTMOVE_LOOP) { + } + else if(substate == S_FASTMOVE_PRO) { + //obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + else if(substate == S_FASTMOVE_END) { + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } +} + +// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻. +function onEndState_fastmove(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_FASTMOVE) { + obj.stopSound(7575); + } +} + + +// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛 +// 毡棻贼 桧 ?热蒂 桧辨?栖棻. + +function onAfterSetState_fastmove(obj, state, datas, isResetTimer) +{ + if(!obj) return; + +} + +// onbeforeattack 属寥?热 殓栖棻 +function onBeforeAttack_fastmove(obj, damager, boundingBox) +{ + +} + +// onAttack 属寥?热 殓栖棻 +function onAttack_fastmove(obj, damager, boundingBox) +{ + +} + +// onAfterAttack 属寥?热 殓栖棻 +function onAfterAttack_fastmove(obj, damager, boundingBox) +{ + +} + +// onBeforeDamage 属寥?热 殓栖棻 +function onBeforeDamage_fastmove(obj, attacker, boundingBox) +{ + +} + +// onDamage 属寥?热 殓栖棻 +function onDamage_fastmove(obj, attacker, boundingBox) +{ + +} + +// onAfterDamage 属寥?热 殓栖棻 +function onAfterDamage_fastmove(obj, attacker, boundingBox) +{ + +} + + + \ No newline at end of file diff --git a/character/priest/hearthings.nut b/character/priest/hearthings.nut new file mode 100644 index 0000000..e69de29 diff --git a/character/priest/hedgehog.nut b/character/priest/hedgehog.nut new file mode 100644 index 0000000000000000000000000000000000000000..d07024d8163d1bf2dcce0b16bc45ca13ea7e1df0 GIT binary patch literal 1753 zcmb_cT~E_c81{Bc_8(rk+LAg3>Wzdn%P7#GY*|N)F=i>-8BDfT*Upa^6C-{`1e_wE z10fPXz^??oP?SGo&&t2>J*Qo_f_i1so1VU3=Xsv@>Ffl1>FdGcU7)oOjips77ZS(+i?~_b1i@`Vr6P-6A}A?Ts5%HHa}$ES0RydteZgSF~$)agZO@ zMqR`)?A<-E?@zhepZ&0>>$aHk#T)2tdCxf0EB|K zLcu_>5I)YoE5xi;G$^PggY@8!lAcpbFq&;n0lk26QR8Y>HbxAmWLO!J&z{W=N__*; zU~(YB@~~hlDFUoVz)e*1d4-q?Lnfu>CWskUGVzS$X3TFUk( z(+Np%M&msK?yzR1%4fYDz%KY6y2I^IFcj=;@@nnuGA`C$fJkfa#CB#s-a|}}atf?I zNBr3i-I*0R+>S=PVp!6tcd+=njSC1na&Y9+QiERyjn8-NXFDwhBZnzW=;gAis^dT4yfm}5$?gkKlhIyFdh*3zF8`A5dAJ1gsi6NIc7g3LS-#|y`2L#*N|I%34 zrazuKD(0x7T%Fy*9RmCPx?P`VxFKY8<%!r7zg=6T^>1{4I?oWej9m|u} z+*Z3z4i@L^PwRj(a2$fkjaO)*(k2OAYp#z^3W6gq0rIM;8UhrJG(o?}6w9Q7iu%Kr zvpsbwHB9}=IsF=O1kpSsW};fD5Y3Eh#j?sQC7c*hGRbq<_^|BlE7#D`6w}1zmbHTJ z<#0vG!~My&RK`y$H_nq%`gKw{Uo^*4s$mpyD8IjW7d_D>#DuPBtbKq~NxiA)RV^Rx zNTt0#9g!Yv#F_WZQP(6b-@2a= HSS_SUB_STATE_ATTACK_1 && subState <= HSS_SUB_STATE_ATTACK_4) + { + + local b_useskill = obj.sq_IsEnterSkill(SKILL_HIGH_SPEED_SLASH); + + if(b_useskill != -1) + { + local sq_var = obj.getVar(); + sq_var.setBool(2,true); + } + } + } +} + +function onEndState_HighSpeedSlash(obj, newState) +{ + if(!obj) return; + if(newState != STATE_HIGH_SPEED_SPLASH) { + obj.setCarryWeapon(true); + } +} + + + +function sendSubState_HighSpeedSlash(obj, subState) +{ + if(!obj) return; + + if(obj.sq_isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState); // substate撮? + obj.sq_addSetStatePacket(STATE_HIGH_SPEED_SPLASH, STATE_PRIORITY_USER, true); + } +} + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_HighSpeedSlash(obj, state, datas, isResetTimer) +{ + local sq_var = obj.getVar(); + local subState = obj.sq_getVectorData(datas, 0); + obj.setSkillSubState(subState); + + //奢鳝 瞳辨 + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_HIGH_SPEED_SLASH); + + if(subState == HSS_SUB_STATE_READY) + { + sq_var.setInt(0,0); // ?营暧 棻钦 ?? ?热 蟾晦? + sq_var.setFloat(1,100.0); // 楼紫 隶陛徽 蟾晦? + sq_var.setBool(2,false); // 郦殓溘 蟾晦? + + obj.sq_stopMove(); + obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_READY); + obj.sq_PlaySound("PR_FASTCUT_READY"); + } + else if(subState == HSS_SUB_STATE_ATTACK_1) + { + if(obj.isCarryWeapon()) + obj.setCarryWeapon(false); + obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_ATTACK_1); + obj.sq_PlaySound("FASTCUT_SWISH"); + } + else if(subState == HSS_SUB_STATE_ATTACK_2) + { + obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_ATTACK_2); + obj.sq_PlaySound("FASTCUT_SWISH"); + } + else if(subState == HSS_SUB_STATE_ATTACK_3) + { + obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_ATTACK_3); + obj.sq_PlaySound("FASTCUT_SWISH"); + } + else if(subState == HSS_SUB_STATE_ATTACK_4) + { + obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_ATTACK_4); + obj.sq_PlaySound("FASTCUT_SWISH"); + } + else if(subState == HSS_SUB_STATE_LAST) + { + obj.sq_setCurrentAnimation(CUSTOM_ANI_HIGH_SPEED_LAST); + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_HIGH_SPEED_SLASH_LAST); + obj.sq_PlaySound("FASTCUT_WHOOSH"); + obj.sq_PlaySound("PR_FASTCUT"); + } + + if(subState >= HSS_SUB_STATE_ATTACK_1 && subState <= HSS_SUB_STATE_ATTACK_4) + { + local isKeyInput = sq_var.getBool(2); + if(isKeyInput) { //郦殓溘桧 毡历棻. + local speedUpRate = sq_var.getFloat(1); // 楼紫 隶陛徽 + + //楼紫 隶陛. + local intDataSpeedUpRate = obj.sq_getIntData(0); + local maxSpeedUpRate = obj.sq_getIntData(1); + + maxSpeedUpRate = maxSpeedUpRate.tofloat(); + intDataSpeedUpRate = (intDataSpeedUpRate.tofloat() + 100.0) / 100; + speedUpRate = speedUpRate * intDataSpeedUpRate.tofloat(); + + if(speedUpRate > maxSpeedUpRate) + speedUpRate = maxSpeedUpRate; + + sq_var.setBool(2,false); + sq_var.setFloat(1,speedUpRate); //?营 楼紫 侦褐 + + if(speedUpRate > 0) + { + local ani = obj.sq_getCurrentAni(); + ani.setSpeedRate(speedUpRate); + //print("subState" + subState + "speedUpRate : "+speedUpRate); + } + } + //print("DelaySum : " + obj.sq_getDelaySum()); + } + + obj.sq_setAttackPowerWithPassive(SKILL_HIGH_SPEED_SLASH, state, -1,1,1.0); + +} + +function onEndCurrentAni_HighSpeedSlash(obj) +{ + local sq_var = obj.getVar(); + local subStateIndex = obj.getSkillSubState(); + local currentHitCount = sq_var.getInt(0); + local maxHitCount = obj.sq_getLevelData(0); + + if(subStateIndex < HSS_SUB_STATE_LAST && currentHitCount >= maxHitCount){ + sendSubState_HighSpeedSlash(obj,HSS_SUB_STATE_LAST); + return; + } + sq_var.setInt(0,currentHitCount+1); //棻钦?? ?热 侦褐 + + if(subStateIndex == HSS_SUB_STATE_READY) + sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_1); + else if(subStateIndex == HSS_SUB_STATE_ATTACK_1) + sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_2); + else if(subStateIndex == HSS_SUB_STATE_ATTACK_2) + sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_3); + else if(subStateIndex == HSS_SUB_STATE_ATTACK_3) + sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_4); + else if(subStateIndex == HSS_SUB_STATE_ATTACK_4) + sendSubState_HighSpeedSlash(obj, HSS_SUB_STATE_ATTACK_1); + else if(subStateIndex == HSS_SUB_STATE_LAST){ + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + + +} + +function onKeyFrameFlag_HighSpeedSlash(obj,flagIndex) +{ + //if(flagIndex == 1) + + + return true; +} \ No newline at end of file diff --git a/character/priest/pandemoniumex.nut b/character/priest/pandemoniumex.nut new file mode 100644 index 0000000..b19e427 --- /dev/null +++ b/character/priest/pandemoniumex.nut @@ -0,0 +1,252 @@ +SUBSTATE_PANDEMONIUM_EX_START <- 0; +SUBSTATE_PANDEMONIUM_EX_END <- 1; + +// 渗热 樯策蝶 +PEND_EX_MAGIC_FIELD <- 0; +PEND_EX_IS_ENDED <- 1; +PEND_EX_CREATE_DEVIL_COUNT <- 2; +PEND_EX_MAGIC_OVER <- 3; +PEND_EX_FLASHSCREEN <- 4; + +PEND_EVENT_TIMER_CREATE_DEVIL <- 0; + + +function sendSubState_PandemoniumEx(obj, subState) +{ + if(!obj) return; + + if(obj.isMyControlObject()) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState); // substate撮? + obj.sq_addSetStatePacket(STATE_PANDEMONIUM_EX, STATE_PRIORITY_IGNORE_FORCE, true); + } +} +//------------------------------------------------------------------------------ + +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_PandemoniumEx(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_PANDEMONIUM_EX); + + if(b_useskill) { + sendSubState_PandemoniumEx(obj,SUBSTATE_PANDEMONIUM_EX_START); + return true; + } + + return false; +} + +function checkCommandEnable_PandemoniumEx(obj) +{ + if(!obj) return false; + return true; +} +//------------------------------------------------------------------------------ +function resetDungeonStart_PandemoniumEx(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount) +{ + obj.sq_setXScrollStop(0); +} + +//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥. +function onIsCheckHitCollision_PandemoniumEx(obj,damager) +{ + local subState = obj.getSkillSubState(); + if(subState == SUBSTATE_POWER_OF_DARKNESS_START) //横菸暧 掏栋 pvp缣怃 罗颤 褒? 虞晦 嫔?. + return obj.isMyControlObject(); + + //晦狱瞳戏烦 釭暧 螃粽薛?陛 嬴栖贼 false棻. 罹晦怃 false蒂 ?啪 肾贼 釭暧 螃粽薛? 樯虽 念娄陛 葬欐胀棻. + return (damager && damager.isMyControlObject()); +} + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_PandemoniumEx(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local sq_var = obj.getVar(); + local subState = obj.sq_getVectorData(datas, 0); + obj.setSkillSubState(subState); + + + if(subState == SUBSTATE_PANDEMONIUM_EX_START) { + obj.sq_stopMove(); + + if(isAvengerAwakenning(obj)) { + local ani = obj.getVar().GetAnimationMap("PAND_EX_START", "Character/Priest/Animation/AvengerAwakening/PandemoniumStart.ani"); + obj.setCurrentAnimation(ani); + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_AWAKENING_PANDEMONIUM_START); + } + else { + obj.sq_setCurrentAnimation(CUSTOM_ANI_PANDEMONIUM_START); + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_PANDEMONIUM_EX_ON_START); + } + + //罗颤蒂 嫔? 掸? + local dmg = obj.sq_getBonusRateWithPassive(SKILL_PANDEMONIUM_EX, STATE_PANDEMONIUM_EX, 0,1.0); + + //学葆? 鼻鹧缣摹 奢问溘 隶? + if(isAvengerAwakenning(obj)) { + local devilPowerUpRate = obj.sq_getIntData(0); + dmg = dmg * (devilPowerUpRate + 100) * 0.01; + } + + sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),dmg.tointeger()); + obj.sq_setXScrollStart(300,150); + } + else if(subState == SUBSTATE_PANDEMONIUM_EX_END) { + if(isAvengerAwakenning(obj)) { + local ani = obj.getVar().GetAnimationMap("PAND_EX_END", "Character/Priest/Animation/AvengerAwakening/PandemoniumEnd.ani"); + obj.setCurrentAnimation(ani); + } + else { + obj.sq_setCurrentAnimation(CUSTOM_ANI_PANDEMONIUM_END); + } + obj.sq_setXScrollStop(300); + sq_SetMyShake(obj,0,0); + + + local flashScreenObj = sq_var.getObject(PEND_EX_FLASHSCREEN); + if(flashScreenObj) { // ?楚莲 蝶觼萼 蒙翕酝桧贼 莠 + local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); + if(pflashScreen) + pflashScreen.fadeOut(); + } + } +} + +function onEndState_PandemoniumEx(obj,newState) +{ + if(!obj) return; + + if(newState != SUBSTATE_PANDEMONIUM_EX_END) { + + local sq_var = obj.getVar(); + + local magicField = sq_var.getObject(PEND_EX_MAGIC_FIELD); + if(magicField) + magicField.setValid(false); + + local magicOver = sq_var.getObject(PEND_EX_MAGIC_OVER); + if(magicOver) + magicOver.setValid(false); + + + local isEnded = sq_var.getBool(PEND_EX_IS_ENDED); + if(!isEnded) { + + local endMagicField = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/end/base.ani",ENUM_DRAWLAYER_NORMAL,true); + local endMagicFieldOver = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/end/OverEffectbase.ani",ENUM_DRAWLAYER_NORMAL,true); + + if(isAvengerAwakenning(obj)) { + local xPos = sq_GetDistancePos(endMagicField.getXPos(), obj.getDirection(), 80); + endMagicField.setCurrentPos(xPos, endMagicField.getYPos(), endMagicField.getZPos()+20); + + //xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 5); + endMagicFieldOver.setCurrentPos(endMagicField.getXPos(), endMagicField.getYPos()+2, endMagicField.getZPos()); + } + + sq_var.setBool(PEND_EX_IS_ENDED,true); + } + + obj.sq_setXScrollStop(300); + sq_SetMyShake(obj,0,0); + } +} + + +function onTimeEvent_PandemoniumEx(obj, timeEventIndex, timeEventCount) +{ + local sq_var = obj.getVar(); + local maxCount = obj.sq_getIntData(1); + local moveSpeed = obj.sq_getIntData(2); + local maxTime = obj.sq_getIntData(3); + local moveMaxDistance = obj.sq_getIntData(4); + local currentCount = sq_var.getInt(PEND_EX_CREATE_DEVIL_COUNT); + + if(currentCount == maxCount) { + obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,30,0,false); + sq_var.setInt(PEND_EX_CREATE_DEVIL_COUNT,currentCount+1); + } + else if(currentCount > maxCount) { + sendSubState_PandemoniumEx(obj,SUBSTATE_PANDEMONIUM_EX_END); + return true; + } + else { + local createDevilZ = currentCount%2 == 1 ? sq_getRandom(-20,-45) : sq_getRandom(20,45); + + local createDevilSize = sq_getRandom(0,4); // 0桧贼 蒙擎 饵桧锷 斜 桧豭 赎饵桧锷 阔 20%?睦煎 蒙擎啪 釭褥 + + + local devilPowerUpRate = obj.sq_getIntData(0); + local dmgRate = isAvengerAwakenning(obj) ? (devilPowerUpRate + 100)* 0.01 : 1.0; + local dmg = obj.sq_getBonusRateWithPassive(SKILL_PANDEMONIUM_EX, STATE_PANDEMONIUM_EX, 0, dmgRate); + local createXPos = 85; + local createZPos = 64; + + if(isAvengerAwakenning(obj)) { + createXPos = 160; + createZPos = 80; + } + + obj.sq_binaryData_startWrite(); //当撩 觼晦蒂 姜?怃 尔鸟匙. + obj.sq_binaryData_writeWord(createDevilSize); + obj.sq_binaryData_writeWord(moveSpeed); + obj.sq_binaryData_writeWord(maxTime); + obj.sq_binaryData_writeWord(moveMaxDistance); + obj.sq_binaryData_writeDword(dmg.tointeger()); + + + sq_SendCreatePassiveObjectPacket(obj,24110, 0, createXPos, 1, createZPos + createDevilZ, obj.getDirection()); + + + + sq_var.setInt(PEND_EX_CREATE_DEVIL_COUNT,currentCount+1); + local createDevilTimeGap = sq_getRandom(50,90); + + obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,createDevilTimeGap,0,false); + } + + return false; // true贼 属寥 酝钦 +} + + +function onEndCurrentAni_PandemoniumEx(obj) +{ + local subState = obj.getSkillSubState(); + + if(subState == SUBSTATE_PANDEMONIUM_EX_END) + { + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } +} + +function onKeyFrameFlag_PandemoniumEx(obj,flagIndex) +{ + if(flagIndex == 1) + { + local sq_var = obj.getVar(); + local magicField = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/start/base.ani",ENUM_DRAWLAYER_NORMAL,false); + local overEffect = sq_CreateDrawOnlyObject(obj,"Character/Priest/Effect/Animation/Pandemonium/start/OverEffectbase.ani",ENUM_DRAWLAYER_NORMAL,false); + + if(isAvengerAwakenning(obj)) { + local xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 80); + magicField.setCurrentPos(xPos, magicField.getYPos(), magicField.getZPos()+20); + } + sq_var.setObject(PEND_EX_MAGIC_FIELD, magicField); + sq_var.setObject(PEND_EX_MAGIC_OVER, overEffect); + + //local xPos = sq_GetDistancePos(magicField.getXPos(), obj.getDirection(), 10); + overEffect.setCurrentPos(magicField.getXPos(), magicField.getYPos()+2, magicField.getZPos()); + + local createDevilTimeGap = sq_getRandom(50,90); + obj.setTimeEvent(PEND_EVENT_TIMER_CREATE_DEVIL,createDevilTimeGap,0,true); + + sq_SetMyShake(obj,4,3000); + + local flashScreenObj = sq_flashScreen(obj,80,5000,240,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); + sq_var.setObject(PEND_EX_FLASHSCREEN,flashScreenObj); + } + return true; +} + \ No newline at end of file diff --git a/character/priest/passive_skill_priest.nut b/character/priest/passive_skill_priest.nut new file mode 100644 index 0000000..b9607bf --- /dev/null +++ b/character/priest/passive_skill_priest.nut @@ -0,0 +1,200 @@ +///////////////////////////////////////////////////////// +// +// ?卫粽 蝶鉴籀葬 +// ?渡 蝶鉴暧 ?卫粽 蝶鉴暧 Appendage蛔烟/?薯 蛔蛔 +// +///////////////////////////////////////////////////////// +function ProcPassiveSkillAvenger(obj, skill_index, skill_level) +{ + if (skill_index == SKILL_SCYTHE_MASTERY) + { + if (obj.getWeaponSubType() == WEAPON_SUBTYPE_SCYTHE && skill_level > 0) + { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Appendage/Character/scythe_mastery.nut", true); + + local attack_speed = sq_GetLevelData(obj, skill_index, 0, skill_level); + local dark_element = sq_GetLevelData(obj, skill_index, 1, skill_level); + local light_element = sq_GetLevelData(obj, skill_index, 2, skill_level) * -1; + local weaponMagicAttack = sq_GetLevelData(obj, skill_index, 3, skill_level); + + local change_appendage = appendage.sq_getChangeStatus("scythe"); + if(!change_appendage) { + change_appendage = appendage.sq_AddChangeStatus("scythe",obj, obj, 0, CHANGE_STATUS_TYPE_ATTACK_SPEED, true, attack_speed ); + } + + // 奢楼隶陛, 檩楼撩 荡?隶陛, 赀楼撩 荡?马模 + if(change_appendage) { + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, attack_speed.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK, false, dark_element.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, light_element.tofloat()); + + change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, weaponMagicAttack.tofloat()); + } + } + else + { + //CNSquirrelAppendage.sq_RemoveAppendage(obj, "Appendage/Character/scythe_mastery.nut"); + if(skill_level > 0) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Appendage/Character/scythe_mastery.nut", true); + + if(appendage) { + local change_appendage = appendage.sq_getChangeStatus("scythe"); + if(change_appendage) { + change_appendage.clearParameter(); + } + } + } + } + } + else if(skill_index == SKILL_HEARTHINGS) + { + if (skill_level > 0) + obj.sq_addPassiveSkillAttackBonusRate(SKILL_HEARTHINGS,1); + } + + if(skill_index == SKILL_DEVILSTRIKE) { // 等网蝶?塭桧醴 + if (skill_level > 0) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Appendage/Character/ap_avenger_devilstrike.nut", true); + local maxValue = sq_GetIntData(obj, SKILL_DEVILSTRIKE, SI_DS_MAX_DEVIL_GAUGE); // 譆渠 学葆啪桧虽 热纂 + if(appendage.sq_var.size_vector() != 5) { // 虽陪 啪桧虽陛 虽表虽朝 帼斜热姜 + appendage.sq_var.clear_vector(); + appendage.sq_var.push_vector(maxValue); // 譆渠 学葆啪桧虽 热纂 + appendage.sq_var.push_vector(0); // ?营 学葆啪桧虽 热纂 + appendage.sq_var.push_vector(0); // 虽陪 热纂 + appendage.sq_var.push_vector(0); // + appendage.sq_var.push_vector(0); + } + else { + // 虏橾 裟蝶啪桧虽陛 棻脑棻贼 侦褐?丑捡?栖棻.. + local max_gauge = appendage.sq_var.get_vector(DS_APEND_MAX_GAUGE); + + if(max_gauge != maxValue) { + appendage.sq_var.set_vector(DS_APEND_MAX_GAUGE, maxValue); + } + } + + obj.getVar("devilStrike").clear_vector(); + obj.getVar("devilStrike").push_vector(0); // character "devilstrike" sqrvar 0廓樯策蝶 晦奖击 当 樯策蝶 + obj.getVar("devilStrike").push_vector(0); + obj.getVar("devilStrike").push_vector(0); + obj.getVar("devilStrike").push_vector(0); + + obj.getVar("devilStrike").clear_ct_vector(); // 颤桧该 赝葬横 + obj.getVar("devilStrike").push_ct_vector(); + obj.getVar("devilStrike").push_ct_vector(); + obj.getVar("devilStrike").push_ct_vector(); + + obj.getVar("devilStrike").get_ct_vector(0).Reset(); + obj.getVar("devilStrike").get_ct_vector(0).Start(0,0); + + + appendage.sq_var.clear_timer_vector(); // 颤桧该 赝葬横 + appendage.sq_var.push_timer_vector(); // 颤桧该 ?卫 + appendage.sq_var.push_timer_vector(); + } + else { + CNSquirrelAppendage.sq_RemoveAppendage(obj, "Appendage/Character/ap_avenger_devilstrike.nut"); + } + } + + if(skill_index == SKILL_NIGHTMARE) { // 陕撩 ?卫粽学跦(48溯涟) + // 陕撩?卫粽 : 学跦(48溯涟) + // 1. 陕撩 渗褐 翕寰 陕撩晦 奢问溘桧 隶陛? + // 2. 等网 蝶?塭桧醴暧 学葆 啪桧虽 离朝榆 隶陛. + // 陕撩?卫粽 学跦击 乾坚 毡朝虽 羹觼?坚 乾坚 毡棻贼 学葆 啪桧虽 离朝榆击 隶陛卫面怃 葬欐?栖棻.. + if (skill_level > 0) { + obj.sq_addPassiveSkillAttackBonusRate(SKILL_NIGHTMARE,1); // 1.奢问溘 隶陛榆(%) + } + //if (skill_level > 0) { + //local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Appendage/Character/ap_avenger_nightmare.nut", true); + //obj.sq_addPassiveSkillAttackBonusRate(SKILL_NIGHTMARE,1); + //} + //else { + //CNSquirrelAppendage.sq_RemoveAppendage(obj, "Appendage/Character/ap_avenger_nightmare.nut"); + //} + } + + + return true; +} + + +function onUseSkillAvengerPassiveSkill(obj,skillIndex, skillLevel) +{ + if(!obj) + return; + + local hearthingsLevel = obj.sq_getSkillLevel(SKILL_HEARTHINGS); + local activeRate = obj.sq_getIntData(SKILL_HEARTHINGS,1); //嫦翕 ?睦 + + if(activeRate >= sq_getRandom(0,100) && hearthingsLevel > 0 && obj.isSkillClassType(skillIndex,3)) { + + local time = obj.sq_getLevelData(SKILL_HEARTHINGS,0,hearthingsLevel); + local changeMoveSpeed = obj.sq_getLevelData(SKILL_HEARTHINGS,2,hearthingsLevel); + local changeHp = obj.sq_getLevelData(SKILL_HEARTHINGS,3,hearthingsLevel) * -1; + local changeMp = obj.sq_getLevelData(SKILL_HEARTHINGS,4,hearthingsLevel) * -1; + local currentCount = 1; + local maxCount = obj.sq_getIntData(SKILL_HEARTHINGS,0); + + local oldAppendage = obj.GetSquirrelAppendage("Appendage/Character/hearthings.nut"); + if(oldAppendage) { + currentCount = currentCount + oldAppendage.sq_var.getInt(0); + if(currentCount > maxCount) // 酝绘 譆渠纂 + return; + } + + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, true, "Appendage/Character/hearthings.nut", true); + local change_appendage = appendage.sq_getChangeStatus("hearthings"); + + if(!change_appendage) { + change_appendage = appendage.sq_AddChangeStatus("hearthings",obj, obj, 0, CHANGE_STATUS_TYPE_MOVE_SPEED, true, currentCount.tointeger() * changeMoveSpeed.tointeger() ); + } + + if(change_appendage) { + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, currentCount.tofloat() * changeMoveSpeed.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, true, currentCount.tofloat() * changeHp.tofloat()); + change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, true, currentCount.tofloat() * changeMp.tofloat()); + } + + appendage.getAppendageInfo().setValidTime(time); // 嵘?卫除 + + appendage.sq_var.setInt(0,currentCount.tointeger()); + } + +} + + + +function OnBeforeAttackAvengerPassiveSkill(obj, damager, bounding_box, is_stuck) +{ + // 饵桧萄 葆蝶搅葬蒂 乾坚 毡棻贼, 陷缣 暧? 颤问 僭葬 奢问击 -> 葆彻 奢问戏煎 夥脯遽棻. + if(!obj) return false; + + if (is_stuck == false) + { + local result = CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Appendage/Character/scythe_mastery.nut"); + + + if (result == true) + { + if(obj.getWeaponSubType() == WEAPON_SUBTYPE_SCYTHE) { // 陷 橾阳虏 + // state 陛 ?颤橾阳谛 僭葬颤橾阳虏 瞳辨腌栖棻.. + local state = obj.sq_GetSTATE(); + if(sqr_IsNormalAttack(state) == true) { + local attack_info = sq_GetCurrentAttackInfo(obj); + local eType = sq_GetAttackType(attack_info); + if(eType == ATTACKTYPE_PHYSICAL) { + sq_ChangeAttackTypeToOpposite(attack_info); + } + } + } + } + } + + return true; +} + + + \ No newline at end of file diff --git a/character/priest/powerofdarkness.nut b/character/priest/powerofdarkness.nut new file mode 100644 index 0000000..fa3154f --- /dev/null +++ b/character/priest/powerofdarkness.nut @@ -0,0 +1,421 @@ +// 怃粽 蝶才桧?陛 ?蹂 桡棻. +SUBSTATE_POWER_OF_DARKNESS_START <- 0; +SUBSTATE_POWER_OF_DARKNESS_EXPLOSION <- 1; +SUBSTATE_POWER_OF_DARKNESS_LIFT <- 2; +SUBSTATE_POWER_OF_DARKNESS_LAST <- 3; +SUBSTATE_POWER_OF_DARKNESS_END <- 4; + +POD_VAR_ARROW_COUNT <- 1; // 饵辨? ?髦 偎热 +POD_VAR_CIRCLE_INDEX <- 2; // 当撩胀 掘羹 樯策蝶 +POD_VAR_CIRCLE_OBJECT_GROUP <- 3; // 当撩胀 掘羹 斜瑜 +POD_VAR_CIRCLE_OBJECT_UID <- 4; // 当撩胀 掘羹 UID +POD_VAR_CIRCLE_OBJECT <- 5; // 当撩胀 掘羹 +POD_VAR_SUPERARMOR <- 6; // 蓬?嬴该 横?蛤虽 +POD_VAR_FLASHSCREEN <- 7; // 当撩胀 掘羹 + +POD_TIME_EVENT_ARROWGAP <- 1; // 颤歜 桧渐? : ?髦 嫦翕 卫除 除问 +POD_TIME_EVENT_LIFTTIME <- 2; // 颤歜 桧渐? : 跨蝶搅 嗥办朝 卫除 +POD_TIME_EVENT_LASTDELAY <- 3; // 颤歜 桧渐? : 虞颤梱虽 裁溯桧 +POD_TIME_EVENT_LAST <- 4; // 颤歜 桧渐? : 虞颤? 裁溯桧 + +POD_SOUND_INDEX_LOOP <- 92716; + +function sendSubState_PowerOfDarkness(obj, subState) +{ + if(!obj) return; + + if(obj.isMyControlObject()) { + local sq_var = obj.getVar(); + local circleGroup = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_GROUP); + local circleUID = sq_var.getInt(POD_VAR_CIRCLE_OBJECT_UID); + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(subState); // substate撮? + obj.sq_IntVectPush(circleGroup); + obj.sq_IntVectPush(circleUID); // 掘羹暧 UID 撮? + obj.sq_addSetStatePacket(STATE_POWER_OF_DARKNESS, STATE_PRIORITY_IGNORE_FORCE, true); + } +} +//------------------------------------------------------------------------------ + +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_PowerOfDarkness(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_POWER_OF_DARKNESS); + + if(b_useskill) { + sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_START); + return true; + } + + return false; +} + +//------------------------------------------------------------------------------ +function isGrabable_PowerOfDarkness(obj) +{ + local sq_var = obj.getVar(); + local i=0; + local objectsSize = sq_var.get_obj_vector_size(); + + if(objectsSize == 0) + return false; + + for(;i obj.getXPos() ? darkCircle.getXPos() - obj.getXPos() : obj.getXPos() - darkCircle.getXPos(); + local z = darkCircle.getZPos() > obj.getZPos() ? darkCircle.getZPos() - obj.getZPos() : obj.getZPos() - darkCircle.getZPos(); + local rate = obj.sq_getBonusRateWithPassive(SKILL_POWER_OF_DARKNESS, STATE_POWER_OF_DARKNESS,2,1.0); + + obj.sq_binaryData_startWrite(); + obj.sq_binaryData_writeFloat(angle.tofloat()); + obj.sq_binaryData_writeDword(rate); + sq_SendCreatePassiveObjectPacket(obj,24108, 0, x, sq_getRandom(-1,2), z, obj.getDirection()); + } +} + + +//POD_TIME_EVENT_ARROWGAP <- 1; // 颤歜 桧渐? : ?髦 嫦翕 卫除 除问 +//POD_TIME_EVENT_LIFTTIME <- 2; // 颤歜 桧渐? : 跨蝶搅 嗥办朝 卫除 +function onTimeEvent_PowerOfDarkness(obj, timeEventIndex, timeEventCount) +{ + local subState = obj.getSkillSubState(); + + if(timeEventIndex == POD_TIME_EVENT_LIFTTIME) { + sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION); + } + else if(timeEventIndex == POD_TIME_EVENT_ARROWGAP) { + + local sq_var = obj.getVar(); + local current = sq_var.getInt(1); + sq_var.setInt(1,current+1); + local maxArraw = obj.sq_getLevelData(1); + + if(current >= maxArraw) // 卫除 裁溯桧蒂 觊涡 舆晦 嫔? + { + sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_LAST); + return true; + } + else if(current < maxArraw) + { + createPowerOfDarknessArrow(obj,getArrowCreateAngle(current)); + } + return false; + } + else if(timeEventIndex == POD_TIME_EVENT_LASTDELAY) + { + local lastMaxArrow = obj.sq_getIntData(6); + local i = 0; + for(i=0;i 0) + { + if(isGrabable_PowerOfDarkness(obj)) + sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_LIFT); + else + sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION); + + obj.playSound("DARKPOWER_CATCH_LOOP",POD_SOUND_INDEX_LOOP,0,0,0); + } + else + sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_END); + } + else if(subState == SUBSTATE_POWER_OF_DARKNESS_END) + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); +} + +// onAttack 属寥?热 殓栖棻 +function onAttack_PowerOfDarkness(obj, damager, boundingBox) +{ + local sq_var = obj.getVar(); + local subState = obj.getSkillSubState(); + + if(subState == SUBSTATE_POWER_OF_DARKNESS_START) + { + local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_EXECUTION, false, "Appendage/Character/ap_PowerOfDarkness.nut", true); + + if(masterAppendage) { + if(sq_IsHoldable(obj,damager)) { + sq_HoldAndDelayDie(damager, obj, true, true, true, 300, 300, ENUM_DIRECTION_NEUTRAL , masterAppendage); + damager.setCurrentDirection(sq_GetOppositeDirection(obj.getDirection())); + } + + local collectingTime = obj.sq_getIntData(0); + if(sq_IsGrabable(obj,damager) && sq_IsHoldable(obj,damager) && !sq_IsFixture(damager)) //濩击热 毡朝 鼻鹧 + sq_MoveToAppendageForce(damager, obj, obj, 160, 0, 90 - damager.getObjectHeight()/2, collectingTime, true, masterAppendage); + else if(sq_IsHoldable(obj,damager) && !sq_IsFixture(obj)) + sq_MoveToAppendageForce(damager, obj, obj, 160, 0, damager.getZPos(), collectingTime, true, masterAppendage); + + obj.sq_PlaySound("DARKPOWER_CATCH"); + sq_var.push_obj_vector(damager); + } + } +} + +function removeAllPoweOfDarknessAppendage(obj) +{ + local sq_var = obj.getVar(); + local i=0; + local objectsSize = sq_var.get_obj_vector_size(); + + for(;i 0) + sendSubState_PowerOfDarkness(obj,SUBSTATE_POWER_OF_DARKNESS_EXPLOSION); + } + + return true; +} + +function onCreateObject_PowerOfDarkness(obj, createObject) +{ + local sq_var = obj.getVar(); + local cuid = sq_GetUniqueId(createObject); + local circleIndex = sq_var.getInt(POD_VAR_CIRCLE_INDEX); + + if(cuid == circleIndex) { + local group = sq_GetGroup(createObject); + local uid = sq_GetUniqueId(createObject); + sq_var.setObject(POD_VAR_CIRCLE_OBJECT, createObject); + + sq_var.setInt(POD_VAR_CIRCLE_OBJECT_GROUP, group); + sq_var.setInt(POD_VAR_CIRCLE_OBJECT_UID, uid); + } +} + \ No newline at end of file diff --git a/character/priest/ripper.nut b/character/priest/ripper.nut new file mode 100644 index 0000000..fa3bb84 --- /dev/null +++ b/character/priest/ripper.nut @@ -0,0 +1,164 @@ +// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻. +function checkExecutableSkill_Ripper(obj) +{ + if(!obj) return false; + local b_useskill = obj.sq_IsUseSkill(SKILL_RIPPER); + if(b_useskill) { + obj.sq_addSetStatePacket(STATE_RIPPER, STATE_PRIORITY_USER, false); + return true; + } + + return false; +} + +// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.) +function checkCommandEnable_Ripper(obj) +{ + if(!obj) return false; + + local state = obj.sq_GetSTATE(); + + if(state == STATE_ATTACK) { + // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] + return obj.sq_IsCommandEnable(SKILL_RIPPER); + } + + return true; +} + +//------------------------------------------------------------------------------ + + +//isCheckHitCollision谛 checkHit朝 ?问 羹觼蒂 鼻渠寞桧 嬴棋 顶陛 ?捡 ?唳办缣 噙樯棻. pvp缣摹 鼻渠寞桧 ?问羹觼蒂 ?贼 拟港卫除桧 替溥 蝶鉴桧 警蜗肾朝 唳办陛 毡晦 阳侥. +function onIsCheckHitCollision_Ripper(obj,damager) +{ + return obj.isMyControlObject(); +} + +function isForceHitCheck_Ripper(obj) +{ + return obj.isMyControlObject(); +} + +function onAttack_Ripper(obj,damager,boundingBox) +{ + local sq_var = obj.getVar(); + sq_var.setBool(0,true); // 奢问 撩奢 + + local isLast = sq_var.getBool(1); // 虞颤 + if (!isLast) { + sq_var.push_obj_vector(damager); + sq_AtrractionForce(obj, damager, false, 270, -1, 2000.0, 1500.0, false); // 尘横顶晦 + sq_EffectLayerAppendage(damager,sq_RGB(255,255,255),155,0,80,0); + } +} + + +function onEndState_Ripper(obj, newState) +{ + if(!obj) return; + local sq_var = obj.getVar(); + sq_var.clear_obj_vector(); + + local ani = sq_GetCurrentAnimation(obj); + if(ani){ + local sizeRate = sq_var.getFloat(2); + ani.setAttackBoundingBoxSizeRate(1.0/sizeRate,true); + } +} + + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_Ripper(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local sq_var = obj.getVar(); + obj.sq_stopMove(); + obj.sq_setCurrentAnimation(CUSTOM_ANI_RIPPER); + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_RIPPER); + obj.sq_setAttackPowerWithPassive(SKILL_RIPPER, state, -1,0,1.0); + sq_var.setBool(0,false); + sq_var.setBool(1,false); + sq_var.setFloat(2,1.0); + + obj.sq_setXScroll(180,500,1500,100); + obj.sq_PlaySound("PR_RIPPER_READY"); +} + +function onEndCurrentAni_Ripper(obj) +{ + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + obj.sq_setfindNearMovablePos(obj.getXPos(),obj.getYPos(),50,1,5); +} + +function onKeyFrameFlag_Ripper(obj,flagIndex) +{ + local isMycontrolObject = obj.sq_isMyControlObject(); + local sq_var = obj.getVar(); + + if(isMycontrolObject && flagIndex == 1) // 霞翕,廓翻 桧??朝 釭缣啪虏 尔樯棻. + obj.sq_setShake(obj,4,60); + else if(isMycontrolObject && flagIndex == 2) + obj.sq_setShake(obj,2,30); + else if(flagIndex == 3) + { + if(isMycontrolObject) + obj.sq_setShake(obj,3,60); + } + else if(isMycontrolObject && flagIndex == 4) + obj.sq_setShake(obj,2,30); + else if(flagIndex == 6) + { + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_RIPPER); + local state = obj.sq_GetSTATE(); + obj.sq_setAttackPowerWithPassive(SKILL_RIPPER, state, -1,0,1.0); + } + else if(flagIndex == 5 && sq_var.getBool(0)) + { + local state = obj.sq_GetSTATE(); + + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_RIPPER_EXPLOSION); + + // 葬? ?撩 蝶鉴桧贼 + local exSkillLevel = sq_GetSkillLevel(obj,SKILL_RIPPER_EX); + if(!sq_isPVPMode() && exSkillLevel > 0) { + local sizeRate = sq_GetLevelData(obj, SKILL_RIPPER, 2, exSkillLevel); + sizeRate = sizeRate * 0.01; + + local ani = sq_GetCurrentAnimation(obj); + if(ani){ + ani.setAttackBoundingBoxSizeRate(sizeRate,true); + sq_var.setFloat(2,sizeRate); + } + } + + + obj.sq_setAttackPowerWithPassive(SKILL_RIPPER, state, -1,1,1.0); + sq_AddDrawOnlyAniFromParent(obj,"Character/Priest/Effect/Animation/Ripper/etc/33p_1_burst1-handup_normal.ani",0,1,0); + sq_AddDrawOnlyAniFromParent(obj,"Character/Priest/Effect/Animation/Ripper/etc/33p_burst1-handup_normal.ani",0,1,0); + if(isMycontrolObject) + { + local flash = sq_flashScreen(obj,80, 80, 0, 255, sq_RGBA(255,255,255,128),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); + sq_addFlashScreen(flash,0,0,400,255,sq_RGBA(0,0,0,180),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); + + local objListSize = sq_var.get_obj_vector_size(); + for(local i =0;i startT && currentT < delay) { + //local v = sq_GetAccel(100, len, currentT, delay, true); + local v = sq_GetAccel(50, len, currentT, 650, true); + + rate = v / 1000.0; + } + else if(currentT >= delay) { + rate = len / 1000.0; + } + + //print("ropeObjX:" + ropeObjX + "obj.getDirection():" + obj.getDirection() + "len:" + len); + + pRopeAniN.setImageRate(rate, 1.0); + pRopeAniD.setImageRate(rate, 1.0); + + local size = sq_GetAniRealImageSize(pRopeAniD, ENUM_DIRECTION_RIGHT); + local ropeX = sq_GetDistancePos(ropeObjX, obj.getDirection(), size); + + local pSickleObj = obj.sq_GetPassiveObject(24101); // sickle + + + if(pSickleObj) { + pSickleObj.setCurrentPos(ropeX, posY, posZ); + } + + local pSpincutterObj = obj.sq_GetPassiveObject(24100); // 嫦饵?晦 瞪 蝶?醴搅陛 亵旎噶 擅戏煎 陛朝 ?娄蒂 翱轿?濠 + + if(pSpincutterObj) { + pSpincutterObj.setCurrentPos(ropeX, posY - 1, posZ); + } + + if(frmIndex >= 2 && frmIndex < 6) { + + local flag = sq_var.get_vector(0); + + if(flag == 0) { + local offsetLen = 110; + local pRope = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_DODGE_ANI); // 煎? 拥栖2 + local pRopeAniD = pRope.getCurrentAnimation(); + + local size = sq_GetAniRealImageSize(pRopeAniD, ENUM_DIRECTION_RIGHT); + local distanceL = size + offsetLen; + + local state = obj.sq_GetSTATE(); + local attack_bonus_rate = obj.sq_getBonusRateWithPassive(SKILL_SPINCUTTER, state, 1 ,1.0); + + local skill = sq_GetSkill(obj, SKILL_SPINCUTTER); + local bonus_rate = sq_GetAttackBonusRate(skill, 1, 1.0); + + print("\n passive_bonus_rate:" + attack_bonus_rate + " attack_bonus_rate:" + bonus_rate); + + local multiHit = obj.sq_getIntData(SKILL_SPINCUTTER, CSI_SPIN_HIT_COUNT); + + + if(obj.isMyControlObject()) { + obj.sq_binaryData_startWrite(); + obj.sq_binaryData_writeDword(multiHit); + obj.sq_binaryData_writeDword(attack_bonus_rate); + + obj.sq_p00_sendCreatePassiveObjectPacket(24100, 0, distanceL, -1, 0); + } + sq_var.set_vector(0, 1); + } + } + else if(frmIndex >= 6) { + local delay = obj.sq_getIntData(SKILL_SPINCUTTER, CSI_STAY_TIME); + local currentT = sq_GetCurrentTime(pAni) - pAni.getDelaySum(false); + + + if(obj.isMyControlObject()) { + obj.setSkillCommandEnable(SKILL_SPINCUTTER, true); + + local iEnterSkill = obj.sq_IsEnterSkill(SKILL_SPINCUTTER); + + if(currentT >= delay || iEnterSkill != -1) { // 蝶?醴搅 recall 嫦翕 + local flag = sq_var.get_vector(2); + + if(!flag) { + sq_var.set_vector(2,1); + + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_SPINCUTTER_RECALL); + obj.sq_IntVectPush(obj.getDirection()); // substate撮? + obj.sq_addSetStatePacket(STATE_SPINCUTTER, STATE_PRIORITY_USER, true); + } + } + } + } + + + } + else if(substate == S_SPINCUTTER_RECALL) { + } + else if(substate == S_SPINCUTTER_ARRIVAL) { + } + +} + +// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻. +function onProcCon_spincutter(obj) +{ + if(!obj) return; + local pAni = obj.sq_getCurrentAni(); + local bEnd = obj.sq_ani_IsEnd(pAni); + local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni); + local sq_var = obj.getVar(); + // + + local subState = obj.getSkillSubState(); + + if(subState == S_SPINCUTTER_RECALL) { + } + else if(subState == S_SPINCUTTER_ARRIVAL) { + } + + if(bEnd) { + if(subState == S_SPINCUTTER_THROW) { + + } + else if(subState == S_SPINCUTTER_RECALL) { + obj.sq_IntVectClear(); + obj.sq_IntVectPush(S_SPINCUTTER_ARRIVAL); + obj.sq_IntVectPush(obj.getDirection()); // substate撮? + obj.sq_addSetStatePacket(STATE_SPINCUTTER, STATE_PRIORITY_USER, true); + } + else if(subState == S_SPINCUTTER_ARRIVAL) { + obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); + } + } +} + +// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻. +function onEndState_spincutter(obj, new_state) +{ + if(!obj) return; + if(new_state != STATE_SPINCUTTER) { + local sq_var = obj.getVar(); + local pRope1 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_ANI); // 煎? 拥栖1 + local pRope2 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_DODGE_ANI); // 煎? 拥栖2 + + if(pRope1) { + pRope1.setValid(false); + } + if(pRope2) { + pRope2.setValid(false); + } + } +} + +// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. +function onSetState_spincutter(obj, state, datas, isResetTimer) +{ + if(!obj) return; + local sq_var = obj.getVar(); + local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻.. + local direction = obj.sq_getVectorData(datas, 1); // 罗廓箪 substate殓栖棻.. + obj.setSkillSubState(substate); //set substate + obj.sq_stopMove(); + + + sq_var.clear_vector(); + //sq_var.clear_obj_vector(); + + sq_var.push_vector(0); + + local len = obj.sq_getIntData(SKILL_SPINCUTTER, CSI_THROW_LEN); + sq_var.push_vector(len); + sq_var.push_vector(0); + + + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + + + if(substate == S_SPINCUTTER_THROW) { + sq_var.clear_ani_vector(); // 拥栖诡桧暮 漱搅蒂 饷薯?棻.. + + obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_SPINCUTTER); // + + local firstAttackRate = obj.sq_getBonusRateWithPassive(SKILL_SPINCUTTER, state, 0, 1.0); + local skill = sq_GetSkill(obj, SKILL_SPINCUTTER); + local bonus_rate = sq_GetAttackBonusRate(skill, 0, 1.0); + + print("\n state:" + state + " first_passive_bonus_rate:" + firstAttackRate + " first_attack_bonus_rate:" + bonus_rate); + + obj.sq_setCurrentAttackBonusRate(firstAttackRate); + + + ///////////////////////////////////////////// + if(obj.isMyControlObject()) { + obj.sq_binaryData_startWrite(); + obj.sq_binaryData_writeDword(firstAttackRate); + + obj.sq_p00_sendCreatePassiveObjectPacket(24101, 0, 0, 0, 0); + } + /////////////////////////////////////////////// + + + + obj.sq_setCurrentAnimation(CUSTOM_ANI_SPINCUTTER1); + local pAni = obj.sq_getCurrentAni(); + + local pRopeNormal = obj.sq_createCNRDAnimation("Effect/Animation/Spincutter/throw/4_rope_normal_0.ani"); + local pRopeDodge = obj.sq_createCNRDAnimation("Effect/Animation/Spincutter/throw/5_rope_dodge_0.ani"); + + + //local pSickleAni = obj.sq_createCNRDAnimation("Effect/Animation/Spincutter/throw/sickle/2_sickle_00_normal.ani"); + + + pRopeNormal.setImageRate(0.1, 1.0); + pRopeDodge.setImageRate(0.1, 1.0); + + local offsetLen = 101; + + local ropeX = sq_GetDistancePos(posX, direction, offsetLen); + + local pPooledObj = obj.sq_createCNRDPooledObject(pRopeNormal, false); + local pRopeDogeObj = obj.sq_createCNRDPooledObject(pRopeDodge, false); + //local pSickleObj = obj.sq_createCNRDPooledObject(pSickleAni, false); + + + pPooledObj.setCurrentDirection(direction); + pRopeDogeObj.setCurrentDirection(direction); + //pSickleObj.setCurrentDirection(direction); + + pPooledObj.setCurrentPos(ropeX, posY, posZ); + pRopeDogeObj.setCurrentPos(ropeX, posY, posZ); + + sq_var.clear_obj_vector(); + sq_var.push_obj_vector(pPooledObj); + sq_var.push_obj_vector(pRopeDogeObj); + //sq_var.push_obj_vector(pSickleObj); + + obj.sq_AddObject(pPooledObj); + obj.sq_AddObject(pRopeDogeObj); + //obj.sq_AddObject(pSickleObj); + + local size = sq_GetAniRealImageSize(pRopeDodge, direction); + //pSickleObj.setCurrentPos(ropeX + size, posY, posZ); + } + else if(substate == S_SPINCUTTER_RECALL) { + obj.sq_setCurrentAnimation(CUSTOM_ANI_SPINCUTTER2); + + local pA = obj.sq_getCurrentAni(); + obj.sq_setAnimationSpeedRate(pA, 120.0); + + local pRope1 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_ANI); // 煎? 拥栖1 + local pRope2 = sq_var.get_obj_vector(I_OBJ_VECTOR_ROPE_DODGE_ANI); // 煎? 拥栖2 + + if(pRope1) { + pRope1.setValid(false); + } + if(pRope2) { + pRope2.setValid(false); + } + + } + else if(substate == S_SPINCUTTER_ARRIVAL) { + obj.sq_setCurrentAnimation(CUSTOM_ANI_SPINCUTTER3); + } + +} + +// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛 +// 毡棻贼 桧 ?热蒂 桧辨?栖棻. + +function onAfterSetState_spincutter(obj, state, datas, isResetTimer) +{ + if(!obj) return; +} + +// onbeforeattack 属寥?热 殓栖棻 +function onBeforeAttack_spincutter(obj, damager, boundingBox) +{ + +} + +// onAttack 属寥?热 殓栖棻 +function onAttack_spincutter(obj, damager, boundingBox) +{ + +} + +// onAfterAttack 属寥?热 殓栖棻 +function onAfterAttack_spincutter(obj, damager, boundingBox) +{ + +} + +// onBeforeDamage 属寥?热 殓栖棻 +function onBeforeDamage_spincutter(obj, attacker, boundingBox) +{ + +} + +// onDamage 属寥?热 殓栖棻 +function onDamage_spincutter(obj, attacker, boundingBox) +{ + +} + +// onAfterDamage 属寥?热 殓栖棻 +function onAfterDamage_spincutter(obj, attacker, boundingBox) +{ + +} + + + \ No newline at end of file diff --git a/character/swordman_load_state.nut b/character/swordman_load_state.nut new file mode 100644 index 0000000..ccdae4a --- /dev/null +++ b/character/swordman_load_state.nut @@ -0,0 +1,23 @@ +/* +文件名:swordman_load_state.nut +路径:character/swordman_load_state.nut +创建日期:2022-09-09 19:23 +文件用途:鬼剑士技能声明文件 +*/ +/* +//鬼剑士13号状态 +IRDSQRCharacter.pushState(0, "character/swordman/swordman13state.nut", "swordman13State", 13, -1); +//鬼剑士PO文件声明 +//IRDSQRCharacter.pushPassiveObj("character/swordman/swordman_po.nut", 24370); + + + +//------------------------------------剑魂-------------------------------// +//极神剑术 · 流星落 +IRDSQRCharacter.pushState(0, "character/swordman/weaponmaster/meteorsword.nut", "meteorsword", 235, 235); +//dofile("Sqr/character/Swordman/WeaponMaster/ap_Meteorsword.nut"); +*/ + + + +//IRDSQRCharacter.pushPassiveObj("character/swordman/swordman_po.nut", 20001); \ No newline at end of file diff --git a/common.nut b/common.nut new file mode 100644 index 0000000..96a3bd8 --- /dev/null +++ b/common.nut @@ -0,0 +1,665 @@ +DEBUG <- isDebugMode(); +NULL <- null; + + +// 蝶鉴溯涟击 鼻蝓卫郦朝 ?热 睡碟殓栖棻..?姜 蝶鉴缣 渠?怃 翕晦??捡?朝 蝶鉴桧 毡棻贼 桧够缣怃 籀葬?鄹栖棻.. +// 蝶鉴 掘殓 偃摹戏煎 flag 樯濠陛 跷陛肾历蝗栖棻. +// flag朝 0桧贼 蝶鉴溯涟-, 1桧贼 蝶鉴溯涟+蒂 ?卫?朝 高殓栖棻. +function requestBuy(obj, skill, nIndex, flag, count) +{ + if(sq_getJob(obj) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(obj) == GROW_TYPE_AVENGER) { // 横渐荡塭贼 翕晦??捡? 蝶鉴桧 毡蝗栖棻.. + if(nIndex == SKILL_AVENGER_AWAKENING) { // 陕撩 菸蝶陛蛤树桧 蝶鉴溯涟机桧 肾贼.. + //print("\n requestBuy(obj, skill, nIndex, count) \n" + count); + sq_requestBuySkill(SKILL_EXECUTION, flag, count); // 籀?紫 伪桧 溯涟机击 卫面鄹栖棻.. + } + } + + return true; +} + +// squirrel passiveobject 奢鳝 属寥?热 睡碟殓栖棻..横渐荡陛 嬴棋 赅苌 议葛搅暧 ?卫粽螃粽薛?陛 菟横褫栖棻.. +function onAttack_PassiveObject(passiveobj, damager, bounding_box, is_stuck) +{ + if(!passiveobj) return -1; + + if(passiveobj) { + local pChr = passiveobj.getTopCharacter(); + + if(!isGrowTypeAvenger(pChr)) return -1; // 横渐螳陛 棻挤戏煎 霞?肾怃朝 寰腌栖棻.. + + if(pChr) { + // ?卫粽螃粽薛? 奢问酝缣 等网蝶?塭桧醴 奢问擎 狸捡?棻..桧勘煎 奢问?朝等 桧勘煎 醱瞪桧 肾贼 堆坞?虽 强朝陛.. + // 24104 `Character/Priest/DevilStrike1.obj` // 横渐荡 - 等网蝶?塭桧醴 奢问1 + // 24105 `Character/Priest/DevilStrike2.obj` // 横渐荡 - 等网蝶?塭桧醴 奢问2 + // 24106 `Character/Priest/DevilStrike3.obj` // 横渐荡 - 等网蝶?塭桧醴 奢问3 + + if(passiveobj.getPassiveObjectIndex() != 24104 && passiveobj.getPassiveObjectIndex() != 24105 && + passiveobj.getPassiveObjectIndex() != 24106) + procDevilStrikeGauge(pChr, passiveobj.getPassiveObjectIndex()); // 横渐荡 state蒂 羹觼?罹 醱瞪桧 ?蹂? 鼻鹧塭贼 学葆啪桧虽蒂 醱瞪卫面鄹栖棻.. + } + } + + return 1; +} + + +// 议葛搅 摹鸥玺缣 轿溘肾朝 瞪霜?娄 斜葬晦 +function drawGrowAvatarAniType(job, growtype, x, y, isOver, is_draw) +{ + //print("\n drawGrowAvatarAniType:" + job + " growtype:" + growtype); + if(job == ENUM_CHARACTERJOB_PRIEST && growtype == GROW_TYPE_AVENGER) { + if(isOver == true && is_draw == true) { + local getvar = CNAvenger.getStaticVar(); + + local auraAni = null; + if(getvar) { + auraAni = getvar.GetAnimationMap("1_aura_normal", "Character/Priest/Effect/Animation/ScytheMastery/1_aura_normal.ani"); + } + + //print("\n isOver:" + isOver + " is_draw:" + is_draw); + + sq_AnimationProc(auraAni); + sq_drawCurrentFrame(auraAni, x, y, false); + } + } +} + +// 葆击缣怃 斜溥虽朝 瞪霜?娄 斜葬晦 +function drawAppend_VirtualCharacter(job, growtype, x, y, isOver, is_draw) +{ + if(job == ENUM_CHARACTERJOB_PRIEST && growtype == GROW_TYPE_AVENGER) { + if(isOver == true) { + local getvar = CNAvenger.getStaticVar(); + + local auraAni = null; + if(getvar) { + auraAni = getvar.GetAnimationMap("1_aura_normal", "Character/Priest/Effect/Animation/ScytheMastery/1_aura_normal.ani"); + } + + //print("\n isOver:" + isOver + " is_draw:" + is_draw); + + sq_AnimationProc(auraAni); + sq_drawCurrentFrame(auraAni, x, y, false); + } + } +} + +function sqr_CreatePooledObject(obj, ani_filename, x, y, z, dir) +{ + if(!obj) return; + + local ani = obj.sq_createCNRDAnimation(ani_filename); // [create draw only object] 蒂 噙贼 寰肾晦 阳侥缣 桧够缣 跷陛?捡?栖棻.. + local pooledObj = obj.sq_createCNRDPooledObject(ani, true); + if(pooledObj) { + // 15 -2 75 + pooledObj.setCurrentDirection(dir); + pooledObj.setCurrentPos(x, y, z); + obj.sq_AddObject(pooledObj); + } +} + +// 剩啖虽朝 state?塭嘐搅陛 ?颤樯虽 羹觼 +function sqr_IsNormalAttack(state) +{ +//STATE_ATTACK <- 8 // 奢问 +//STATE_JUMP_ATTACK <- 7 // 薄? +//STATE_DASH_ATTACK <- 15 // 渠莲 横鸥 + if(state == STATE_ATTACK || state == STATE_JUMP_ATTACK || state == STATE_DASH_ATTACK) { + return true; + } + + return false; +} + +// 蝶鉴 饵辨 亵遽 葬模蝶 煎注?朝 睡碟击 跷陛?艘蝗栖棻. 蒙机濠: 姜霞热 (11.11.22) +// 葬欐高擎 crndanimation* 殓栖棻. +function CreateAimPointMark(parentObj) +{ + local job = sq_getJob(parentObj); + local ani = null; + + if(job == ENUM_CHARACTERJOB_AT_MAGE) + { + ani = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMark.ani"); + ani.setRGBA(0, 78, 255, 255); + } + + return ani; +} + +function CNAimPointMarkCustomAnimation(obj, parentObj) +{ + if(!obj) + return false; + + local job = sq_getJob(parentObj); + + if(job == ENUM_CHARACTERJOB_AT_MAGE) + { + local ani1 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkDisable.ani"); + local ani2 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkVanish.ani"); + local ani3 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkDisableVanish.ani"); + local ani4 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkEnable.ani"); + + if(ani1 && ani2 && ani3 && ani4) + { + ani1.setRGBA(0, 78, 255, 255); + ani2.setRGBA(0, 78, 255, 255); + ani3.setRGBA(0, 78, 255, 255); + ani4.setRGBA(0, 78, 255, 255); + + obj.addCustomAnimation(ani1); + obj.addCustomAnimation(ani2); + obj.addCustomAnimation(ani3); + obj.addCustomAnimation(ani4); + + return true; + } + } + + return false; +} + +// aim颤啃 遗霜橾 热 毚朝 彰嫔蒂 姜?朝 ?热殓栖棻. +function isMovablePos_CNAimPointMark(obj, parentObj, xPos, yPos) +{ + if(!obj) + return true; + + if(!parentObj) + return true; + + local job = sq_getJob(parentObj); + + if(job == ENUM_CHARACTERJOB_AT_MAGE) + { + return sq_IsMovablePosCollisionObject(parentObj, xPos, yPos); + } + + return true; +} + +// 虽旎 瞪瘫赅萄樯虽 羹觼?朝 ?热殓栖棻. +function isBattleMode() +{ + local isPvpMode = checkModuleType(MODULE_TYPE_PVP_TYPE); + local isDungeonMode = checkModuleType(MODULE_TYPE_DUNGEON_TYPE); + + print(" isPvpMode:" + isPvpMode + " isDungeonMode:" + isDungeonMode); + + if(!isPvpMode && !isDungeonMode) + { // 瞪瘫酝桧 嬴栖塭贼 + return false; + } + + return true; +} + +SKILL_HARD_ATTACK <- 5; +SKILL_TRIPLE_SLASH <- 8; +SKILL_MOMENTARY_SLASH <- 9; +SKILL_ASHEN_FORK <- 16; +SKILL_JUMP_ATTACK_MULTI <- 17; +SKILL_NORMAL_WAVE <- 20; +SKILL_ICE_WAVE <- 21; +SKILL_DARK_FRIENDSHIP <- 29; +SKILL_GRAB_BLAST_BLOOD <- 31; +SKILL_UPPER_SLASH <- 46; +SKILL_VANE_SLASH <- 58; +SKILL_GHOST_STEP_SLASH <- 60; +SKILL_GORE_CROSS <- 64; +SKILL_HOP_SMASH <- 65; +SKILL_CHARGE_CRASH <- 68; +SKILL_RAPID_MOVE_SLASH <- 72; +SKILL_ILLUSION_SLASH <- 73; +SKILL_WAVE_SPIN_AREA <- 74; +SKILL_MOONLIGHT_SLASH <- 77; +SKILL_BLOODY_RAVE <- 79; +SKILL_OUT_RAGE_BREAK <- 81; +SKILL_KALLA <- 82; +SKILL_FLOW_MIND <- 105; + +SKILL_SHOCK_WAVE_AREA <- 57; +SKILL_GRAND_WAVE <- 50; +SKILL_REFLECT_GUARD <- 2; +SKILL_TRIPLE_STAB <- 112; +SKILL_GHOST_SIDE_WIND <- 111; + + +// 葆匐饵 蝶鉴 桧?? 缣栖诡桧暮 煎萄 +function sq_LoadSkillEffect_DemonicSwordman(obj, skillIndex) +{ + if (skillIndex == SKILL_GHOST_SIDE_WIND) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostSideWind_DS/00_sword_normal.ani"); // ghostSideWindAnimations_ 0 + } + else if (skillIndex == SKILL_HARD_ATTACK) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/HardAttack1_DS.ani"); // hardAttackEffects_ 0 + } + else if(skillIndex == SKILL_ICE_WAVE) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash_DS/Move1.ani"); // 0 : rapidMoveSlashMoveAnimations_[0] + } + else if (skillIndex == SKILL_RAPID_MOVE_SLASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash_DS/Move1.ani"); // 0 : rapidMoveSlashMoveAnimations_[0] + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash_DS/Move2.ani"); // 1 : rapidMoveSlashMoveAnimations_[1] + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash_DS/Slash1.ani"); // 2 : rapidMoveSlashSlashAnimations_[0] + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash_DS/Slash2.ani"); // 3 : rapidMoveSlashSlashAnimations_[1] + } + else if (skillIndex == SKILL_GHOST_STEP_SLASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostStepSlash_DS/Move.ani"); // 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostStepSlash_DS/Slash1.ani"); // 1 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostStepSlash_DS/Slash2.ani"); // 2 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostStepSlash_DS/Skull.ani"); // 3 + } + else if (skillIndex == SKILL_TRIPLE_SLASH) + { + // 钦奢溜 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash_DS/Slash1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash_DS/Slash2.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash_DS/Slash3.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash_DS/Slash4.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash_DS/Slash5.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash_DS/Move1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash_DS/Move2.ani"); + } + else if (skillIndex == SKILL_MOMENTARY_SLASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_none_under.ani"); //0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash_DS/momentaryslash_blue_ldodge_under.ani"); //1 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_none_upper.ani"); //2 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash_DS/momentaryslash_blue_ldodge_upper.ani"); //3 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_white_ldodge_under.ani"); //4 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_white_ldodge_upper.ani"); //5 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_red_ldodge_under.ani"); //6 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_red_ldodge_upper.ani"); //7 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/Charge1.ani"); //8 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/Charge2.ani"); //9 + } + else if (skillIndex == SKILL_ASHEN_FORK) + { + // 缣膘?觼 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackHold_DS.ani"); + } + else if (skillIndex == SKILL_JUMP_ATTACK_MULTI) + { + // 奢酝 翱楼漆晦 + // jumpAttackMultiSlash1Sword_ + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattackslash1_katana_under.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattackslash1_katana_upper.ani"); + // jumpAttackMultiSlash2Sword_ + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattackslash2_katana_under.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattackslash2_katana_upper.ani"); + // jumpAttackMultiSlashSwordUnderEffects_ + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattackslash1_under_effect.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattackslash2_under_effect.ani"); + // jumpAttackMultiSlashSwordUpperEffects_ + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattackslash1_upper_effect.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattackslash2_upper_effect.ani"); + + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti_DS/jumpchainattacknormal_upper_effect.ani"); + } + else if (skillIndex == SKILL_NORMAL_WAVE) + { + // ?翕匐 虽翮 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/NormalWaveSlash_DS.ani"); + } + else if (skillIndex == SKILL_GRAB_BLAST_BLOOD) + { + // 绾楝萄 楝蝶? + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GrabBlastBlood_DS.ani"); + } + else if (skillIndex == SKILL_UPPER_SLASH) + { + // 横?蜗楚莲 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/UpperSlash1_DS.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/UpperSlash2_DS.ani"); + } + else if (skillIndex == SKILL_VANE_SLASH) + { + // 翮?溜 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/VaneSlash_DS/Upper.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/VaneSlash_DS/Dust.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/VaneSlash_DS/Smash.ani"); + } + else if (skillIndex == SKILL_GORE_CROSS) + { + // 坚横觼煎蝶 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GoreCross_DS/Slash1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GoreCross_DS/Slash2.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GoreCross_DS/Slash3.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GoreCross_DS/Slash4.ani"); + } + else if (skillIndex == SKILL_HOP_SMASH) + { + // 种肮问 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/HopSmash_DS/Sword.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/HopSmash_DS/Smash.ani"); + } + else if (skillIndex == SKILL_MOONLIGHT_SLASH) + { + // 殖维漆晦 + // 虏错 殖维漆晦 : MoonlightSlashFull.ani : 葆匐饵朝 饵辨?虽 强挤. + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MoonlightSlash1_DS.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MoonlightSlash2_DS.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MoonlightSlashFull.ani"); + } + else if (skillIndex == SKILL_BLOODY_RAVE) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Start1.ani"); // bloodyRaveStartAnis_ 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Start2.ani"); // bloodyRaveStartAnis_ 1 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Loop1.ani"); // bloodyRaveLoopAnis_ 2 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Loop2.ani"); // bloodyRaveLoopAnis_ 3 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Line1.ani"); // bloodyRaveLineAnis_ 4 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Line2.ani"); // bloodyRaveLineAnis_ 5 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Typhoon.ani"); // bloodyRaveTyphoonAni_ 6 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/End.ani"); // bloodyRaveEndAni_ 7 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Sword1.ani"); // bloodyRaveSwordAnis_ 8 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Sword2.ani"); // bloodyRaveSwordAnis_ 9 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Sword3.ani"); // bloodyRaveSwordAnis_ 10 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Sword4.ani"); // bloodyRaveSwordAnis_ 11 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/(TN)Sword2.ani"); // bloodyRaveSwordAnis_ 12 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/(TN)Sword4.ani"); // bloodyRaveSwordAnis_ 13 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave_DS/Hit.ani"); // 14 + } + else if (skillIndex == SKILL_OUT_RAGE_BREAK) + { + // 嬴醒溯桧虽 粽溯桧觼 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak_DS/sword_ready_ldodge.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak_DS/sword_ready_none.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak_DS/sword_slash_ldodge.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak_DS/sword_slash_none.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak_DS/sword_slash_impact_ldodge.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak_DS/sword_slash_impact_none.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak_DS/sword_slash_stone.ani"); + } + else if (skillIndex == SKILL_KALLA) + { + local i = 1; + for(; i <= 4 ; ++i) + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/Kalla_DS/FinishReady" + i + ".ani"); // 0~3 + + for(local j = 1 ; j <= 3 ; ++j) + { + for(i = 1 ; i <= 4 ; ++i) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/Kalla_DS/Finish" + j + "-" + i + ".ani"); // 4~16 + } + } + } + else if (skillIndex == SKILL_WAVE_SPIN_AREA) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/WaveSpinArea_DS/Circle.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/WaveSpinArea_DS/CircleFront.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/WaveSpinArea_DS/CircleBack.ani"); + } + else if (skillIndex == SKILL_CHARGE_CRASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash_DS/dash.ani"); // 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash_DS/up-slash.ani"); // 1 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash_DS/charge.ani"); // 2 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash_DS/down-slash.ani"); // 3 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash_DS/dustdash.ani"); // 4 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash_DS/dustdashlast.ani"); // 5 + } + else if (skillIndex == SKILL_ILLUSION_SLASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/IllusionSlash_DS/Upper.ani"); // 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/IllusionSlash_DS/Smash.ani"); // 1 + } + else if (skillIndex == SKILL_SHOCK_WAVE_AREA) + { + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ShockWaveArea_DS/Cast.ani"); + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ShockWaveArea_DS/Smash.ani"); + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ShockWaveArea_DS/Area.ani"); + } + else if (skillIndex == SKILL_GRAND_WAVE) + { + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/grandWaveOnCharge1.ani"); // 0 + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/grandWaveOnCharge2.ani"); // 1 + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/grandWave_DS.ani"); // 2 + } + else if (skillIndex == SKILL_REFLECT_GUARD) + { + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ReflectGuard_DS/charge.ani"); + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ReflectGuard_DS/slash.ani"); + } + +} + + +// 敝匐饵 蝶鉴 桧?? 缣栖诡桧暮 煎萄 +function sq_LoadSkillEffect_Swordman(obj, skillIndex) +{ + if (skillIndex == SKILL_GHOST_SIDE_WIND) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostSideWind/00_sword_normal.ani"); // ghostSideWindAnimations_ 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostSideWind/01_sword_dodge.ani"); // ghostSideWindAnimations_ 1 + } + else if (skillIndex == SKILL_HARD_ATTACK) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/HardAttack1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/HardAttack2.ani"); + } + else if (skillIndex == SKILL_RAPID_MOVE_SLASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash/Move1.ani"); // 0 : rapidMoveSlashMoveAnimations_[0] + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash/Move2.ani"); // 1 : rapidMoveSlashMoveAnimations_[1] + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash/Slash1.ani"); // 2 : rapidMoveSlashSlashAnimations_[0] + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/RapidMoveSlash/Slash2.ani"); // 3 : rapidMoveSlashSlashAnimations_[1] + } + else if (skillIndex == SKILL_GHOST_STEP_SLASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostStepSlash/Move.ani"); // 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostStepSlash/Slash1.ani"); // 1 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostStepSlash/Slash2.ani"); // 2 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GhostStepSlash/Skull.ani"); // 2 + + } + else if (skillIndex == SKILL_TRIPLE_SLASH) + { + // 钦奢溜 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash/Slash1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash/Slash2.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash/Slash3.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash/Slash4.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash/Slash5.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash/Move1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/TripleSlash/Move2.ani"); + } + else if (skillIndex == SKILL_MOMENTARY_SLASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_none_under.ani"); //0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_blue_ldodge_under.ani"); //1 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_none_upper.ani"); //2 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_blue_ldodge_upper.ani"); //3 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_white_ldodge_under.ani"); //4 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_white_ldodge_upper.ani"); //5 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_red_ldodge_under.ani"); //6 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/momentaryslash_red_ldodge_upper.ani"); //7 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/Charge1.ani"); //8 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MomentarySlash/Charge2.ani"); //9 + } + else if (skillIndex == SKILL_ASHEN_FORK) + { + // 缣膘?觼 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackHold.ani"); + } + else if (skillIndex == SKILL_JUMP_ATTACK_MULTI) + { + // 奢酝 翱楼漆晦 + // jumpAttackMultiSlash1Sword_ + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattackslash1_katana_under.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattackslash1_katana_upper.ani"); + // jumpAttackMultiSlash2Sword_ + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattackslash2_katana_under.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattackslash2_katana_upper.ani"); + // jumpAttackMultiSlashSwordUnderEffects_ + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattackslash1_under_effect.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattackslash2_under_effect.ani"); + // jumpAttackMultiSlashSwordUpperEffects_ + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattackslash1_upper_effect.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattackslash2_upper_effect.ani"); + + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/JumpAttackMulti/jumpchainattacknormal_upper_effect.ani"); + } + else if (skillIndex == SKILL_NORMAL_WAVE) + { + // ?翕匐 虽翮 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/NormalWaveSlash.ani"); + } + else if (skillIndex == SKILL_GRAB_BLAST_BLOOD) + { + // 绾楝萄 楝蝶? + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GrabBlastBlood.ani"); + } + else if (skillIndex == SKILL_UPPER_SLASH) + { + // 横?蜗楚莲 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/UpperSlash1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/UpperSlash2.ani"); + } + else if (skillIndex == SKILL_VANE_SLASH) + { + // 翮?溜 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/VaneSlash/Upper.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/VaneSlash/Dust.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/VaneSlash/Smash.ani"); + } + else if (skillIndex == SKILL_GORE_CROSS) + { + // 坚横觼煎蝶 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GoreCross/Slash1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GoreCross/Slash2.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GoreCross/Slash3.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/GoreCross/Slash4.ani"); + } + else if (skillIndex == SKILL_HOP_SMASH) + { + // 种肮问 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/HopSmash/Sword.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/HopSmash/Smash.ani"); + } + else if (skillIndex == SKILL_MOONLIGHT_SLASH) + { + // 殖维漆晦 + // 虏错 殖维漆晦 : MoonlightSlashFull.ani : 葆匐饵朝 饵辨?虽 强挤. + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MoonlightSlash1.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MoonlightSlash2.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/MoonlightSlashFull.ani"); + } + else if (skillIndex == SKILL_BLOODY_RAVE) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Start1.ani"); // bloodyRaveStartAnis_ 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Start2.ani"); // bloodyRaveStartAnis_ 1 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Loop1.ani"); // bloodyRaveLoopAnis_ 2 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Loop2.ani"); // bloodyRaveLoopAnis_ 3 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Line1.ani"); // bloodyRaveLineAnis_ 4 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Line2.ani"); // bloodyRaveLineAnis_ 5 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Typhoon.ani"); // bloodyRaveTyphoonAni_ 6 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/End.ani"); // bloodyRaveEndAni_ 7 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Sword1.ani"); // bloodyRaveSwordAnis_ 8 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Sword2.ani"); // bloodyRaveSwordAnis_ 9 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Sword3.ani"); // bloodyRaveSwordAnis_ 10 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Sword4.ani"); // bloodyRaveSwordAnis_ 11 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/(TN)Sword2.ani"); // bloodyRaveSwordAnis_ 12 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/(TN)Sword4.ani"); // bloodyRaveSwordAnis_ 13 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/BloodyRave/Hit.ani"); // 14 + } + else if (skillIndex == SKILL_OUT_RAGE_BREAK) + { + // 嬴醒溯桧虽 粽溯桧觼 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak/sword_ready_ldodge.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak/sword_ready_none.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak/sword_slash_ldodge.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak/sword_slash_none.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak/sword_slash_impact_ldodge.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak/sword_slash_impact_none.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/OutRageBreak/sword_slash_stone.ani"); + } + else if (skillIndex == SKILL_KALLA) + { + for(local i = 1 ; i <= 4 ; ++i) + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/Kalla/FinishReady" + i + ".ani"); // 0~3 + + for(local j = 1 ; j <= 3 ; ++j) + for(local i = 1 ; i <= 4 ; ++i) + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/Kalla/Finish" + j + "-" + i + ".ani"); // 0~3 + } + else if (skillIndex == SKILL_WAVE_SPIN_AREA) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/WaveSpinArea/Circle.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/WaveSpinArea/CircleFront.ani"); + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/WaveSpinArea/CircleBack.ani"); + } + else if (skillIndex == SKILL_CHARGE_CRASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash/dash.ani"); // 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash/up-slash.ani"); // 1 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash/charge.ani"); // 2 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash/down-slash.ani"); // 3 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash/dustdash.ani"); // 4 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/ChargeCrash/dustdashlast.ani"); // 5 + } + else if (skillIndex == SKILL_ILLUSION_SLASH) + { + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/IllusionSlash/Upper.ani"); // 0 + obj.sq_LoadSkillEffectAni(skillIndex, "Effect/Animation/IllusionSlash/Smash.ani"); // 1 + } + else if (skillIndex == SKILL_SHOCK_WAVE_AREA) + { + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ShockWaveArea/Cast.ani"); + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ShockWaveArea/Smash.ani"); + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ShockWaveArea/Area.ani"); + } + else if (skillIndex == SKILL_GRAND_WAVE) + { + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/grandWaveOnCharge1.ani"); // 0 + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/grandWaveOnCharge2.ani"); // 1 + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/grandWave.ani"); // 2 + } + else if (skillIndex == SKILL_REFLECT_GUARD) + { + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ReflectGuard/charge.ani"); + obj.sq_LoadSkillEffectAni(skillIndex,"Effect/Animation/ReflectGuard/slash.ani"); + } +} + + +function getDist2(x1, y1, x2, y2) +{ + local i = 0; + + local dx = x1 - x2; + + local dy = y1 - y2; + + local sum = (dx * dx) + (dy * dy); + + if (dx < 0) + dx = -dx; + + if (dy < 0) + dy = -dy; + + if (dx > dy) + i = dx; + else + i = dy; + + while ((i * i) < sum) + { + i = i + 2; + } + + i = i - 1; + + if ((i * i) < sum) + i = i + 1; + + return i; + +} diff --git a/dnf_enum_header.nut b/dnf_enum_header.nut new file mode 100644 index 0000000..2542468 --- /dev/null +++ b/dnf_enum_header.nut @@ -0,0 +1,1411 @@ +// 湍?模蝶顶 enum高击 squirrel script缣怃紫 饵辨?晦 嫔? 渗??场擎 高菟殓栖棻. +// 牖热 蝶觼董?煎 蒙机?贼怃 跷陛?捡? 高菟桧 毡棻贼.. 陕 霜机_header.nut?橾缣 鸢殓?舆撮蹂.. 桧够缣 跷陛旎虽 +L_sq_OpenConsole("倾泪寒测试用"); +InitDofile <- true +ArtDofile <- false +//---@原生类拓展 +// dofile("sqr/NativeClassInit/IRDActiveObject.nut");//动态对象 +// dofile("sqr/NativeClassInit/IRDAICharacter.nut");//APC对象 +// dofile("sqr/NativeClassInit/IRDSQRCharacter.nut");//人物对象 + +LANDTYPE_GRASS <- 0 // ?宁 +LANDTYPE_WETGRASS <- 1 // 僭缣 ?擎 ?宁 +LANDTYPE_SWAMP <- 2 // 森虽暧 嫔 +LANDTYPE_POISONSWAMP <- 3 // 絮森虽暧 嫔 +LANDTYPE_BROWNDIRT <- 4 // 陞仪 ?宁 +LANDTYPE_BLUEDIRT <- 5 // ?艇 ?宁 +LANDTYPE_BONEYARD <- 6 // 鄙亵陕菟暧 嫔 +LANDTYPE_WATER <- 7 // 僭楼 +LANDTYPE_MAGMA <- 8 // 辨檩 嫔 +LANDTYPE_SNOW <- 9 // 换 嫔 +LANDTYPE_RED_SWAMP <- 10 +LANDTYPE_PURPLE_POISONSWAMP <- 11 // 尔塭仪 絮森 +LANDPARTICLE_DOWNLARGE <- 0 +LANDPARTICLE_DOWNSMALL <- 1 +LANDPARTICLE_MOVE <- 2 +LANDSOUND_JUMPSTART <- 0 +LANDSOUND_JUMPLAND <- 1 +LANDSOUND_MOVE <- 2 +LANDSOUND_DASH <- 3 +LANDSOUND_BACKSTEP <- 4 +LANDSOUND_FASTTHROUGH <- 5 + +CATEGORY_TRIBE_HUMAN <- 0 // 樯除? +CATEGORY_TRIBE_BEAST <- 1 // 捡热 +CATEGORY_TRIBE_PLANT <- 2 // 冲僭 +CATEGORY_TRIBE_INSECT <- 3 // 堆醱 +CATEGORY_TRIBE_MACHINE <- 4 // 晦啗 +CATEGORY_TRIBE_ORGANIC <- 5 // 嵘晦羹 +CATEGORY_TRIBE_HYBRID <- 6 // 犒?羹 +CATEGORY_TRIBE_UNDEAD <- 7 // 树等萄 +CATEGORY_TRIBE_DEVIL <- 8 // 学葆 +CATEGORY_TRIBE_SPIRIT <- 9 // 姜沧 +CATEGORY_TRIBE_DRAGON <- 10 // 辨褶 +CATEGORY_AI_MELEE_ATTACK <- 11 // 蕾斩瞪辨 跨蝶搅 +CATEGORY_AI_RANGE_ATTACK <- 12 // 饵问瞪辨 跨蝶搅 +CATEGORY_AI_NEGATIVE <- 13 // 模斛瞳樯 跨蝶搅 +CATEGORY_AI_CAREFUL <- 14 // 舆暧桶擎 跨蝶搅 +CATEGORY_AI_FULLSUPERARMOR <- 15 // 蕾斩AI 荡给,嫔? 跨蝶搅橾阳 ?蓬?嬴该 (跨蝶搅 偃?缣 AI category陛 饵塭虽嘎煎 濡卫 厥横菩 ?迹歜) `08. 02, 20 歜热? +CATEGORY_AI_RASH <- 16 // 荡给瞳樯 跨蝶搅 +CATEGORY_AI_MANACE <- 17 // 嫔?瞳樯 跨蝶搅 +CATEGORY_ARMOR_HUMAN <- 18 // 樯除 嬴该 (髦鼻 褫暮 瞳辨) +CATEGORY_ARMOR_FORT <- 19 // 勒僭 嬴该 (?惚 褫暮 瞳辨) +CATEGORY_ARMOR_DIVINE <- 20 // 撩沧 嬴该 (寞横溘 绿擒瞳 隶陛) +CATEGORY_ETC_GOBLIN <- 21 // 坚绾萼 +CATEGORY_ETC_TAU <- 22 // 颤办 +CATEGORY_ETC_LUGARU <- 23 // 瑞陛瑞 +CATEGORY_ETC_FIXTURE <- 24 // 称梦桧? (?葬馨樯 煤 蛔缣 暧? 庄溥螃虽 强朝棻) +CATEGORY_ETC_STAY <- 25 // 蟾晦 嫔纂缣怃 遗霜桧虽 强挤 +CATEGORY_PASSIVEOBJECT_TYPE_MELEE <- 26 +CATEGORY_PASSIVEOBJECT_TYPE_MISSILE <- 27 +CATEGORY_PASSIVEOBJECT_TYPE_ENERGY <- 28 +CATEGORY_PASSIVEOBJECT_TYPE_PHYSICAL <- 29 +CATEGORY_PASSIVEOBJECT_TYPE_MAGICAL <- 30 +CATEGORY_PASSIVEOBJECT_TYPE_BULLET <- 31 +CATEGORY_PASSIVEOBJECT_TYPE_CANON <- 32 +CATEGORY_PASSIVEOBJECT_TYPE_EXPLOSION <- 33 +CATEGORY_PASSIVEOBJECT_TYPE_INFLAME <- 34 +CATEGORY_PASSIVEOBJECT_TYPE_NONINFLAME <- 35 +CATEGORY_PASSIVEOBJECT_TYPE_LIGHT <- 36 +CATEGORY_PASSIVEOBJECT_TYPE_DARK <- 37 +CATEGORY_PASSIVEOBJECT_TYPE_WATER <- 38 +CATEGORY_PASSIVEOBJECT_TYPE_FIRE <- 39 +CATEGORY_PASSIVEOBJECT_TYPE_FORT <- 40 +CATEGORY_ETC_UNBEATABLE <- 41 // 鼠瞳, 斜楝釭 檩?暧 侥潍 横?蛤虽缣 勘萼 吃桧贼 奢问陛栋 +CATEGORY_TRIBE_ANGEL <- 42 // 茧饵 +CATEGORY_MAX <- 43 + +DOWN_PARAM_TYPE_VALUE <- 0 // 嗑朝 堪桧谛 陈葬朝 楼紫蒂 厥朝棻. +DOWN_PARAM_TYPE_FORCE <- 1 // ?击 厥朝棻. +DOWN_PARAM_TYPE_BOUNCE_VALUE <- 2 // 夥遴蝶. 高击 厥虽虏 夥煎 噙虽 强坚 阶缣 ?望 阳 当棻. +DOWN_PARAM_TYPE_BOUNCE_FORCE <- 3 // 夥遴蝶. ?击 厥虽虏 夥煎 噙虽 强坚 阶缣 ?望 阳 当棻. +DOWN_PARAM_TYPE_BOUNCE <- 4 // 夥遴蝶. ?击 厥虽虏 夥煎 噙虽 强坚 阶缣 ?望 阳 当棻. + +ENUM_DIRECTION_LEFT <- 0 +ENUM_DIRECTION_RIGHT <- 1 +ENUM_DIRECTION_UP <- 2 +ENUM_DIRECTION_DOWN <- 3 +ENUM_DIRECTION_NEUTRAL <- 4 +ENUM_DIRECTION_MAX <- 5 + +GRAPHICEFFECT_NONE <- 0 // 桡挤 +GRAPHICEFFECT_DODGE <- 1 // 游虽 +GRAPHICEFFECT_LINEARDODGE <- 2 // 葬栖横 游虽 +GRAPHICEFFECT_DARK <- 3 // 棻觼 +GRAPHICEFFECT_XOR <- 4 // XOR +GRAPHICEFFECT_MONOCHROME <- 5 // 钦仪 +GRAPHICEFFECT_SPACE_DISTORT <- 6 // 奢除谖垩 +GRAPHICEFFECT_MAX <- 7 + +ENUM_DRAWLAYER_CONTACT <- 0 // 蕾唳 溯桧横 +ENUM_DRAWLAYER_NORMAL <- 1 // 橾奁 溯桧横 +ENUM_DRAWLAYER_BOTTOM <- 2 // 夥款 溯桧横 +ENUM_DRAWLAYER_CLOSEBACK <- 3 // 斩唳 溯桧横 +ENUM_DRAWLAYER_MIDDLEBACK <- 4 // 酝唳 溯桧横 +ENUM_DRAWLAYER_DISTANTBACK <- 5 // 锰唳 溯桧横 +ENUM_DRAWLAYER_COVER <- 6 // ?贼击 竣朝 溯桧横 ex : Blind +ENUM_DRAWLAYER_MAX <- 7 + +STATE_STAND <- 0 // 怃毡晦, 桧翕 +STATE_SIT <- 1 // 导晦 (橾横釭晦 瞪) +STATE_SIT_FOREVER <- 2 // 导嬴毡晦 +STATE_DAMAGE <- 3 // 蜃晦 +STATE_DOWN <- 4 // 棻遴 +STATE_DIE <- 5 // 避晦 +STATE_JUMP <- 6 // 薄? +STATE_JUMP_ATTACK <- 7 // 薄? +STATE_ATTACK <- 8 // 奢问 +STATE_HOLD <- 9 // 翕蒙 碳栋 鼻鹧 +STATE_SUMMONSTART <- 10 // 模? 卫蒙 +STATE_SUMMONEND <- 11 // 模? 谏猿 +STATE_UNSUMMON <- 12 // 羲模?肾怃 饵塭飓 +STATE_THROW <- 13 // 瘫系 +STATE_DASH <- 14 // 渠莲 +STATE_DASH_ATTACK <- 15 // 渠莲 横鸥 +STATE_GET_ITEM <- 16 // 嬴桧蛊 鄹晦 +STATE_BUFF <- 17 // 帼? +STATE_QUICK_STANDING <- 18 // 摆蝶鼹注 +STATE_CROUCH <- 19 // 觼塭办纂 +STATE_CROUCH_ATTACK <- 20 // 觼塭办纂 横枭纂晦 +STATE_LOW_KICK <- 21 // 煎铸, 狱 觼楝敷, 饵煎铸 +STATE_TRY_GRAB <- 22 // 濩晦 卫紫 +STATE_SUPLEX <- 23 // 热?滓蝶 +STATE_JUMP_SUPLEX <- 24 // 蝶?桧横 +STATE_JUMP_SUPLEX_LARIAT <- 25 // 蝶?桧横 ?瞪 跷陛颤 +STATE_MOUNT_TRY <- 26 // 葆遴? 卫紫 +STATE_MOUNT <- 27 // 葆遴? +STATE_STOMP <- 28 // 嫖晦 +STATE_CLOSE_PUNCH <- 29 // 锰樯纂 ?纂 +STATE_LIFT_UPPER <- 30 // 鼠锷 横? +STATE_GRAB_EXPLOSION <- 31 // 橾嫦?擒撩 +STATE_VIRTUAL_ATTACK <- 32 // 橾奁 奢问 -> ?该铸 蛔击 嫔? 陛鼻 STATE +STATE_SHOULDER_TACKLE <- 33 // 浔涡 鹧赝 +STATE_WHIRL_WIND_KICK <- 34 // 摹?陕 +STATE_BLOCK_BUSTER <- 35 // 绾烟 帼蝶搅 +STATE_TRY_LEG_SUPLEX <- 36 // 缣横蓬颤桧伞 卫紫 +STATE_LEG_SUPLEX <- 37 // 缣横蓬颤桧伞 褒? +STATE_LIGHTNING_DANCE <- 38 // 塭桧?棚 渣蝶 +STATE_THROW_WEB <- 39 // 茧塭虽蜂 +STATE_HIDDEN_STING <- 40 // 夥棺 潍瞪(?苌蝶?) +STATE_VENOM_MINE <- 41 // 漆吃葆樯 +STATE_JUNK_SPIN <- 42 // 姜觼蝶? +STATE_SHOULDER_CHARGE <- 43 // 绎肮坚 +STATE_SINGLE_KICK <- 44 // ?该铸 +STATE_NEN_FLOWER <- 45 // 喧? +STATE_THROW_ENEMY <- 46 // 煎?葭 +STATE_DASH_PUNCH <- 47 // 姜掏 镐脑晦 +STATE_PUNCH_AFTER_RETURN <- 48 // 颤问? 庵煎给葬晦 +STATE_RANDOM_KICK <- 49 // 寥翮陕 陪颤 +STATE_RISING_UPPER <- 50 // 蝓瑟掏 +STATE_DASH_AFTER_DASH <- 51 // ?褐翱问 +STATE_EARTH_BREAK <- 52 // 旎鬼泼 +STATE_HOLD_UP <- 53 // ?萄机 +STATE_WILD_CANNON_SPIKE <- 54 // 谛橾萄 议喱 蝶?桧觼 +STATE_SUPLEX_CYCLONE <- 55 // 热?滓蝶 饵桧赝烦 +STATE_LIGHTNING_DRAGON <- 56 // 惜醱喻紫 +STATE_STRONGEST_LOW_KICK <- 57 // 饵鼻 譆鬼暧 煎铸 +STATE_GROUND_KICK <- 58 // 斜塭遴萄铸 +STATE_FAST_DASH <- 59 // 牖尔 +STATE_DESTROY_EARTH_SKY_DROP <- 60 // 蝶?葬? ?桧搅 陕撩晦 - 茧种虽惚 +STATE_TYPHOON <- 61 // 斜楚?楝 陕撩晦 +STATE_FLAME_LEGS <- 62 // 蝶?塭桧醴 陕撩晦 - ?腻暧陕 +STATE_THROW_SAND <- 63 // ?搅蝶寂搅 +STATE_ENCHANT_POISON <- 64 // 絮潍瞪 +STATE_SPIRAL_NEN_SHOOT <- 65 // 釭摹暧 喧 : 轿 +STATE_NEN_SPEAR_EX <- 66 // 喧 蝶?横(?撩) proc缣怃 ?楚斜1缣 跺 螃帼溯桧,?贼 ?楚莲 ?楚斜2 缣 笮?朝 横?蛤虽 模? +STATE_HURRICANE_SPEAR <- 67 // ?葬馨樯 蝶?横 (?撩) +STATE_CRASH_ROPE <- 68 // 惜??饵 (?撩) +STATE_CHARGE_SPEAR_EX <- 69 // 离虽 蝶?横(?撩) +STATE_SPIRAL_COLUMN_EX <- 70 // 釭摹?(?撩) +STATE_GLUEY_FRUIT_EX <- 71 // 莫瞳莫瞳 翮衙(?撩) +STATE_CHAIN_KICK_EX <- 72 // 翱?霉 (?撩) +STATE_108_STAIRS_EX <- 73 // 108啗钦 (?撩) +STATE_INHERIT_START <- 74 +STATE_MAX <- 75 + +SKILL_SHOULDER_CHARGE <- 1 // 001.绎肮坚 +SKILL_CROUCH <- 2 // 002.觼塭办纂 +SKILL_GRAB_EXPLOSION <- 3 // 003.橾嫦?擒撩 +SKILL_CRASH_LOW_KICK <- 4 // 004.狱 觼楝敷 +SKILL_LIFT_UPPER <- 5 // 005.鼠锷 横? +SKILL_DAMAGE_LOW_KICK <- 6 // 006.煎铸 +SKILL_PHYSICAL_DEFENSE_UP <- 7 // 007.绎旎鬼 +SKILL_CREATE_ILLUSION <- 8 // 008.碟褐 +SKILL_SUPLEX <- 9 // 009.热?滓蝶 +SKILL_BACK_SUPLEX <- 10 // 010.寥粽溯桧醴 +SKILL_THUNDER_SUPLEX <- 11 // 011.热?滓蝶 账涡 +SKILL_ENERGY_BALL <- 12 // 012.喧骄 +SKILL_THROW_SAND <- 13 // 013.?搅 蝶骚搅 +SKILL_MOUNT <- 14 // 014.葆遴? +SKILL_ROAR_STUN <- 15 // 015.饵濠? +SKILL_ENERGY_FIELD <- 16 // 016.晦奢潍 +SKILL_STOMP <- 17 // 017.奢酝 嫖晦 +SKILL_JUMP_SUPLEX <- 18 // 018.蝶?桧横 +SKILL_CLOSE_PUNCH <- 19 // 019.锰樯纂 ?纂 +SKILL_SUPER_ARMOR <- 20 // 020.蓬?嬴该 +SKILL_CANCEL_ENERGY_BALL <- 21 // 021.警蜗 喧骄 +SKILL_SUPLEX_SUB_POWER_UP <- 22 // 022.鬼溺? 才桧觼 棻遴 +SKILL_CANCEL_LIFT_UPPER <- 23 // 023.警蜗 鼠锷 横? +SKILL_CANCEL_LOW_KICK <- 24 // 024.警蜗 煎铸 +SKILL_CANCEL_THROW_SAND <- 25 // 025.警蜗 ?搅 蝶骚搅 +SKILL_CANCEL_CLOSE_PUNCH <- 26 // 026.警蜗 锰樯纂 ?纂 +SKILL_CANCEL_SUPLEX <- 27 // 027.警蜗 热?滓蝶 +SKILL_CANCEL_JUMP_SUPLEX <- 28 // 028.警蜗 蝶?桧横 +SKILL_LIGHT_FRIENDSHIP <- 29 // 029.维暧 耀? +SKILL_LIGHT_ENCHANT_WEAPON <- 30 // 030.苹桧 +SKILL_ATTACK_SPEED_UP <- 31 // 031.?撩? 獗念 +SKILL_POISON_TOLERANCE_UP <- 32 // 032.絮缣 栉熨? +SKILL_STUN_ON_USE_SKILL <- 33 // 033.舆?殓葆 +SKILL_EQUIP_BOXING_GLOVE <- 34 // 034.掏瘫旋楝粽 饵辨 陛栋 +SKILL_BLIND_TOLERANCE_UP <- 35 // 035.喧戏煎 替酗棻 +SKILL_LIGHT_TOLERANCE_UP <- 36 // 036.鹧晔暧 醴? +SKILL_SLOW_DOWN_POWER_UP <- 37 // 037.鬼掏 +SKILL_ENCHANT_POISON <- 38 // 038.絮 潍瞪(絮夥脑晦) +SKILL_AIM_VITAL_POINT <- 39 // 039.昼模 虽姜 +SKILL_SPIRAL_NEN <- 40 // 040.釭摹暧 喧 +SKILL_FLAME_LEGS <- 41 // 041.蝶?塭桧醴 陕撩晦 - ?腻暧陕 +SKILL_NEN_GUARD <- 42 // 042.喧陛萄 +SKILL_DOUBLE_THROW <- 43 // 043.桧酝 瘫系 +SKILL_PROVOCATION <- 44 // 044.紫嫦 +SKILL_CLAW_MASTERY <- 45 // 045.赝煎 葆蝶搅葬 +SKILL_SINGLE_KICK <- 46 // 046.?该 铸 +SKILL_CANCEL_SINGLE_KICK <- 47 // 047.警蜗 ?该 铸 +SKILL_CANCEL_GRAB_EXPLOSION <- 48 // 048.警蜗 橾嫦?擒撩 +SKILL_THROW_ENEMY <- 49 // 049.煎?葭 +SKILL_DEFINITE_GRAB <- 50 // 050.奁萄卫 濩朝棻! +SKILL_SLIDE_GRAB <- 51 // 051.蜗塭桧注 斜椰 +SKILL_THROW_WEB <- 52 // 052.茧塭虽蜂 +SKILL_CANCEL_THROW_ENEMY <- 53 // 053.警蜗 煎?葭 +SKILL_SHOULDER_TACKLE <- 54 // 054.浔涡 鹧赝 +SKILL_GRAB_CANNON <- 55 // 055.斜椰 议喱 +SKILL_ARMOR_MASTERY_LIGHT_SK <- 56 // 056.剩纂朝 ?暧 唳骨 葆蝶搅葬 +SKILL_ARMOR_MASTERY_LIGHT_GP <- 57 // 057.鬼樯? 斩撩暧 唳骨 葆蝶搅葬 +SKILL_WHIRL_WIND_KICK <- 58 // 058.韩?陕 +SKILL_CANCEL_WHIRL_WIND_KICK <- 59 // 059.警蜗 韩?陕 +SKILL_BLOCK_BUSTER <- 60 // 060.绾烟 帼蝶搅 +SKILL_CANCEL_THROW <- 61 // 061.警蜗 瘫系 +SKILL_LEG_SUPLEX <- 62 // 062.缣横蓬颤桧伞 +SKILL_TYPHOON <- 63 // 063.斜楚?楝 陕撩晦 +SKILL_DUMMY <- 64 // 064.饵辨?虽 强挤. +SKILL_EFFICIENT_BURN <- 65 // 065.蝶?塭桧搅 陕撩 ?卫粽 - ?徽瞳樯 翱模 +SKILL_GRAB_MASTERY <- 66 // 066.濩晦 葆蝶搅葬 +SKILL_NEN_FLOWER <- 67 // 067.喧? +SKILL_LIGHTNING_DANCE <- 68 // 068.塭桧?棚 渣蝶 +SKILL_ILLUSION_BOMB <- 69 // 069.?舱?泼 +SKILL_POWER_UP_ON_DASH <- 70 // 070.蝶龊?萄 +SKILL_STRONGEST_LOW_KICK <- 71 // 071.饵鼻譆鬼暧 煎铸 +SKILL_NEN_SHIELD <- 72 // 072.?陈葬朝 茧腻? +SKILL_ARMOR_MASTERY_HEAVY_SP <- 73 // 073.酝骨 葆蝶搅葬 +SKILL_CRAZY_MOUNT <- 74 // 074.虽埘 葆遴? +SKILL_HIDDEN_STING <- 75 // 075.?苌蝶? +SKILL_VENOM_MINE <- 76 // 076.漆吃葆樯 +SKILL_JUNK_SPIN <- 77 // 077.姜觼蝶? +SKILL_ENERGY_BALL_CHARGE <- 78 // 078.喧骄 赅嬴践晦 +SKILL_NEN_MONSTER_WHITE_TIGER <- 79 // 079.喧热 : 寥? +SKILL_DASH_PUNCH <- 80 // 080.姜掏镐脑晦 +SKILL_PUNCH_AFTER_RETURN <- 81 // 081.颤问? 庵煎给葬晦 +SKILL_RANDOM_KICK <- 82 // 082.寥翮陕 陪颤 +SKILL_RISING_UPPER <- 83 // 083.蝓瑟掏 +SKILL_DASH_AFTER_DASH <- 84 // 084.?褐翱问 +SKILL_DASH_AFTER_DASH_EXTENSION <- 85 // 085.?? +SKILL_EARTH_BREAK <- 86 // 086.旎鬼泼 +SKILL_HOLD_UP <- 87 // 087.?萄机 +SKILL_WILD_CANNON_SPIKE <- 88 // 088.谛橾萄 议喱 蝶?桧觼 +SKILL_SUPLEX_CYCLONE <- 89 // 089.热?滓蝶 饵桧赝烦 +SKILL_LIGHTNING_DRAGON <- 90 // 090.惜醱喻紫 +SKILL_MUSCLE_SHIFT <- 91 // 091.该蜗 卫?? +SKILL_CANCEL_EARTH_BREAK <- 92 // 092.警蜗 旎鬼泼 +SKILL_CANCEL_DASH_PUNCH <- 93 // 093.警蜗 种掏 +SKILL_CANCEL_SHOULDER_CHARGE <- 94 // 094.警蜗 绎肮坚 +SKILL_CANCEL_PUNCH_AFTER_RETURN <- 95 // 095.警蜗 颤问? 庵煎给葬晦 +SKILL_CANCEL_SUPLEX_CYCLONE <- 96 // 096.警蜗 热?滓蝶 饵桧赝烦 +SKILL_ARMOR_MASTERY_CLOTH_NM <- 97 // 097.茧 葆蝶搅葬:喧葆蝶搅 +SKILL_CANCEL_NEN_GUARD <- 98 // 098.警蜗 喧陛萄 +SKILL_CANCEL_ROAR_STUN <- 99 // 099.警蜗 饵濠? +SKILL_CANCEL_ENERGY_FIELD <- 100 // 100.警蜗 晦奢潍 +SKILL_CANCEL_ENCHANT_POISON <- 101 // 101.饵辨?虽 强挤. +SKILL_CANCEL_VENOM_MINE <- 102 // 102.警蜗 漆吃葆樯 +SKILL_CANCEL_RANDOM_KICK <- 103 // 103.警蜗 绿?萄塭桧粽 +SKILL_BLOCK_BUSTER_EX <- 104 // 104.绾烟 帼蝶搅[鬼?] +SKILL_DESTROY_EARTH_SKY_DROP <- 105 // 105.蝶?葬? ?桧搅 陕撩晦 - 茧种虽惚 +SKILL_GROUND_KICK <- 106 // 106.斜塭遴萄铸 +SKILL_CANCEL_GROUND_KICK <- 107 // 107.警蜗 斜塭遴萄铸 +SKILL_FAST_DASH <- 108 // 108.牖尔 +SKILL_SMART_THROW <- 109 // 除虽瘫系 模蝶 蒙机 - 姜霞热 +SKILL_AUTO_LOAD <- 110 // 110.濠翕潍瞪 +SKILL_SPIRAL_NEN_SHOOT <- 111 // 111.釭摹暧 喧 : 轿 +SKILL_SPIRAL_NEN_SPIN <- 112 // 112.釭摹暧 喧 : 舆 +SKILL_CANCEL_SPIRAL_NEN_SHOOT <- 113 // 113.警蜗 釭摹暧 喧 : 轿 +SKILL_NEN_POLE <- 114 // 114.喧暧 斛暧 +SKILL_TYPHOON_COUNTER_STRIKE <- 115 // 115.羲蝗 : 斜楚?楝 陕撩晦 ?卫粽 +SKILL_1000HANDS_1000EYES <- 116 // 116.茧热茧寰 : 蝶? 陕撩晦 ?卫粽 +SKILL_NEN_SPEAR_EX <- 117 // 117.喧 蝶?横(?撩) +SKILL_CHARGE_SPEAR_EX <- 118 // 118.离虽 蝶?横(?撩) +SKILL_GLUEY_FRUIT_EX <- 119 // 119.莫瞳莫瞳翮衙 (?撩) +SKILL_SPIRAL_COLUMN_EX <- 120 // 120.釭摹?(?撩) 姜霞热 +SKILL_108_STAIRS_EX <- 121 // 121.108啗钦 (?撩) +SKILL_HURRICANE_SPEAR <- 122 // 122.?葬馨樯 蝶?横 (?撩) +SKILL_CRASH_ROPE <- 123 // 123.惜??饵 (?撩) +SKILL_CHAIN_KICK_EX <- 124 // 124.翱?霉 (?撩) + +CUSTOM_ANI_CROUCH <- 0 // 觼塭办纂 翕蒙 +CUSTOM_ANI_CRASH_LOW_KICK <- 1 // 狱 觼楝敷 +CUSTOM_ANI_LIFT_UPPER <- 2 // 鼠锷 横? +CUSTOM_ANI_DAMAGE_LOW_KICK <- 3 // 煎铸 +CUSTOM_ANI_TRY_SUPLEX <- 4 // 热?滓蝶 卫紫 +CUSTOM_ANI_SUPLEX <- 5 // 热?滓蝶 +CUSTOM_ANI_BACK_SUPLEX <- 6 // 寥粽溯桧醴 +CUSTOM_ANI_MOUNT_TRY <- 7 // 葆遴? 卫紫 +CUSTOM_ANI_MOUNT <- 8 // 葆遴? - 瞳击 敞?坚 阳葬晦 瞪梱虽 赅暮 +CUSTOM_ANI_MOUNT_PUNCH <- 9 // 葆遴? - ?纂 +CUSTOM_ANI_NOT_USE <- 10 // 饵辨?虽 强挤. +CUSTOM_ANI_STOMP <- 11 // 奢酝 嫖晦 +CUSTOM_ANI_TRY_JUMP_SUPLEX <- 12 // 蝶?桧横 卫紫 +CUSTOM_ANI_JUMP_SUPLEX <- 13 // 蝶?桧横 +CUSTOM_ANI_JUMP_SUPLEX_LARIAT <- 14 // 蝶?桧横 ?瞪 跷陛颤 +CUSTOM_ANI_CLOSE_PUNCH <- 15 // 锰樯纂 ?纂 +CUSTOM_ANI_GRAB_EXPLOSION <- 16 // 橾嫦?擒撩 +CUSTOM_ANI_SHOULDER_TACKLE <- 17 // 浔涡 鹧赝 +CUSTOM_ANI_WHIRL_WIND_KICK <- 18 // 摹?陕 +CUSTOM_ANI_BLOCK_BUSTER_READY <- 19 // 绾烟 帼蝶搅 - 遽绿 (鬼?瘫系 卫瞪酝 橾阳虏 嫦翕脾) +CUSTOM_ANI_BLOCK_BUSTER_JUMP <- 20 // 绾烟 帼蝶搅 - 薄? (鬼?瘫系 卫瞪酝 橾阳虏 嫦翕脾) +CUSTOM_ANI_BLOCK_BUSTER_SHOOT <- 21 // 绾烟 帼蝶搅 - 薄? (鬼?瘫系 卫瞪酝 橾阳虏 嫦翕脾) +CUSTOM_ANI_BLOCK_BUSTER_NORMAL <- 22 // 绾烟 帼蝶搅 - 橾奁 渔给 湍虽晦 +CUSTOM_ANI_TRY_LEG_SUPLEX <- 23 // 缣横蓬颤桧伞 卫紫 +CUSTOM_ANI_LEG_SUPLEX_THROW <- 24 // 缣横蓬颤桧伞 : 湍虽晦 +CUSTOM_ANI_LEG_SUPLEX_KICK <- 25 // 顶溥镒晦 铸 赅暮 +CUSTOM_ANI_TYPHOON_GRAB <- 26 // 斜楚?楝 陕撩晦 : 濩晦 +CUSTOM_ANI_TYPHOON_ATTACK1 <- 27 // 斜楚?楝 陕撩晦 : 1颤 +CUSTOM_ANI_TYPHOON_ATTACK2 <- 28 // 斜楚?楝 陕撩晦 : 2颤 +CUSTOM_ANI_TYPHOON_ATTACK3 <- 29 // 斜楚?楝 陕撩晦 : 3颤 +CUSTOM_ANI_TYPHOON_KICKUP <- 30 // 斜楚?楝 陕撩晦 : 离萤葬晦 +CUSTOM_ANI_TYPHOON_JUMP <- 31 // 斜楚?楝 陕撩晦 : 薄? +CUSTOM_ANI_TYPHOON_LAST <- 32 // 斜楚?楝 陕撩晦 : 虞颤 +CUSTOM_ANI_TYPHOON_STAY <- 33 // 斜楚?楝 陕撩晦 : 虞颤 ? 渠晦 +CUSTOM_ANI_CRAZY_MOUNT_START <- 34 // 虽埘 葆遴? +CUSTOM_ANI_CRAZY_MOUNT_PUNCH <- 35 // 虽埘 葆遴? 橾奁 颤问 +CUSTOM_ANI_CRAZY_MOUNT_NOT_USE <- 36 // 饵辨?虽 强挤. +CUSTOM_ANI_CRAZY_MOUNT_END <- 37 // 虽埘 葆遴? 虞颤 +CUSTOM_ANI_THROW_WEB <- 38 // 茧塭虽蜂 +CUSTOM_ANI_HIDDEN_STING <- 39 // ?苌蝶? +CUSTOM_ANI_VENOM_MINE <- 40 // 漆吃葆樯 +CUSTOM_ANI_FLAME_LEGS_CAST <- 41 // 蝶?塭桧醴 陕撩晦 - ?腻暧陕(卫瞪) +CUSTOM_ANI_JUNK_SPIN_LOOP <- 42 // 姜觼蝶? +CUSTOM_ANI_JUNK_SPIN_FINISH <- 43 +CUSTOM_ANI_MOUNT_END <- 44 // 葆遴? 葆虽虞 ?纂 +CUSTOM_ANI_SHOULDER_CHARGE <- 45 // 绎肮坚 +CUSTOM_ANI_SINGLE_KICK <- 46 // ?该铸 +CUSTOM_ANI_NEN_FLOWER <- 47 // 喧? +CUSTOM_ANI_TRY_THROW_ENEMY <- 48 // 煎?葭 卫紫 +CUSTOM_ANI_THROW_ENEMY_HOLD <- 49 // 煎?葭 濩坚毡晦 +CUSTOM_ANI_THROW_ENEMY_THROW <- 50 // 煎?葭 湍虽晦 +CUSTOM_ANI_WHITE_TIGER_COMBO1 <- 51 // 喧热:寥? 1颤 +CUSTOM_ANI_WHITE_TIGER_COMBO2 <- 52 // 喧热:寥? 2颤 +CUSTOM_ANI_WHITE_TIGER_COMBO3 <- 53 // 喧热:寥? 3颤 +CUSTOM_ANI_WHITE_TIGER_COMBO4 <- 54 // 喧热:寥? 4颤 +CUSTOM_ANI_WHITE_TIGER_COMBO5 <- 55 // 喧热:寥? 5颤 +CUSTOM_ANI_WHITE_TIGER_DASH_ATTACK <- 56 // 喧热:寥? 渠莲奢问 +CUSTOM_ANI_WHITE_TIGER_JUMP_ATTACK <- 57 // 喧热:寥? 薄?奢问 +CUSTOM_ANI_DASH_PUNCH <- 58 // 姜掏 镐脑晦 +CUSTOM_ANI_PUNCH_AFTER_RETURN <- 59 // 颤问? 庵煎给葬晦 +CUSTOM_ANI_RANDOM_KICK1 <- 60 // 绿? 萄塭桧粽 1颤 +CUSTOM_ANI_RANDOM_KICK2 <- 61 // 绿? 萄塭桧粽 2颤 +CUSTOM_ANI_RANDOM_KICK3 <- 62 // 绿? 萄塭桧粽 3颤 +CUSTOM_ANI_RANDOM_KICK_FINISH <- 63 // 绿? 萄塭桧粽 虞颤 +CUSTOM_ANI_RISING_UPPER_DASH <- 64 // 蝓瑟掏 : 渠莲 +CUSTOM_ANI_RISING_UPPER <- 65 // 蝓瑟掏 : 横? +CUSTOM_ANI_DASH_AFTER_DASH_COMBO1 <- 66 // ?褐翱问 : 1颤 +CUSTOM_ANI_DASH_AFTER_DASH_COMBO2 <- 67 // ?褐翱问 : 2颤 +CUSTOM_ANI_DASH_AFTER_DASH_COMBO3 <- 68 // ?褐翱问 : 3颤 - 陴问陛朝 ?褐翱问 3颤 桡挤 +CUSTOM_ANI_DASH_AFTER_DASH_COMBO4 <- 69 // ?褐翱问 : 4颤 - 陴问陛朝 ?褐翱问 4颤 桡挤 +CUSTOM_ANI_EARTH_BREAK <- 70 // 旎鬼泼 +CUSTOM_ANI_HOLD_UP_TRY <- 71 // ?萄机 : 卫紫 +CUSTOM_ANI_HOLD_UP_HOLD <- 72 // ?萄机 : 濩晦 +CUSTOM_ANI_HOLD_UP_HIT <- 73 // ?萄机 : 阳葬晦 +CUSTOM_ANI_WILD_CANNON_SPIKE_CHARGE <- 74 // 谛橾萄 议喱 蝶?桧觼 : 醱瞪 +CUSTOM_ANI_WILD_CANNON_SPIKE_FALL <- 75 // 谛橾萄 警喱 蝶?桧觼 : 云横虽晦 +CUSTOM_ANI_THROW_SAND <- 76 // ?搅蝶骚搅 +CUSTOM_ANI_THROW_SAND_DOUBLE <- 77 // ?搅蝶骚搅 (桧酝瘫系) +CUSTOM_ANI_TRY_SUPLEX_CYCLONE <- 78 // 热?滓蝶 饵桧赝烦 : 卫紫 +CUSTOM_ANI_TURN_SUPLEX_CYCLONE <- 79 // 热?滓蝶 饵桧赝烦 : 濩坚给晦 +CUSTOM_ANI_WILD_CANNON_SPIKE_EXP <- 80 // 谛橾萄 议喱 蝶?桧觼 : 虞颤 +CUSTOM_ANI_FINISH_SUPLEX_CYCLONE <- 81 // 饵辨?虽 强挤. +CUSTOM_ANI_LIGHTNING_DRAGON <- 82 // 惜醱喻紫 卫瞪 +CUSTOM_ANI_DESTROY_EARTH_SKY_DROP_START <- 83 // 蝶?葬? ?桧搅 陕撩晦 - 茧种虽惚 卫蒙 +CUSTOM_ANI_DESTROY_EARTH_SKY_DROP_ON_SKY <- 84 // 蝶?葬? ?桧搅 陕撩晦 - 茧种虽惚 : 奢酝赅暮 +CUSTOM_ANI_DESTROY_EARTH_SKY_DROP_FINISH <- 85 // 鬼? 缣横蓬颤桧伞 1离 镒晦 +CUSTOM_ANI_TRY_LEG_SUPLEX_EX_SECOND <- 86 // 鬼? 缣横蓬颤桧伞 2离 卫紫?楝 薄? +CUSTOM_ANI_LEG_SUPLEX_EX_2 <- 87 // 鬼? 缣横蓬颤桧伞 2离 镒晦 +CUSTOM_ANI_RISING_UPPER_EX_START <- 88 // 鬼? 塭桧癒 伞赝 卫蒙 +CUSTOM_ANI_RISING_UPPER_EX <- 89 // 鬼? 塭桧癒 伞赝 +CUSTOM_ANI_RISING_UPPER_EX_FINISH <- 90 // 鬼? 塭桧癒 伞赝 虞颤 +CUSTOM_ANI_BLOCK_BUSTER_EX_TRY <- 91 // 鬼? 绾烟 帼蝶搅 卫蒙 +CUSTOM_ANI_BLOCK_BUSTER_EX_JUMP <- 92 // 鬼? 绾烟 帼蝶搅 薄? +CUSTOM_ANI_BLOCK_BUSTER_EX_FINISH <- 93 // 鬼? 绾烟 帼蝶搅 虞颤 +CUSTOM_ANI_SUPLEX_CYCLONE_JUMP_EX <- 94 // 鬼? 热?滓蝶 饵桧赝烦 : 薄? +CUSTOM_ANI_SUPLEX_CYCLONE_SPIN_EX <- 95 // 鬼? 热?滓蝶 饵桧赝烦 : 蝶? +CUSTOM_ANI_DASH_PUNCH_EX <- 96 // 鬼? 种掏 +CUSTOM_ANI_STOMP_FINISH <- 97 // 奢酝嫖晦 虞颤 +CUSTOM_ANI_GROUND_KICK_JUMP <- 98 // 斜塭遴萄铸 - 薄? +CUSTOM_ANI_GROUND_KICK_ATTACK <- 99 // 斜塭遴萄铸 - 奢问 +CUSTOM_ANI_GROUND_KICK_FINISH <- 100 // 斜塭遴萄铸 - ?栖莲 +CUSTOM_ANI_FAST_DASH <- 101 // 牖尔 +CUSTOM_ANI_CRASH_LOW_KICK_SECOND <- 102 // 狱 觼楝敷 舒廓箪 颤问 +CUSTOM_ANI_THROW_ENEMY_SIDEKICK <- 103 // 陴问 煎?葭 饵桧萄铸 +CUSTOM_ANI_THROW_ENEMY_DOWNKICK <- 104 // 陴问 煎?葭 顶溥镒晦铸 +CUSTOM_ANI_THROW_GRAB_CANNON_ENEMY_SIDEKICK <- 105 // 陴问 煎?葭 斜椰议凯 饵桧萄铸 +CUSTOM_ANI_SUPLEX_FINAL_ATTACK <- 106 // 陴问 热?滓蝶 斜椰议凯 鼠叶镒晦 +CUSTOM_ANI_SUPLEX_THROW_FINAL_ATTACK <- 107 // 陴问 热?滓蝶 ?塭桧 鼠叶镒晦 +CUSTOM_ANI_DOUBLE_THROW_WEB <- 108 // 陴问 斜僭瘫系 (桧酝瘫系) +CUSTOM_ANI_LEG_SUPLEX_FIRST_KICK <- 109 // 陴问 缣横蓬颤桧伞 蟾晦 镒晦 奢问翕蒙 +CUSTOM_ANI_JUMP_SUPLEX_HOLD_IMPRESSKICK <- 110 // 陴问 蝶?桧横 - 濩晦碳陛瞳 - 顶溥镒晦 铸 赅暮 +CUSTOM_ANI_LIGHTNING_DANCE_KICK <- 111 // 陴问 塭桧?棚 渣蝶 铸 +CUSTOM_ANI_LIGHTNING_DANCE_LAST_LOW_KICK <- 112 // 陴问 塭桧?棚 渣蝶 虞颤 煎办铸 +CUSTOM_ANI_GRAB_EXPLOSION_KICK <- 113 // 陴问 橾嫦?擒撩 - 濩坚 离朝 翕蒙 +CUSTOM_ANI_NEN_FLOWER_READY <- 114 // 喧葆蝶搅-陕撩 ?嫌桧 颤朝 翕蒙 +CUSTOM_ANI_NEN_FLOWER_ATTACK <- 115 // 喧葆蝶搅-陕撩 ?嫌桧 奢问 +CUSTOM_ANI_NEN_FLOWER_FINAL <- 116 // 喧葆蝶搅-陕撩 ?嫌桧 葆虽虞 奢问 +CUSTOM_ANI_ENCHANT_POISON <- 117 // 絮潍瞪 嫦饵 +CUSTOM_ANI_SPIRALNEN_SHOOT_PREPARE <- 118 // 釭摹暧 喧:轿 螂 遽绿翕蒙 +CUSTOM_ANI_SPIRALNEN_SHOOT <- 119 // 釭摹暧 喧:轿 螂 +CUSTOM_ANI_BLOCK_BUSTER_DOUBLE <- 120 // 绾烟 帼蝶搅 - 桧酝瘫系 +CUSTOM_ANI_ENCHANT_POISON_DOUBLE <- 121 // 絮潍瞪 - 桧酝瘫系 +CUSTOM_ANI_HIDDEN_STING_DOUBLE <- 122 // 夥棺潍瞪 - 桧酝瘫系 +CUSTOM_ANI_DEFINITE_GRAB <- 123 // 奁萄卫 濩朝棻 - ?热斜椰 翕蒙 +CUSTOM_ANI_NEN_SPEAR <- 124 // 喧 蝶?横 笮晦(?撩) +CUSTOM_ANI_NEN_SPEAR_SUCCESS <- 125 // 喧 蝶?横 笮晦 撩奢卫(?撩) +CUSTOM_ANI_HURRICANE_SPEAR <- 126 // 陴问瘫陛 ?撩蝶鉴 - ?葬馨樯 蝶?横 +CUSTOM_ANI_CHARGE_SPEAR_RECHARGE <- 127 // 离虽蝶?横(?撩) 醱瞪 +CUSTOM_ANI_CHARGE_SPEAR_RUSH <- 128 // 离虽蝶?横(?撩) 给问 +CUSTOM_ANI_CHARGE_SPEAR_END <- 129 // 离虽蝶?横(?撩) 给问 部 +CUSTOM_ANI_SPIRAL_COLUMN_EX <- 130 // 釭摹?(?撩) +CUSTOM_ANI_CRASH_ROPE <- 131 // 惜??饵 (?撩) +CUSTOM_ANI_GLUEY_FRUIT <- 132 // 莫瞳莫瞳 翮衙(?撩) +CUSTOM_ANI_CHAIN_KICK <- 133 // 翱?霉(?撩) +CUSTOM_ANI_108_STAIRS_TRY_EX <- 134 // 108啗钦(?撩) +CUSTOM_ANI_108_STAIRS_KICK_EX <- 135 // 108啗钦(?撩) +CUSTOM_ANI_108_STAIRS_PUNCH_EX <- 136 // 108啗钦(?撩) +CUSTOM_ANI_108_STAIRS_BLOW_EX <- 137 // 108啗钦(?撩) +CUSTOM_ANI_108_STAIRS_THROW_EX <- 138 // 108啗钦(?撩) +CUSTOM_ANI_108_STAIRS_FINAL_EX <- 139 // 108啗钦(?撩) + +CUSTOM_ATTACKINFO_CRASH_LOW_KICK <- 0 // 狱 觼楝敷 +CUSTOM_ATTACKINFO_LIFT_UPPER <- 1 // 鼠锷 横? +CUSTOM_ATTACKINFO_DAMAGE_LOW_KICK <- 2 // 煎铸 +CUSTOM_ATTACKINFO_TRY_GRAB <- 3 // 濩晦 卫紫 +CUSTOM_ATTACKINFO_SUPLEX <- 4 // 热?滓蝶暧 除蕾 等嘐虽 +CUSTOM_ATTACKINFO_MOUNT <- 5 // 葆遴? ?纂 +CUSTOM_ATTACKINFO_STOMP <- 6 // 奢酝 嫖晦 +CUSTOM_ATTACKINFO_JUMP_SUPLEX <- 7 // 蝶?桧横 (譆蟾 铸) +CUSTOM_ATTACKINFO_JUMP_SUPLEX_HEADING <- 8 // 蝶?桧横 葆虽虞 ?瞪铸 +CUSTOM_ATTACKINFO_JUMP_SUPLEX_LARIAT <- 9 // 斜椰议凯 蝶?桧横 葆虽虞 ?瞪铸 (濩晦碳陛瞳) +CUSTOM_ATTACKINFO_CLOSE_PUNCH <- 10 // 锰樯纂 ?纂 +CUSTOM_ATTACKINFO_SHOULDER_CHARGE <- 11 // 绎肮坚 +CUSTOM_ATTACKINFO_SINGLE_KICK <- 12 // ?该 铸 +CUSTOM_ATTACKINFO_GRAB_EXPLOSION <- 13 // 橾嫦?擒撩 颤问 +CUSTOM_ATTACKINFO_SHOULDER_TACKLE <- 14 // 浔涡 鹧赝 +CUSTOM_ATTACKINFO_GRAB_CANNON <- 15 // 斜椰 议喱 +CUSTOM_ATTACKINFO_WHIRL_WIND_KICK <- 16 // 摹?陕 +CUSTOM_ATTACKINFO_JUNK_SPIN <- 17 // 夥棺蝶? (姜觼蝶?) +CUSTOM_ATTACKINFO_LEG_SUPLEX_KICK <- 18 // 缣横蓬颤桧伞 : 离晦 +CUSTOM_ATTACKINFO_LIGHTNING_DANCE <- 19 // 塭桧?棚 渣蝶 +CUSTOM_ATTACKINFO_STRONGEST_LOW_KICK <- 20 // 饵鼻譆鬼暧 煎铸 +CUSTOM_ATTACKINFO_CRAZY_MOUNT <- 21 // 虽埘 葆遴? +CUSTOM_ATTACKINFO_THROW_WEB <- 22 // 茧塭虽蜂 +CUSTOM_ATTACKINFO_HIDDEN_STING <- 23 // ?苌蝶? +CUSTOM_ATTACKINFO_DASH_PUNCH <- 24 // 姜掏 镐脑晦 +CUSTOM_ATTACKINFO_PUNCH_AFTER_RETURN <- 25 // 颤问? 庵煎给葬晦 +CUSTOM_ATTACKINFO_RANDOM_KICK_1 <- 26 // 绿? 萄塭桧粽 1颤 +CUSTOM_ATTACKINFO_RANDOM_KICK_2 <- 27 // 绿? 萄塭桧粽 2颤 +CUSTOM_ATTACKINFO_RANDOM_KICK_3 <- 28 // 绿? 萄塭桧粽 3颤 +CUSTOM_ATTACKINFO_RANDOM_KICK_FINISH <- 29 // 绿? 萄塭桧粽 虞颤 +CUSTOM_ATTACKINFO_DUMMY_4 <- 30 // 饵辨肾虽 强坚毡挤. +CUSTOM_ATTACKINFO_RISING_UPPER <- 31 // 蝓瑟掏 : 横? +CUSTOM_ATTACKINFO_DASH_AFTER_DASH_COMBO1 <- 32 // ?褐翱问 : 1颤 +CUSTOM_ATTACKINFO_DASH_AFTER_DASH_COMBO2 <- 33 // ?褐翱问 : 2颤 +CUSTOM_ATTACKINFO_VENOM_MINE <- 34 // 漆吃葆樯 奢问溘 +CUSTOM_ATTACKINFO_DUMMY_2 <- 35 // 饵辨肾虽 强坚毡挤 +CUSTOM_ATTACKINFO_HOLD_UP_TRY <- 36 // ?萄机 : 卫紫 +CUSTOM_ATTACKINFO_HOLD_UP_HIT <- 37 // ?萄机 : 阳葬晦 +CUSTOM_ATTACKINFO_WILD_CANNON_SPIKE_FALL <- 38 // 谛橾萄 议喱 蝶?桧觼 : 奢酝缣怃 云横韩阳 +CUSTOM_ATTACKINFO_WILD_CANNON_SPIKE_HIT <- 39 // 谛橾萄 议喱 蝶?桧觼 : 夥款缣怃 瞳缣啪 等嘐虽还阳 +CUSTOM_ATTACKINFO_WHITE_TIGER_COMBO1 <- 40 // 喧热:寥? 1颤 +CUSTOM_ATTACKINFO_WHITE_TIGER_COMBO2 <- 41 // 喧热:寥? 2颤 +CUSTOM_ATTACKINFO_WHITE_TIGER_COMBO3 <- 42 // 喧热:寥? 3颤 +CUSTOM_ATTACKINFO_WHITE_TIGER_COMBO4 <- 43 // 喧热:寥? 4颤 +CUSTOM_ATTACKINFO_WHITE_TIGER_COMBO5 <- 44 // 喧热:寥? 5颤 +CUSTOM_ATTACKINFO_WHITE_TIGER_DASH_ATTACK <- 45 // 喧热:寥? 渠莲奢问 +CUSTOM_ATTACKINFO_WHITE_TIGER_JUMP_ATTACK <- 46 // 喧热:寥? 薄?奢问 +CUSTOM_ATTACKINFO_SUPLEX_CYCLONE_CRASH <- 47 // 热?滓蝶 饵桧赝烦 : 濩坚镒晦 +CUSTOM_ATTACKINFO_SUPLEX_CYCLONE_FINISH <- 48 // 热?滓蝶 饵桧赝烦 : 葆虽虞 颤问 +CUSTOM_ATTACKINFO_LEG_SUPLEX_EX_SPIN <- 49 // 鬼? 缣横蓬颤桧伞 蝶? +CUSTOM_ATTACKINFO_DASH_PUNCH_EX <- 50 // 鬼? 种掏 +CUSTOM_ATTACKINFO_BLOCK_BUSTER_FINISH_EX <- 51 // 鬼? 绾烟 帼蝶搅 虞颤 +CUSTOM_ATTACKINFO_RISING_UPPER_START_EX <- 52 // 鬼? 蝓瑟掏 : 卫蒙 +CUSTOM_ATTACKINFO_RISING_UPPER_EX <- 53 // 鬼? 蝓瑟掏 : 横? +CUSTOM_ATTACKINFO_RISING_UPPER_FINISH_EX <- 54 // 鬼? 蝓瑟掏 : ?栖卫 +CUSTOM_ATTACKINFO_SUPLEX_CYCLONE_EX <- 55 // 鬼? 热?滓蝶 饵桧赝烦 +CUSTOM_ATTACKINFO_SUPLEX_CYCLONE_SPIN_EX <- 56 // 鬼? 热?滓蝶 饵桧赝烦 : ?瞪 +CUSTOM_ATTACKINFO_STOMP_FINISH <- 57 // 奢酝嫖晦 虞颤 +CUSTOM_ATTACKINFO_GROUND_KICK <- 58 // 斜塭遴萄铸 +CUSTOM_ATTACKINFO_LIGHTNING_DRAGON <- 59 // 惜醱喻紫 +CUSTOM_ATTACKINFO_CRASH_LOW_KICK_SECOND <- 60 // 狱 觼楝敷 舒廓箪 颤问 +CUSTOM_ATTACKINFO_THROW_ENEMY_UPKICK <- 61 // 陴问 煎?葭 UP铸 +CUSTOM_ATTACKINFO_THROW_ENEMY_SIDEKICK <- 62 // 陴问 煎?葭 SIDE铸 +CUSTOM_ATTACKINFO_THROW_ENEMY_DOWNKICK <- 63 // 陴问 煎?葭 DOWN铸 +CUSTOM_ATTACKINFO_TRY_GRAB_THROW_ENEMY <- 64 // 煎?葭 +CUSTOM_ATTACKINFO_THROW_WEB_DOUBLE <- 65 // 斜僭瘫系 (桧酝瘫系橾阳) +CUSTOM_ATTACKINFO_LIGHTNING_LOW_KICK <- 66 // 斜僭瘫系 (桧酝瘫系橾阳) +CUSTOM_ATTACKINFO_SUPLEX_GRABCANNON <- 67 // 热?滓蝶 斜椰议凯 +CUSTOM_ATTACKINFO_NEN_FLOWER <- 68 // 喧葆蝶搅-陕撩 +CUSTOM_ATTACKINFO_TYPHOON <- 69 // 斜楚?楝 陕撩晦 +CUSTOM_ATTACKINFO_TYPHOON_LAST <- 70 // 斜楚?楝 陕撩晦 +CUSTOM_ATTACKINFO_SPIRAL_NEN_SHOOT <- 71 // 釭摹暧 喧:轿 +CUSTOM_ATTACKINFO_NEN_SPEAR <- 72 // 喧蝶?横(?撩) +CUSTOM_ATTACKINFO_CHARGE_SPEAR <- 73 // 离虽蝶?横(?撩) +CUSTOM_ATTACKINFO_HURRICANE_SPEAR <- 74 // ?葬馨樯 蝶?横 (?撩) +CUSTOM_ATTACKINFO_CRASH_ROPE <- 75 // 惜??饵 (?撩) +CUSTOM_ATTACKINFO_CHAIN_KICK1 <- 76 // 翱?霉 1颤(?撩) +CUSTOM_ATTACKINFO_CHAIN_KICK2 <- 77 // 翱?霉 2颤(?撩) +CUSTOM_ATTACKINFO_CHAIN_KICK3 <- 78 // 翱?霉 3颤(?撩) +CUSTOM_ATTACKINFO_108_STAIRS_KICK_EX <- 79 // 108啗钦(?撩) +CUSTOM_ATTACKINFO_108_STAIRS_PUNCH_EX <- 80 // 108啗钦(?撩) +CUSTOM_ATTACKINFO_108_STAIRS_BLOW_1_EX <- 81 // 108啗钦(?撩) +CUSTOM_ATTACKINFO_108_STAIRS_BLOW_2_EX <- 82 // 108啗钦(?撩) +CUSTOM_ATTACKINFO_108_STAIRS_BLOW_3_EX <- 83 // 108啗钦(?撩) + +WEAPON_SUBTYPE_KNUCKLE <- 0 // 伞赝 +WEAPON_SUBTYPE_GAUNTLET <- 1 // 勒?滇 +WEAPON_SUBTYPE_CLAW <- 2 // 赝煎 +WEAPON_SUBTYPE_BOXING_GLOVE <- 3 // 掏瘫旋楝粽 +WEAPON_SUBTYPE_DUMMY <- 4 // UNKNOWN +WEAPON_SUBTYPE_TONFA <- 5 // 鳝? +WEAPON_SUBTYPE_MAX <- 6 + +SOUND_ID_STATIC <- 0 // 裘缣 毡朝 翕寰 啗楼 ?溯桧 +SOUND_ID_MOVE <- 1 // 务朝 模葬 +SOUND_ID_ACTIVESTATUS_POISON <- 2 // ?桧阕 勘溜击 阳 +SOUND_ID_ACTIVESTATUS_BURN <- 3 // 廓 勘溜击 阳 +SOUND_ID_ACTIVESTATUS_LIGHTNING <- 4 // 塭桧?棚 勘溜击 阳 +SOUND_ID_AURA_SHIELD <- 5 // Appendage : 螃塭 褒萄 +SOUND_ID_MAGICAL_TEMPO_UP <- 6 // Appendage : 涧颤歜 +SOUND_ID_DOT_AREA <- 7 // Appendage : 霞翕? +SOUND_ID_DOT_AREA_DAMAGE <- 8 // Appendage : 霞翕? ?问 +SOUND_ID_DIVINE_LIGHT <- 9 // Appendage : 褐撩? 维 +SOUND_ID_SHADOW_BOXER <- 10 // Appendage : 憎紫办 梦怃 +SOUND_ID_GUARD <- 11 // 陛萄 鼻鹧橾阳 +SOUND_ID_CHAKRA_OF_PASSION <- 12 // Appendage : 翮姜暧 稳觼塭 +SOUND_ID_CHAKRA_OF_CALMNESS <- 13 // Appendage : 家姜暧 稳觼塭 +SOUND_ID_WAVE_MARK <- 14 // Appendage : ?翕樯 +SOUND_ID_KEIGA <- 15 // Appendage : 涛舱暧 馨桧陛 +SOUND_ID_END <- 16 + +STATE_PRIORITY_AUTO <- 0 // 卫除桧釭 亵勒缣 暧? 濠翕戏煎 肾朝 匙菟 (奢问 谦猿, 嫦饵 -> 潍瞪 蛔蛔) +STATE_PRIORITY_USER <- 1 // 嵘荡暧 醴裔萄缣 暧? 釭陛朝 匙菟 (蝶鉴, 奢问 蛔) +STATE_PRIORITY_HALF_FORCE <- 2 // 锰?怃 釭陛朝 匙擎 嬴栖虽虏, 谏瞪 鬼薯尔棻朝 雪擎 匙菟. (桧贼 庵喂晦 蛔) +STATE_PRIORITY_FORCE <- 3 // 鬼薯煎 ?啪 肾朝 匙菟. (棻遴, 等嘐虽, 饵蜂, ?萄 蛔) +STATE_PRIORITY_IGNORE_FORCE <- 4 // 鬼薯 渗唳击 鼠卫?朝 匙菟. (热?滓蝶煎 鼻渠 濩晦 蛔) + +STATE_VIRTUAL_ATTACK <- 19 // 橾奁 奢问 -> 奢问蝶鉴 蛔击 嫔? 陛鼻 STATE +STATE_ANTIAIR_UPPER <- 20 // 横? +STATE_DUCKING <- 21 // 涡缰 +STATE_SWAY <- 22 // 蝶铮桧 +STATE_GIANT_SWING <- 23 // 渠?瞪问 +STATE_REPEATED_SMASH <- 24 // 陪问 +STATE_SMASHER <- 25 // 蝶衙敷 +STATE_QUAKE_AREA <- 26 // 钒瑰跷 +STATE_WILL_DRIVER <- 27 // 尴 萄塭桧帼 +STATE_DUCKING_SKILL <- 28 // 涡缰鼻鹧暧 蝶鉴涤 ?潍 +STATE_LUCKY_STRAIGHT <- 29 // 楣郦 蝶?溯桧? +STATE_SECOND_UPPER <- 30 // 撮钟萄横? +STATE_HOLY_COUNTER <- 31 // ?葬 苹遴搅 +STATE_GORGEOUS_COMBINATION <- 32 // 坚荡蝶 阐绿啻桧暮 +STATE_CHOPPING_HAMMER <- 33 // 蟾? ?该 +STATE_HURRICANE_OF_JUDGEMENT <- 34 // 褕?暧 ?螃葬 +STATE_HOME_RUN <- 35 // ?楛 +STATE_BLADE_OF_PURE_WHITE <- 36 // 牖寥暧 蚝陈 +STATE_HURRICANE_ROLL <- 37 // ?葬馨樯 煤 +STATE_THROW_WEAPON <- 38 // 剪摹? +STATE_DEFLECT_WALL <- 39 // 蛤?滓? 错 +STATE_SPEAR_OF_VICTORY <- 40 // 蝓葬暧 玺 +STATE_HAMMER_OF_CONTRITION <- 41 // 溜?暧 蜂纂 +STATE_HEAVENLY_COMBINATION <- 42 // ?绽葬 阐绿啻桧暮 +STATE_DIVINE_CRUSH <- 43 // 蛤夥樯 觼楝卫 +STATE_SIDEWIND <- 44 // 饵桧萄谛樯萄 +STATE_MACHINE_GUN_JAB <- 45 // 该褐勒 毁 +STATE_THROW_TALISMAN <- 46 // 撩碳 +STATE_APOCALYPSE <- 47 // 嬴?蚝董蝶 +STATE_GALE_SMASH <- 48 // 韩?颤 +STATE_ATOMIC_SMASH <- 49 // 鼠谁问 +STATE_BIG_BANG_PUNCH <- 50 // 紧屡 ?纂 +STATE_BLUE_DRAGON <- 51 // 玺瑟问 +STATE_HEAL_WIND <- 52 // ? 孺萄 +STATE_CUTTING_DARKNESS <- 53 // 横菸陛脑晦 +STATE_MACHINE_GUN_JAB_EX <- 54 // 鬼? 该褐勒 毁 +STATE_HEAVENLY_COMBINATION_EX <- 55 // ?绽葬 阐绿啻桧暮[鬼?] +STATE_REPEATED_SMASH_EX <- 56 // 鬼? 陪问 +STATE_DEFLECT_WALL_EX <- 57 // 蛤?滓? 错[鬼?] + +SKILL_ANTIAIR_UPPER <- 1 // 奢溜颤 +SKILL_DUCKING <- 2 // 涡缰 渠卫 +SKILL_SWAY <- 3 // 蝶铮桧 +SKILL_HURRICANE_ROLL <- 4 // ?葬馨樯 煤 +SKILL_GIANT_SWING <- 5 // 渠?瞪问 +SKILL_CANCEL_ANTIAIR_UPPER <- 6 // 警蜗 奢溜颤 +SKILL_STRIKING <- 7 // 蝶?塭桧缰 +SKILL_SMASHER <- 8 // 蝶衙敷 +SKILL_CANCEL_SMASHER <- 9 // 警蜗 蝶衙敷 +SKILL_CHANGE_HP_TO_MP <- 10 // 坚鳝暧 ?翮 +SKILL_QUAKE_AREA <- 11 // 钒瑰跷 +SKILL_CANCEL_QUAKE_AREA <- 12 // 警蜗 钒瑰跷 +SKILL_WILL_DRIVER <- 13 // 尴 萄塭桧帼 +SKILL_TECHNICAL_MASTERY <- 14 // 才觼栖锈 葆蝶搅葬 +SKILL_BATTLE_AURA_MASTERY <- 15 // 寡? 螃塭 葆蝶搅葬 +SKILL_CORKSCREW_MASTERY <- 16 // 啭觼蝶觼盟 葆蝶搅葬 +SKILL_COMBINATION_MASTERY <- 17 // 阐绿啻桧暮 葆蝶搅葬 +SKILL_HARD_PUNCH_MASTERY <- 18 // ?萄 ?纂 葆蝶搅葬 +SKILL_HP_MAX_UP_PERSONAL <- 19 // 茧鼻暧 诟煎蛤 +SKILL_EMBLEM_OF_SAFEGUARD <- 20 // 尔?暧 癒? +SKILL_FOUNTAIN_OF_LIFE <- 21 // 当赀暧 锰茧 +SKILL_DIVINE_LIGHT <- 22 // 褐撩? 维 +SKILL_REVENGE_OF_LIGHT <- 23 // 维暧 犒热 +SKILL_HP_MAX_UP_PARTY <- 24 // 茧鼻暧 ?赅栖 +SKILL_SACRIFICE_OF_SOUL <- 25 // 舱?暧 ?当 +SKILL_HEAL_WIND <- 26 // ? 孺萄 +SKILL_DEFLECT_WALL <- 27 // 蛤?滓? 错 +SKILL_FLASH_GLOBE <- 28 // ?楚卫 旋煎粽 +SKILL_EXTENDED_PUNCH <- 29 // 掏晦寞轿 +SKILL_HOLY_COUNTER <- 30 // ?葬 苹遴搅 +SKILL_GORGEOUS_COMBINATION <- 31 // 坚荡蝶 阐绿啻桧暮 +SKILL_CANCEL_GORGEOUS_COMBINATION <- 32 // 警蜗 坚荡蝶 阐绿啻桧暮 +SKILL_CHOPPING_HAMMER <- 33 // 蟾? ?该 +SKILL_ARMOR_MASTERY_PLATE_CS <- 34 // 觼瑞撮桧涡 ?旎 葆蝶搅葬 +SKILL_SHADOW_BOXER <- 35 // 憎紫办 梦怃 +SKILL_DOUBLE_SHADOW_BOXER <- 36 // 涡绾 憎紫办 梦怃 +SKILL_HURRICANE_OF_JUDGEMENT <- 37 // 褕?暧 ?螃葬 +SKILL_ENTERING_NIRVANA <- 38 // 撩碳 +SKILL_OPPRESSION_TALISMAN <- 39 // 薯忆睡 (桧??) +SKILL_THUNDERBOLT_TALISMAN <- 40 // 钒煆睡 (桧??) +SKILL_HOME_RUN <- 41 // 荡 ?棺暧 涤 +SKILL_QUICK_PARRY <- 42 // 摆 ?葬 +SKILL_BLADE_OF_PURE_WHITE <- 43 // 牖寥暧 蚝陈 +SKILL_CANCEL_BLADE_OF_PURE_WHITE <- 44 // 警蜗 牖寥暧 蚝陈 +SKILL_GLORIOUS_BLESS <- 45 // 舱惜暧 蹴犒 +SKILL_CANCEL_HURRICANE_ROLL <- 46 // 警蜗 ?葬馨樯 煤 +SKILL_CHAKRA_OF_PASSION <- 47 // 翮姜暧 稳觼塭 +SKILL_CHAKRA_OF_CALMNESS <- 48 // 家姜暧 稳觼塭 +SKILL_REPEATED_SMASH <- 49 // 陪问 +SKILL_THROW_WEAPON <- 50 // 剪摹? +SKILL_SLOW_HEAL <- 51 // 蜗煎办 ? +SKILL_CURE <- 52 // 听横 +SKILL_BLESS <- 53 // 虽?暧 蹴犒 +SKILL_GRACE_OF_GOD <- 54 // 褐暧 擎识 +SKILL_FAST_HEAL <- 55 // ?蝶? ? +SKILL_DUCKING_STRAIGHT <- 56 // 涡缰 蝶?溯桧? +SKILL_DUCKING_BODYBLOW <- 57 // 涡缰 尔蛤绾煎 +SKILL_DUCKING_UPPER <- 58 // 涡缰 横? +SKILL_CANCEL_DUCKING <- 59 // 警蜗 涡缰 +SKILL_CANCEL_SWAY <- 60 // 警蜗 蝶铮桧 +SKILL_LUCKY_STRAIGHT <- 61 // 楣郦 蝶?溯桧? +SKILL_CANCEL_LUCKY_STRAIGHT <- 62 // 警蜗 楣郦 蝶?溯桧? +SKILL_SECOND_UPPER <- 63 // 撮钟萄 横? +SKILL_GRASP_HAND_OF_ANGER <- 64 // 碟喻暧 遗面锅 +SKILL_CANCEL_GRASP_HAND_OF_ANGER <- 65 // 警蜗 碟喻暧 遗面锅 +SKILL_CHARGE_WEAPON <- 66 // 濡瑟 +SKILL_FORCE_OF_EXORCISM <- 67 // 霉葆暧 晦遴 +SKILL_ARMOR_MASTERY_CLOTH_EC <- 68 +SKILL_HYUN_MOO <- 69 // 虽暧 冲褐 - ?鼠 +SKILL_BAEK_HO <- 70 // 奢暧 冲褐 - 寥? +SKILL_CANCEL_REPEATED_SMASH <- 71 // 警蜗 陪问 +SKILL_CANCEL_HOME_RUN <- 72 // 警蜗 ?楛 +SKILL_SPEAR_OF_VICTORY <- 73 // 蝓葬暧 玺 +SKILL_HAMMER_OF_CONTRITION <- 74 // 溜?暧 蜂纂 +SKILL_HEAVENLY_COMBINATION <- 75 // ?绽葬 阐绿啻桧暮 +SKILL_DIVINE_CRUSH <- 76 // 蛤夥樯 觼楝卫 +SKILL_SIDEWIND <- 77 // 饵桧萄谛樯萄 +SKILL_MACHINE_GUN_JAB <- 78 // 该褐勒 毁 +SKILL_CANCEL_SIDEWIND <- 79 // 警蜗 饵桧萄谛樯萄 +SKILL_CANCEL_MACHINE_GUN_JAB <- 80 // 警蜗 该褐勒 毁 +SKILL_JUDGEMENT <- 81 // 姜暧暧 褕? +SKILL_BIG_WEAPON_MASTERY <- 82 // 剪煽葆蝶搅葬 当撩 +SKILL_BATTLE_AXE_MASTERY <- 83 // 寡?挡蝶 葆蝶搅葬 +SKILL_APOCALYPSE <- 84 // 嬴?蚝董蝶 +SKILL_GALE_SMASH <- 85 // 韩?颤 +SKILL_AURA_OF_FAITH <- 86 // 褐喃暧 螃塭 +SKILL_DRYOUT <- 87 // 萄塭桧嬴醒 +SKILL_ATOMIC_SMASH <- 88 // 鼠谁问 +SKILL_RADIATE_FIGHTING_AURA <- 89 // 瘫晦 嫦肮 +SKILL_BIG_BANG_PUNCH <- 90 // 紧屡 ?纂 +SKILL_ARMOR_MASTERY_LIGHT_IF <- 91 // 唳骨 葆蝶搅葬:樯?桧搅 +SKILL_ARMOR_MASTERY_PLATE_EC <- 92 // ?旎 葆蝶搅葬:霉葆饵 +SKILL_BLUE_DRAGON <- 93 // 玺瑟问 +SKILL_CANCEL_ENTERING_NIRVANA <- 94 // 警蜗 撩碳 +SKILL_CANCEL_GALE_SMASH <- 95 // 警蜗 韩?颤 +SKILL_ARMOR_MASTERY_HEAVY_EC <- 96 // 酝骨 葆蝶搅葬:霉葆饵 +SKILL_GRACE_OF_COURAGE <- 97 // 辨晦暧 擎识 +SKILL_GRACE_OF_PROTECTION <- 98 // 热?暧 擎识 +SKILL_RISING_AREA <- 99 // 蝓茧霞 +SKILL_CUTTING_DARKNESS <- 100 // 横菸陛脑晦 +SKILL_SHIKIGAMI <- 101 // 冲褐暧 捱 +SKILL_CANCEL_RISING_AREA <- 102 // 警蜗 蝓茧霞 +SKILL_MACHINE_GUN_JAB_EX <- 103 // 鬼? 该褐勒 毁 +SKILL_HEAVENLY_COMBINATION_EX <- 104 // ?绽葬 阐绿啻嘐暮[鬼?] +SKILL_REPEATED_SMASH_EX <- 105 // 鬼? 陪问 +SKILL_VERMILIONBIRD_TALISMAN <- 106 // 舆蒙睡 +SKILL_CROSS_CRASH <- 107 // 觼煎蝶 觼楚莲, 偃嫦赀 : 嗑剪遴 褊濠陛, HotCross 蛔 +SKILL_FLASH_GLOBE_EX <- 108 // ?楚卫 旋煎粽[鬼?] +SKILL_DEFLECT_WALL_EX <- 109 // 蛤?滓? 错[鬼?] +SKILL_HYUN_MOO_EX <- 110 // ?鼠[鬼?] +SKILL_GROUND_CRASH <- 111 // 斜塭遴萄 蝶衙卫, 偃嫦赀 ox crash (?办给?) +SKILL_CANCEL_GROUND_CRASH <- 112 // 警蜗 斜塭遴萄 蝶衙卫 +SKILL_SLOW_HEAL_EX <- 140 // 蜗煎办 ? ?卫粽 +SKILL_LUCKY_STRAIGHT_EX <- 141 // 楣郦 蝶?溯桧? ?卫粽 +SKILL_QUAKE_AREA_EX <- 142 // 钒瑰跷 ?卫粽 +SKILL_GRASP_HAND_OF_ANGER_EX <- 143 // 碟喻暧 遗面锅 +SKILL_SPEAR_OF_VICTORY_EX <- 144 // 蝓葬暧 玺 ?卫粽 +SKILL_REVENGE_OF_LIGHT_EX <- 145 // 维暧 犒热 ?卫粽 +SKILL_DUCKING_STRAIGHT_EX <- 146 // 涡缰 蝶?溯桧? ?卫粽 +SKILL_WILL_DRIVER_EX <- 147 // 尴 萄塭桧帼 ?卫粽 +SKILL_OPPRESSION_TALISMAN_EX <- 148 // 薯忆睡 ?卫粽 +SKILL_THROW_WEAPON_EX <- 149 // 剪摹? ?卫粽 + +CUSTOM_ANI_JUMP_PUNCH <- 0 // 薄? ?纂 (剪煽 桡击阳 薄?奢问) +CUSTOM_ANI_ANTIAIR_UPPER <- 1 // 横? +CUSTOM_ANI_DUCKING <- 2 // 涡缰 +CUSTOM_ANI_SWAY <- 3 // 蝶铮桧 +CUSTOM_ANI_GIANT_SWING_READY <- 4 // 渠?瞪问 : 遽绿 +CUSTOM_ANI_GIANT_SWING <- 5 // 渠?瞪问 : ?瞪 +CUSTOM_ANI_GIANT_SWING_FINAL <- 6 // 渠?瞪问 : 虞颤 +CUSTOM_ANI_SMASHER_TRY_GRAB <- 7 // 蝶衙敷 : 濩晦 晦紫 +CUSTOM_ANI_SMASHER_SUCCESS_GRAB <- 8 // 蝶衙敷 : 濩晦 撩奢 +CUSTOM_ANI_SMASHER_DASH <- 9 // 蝶衙敷 : 渠卫 ? 湍虽晦 +CUSTOM_ANI_DUCKING_BODYBLOW <- 10 // 尔蛤绾煎 +CUSTOM_ANI_QUAKE_AREA <- 11 // 钒瑰跷 +CUSTOM_ANI_WILL_DRIVER <- 12 // 尴 萄塭桧帼 +CUSTOM_ANI_WILL_DRIVER_SECOND <- 13 // 尴 萄塭桧帼 : 桧嘐 笮? 鼻鹧 +CUSTOM_ANI_LUCKY_STRAIGHT <- 14 // 楣郦蝶?溯桧? +CUSTOM_ANI_DUCKING_STRAIGHT <- 15 // 涡缰 蝶?溯桧? +CUSTOM_ANI_SECOND_UPPER <- 16 // 撮钟萄 横? +CUSTOM_ANI_DUCKING_UPPER <- 17 // 涡缰 横? +CUSTOM_ANI_HOLY_COUNTER_PRAY <- 18 // ?葬 苹遴搅 : 晦紫 +CUSTOM_ANI_HOLY_COUNTER_BODYBLOW <- 19 // ?葬 苹遴搅 : 夥蛤绾煎 +CUSTOM_ANI_GORGEOUS_COMBINATION <- 20 // 坚荡蝶 阐绿啻桧暮 +CUSTOM_ANI_CHOPPING_HAMMER <- 21 // 蟾? ?该 +CUSTOM_ANI_HURRICANE_OF_JUDGEMENT <- 22 // 褕?暧 ?螃葬 +CUSTOM_ANI_HURRICANE_OF_JUDGEMENT2 <- 23 // 褕?暧 ?螃葬 2颤 +CUSTOM_ANI_HOME_RUN_GRAB <- 24 // ?楛 : 濩晦 卫紫 +CUSTOM_ANI_HOME_RUN_CHARGE <- 25 // ?楛 : 濩晦 & 离虽 +CUSTOM_ANI_HOME_RUN_SMASH <- 26 // ?楛 : 蝶岳 +CUSTOM_ANI_BLADE_OF_PURE_WHITE <- 27 // 牖寥暧 蚝陈 +CUSTOM_ANI_HURRICANE_ROLL_HOOK <- 28 // ?葬馨樯 煤 : ? +CUSTOM_ANI_HURRICANE_ROLL_UPPER <- 29 // ?葬馨樯 煤 : 横? +CUSTOM_ANI_REPEATED_SMASH_START <- 30 // 陪问 : 罗颤 +CUSTOM_ANI_REPEATED_SMASH <- 31 // 陪问 : 陪颤 +CUSTOM_ANI_REPEATED_SMASH_FINAL <- 32 // 陪问 : 虞颤 +CUSTOM_ANI_THROW_WEAPON_READY <- 33 // 剪摹? : 遽绿 +CUSTOM_ANI_THROW_WEAPON_SWING <- 34 // 剪摹? : ?瞪 (?离虽卫 1?瞪 跷陛 赅暮) +CUSTOM_ANI_THROW_WEAPON_THROW <- 35 // 剪摹? : 瘫系 (?离虽陛 嬴栖贼 遽绿 -> 瘫系) +CUSTOM_ANI_DEFLECT_WALL <- 36 // 蛤?滓? 错 +CUSTOM_ANI_SPEAR_OF_VICTORY_READY <- 37 // 蝓葬暧 玺 : 遽绿&醱瞪 +CUSTOM_ANI_SPEAR_OF_VICTORY_THROW <- 38 // 蝓葬暧 玺 : 瘫系 +CUSTOM_ANI_HAMMER_OF_CONTRITION <- 39 // 溜?暧 蜂纂 +CUSTOM_ANI_HEAVENLY_COMBINATION <- 40 // ?绽葬 阐绿啻桧暮 +CUSTOM_ANI_DIVINE_CRUSH <- 41 // 蛤夥樯 觼楝卫 +CUSTOM_ANI_INFIGHTER_ATTACK12 <- 42 // 樯?桧搅 ?颤 1,2颤 +CUSTOM_ANI_INFIGHTER_ATTACK3 <- 43 // 樯?桧搅 ?颤 3颤 +CUSTOM_ANI_INFIGHTER_ATTACK4 <- 44 // 樯?桧搅 ?颤 4颤 +CUSTOM_ANI_INFIGHTER_ATTACK5 <- 45 // 樯?桧搅 ?颤 5颤 +CUSTOM_ANI_EXORCIST_ATTACK1 <- 46 // 霉葆饵 ?颤 1颤 +CUSTOM_ANI_EXORCIST_ATTACK2 <- 47 // 霉葆饵 ?颤 2颤 +CUSTOM_ANI_EXORCIST_ATTACK3 <- 48 // 霉葆饵 ?颤 3颤 +CUSTOM_ANI_SIDEWIND <- 49 // 饵桧萄谛樯萄 晦狱 +CUSTOM_ANI_SIDEWIND_SECOND <- 50 // 饵桧萄谛樯萄 跷陛颤 +CUSTOM_ANI_MACHINE_GUN_JAB <- 51 // 该褐勒 毁 : 翱颤 +CUSTOM_ANI_MACHINE_GUN_JAB_FINISH <- 52 // 该褐勒 毁 : ?栖卫 +CUSTOM_ANI_MACHINE_GUN_JAB_APPEND <- 53 // 该褐勒 毁 : 跷陛颤 +CUSTOM_ANI_THROW_TALISMAN1 <- 54 // 撩碳 : 湍虽晦1 +CUSTOM_ANI_THROW_TALISMAN2 <- 55 // 撩碳 : 湍虽晦2 +CUSTOM_ANI_APOCALYPSE <- 56 // 嬴?蚝董蝶 +CUSTOM_ANI_GALE_SMASH1 <- 57 // 韩?颤 : 横枭纂晦 +CUSTOM_ANI_GALE_SMASH2 <- 58 // 韩?颤 : ?舒脑晦 +CUSTOM_ANI_ATOMIC_SMASH <- 59 // 鼠谁问 +CUSTOM_ANI_BIG_BANG_PUNCH_READY <- 60 // 紧屡 ?纂 : 遽绿 +CUSTOM_ANI_BIG_BANG_PUNCH1 <- 61 // 紧屡 ?纂 : 1颤 +CUSTOM_ANI_BIG_BANG_PUNCH2 <- 62 // 紧屡 ?纂 : 2颤 +CUSTOM_ANI_BIG_BANG_PUNCH3 <- 63 // 紧屡 ?纂 : 3颤 +CUSTOM_ANI_BIG_BANG_PUNCH4 <- 64 // 紧屡 ?纂 : 4颤 +CUSTOM_ANI_HEAL_WIND_CAST <- 65 // ? 孺萄 : 议蝶? +CUSTOM_ANI_HEAL_WIND_BLAST <- 66 // ? 孺萄 : 嫦翕 +CUSTOM_ANI_BLUE_DRAGON1 <- 67 // 玺瑟问 : 当撩 +CUSTOM_ANI_BLUE_DRAGON2 <- 68 // 玺瑟问 : 瘫系遽绿 +CUSTOM_ANI_BLUE_DRAGON3 <- 69 // 玺瑟问 : 瘫系 +CUSTOM_ANI_CUTTING_DARKNESS_CHARGE <- 70 // 横菸陛脑晦 : 醱瞪 +CUSTOM_ANI_CUTTING_DARKNESS_SMASH <- 71 // 横菸陛脑晦 : ?舒脑晦 +CUSTOM_ANI_CUTTING_DARKNESS_FULL_SMASH <- 72 // 横菸 陛脑晦 : 醱瞪 ?舒脑晦 +CUSTOM_ANI_MACHINE_GUN_JAB_EX_LEFT <- 73 // 鬼? 该褐勒 毁 翱颤 谢 +CUSTOM_ANI_MACHINE_GUN_JAB_EX_RIGHT <- 74 // 鬼? 该褐勒 毁 翱颤 办 +CUSTOM_ANI_MACHINE_GUN_JAB_EX_FINISH <- 75 // 鬼? 该褐勒 毁 ?栖莲 +CUSTOM_ANI_HEAVENLY_COMBINATION_EX <- 76 // ?绽葬 阐绿啻桧暮[鬼?] +CUSTOM_ANI_REPEATED_SMASH_EX_FINISH <- 77 // 鬼? 陪问 陈葬晦 +CUSTOM_ANI_GROUND_CRASH <- 78 // 斜塭遴萄 蝶衙卫 + +CUSTOM_ATTACKINFO_JUMP_PUNCH <- 0 // 薄? ?纂 (奢煽 桡击阳 薄?奢问) +CUSTOM_ATTACKINFO_DASH_ATTACK_SMASH <- 1 // 渠卫 奢问 2颤箪 +CUSTOM_ATTACKINFO_ANTIAIR_UPPER <- 2 // 奢溜颤 +CUSTOM_ATTACKINFO_GIANT_SWING <- 3 // 渠?瞪问 : ?瞪 +CUSTOM_ATTACKINFO_GIANT_SWING_FINAL <- 4 // 渠?瞪问 : 虞颤 +CUSTOM_ATTACKINFO_SMASHER_TRY <- 5 // 蝶衙敷 濩晦 卫紫 +CUSTOM_ATTACKINFO_SMASHER_DASH <- 6 // 蝶衙敷 渠卫 +CUSTOM_ATTACKINFO_SMASHER_THROW <- 7 // 蝶衙敷 湍虽晦 +CUSTOM_ATTACKINFO_QUAKE_AREA <- 8 // 钒瑰跷 +CUSTOM_ATTACKINFO_LUCKY_STRAIGHT <- 9 // 楣郦 蝶?溯桧? +CUSTOM_ATTACKINFO_SECOND_UPPER <- 10 // 撮钟萄 横? +CUSTOM_ATTACKINFO_DUCKING_STRAIGHT <- 11 // 涡缰 蝶?溯桧? +CUSTOM_ATTACKINFO_DUCKING_BODYBLOW <- 12 // 涡缰 尔蛤绾煎 +CUSTOM_ATTACKINFO_DUCKING_UPPER <- 13 // 涡缰 横? +CUSTOM_ATTACKINFO_HOLY_COUNTER <- 14 // ?葬 苹遴搅 +CUSTOM_ATTACKINFO_GORGEOUS_COMBINATION1 <- 15 // 坚荡蝶 阐绿啻桧暮 : 毁 +CUSTOM_ATTACKINFO_GORGEOUS_COMBINATION2 <- 16 // 坚荡蝶 阐绿啻桧暮 : 蝶?溯桧? +CUSTOM_ATTACKINFO_GORGEOUS_COMBINATION3 <- 17 // 坚荡蝶 阐绿啻桧暮 : ? +CUSTOM_ATTACKINFO_CHOPPING_HAMMER <- 18 // 蟾? ?该 +CUSTOM_ATTACKINFO_HURRICANE_OF_JUDGEMENT <- 19 // 褕?暧 ?螃葬 +CUSTOM_ATTACKINFO_HOME_RUN_GRAB <- 20 // ?楛 : 濩晦 卫紫 +CUSTOM_ATTACKINFO_HOME_RUN_HIT <- 21 // ?楛 : 濩晦 撩奢 ? 1颤 +CUSTOM_ATTACKINFO_HOME_RUN_SMASH <- 22 // ?楛 : ?舒脑晦 +CUSTOM_ATTACKINFO_BLADE_OF_PURE_WHITE <- 23 // 牖寥暧 蚝陈 +CUSTOM_ATTACKINFO_HURRICANE_ROLL_HOOK <- 24 // ?葬馨樯 煤 : ? +CUSTOM_ATTACKINFO_HURRICANE_ROLL_UPPER <- 25 // ?葬馨樯 煤 : 横? +CUSTOM_ATTACKINFO_REPEATED_SMASH <- 26 // 陪问 : 陪颤 +CUSTOM_ATTACKINFO_REPEATED_SMASH_FINAL <- 27 // 陪问 : 虞颤 +CUSTOM_ATTACKINFO_THROW_WEAPON <- 28 // 剪摹? : 斩剪葬 颤问 +CUSTOM_ATTACKINFO_HAMMER_OF_CONTRITION <- 29 // 溜?暧 蜂纂 +CUSTOM_ATTACKINFO_HEAVENLY_COMBINATION1 <- 30 // ?绽葬 阐绿啻桧暮 : 1颤 +CUSTOM_ATTACKINFO_HEAVENLY_COMBINATION2 <- 31 // ?绽葬 阐绿啻桧暮 : 2颤 +CUSTOM_ATTACKINFO_HEAVENLY_COMBINATION3 <- 32 // ?绽葬 阐绿啻桧暮 : 3颤 +CUSTOM_ATTACKINFO_DIVINE_CRUSH <- 33 // 蛤夥樯 觼楝卫 +CUSTOM_ATTACKINFO_INFIGHTER_ATTACK1 <- 34 // 樯?桧搅 ?颤 1颤 +CUSTOM_ATTACKINFO_INFIGHTER_ATTACK2 <- 35 // 樯?桧搅 ?颤 2颤 +CUSTOM_ATTACKINFO_INFIGHTER_ATTACK3 <- 36 // 樯?桧搅 ?颤 3颤 +CUSTOM_ATTACKINFO_INFIGHTER_ATTACK4 <- 37 // 樯?桧搅 ?颤 4颤 +CUSTOM_ATTACKINFO_INFIGHTER_ATTACK5 <- 38 // 樯?桧搅 ?颤 5颤 +CUSTOM_ATTACKINFO_EXORCIST_ATTACK1 <- 39 // 霉葆饵 ?颤 1颤 +CUSTOM_ATTACKINFO_EXORCIST_ATTACK2 <- 40 // 霉葆饵 ?颤 2颤 +CUSTOM_ATTACKINFO_EXORCIST_ATTACK3 <- 41 // 霉葆饵 ?颤 3颤 +CUSTOM_ATTACKINFO_SIDEWIND <- 42 // 饵桧萄谛樯萄 +CUSTOM_ATTACKINFO_SIDEWIND_SECOND <- 43 // 饵桧萄谛樯萄 跷陛颤 +CUSTOM_ATTACKINFO_MACHINE_GUN_JAB <- 44 // 该褐勒 毁 : 翱颤 +CUSTOM_ATTACKINFO_MACHINE_GUN_JAB_FINISH <- 45 // 该褐勒 毁 : ?栖卫 +CUSTOM_ATTACKINFO_MACHINE_GUN_JAB_APPEND <- 46 // 该褐勒 毁 : 跷陛颤 +CUSTOM_ATTACKINFO_THROW_TALISMAN1 <- 47 // 撩碳 : 湍虽晦1 +CUSTOM_ATTACKINFO_THROW_TALISMAN2 <- 48 // 撩碳 : 湍虽晦2 +CUSTOM_ATTACKINFO_GALE_SMASH1 <- 49 // 韩?颤 : 横枭纂晦 +CUSTOM_ATTACKINFO_GALE_SMASH2 <- 50 // 韩?颤 : ?舒脑晦 +CUSTOM_ATTACKINFO_ATOMIC_SMASH_SWING <- 51 // 鼠谁问 : ?舒脑晦 +CUSTOM_ATTACKINFO_ATOMIC_SMASH_SMASH <- 52 // 鼠谁问 : 顶溥纂晦 +CUSTOM_ATTACKINFO_BIG_BANG_PUNCH_READY <- 53 // 紧屡 ?纂 : 遽绿 +CUSTOM_ATTACKINFO_BIG_BANG_PUNCH1 <- 54 // 紧屡 ?纂 : 1颤 +CUSTOM_ATTACKINFO_BIG_BANG_PUNCH2 <- 55 // 紧屡 ?纂 : 2颤 +CUSTOM_ATTACKINFO_BIG_BANG_PUNCH3 <- 56 // 紧屡 ?纂 : 3颤 +CUSTOM_ATTACKINFO_BIG_BANG_PUNCH4 <- 57 // 紧屡 ?纂 : 4颤 +CUSTOM_ATTACKINFO_BLUE_DRAGON <- 58 // 玺瑟问 +CUSTOM_ATTACKINFO_CUTTING_DARKNESS <- 59 // 横菸陛脑晦 +CUSTOM_ATTACKINFO_MACHINE_GUN_JAB_EX <- 60 // 鬼? 该褐勒 毁 : 翱颤 +CUSTOM_ATTACKINFO_MACHINE_GUN_JAB_EX_FINISH <- 61 // 鬼? 该褐勒 毁 : ?栖卫 +CUSTOM_ATTACKINFO_HEAVENLY_COMBINATION_EX2 <- 62 // ?绽葬 阐绿啻桧暮 : 2颤 +CUSTOM_ATTACKINFO_HEAVENLY_COMBINATION_EX3 <- 63 // ?绽葬 阐绿啻桧暮 : 3颤 +CUSTOM_ATTACKINFO_HEAVENLY_COMBINATION_EX4 <- 64 // ?绽葬 阐绿啻桧暮 : 4颤 +CUSTOM_ATTACKINFO_HEAVENLY_COMBINATION_EX5 <- 65 // ?绽葬 阐绿啻桧暮 : 5颤 +CUSTOM_ATTACKINFO_REPEATED_SMASH_EX_LIFT <- 66 // 鬼? 陪问 嗥办晦 +CUSTOM_ATTACKINFO_REPEATED_SMASH_EX_FINAL <- 67 // 鬼? 陪问 陈葬晦 +CUSTOM_ATTACKINFO_GROUND_CRASH1 <- 68 // 斜塭遴萄 蝶衙卫 1颤 +CUSTOM_ATTACKINFO_GROUND_CRASH2 <- 69 // 斜塭遴萄 蝶衙卫 2颤 + + +ATTACK_DIRECTION_UP <- 0 // 萤溥纂晦 +ATTACK_DIRECTION_HORIZON <- 1 // 热?纂晦 +ATTACK_DIRECTION_DOWN <- 2 // 顶溥纂晦 +ATTACK_DIRECTION_MAX <- 3 + +ATTACKTYPE_PHYSICAL <- 0 // 絮董 僭葬 奢问 +ATTACKTYPE_MAGICAL <- 1 // 絮董 葆彻 奢问 +ATTACKTYPE_ABSOLUTE <- 2 // 寞横 鼠卫 奢问 +ATTACKTYPE_MAX <- 3 + +ATTACKTARGET_OWN <- 0 // 濠褐 +ATTACKTARGET_FRIEND <- 1 // 嬴捱 +ATTACKTARGET_ENEMY <- 2 // (濠褐娄 嬴捱 桧谖暧) 瞳 + +DAMAGEACT_NONE <- 0 // 奁拟 桡挤 +DAMAGEACT_DAMAGE <- 1 // 等嘐虽 赅暮 +DAMAGEACT_DOWN <- 2 // 棻遴 +DAMAGEACT_DAMAGE_EXCEPT_HUMAN <- 3 // 晦狱 等嘐虽, ?试嬴该朝 奁拟桡挤 + +KNOCK_BACK_TYPE_NORMAL <- 0 // 橾奁 +KNOCK_BACK_TYPE_KNOCK_BACK <- 1 // 庵煎 号桧 尘葡 (傚寥) +KNOCK_BACK_TYPE_SHORT_KNOCK_BACK_ <- 2 // 庵煎 擒除 尘葡 (傚寥) +KNOCK_BACK_TYPE_PIXEL_WITHOUT_DAMAGE_TIME <- 3 // NORMAL_DAMAGE_BACK_TIME 卫除翕寰 虽姜? ?捻虏踯 庵煎 尘葡, 桧翕酝 唳霜桧 ?葬贼 桧翕紫 夸辞 +KNOCK_BACK_TYPE_NOT_BACK <- -1 // 庵煎 寰尘葡 + +HIT_DIRECTION_AUTO <- 0 // 濠翕 ?涤 +HIT_DIRECTION_FRONT <- 1 // 擅戏煎 +HIT_DIRECTION_BACK <- 2 // 庵煎 +HIT_DIRECTION_OUTER <- 3 // 夥梨薹戏煎 +HIT_DIRECTION_INNER <- 4 // 寰薹戏煎 + +WEAPON_SUBTYPE_CROSS <- 0 // 褊濠陛 +WEAPON_SUBTYPE_ROSARY <- 1 // 腻舆 +WEAPON_SUBTYPE_TOTEM <- 2 // 餍蛊 +WEAPON_SUBTYPE_SCYTHE <- 3 // 陷 +WEAPON_SUBTYPE_BATTLE_AXE <- 4 // 寡? 挡蝶 +WEAPON_SUBTYPE_MAX <- 5 + +GROW_TYPE_PRIEST <- 0 // ?葬蝶? +GROW_TYPE_CRUSADER <- 1 // 觼瑞撮桧涡 +GROW_TYPE_INFIGHTER <- 2 // 樯?桧搅 +GROW_TYPE_EXORCIST <- 3 // 霉葆饵 +GROW_TYPE_AVENGER <- 4 // 横渐荡 +GROW_TYPE_PRIEST_G <- 5 // ?葬蝶?G + +EXTENDED_PUNCH_MOTION_DASH_ATTACK <- 0 // 渠卫 奢问 +EXTENDED_PUNCH_MOTION_SECOND_UPPER <- 1 // 撮钟萄 横? +EXTENDED_PUNCH_MOTION_MAX <- 2 + +BASE_ATTACK_TYPE_DEFAULT <- 0 // 晦狱 +BASE_ATTACK_TYPE_INFIGHTER <- 1 // 樯?桧搅 舆详 +BASE_ATTACK_TYPE_EXORCIST <- 2 // 霉葆饵 剪煽 + +BATTLE_AURA_MOTION_ATTACK_12 <- 0 // ?颤1,2 (毁) +BATTLE_AURA_MOTION_ATTACK_3 <- 1 // ?颤3 (蝶?溯桧?) +BATTLE_AURA_MOTION_ATTACK_4 <- 2 // ?颤4 (横?) +BATTLE_AURA_MOTION_ATTACK_5 <- 3 // ?颤5 (顶溥镒晦) +BATTLE_AURA_MOTION_GORGEOUS_COMBINATION <- 4 // 坚荡蝶 阐绿啻桧暮 +BATTLE_AURA_MOTION_SIDEWIND <- 5 // 饵桧萄谛樯萄 +BATTLE_AURA_MOTION_SIDEWIND_SECOND <- 6 // 饵桧萄谛樯萄 跷陛颤 +BATTLE_AURA_MOTION_MAX <- 7 + + + +CHANGE_STATUS_TYPE_PHYSICAL_ATTACK <- 0 // 僭葬 奢问 +CHANGE_STATUS_TYPE_MAGICAL_ATTACK <- 1 // 葆彻 奢问 +CHANGE_STATUS_TYPE_MAGICAL_DEFENSE <- 2 // 葆彻 寞横溘 +CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE <- 3 // 僭葬 寞横 +CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK <- 4 // 潍绿 等嘐虽 +CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE <- 5 // 潍绿 僭葬 寞横 +CHANGE_STATUS_TYPE_PHYSICAL_ATTACK_BONUS <- 6 // 僭葬 奢问 尔伞蝶 +CHANGE_STATUS_TYPE_MAGICAL_ATTACK_BONUS <- 7 // 葆彻 奢问 尔伞蝶 +CHANGE_STATUS_TYPE_JUMP_POWER <- 8 // 薄?溘 +CHANGE_STATUS_TYPE_JUMP_SPEED_RATE <- 9 // 薄? 楼紫 +CHANGE_STATUS_TYPE_ATTACK_SPEED <- 10 // 奢问 楼紫 +CHANGE_STATUS_TYPE_MOVE_SPEED <- 11 // 桧翕 楼紫 +CHANGE_STATUS_TYPE_CAST_SPEED <- 12 // 议蝶? 楼紫 +CHANGE_STATUS_TYPE_HP_MAX <- 13 // HP MAX +CHANGE_STATUS_TYPE_HP_REGEN_RATE <- 14 // HP ?犒楼紫 +CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE <- 15 // 僭葬 觼葬?锈 ?? ?睦 +CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE <- 16 // 葆彻 觼葬?锈 ?? ?睦 +CHANGE_STATUS_TYPE_PHYSICAL_BACK_ATTACK_CRITICAL <- 17 // 寥横鸥 觼葬?锈 ?? ?睦 +CHANGE_STATUS_TYPE_MAGICAL_BACK_ATTACK_CRITICAL <- 18 // 寥横鸥 觼葬?锈 ?? ?睦 +CHANGE_STATUS_TYPE_CRITICAL_TOLERANCE_RATE <- 19 // 觼葬?锈 顶撩 +CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_FIRE <- 20 // ?楼撩荡? +CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_WATER <- 21 // 热楼撩荡? +CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK <- 22 // 檩楼撩荡? +CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT <- 23 // 赀楼撩荡? +CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL <- 24 // 赅苌 楼撩荡? +CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ZERO <- 25 // 楼撩荡?溘 0 +CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL <- 26 // 赅苌 鼻鹧 +CHANGE_STATUS_TYPE_ACTIVEPROPERTY_STUCK <- 27 // 蝶晒(??) +CHANGE_STATUS_TYPE_BACK_ATTACK_STUCK_TOLERANCE <- 28 // 寥横鸥 蝶晒 顶撩 [顶陛 蜃击阳] (% 钦嫔) +CHANGE_STATUS_TYPE_MP_REGEN_RATE <- 29 // MP ?犒 楼紫 +CHANGE_STATUS_TYPE_EXTRA_SPEED_RATE <- 30 // ??卫 唳霜 +CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK <- 31 // 潍绿 葆彻 奢问 +CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE <- 32 // 潍绿 葆彻 寞横 +CHANGE_STATUS_TYPE_STUCK <- 33 // 蝶晒 [顶陛 阳莴阳](瞳酝) +CHANGE_STATUS_TYPE_HIT_RECOVERY <- 34 // ?? 葬醴帼葬 +CHANGE_STATUS_TYPE_MELEE_HIT_DELAY <- 35 // 斩剪葬 颤问卫 ? 裁溯桧 +CAHNGE_STATUS_TYPE_EQUIPMENT_ALL_STAT <- 36 // 潍绿暧 赅苌 栋溘纂蒂 萤溥还 阳. +CHANGE_STATUS_TYPE_CUSTOM <- 37 +CHANGE_STATUS_TYPE_EXP_DOUBLE <- 38 // 唳?纂 2寡 +CHANGE_STATUS_TYPE_EVIL_UP <- 39 // ?葆溘 堪挤 +CHANGE_STATUS_TYPE_EVIL_DOWN <- 40 // 92 ?葆溘 雪挤 +CHANGE_STATUS_TYPE_RIGIDITY <- 41 // 唳霜紫 +CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE <- 42 // ?楼撩 鬼? +CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER <- 43 // 热楼撩 鬼? +CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK <- 44 // 檩楼撩 鬼? +CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT <- 45 // 赀楼撩 鬼? +CHANGE_STATUS_TYPE_ELEMENT_ATTACK_ALL <- 46 // 赅苌 楼撩 鬼? +CHANGE_STATUS_TYPE_DISEASE <- 47 // 韩煽 +CHANGE_STATUS_TYPE_MP_MAX <- 48 // MP MAX +CHANGE_STATUS_TYPE_COOLTIME_DECLINE <- 49 // 蝶鉴 藤颤歜 +CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE <- 50 // 僭葬 觼葬?锈 等嘐虽 隶陛 绿徽 +CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE <- 51 // 葆彻 觼葬?锈 等嘐虽 隶陛 绿徽 +CHANGE_STATUS_TYPE_BLOODWAR_GROW_ABILITY <- 52 // 绾楝萄 湍瞪(?瘫暧鳖) 撩潍 +CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK <- 53 // 絮董 等嘐虽 僭葬 奢问溘 渗? +CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK <- 54 // 絮董 等嘐虽 葆彻 奢问溘 渗? +CHANGE_STATUS_TYPE_SUMMON_SKILL_POWER_BONUS_RATE <- 55 // 葆彻饵 模?热暧 蝶鉴 奢问溘 隶陛 +CHANGE_STATUS_TYPE_ANTIEVIL <- 56 // 褒薯 ?葆溘 热纂 亵姜 +CHANGE_STATUS_TYPE_PHYSICAL_ABSOLUTE_DAMAGE <- 57 // 僭葬 瞰渠 等嘐虽 or 僭葬 寞横鼠卫 等嘐虽 +CHANGE_STATUS_GHOST_TRAIN_NO_BREATH_TIME <- 58 // 嵘沧翮离 韩冲 卫除 渗唳 +CHANGE_STATUS_CHARACTER_LINK <- 59 // 议葛搅 葭觼 +CHANGE_STATUS_GOLD_INCREASE <- 60 +CHANGE_STATUS_TYPE_MAX <- 61 + + +OBJECTTYPE_OBJECT <- 0 // 譆鼻嫔 螃粽薛? +OBJECTTYPE_COLLISION <- 1 // 醱给 螃粽薛? (OBJECTTYPE_OBJECT ?嫔) +OBJECTTYPE_ACTIVE <- 17 // 栋翕 螃粽薛? (OBJECTTYPE_COLLISION ?嫔) +OBJECTTYPE_CHARACTER <- 273 // 议葛搅 螃粽薛? (OBJECTTYPE_ACTIVE ?嫔) +OBJECTTYPE_MONSTER <- 529 // 跨蝶搅 螃粽薛? (OBJECTTYPE_ACTIVE ?嫔) +OBJECTTYPE_RIDABLEOBJECT <- 4625 // 骁匙 妇湿 螃粽薛? (OBJECTTYPE_MONSTER ?嫔) +OBJECTTYPE_PASSIVE <- 33 // 热翕 螃粽薛? (OBJECTTYPE_COLLISION ?嫔) +OBJECTTYPE_ITEM <- 289 // 嬴桧蛊 螃粽薛? (OBJECTTYPE_PASSIVE ?嫔) +OBJECTTYPE_TRAP <- 545 // ?椰 螃粽薛? (OBJECTTYPE_PASSIVE ?嫔) +OBJECTTYPE_BREAKABLE <- 1057 // ?惚 陛栋? 螃粽薛?(尔僭鼻濠 售?) (OBJECTTYPE_PASSIVE ?嫔) +OBJECTTYPE_PET <- 65 // 褐热 (OBJCTTYPE_COLLISION ?嫔) +OBJECTTYPE_CREATURE <- 129 // 觼葬药 (OBJCTTYPE_COLLISION ?嫔) +OBJECTTYPE_DRAWONLY <- 2 // 斜葬晦 瞪辨 螃粽薛? (OBJECTTYPE_OBJECT ?嫔) +OBJECTTYPE_VIRTUALCHARACTER <- 18 // 渠晦褒缣怃 噙朝 陛鼻 议葛搅 (OBJECTTYPE_DRAWONLY ?嫔) +OBJECTTYPE_NPC <- 34 // 渠晦褒暧 NPC (OBJECTTYPE_DRAWONLY ?嫔) +OBJECTTYPE_DONKEY <- 66 // 渠晦褒暧 偃樯鼻薄 (OBJECTTYPE_DRAWONLY ?嫔) +OBJECTTYPE_VIRTUALCREATURE <- 130 // 渠晦褒缣怃 噙朝 陛鼻 觼葬药(OBJECTTYPE_DRAWONLY ?嫔) +OBJECTTYPE_DISJOINTSHOP <- 258 // 渠晦褒暧 ?羹陛 ?羹 鼻薄(OBJECTTYPE_DRAWONLY ?嫔) +OBJECTTYPE_VIRTUALMONSTER <- 514 // 渠晦褒缣怃 噙朝 陛鼻 跨蝶搅 (OBJECTTYPE_DRAWONLEY ?嫔) +OBJECTTYPE_NONE_DELETE <- 1026 // 螃粽薛? 饷薯 卫 饷薯肾虽 强朝 螃粽薛? (OBJECTTYPE_DRAWONLEY ?嫔) +OBJECTTYPE_DEFINE_END <- 61440 + + +CONVERT_TABLE_TYPE_DAMAGE <- 0 // 等嘐虽 +CONVERT_TABLE_TYPE_DEFENSE <- 1 // 寞横溘 +CONVERT_TABLE_TYPE_HP <- 2 // HP MAX +CONVERT_TABLE_TYPE_PHYSICAL_ATTACK <- 3 // ? +CONVERT_TABLE_TYPE_PHYSICAL_DEFENSE <- 4 // 羹溘 +CONVERT_TABLE_TYPE_MAGICAL_ATTACK <- 5 // 虽栋 +CONVERT_TABLE_TYPE_MAGICAL_DEFENSE <- 6 // 姜褐溘 +CONVERT_TABLE_TYPE_PHYSICAL_ABSOLUTE_DAMAGE <- 7 // 僭葬 瞰渠 等嘐虽 +CONVERT_TABLE_TYPE_PHYSICAL_DAMAGE_REDUCE <- 8 // 僭葬 等嘐虽 尔姜 +CONVERT_TABLE_TYPE_MAGICAL_ABSOLUTE_DAMAGE <- 9 // 葆彻 瞰渠 等嘐虽 +CONVERT_TABLE_TYPE_MAGICAL_DAMAGE_REDUCE <- 10 // 葆彻 等嘐虽 尔姜 +CONVERT_TABLE_TYPE_ACTIVESTATUS_DAMAGE_REDUCE <- 11 // 鼻鹧桧鼻 等嘐虽 尔姜. +CONVERT_TABLE_TYPE_MP <- 12 // MP MAX +CONVERT_TABLE_TYPE_SKILL_POWER <- 13 // 蝶鉴 絮董等嘐虽 +CONVERT_TABLE_TYPE_MAX <- 14 + +ENUM_EQUIPMENTTYPE_AVATAR_HEADGEAR <- 0 // 赅濠 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_HAIR <- 1 // 该葬 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_FACE <- 2 // 橡掉 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_JACKET <- 3 // 鼻暧 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_PANTS <- 4 // ?暧 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_SHOES <- 5 // 褐嫦 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_BREAST <- 6 // 迹陛蝙 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_WAIST <- 7 // ?葬 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_SKIN <- 8 // 跺仪梃 嬴夥颤 +ENUM_EQUIPMENTTYPE_AVATAR_AURORA <- 9 // 螃煎塭 嬴夥颤 +ENUM_EQUIPMENTTYPE_WEAPON <- 10 // 鼠晦 +ENUM_EQUIPMENTTYPE_TITLE <- 11 // 芦? +ENUM_EQUIPMENTTYPE_JACKET <- 12 // 鼻暧 +ENUM_EQUIPMENTTYPE_SHOULDER <- 13 // 横枭 +ENUM_EQUIPMENTTYPE_PANTS <- 14 // ?暧 +ENUM_EQUIPMENTTYPE_SHOES <- 15 // 褐嫦 +ENUM_EQUIPMENTTYPE_WAIST <- 16 // ?葬 +ENUM_EQUIPMENTTYPE_AMULET <- 17 // 迹勘桧 +ENUM_EQUIPMENTTYPE_WRIST <- 18 // ?镐 +ENUM_EQUIPMENTTYPE_RING <- 19 // 奁虽 +ENUM_EQUIPMENTTYPE_SUPPORT <- 20 // 尔亵 +ENUM_EQUIPMENTTYPE_MAGIC_STONE <- 21 // 葆彻戮 +ENUM_EQUIPMENTTYPE_MAX <- 22 +ENUM_EQUIPMENTTYPE_AVATAR_START <- 0 // 嬴夥颤 卫蒙 +ENUM_EQUIPMENTTYPE_AVATAR_END <- 8 // 嬴夥颤 部 +ENUM_EQUIPMENTTYPE_AVATAR_SELL_END <- 8 // 撮塭憧 ?衙 嬴夥颤 部 +ENUM_EQUIPMENTTYPE_AVATAR_MAX <- 9 // 嬴夥颤 偃热 +ENUM_EQUIPMENTTYPE_ITEM_START <- 10 // (嬴夥颤陛 嬴棋) 嬴桧蛊 卫蒙 +ENUM_EQUIPMENTTYPE_VISIBLE_END <- 11 // 谖? 渗? 潍绿 部 +ENUM_EQUIPMENTTYPE_CREATURE <- 22 // 觼葬药 +ENUM_EQUIPMENTTYPE_ARTIFACT_RED <- 23 // 嬴??? 罗廓箪 蜗煜 +ENUM_EQUIPMENTTYPE_ARTIFACT_BLUE <- 24 // 嬴??? 舒廓箪 蜗煜 +ENUM_EQUIPMENTTYPE_ARTIFACT_GREEN <- 25 // 嬴??? 撮廓箪 蜗煜 +ENUM_EQUIPMENTTYPE_ARTIFACT_END <- 26 +ENUM_EQUIPMENTTYPE_CREATURE_END <- 25 +ENUM_EQUIPMENTTYPE_CREATURE_MAX <- 24 +ENUM_EQUIPMENTTYPE_ARTIFACT <- 0 // 嬴??? 渠?樯策蝶 +ENUM_EQUIPMENTTYPE_TOTAL_MAX <- 24 +ENUM_EQUIPMENTTYPE_VISIBLE_MAX <- 13 // 谖? 渗? 潍绿 偃热 +ENUM_EQUIPMENTTYPE_ARMOR_START <- 12 +ENUM_EQUIPMENTTYPE_ARMOR_END <- 21 +ENUM_EQUIPMENTTYPE_ARMOR_NUM <- 10 +ENUM_EQUIPMENTTYPE_EXPAND_EQUIPSLOT_REVISE <- 10 // 橾奁潍杂 蜗煜娄 奢念潍杂 蜗煜除暧 尔姜纂 + +SKILL_BACK_STEP <- 169 // 寥蝶变 +SKILL_CANCEL_BACK_STEP <- 170 // 警蜗 寥蝶变 +SKILL_CANCEL_THROW_ITEM <- 171 // 警蜗 嬴桧蛊 瘫系 +SKILL_ARMOR_MASTERY_LIGHT <- 172 // 唳骨 葆蝶搅葬 +SKILL_ARMOR_MASTERY_HEAVY <- 173 // 酝骨 葆蝶搅葬 +SKILL_BASIC_ATTACK_UP <- 174 // ?颤 鬼? +SKILL_JUMP_POWER_UP <- 175 // 紫擒 +SKILL_MAGICAL_ATTACK_UP <- 176 // 坚渠暧 晦橘 +SKILL_THROW_MASTERY <- 177 // 瘫系 葆蝶搅葬 +SKILL_PHYSICAL_BACK_ATTACK_CRITICAL <- 178 // 僭葬 寥 横鸥 +SKILL_DISJOINT_ITEM <- 179 // 嬴桧蛊 ?羹 +SKILL_SUPER_ARMOR_ON_CAST <- 180 // 碳掉暧 暧虽 +SKILL_COMPOUND_CRAFT <- 181 // 亵?:撮奢 +SKILL_COMPOUND_WEAVING <- 182 // 亵?:寞霜 +SKILL_COMPOUND_MACHINE <- 183 // 亵?:晦啗 +SKILL_COMPOUND_CHEMISTRY <- 184 // 亵?:?? +SKILL_ARMOR_MASTERY_LEATHER <- 185 // 陛避 骨褡 葆蝶搅葬 +SKILL_PHYSICAL_CRITICAL_HIT_UP <- 186 // 僭葬 觼葬?锈 ?? +SKILL_ARMOR_MASTERY_CLOTH <- 187 // 茧 寞横掘 葆蝶搅葬 +SKILL_MAGICAL_CRITICAL_HIT_UP <- 188 // 葆彻 觼葬?锈 ?? +SKILL_MAGICAL_BACK_ATTACK_CRITICAL <- 189 // 葆彻 寥 横鸥 +SKILL_QUICK_STANDING <- 190 // 摆 蝶鼹注 +SKILL_BASIC_HP_MAX_UP <- 195 // 奢?? 念瘫潍 瞪辨 蝶鉴 - 当赀溘 熨湿 +SKILL_ARMOR_MASTERY_PLATE <- 196 // ?旎 葆蝶搅葬 +SKILL_GUILD_STATUS_UP <- 200 // 望萄 蝶鉴 +SKILL_FEATURE_STAT_PHYSICAL_ATTACK_UP <- 210 // ? ?撩 +SKILL_FEATURE_STAT_PHYSICAL_DEFENCE_UP <- 211 // 羹溘 ?撩 +SKILL_FEATURE_STAT_MAGICAL_ATTACK_UP <- 212 // 虽栋 ?撩 +SKILL_FEATURE_STAT_MAGICAL_DEFENCE_UP <- 213 // 姜褐 ?撩 +SKILL_FEATURE_STAT_STUCK_UP <- 214 // 瞳酝睦 ?撩 +SKILL_FEATURE_STAT_ACTIVEPROPERTY_STUCK_UP <- 215 // ??徽 ?撩 +SKILL_FEATURE_STAT_HP_REGEN_RATE_UP <- 216 // HP 葬薇 ?撩 +SKILL_FEATURE_STAT_MP_REGEN_RATE_UP <- 217 // MP 葬薇 ?撩 +SKILL_FEATURE_STAT_ELEMENT_ATTACK_ALL_UP <- 218 // 赅苌 楼撩 鬼? +SKILL_FEATURE_STAT_ELEMENT_TOLERANCE_ALL_UP <- 219 // 赅苌 楼撩 荡? +SKILL_MAX <- 220 +SKILL_FEATURE_STAT_START <- 210 +SKILL_FEATURE_STAT_MAX <- 10 // 蝶苏 ?撩 偃热 + + +ACTIVESTATUS_SLOW <- 0 // 蜗煎办 +ACTIVESTATUS_FREEZE <- 1 // ?葬锷 +ACTIVESTATUS_POISON <- 2 // ?桧阕 +ACTIVESTATUS_STUN <- 3 // 蝶欐 +ACTIVESTATUS_CURSE <- 4 // 醴蝶 +ACTIVESTATUS_BLIND <- 5 // 绾塭樯萄 +ACTIVESTATUS_LIGHTNING <- 6 // 塭桧?棚 +ACTIVESTATUS_STONE <- 7 // 蝶驿 +ACTIVESTATUS_SLEEP <- 8 // 蜗董 +ACTIVESTATUS_BURN <- 9 // ?鼻 +ACTIVESTATUS_WEAPON_BREAK <- 10 // 鼠晦 ?惚 +ACTIVESTATUS_BLEEDING <- 11 // 绾葬注 +ACTIVESTATUS_HASTE <- 12 // ?桧蝶? +ACTIVESTATUS_BLESS <- 13 // 绾溯蝶 +ACTIVESTATUS_ELEMENT <- 14 // 县溯试? +ACTIVESTATUS_CONFUSE <- 15 // ?坞 +ACTIVESTATUS_HOLD <- 16 // ?萄 +ACTIVESTATUS_ARMOR_BREAK <- 17 // 骨褡 ?惚 +ACTIVESTATUS_MAX <- 18 + + +GROW_TYPE_PRIEST <- 0 /// ?葬蝶? +GROW_TYPE_CRUSADER <- 1 /// 觼瑞撮桧涡 +GROW_TYPE_INFIGHTER <- 2 /// 樯?桧搅 +GROW_TYPE_EXORCIST <- 3 /// 霉葆饵 +GROW_TYPE_AVENGER <- 4 /// 横渐荡 + + +ENUM_CHARACTERJOB_SWORDMAN <- 0 /// 匐饵 +ENUM_CHARACTERJOB_FIGHTER <- 1 /// 问瘫陛 +ENUM_CHARACTERJOB_GUNNER <- 2 /// 剪伞 +ENUM_CHARACTERJOB_MAGE <- 3 /// 葆彻饵 +ENUM_CHARACTERJOB_PRIEST <- 4 /// ?葬蝶? +ENUM_CHARACTERJOB_AT_GUNNER <- 5 /// 罹撩 剪伞 +ENUM_CHARACTERJOB_THIEF <- 6 /// 紫舜 +ENUM_CHARACTERJOB_AT_FIGHTER <- 7 /// 陴撩 问瘫陛 +ENUM_CHARACTERJOB_AT_MAGE <- 8 /// 陴撩 葆彻饵 +ENUM_CHARACTERJOB_DEMONIC_SWORDMAN <- 9 /// 葆匐饵 +ENUM_CHARACTERJOB_CREATOR_MAGE <- 10 /// 觼葬缣桧搅 +ENUM_CHARACTERJOB_MAX <- 11 /// + + +ENUM_IS_REVERSE <- 0 +ENUM_IS_START <- 1 +ENUM_IS_PAUSE <- 2 +ENUM_IS_END <- 3 +ENUM_IS_INTERPOLATE_ATTACKBOX <- 4 +ENUM_NEVER_APPLY_ANOTHER_PLAYERS_EFFECT_ALPHA_RATE <- 5 +ENUM_IS_APPLY_ANOTHER_PLAYERS_EFFECT_ALPHA_RATE <- 6 +ENUM_ANIMATION_BOOL_MAX <- 7 + + +MODULE_TYPE_NONE <- -1 +MODULE_TYPE_ENTRANCE <- 0 +MODULE_TYPE_ROOM_LIST <- 1 // 葆击 +MODULE_TYPE_SELECT_DUNGEON <- 2 // 湍瞪 摹鸥?贼 +MODULE_TYPE_MAIN_GAME <- 3 // 橾奁湍瞪(桧啗 ??) +MODULE_TYPE_PVP <- 4 // 念潍 +MODULE_TYPE_FAIR_PVP <- 5 // 奢念 +//MODULE_TYPE_LABYRINTH <- 7 // 饵塭飓 +MODULE_TYPE_SELECT_CHANNEL <- 6 +MODULE_TYPE_WARROOM <- 7 // 瞪爵虽羲 +//MODULE_TYPE_CHAOS <- 8 +MODULE_TYPE_LOGIN <- 8 +MODULE_TYPE_ASSAULT <- 9 // 谆办濠 +MODULE_TYPE_DEAD_TOWER <- 10 // 饵鳖 +MODULE_TYPE_BLOOD_SYSTEM <- 11 // 鼠?暧 薯钦 +MODULE_TYPE_DESPAIR_TOWER <- 12 //瞰蜂暧鳖 + +// 旋煎弊褒 钟蘸陇 +MODULE_TYPE_BOSS_TOWER <- 13 //褕翱暧 瘫晦潍 +MODULE_TYPE_ADVANCE_ALTAR <- 14 //霞问暧 薯钦 + +MODULE_TYPE_LOAD <- 15 +MODULE_TYPE_TOURNAMENT <- 16 +MODULE_TYPE_MAX <- 17 +MODULE_TYPE_PVP_TYPE <- 18 // 念瘫潍, 谆办濠, 瞪爵虽羲击 ?药 虽芦 +MODULE_TYPE_DUNGEON_TYPE <- 19 // 湍瞪, 饵鳖, 鼠薯蒂 ?药 虽芦 +MODULE_TYPE_ALL <- 20 + +//MODULE_TYPE_LOAD <- 13 +//MODULE_TYPE_TOURNAMENT <- 14 +//MODULE_TYPE_MAX <- 15 +//MODULE_TYPE_PVP_TYPE <- 16 // 念瘫潍, 谆办濠, 瞪爵虽羲击 ?药 虽芦 +//MODULE_TYPE_DUNGEON_TYPE <- 17 // 湍瞪, 饵鳖, 鼠薯蒂 ?药 虽芦 +//MODULE_TYPE_ALL <- 18 // 赅苌 赅菊击 虽芦 + + +ATTACKTYPE_PHYSICAL <- 0 /// 絮董 僭葬 奢问 +ATTACKTYPE_MAGICAL <- 1 /// 絮董 葆彻 奢问 +ATTACKTYPE_ABSOLUTE <- 2 /// 寞横 鼠卫 奢问 +ATTACKTYPE_LIGHT <- 3 +ATTACKTYPE_DARK <- 4 +ATTACKTYPE_WATER <- 5 +ATTACKTYPE_FIRE <- 6 +ATTACKTYPE_MAX <- 7 + +BUFF_CAUSE_NORMAL <- 0// 橾奁 横?蛤虽 伪擎 颤殓 +BUFF_CAUSE_ACTIVE_STATUS <- 1// 鼻鹧桧鼻 +BUFF_CAUSE_SKILL <- 2 // 蝶鉴 +BUFF_CAUSE_EXCEPTIONAL <- 3 // 蕨谖籀葬蒂 嫔?(葆击缣怃紫 嵘虽肾朝 帼? 嬴桧夔 伪擎 匙) +BUFF_NONE <- 4 // 嬴鼠楛匙紫 ?虽 强挤 +BUFF_CAUSE_MAX <- 5 + + + +PAUSETYPE_NONE <- 0 /// 橾卫姜虽 寰? +PAUSETYPE_OBJECT <- 1 /// 螃粽薛?虏 橾卫姜虽 (Appendage, 鼻鹧 渗?, 桧??朝 啗楼 给嬴马, 酝溘 嘐瞳辨) +PAUSETYPE_WORLD <- 2 /// 瞪 撮啗陛 橾卫姜虽 (Appendage, 鼻鹧 渗?, 桧??紫 姜虽) + +ENUM_ELEMENT_FIRE <- 0 /// ? +ENUM_ELEMENT_WATER <- 1 /// 热 +ENUM_ELEMENT_DARK <- 2 /// 檩 +ENUM_ELEMENT_LIGHT <- 3 /// 赀 +ENUM_ELEMENT_NONE <- 4 /// 鼠 +ENUM_ELEMENT_MAX <- 4 /// == ENUM_ELEMENT_NONE + + +// 湍虽朝 渠鼻暧 颤殓 +THROW_TYPE_SKILL <- 0 /// 蝶鉴 +THROW_TYPE_ITEM <- 1 /// 瘫系 嬴桧蛊 +SETUP_TYPE_ITEM <- 2 /// 扑纂 嬴桧蛊 + +SPEED_TYPE_CONST <- 0 /// 鼻热高. 渗唳?紫 setStaticSpeedInfo蒂 营?轿?晦 瞪梱虽朝 瞳辨 寰脾 +SPEED_TYPE_MOVE_SPEED <- 1 /// 桧翕 楼紫 +SPEED_TYPE_ATTACK_SPEED <- 2 /// 奢问 楼紫 +SPEED_TYPE_EXCEPT_WEAPON_ATTACK_SPEED <- 3 /// 鼠晦 绪霞 奢问 楼紫 +SPEED_TYPE_CAST_SPEED <- 4 /// 议蝶? 楼紫 + +Z_ACCEL_TYPE_CONST <- 0 /// 歜暧暧 鼻热 +Z_ACCEL_TYPE_GRAVITY_WORLD <- 1 /// 酝溘 : 撮啗暧 鬼薯 酝溘 +Z_ACCEL_TYPE_GRAVITY_OBJECT <- 2 /// 酝溘 : 议葛搅涤 酝溘 +Z_ACCEL_TYPE_ANTIGRAVITY_OBJECT <- 3 /// 奁酝溘 : 酝溘缣 奁渠肾朝 ?. 传朝 晔溘. + +STATICINFO_DEPTH <- 4 /// Static Info暧 譆渠 荡潍 桶桧. (晦狱 -> 潍绿 瞳辨 -> 鼻鹧渗? 瞳辨 -> 嬴桧蛊, 蝶鉴 瞳辨) +X_NORMALMOVE_VELOCITY <- 143 /// 陛煎 桧翕卫 陛煎煎 1蟾翕寰 桧翕 ?捻 热 +X_SLANTMOVE_VELOCITY <- 119 /// 渠陕摹 桧翕卫 陛煎煎 1蟾翕寰 桧翕 ?捻 热 +Y_NORMALMOVE_VELOCITY <- 114 /// 撮煎 桧翕卫 撮煎煎 1蟾翕寰 桧翕 ?捻 热 +Y_SLANTMOVE_VELOCITY <- 95 /// 渠陕摹 桧翕卫 撮煎煎 1蟾翕寰 桧翕 ?捻 热 +FORCE_TO_VELOCITY_CONST <- 4000 /// ?缣 暧? 楼紫蒂 啗肮?朝 鼻热. 楼紫 = 鼻热 * ? / 鼠啪 +SPEED_VALUE_DEFAULT <- 1000 /// 桧翕 楼紫, 奢问 楼紫蛔暧 楼紫高 晦狱纂. 桧 高桧贼 100%歜. +LIGHT_OBJECT_MAX_WEIGHT <- 60000 /// ?娄挤缣怃 陛沪遴 鼠啪暧 鼻?摹 +MIDDLE_OBJECT_MAX_WEIGHT <- 100000 /// ?娄挤缣怃 酝除 鼠啪暧 鼻?摹 +DEFAULT_GRAVITY_ACCEL <- -1500 /// 晦狱 酝溘 陛楼紫 + + +OBJECT_MESSAGE_INVINCIBLE <- 0 +OBJECT_MESSAGE_GHOST <- 1 +OBJECT_MESSAGE_SUPERARMOR <- 2 +OBJECT_MESSAGE_UNBREAKABLE <- 3 +OBJECT_MESSAGE_END <- 4 + +RECOVER_TYPE_HP <- 0 +RECOVER_TYPE_MP <- 1 +RECOVER_TYPE_HP_MP <- 2 +RECOVER_TYPE_MAX <- 3 + +REASON_NONE <- 0 +REASON_DEATH <- 1 +REASON_MOVING_VILLAGE <- 2 +REASON_LOGIN <- 3 +REASON_ALL <- 4 + +OPTION_HOTKEY_MOVE_UP <- 0 +OPTION_HOTKEY_MOVE_DOWN <- 2 +OPTION_HOTKEY_MOVE_LEFT <- 1 +OPTION_HOTKEY_MOVE_RIGHT <- 3 +ENUM_SUBKEY_TYPE_ALL <- 7 + + +GROW_TYPE_AT_MAGE <- 0 // 陴彻饵 +GROW_TYPE_ELEMENTAL_BOMBER <- 1 // 县溯诠骁 夥该 +GROW_TYPE_GRACIAL_MASTER <- 2 // 彩念饵 + +PARTICLE_CREATER_LARGE_HIT <- 0 /// 赎 颤问辨 +PARTICLE_CREATER_SMALL_HIT <- 1 /// 蒙擎 颤问辨 +PARTICLE_CREATER_FIRE_HIT <- 2 /// ? 楼撩 颤问辨 +PARTICLE_CREATER_FIRE_HIT_LIGHT <- 3 /// ? 楼撩 颤问辨 +PARTICLE_CREATER_WATER_HIT <- 4 /// 热 楼撩 颤问辨 +PARTICLE_CREATER_WATER_HIT_LIGHT <- 5 /// 热 楼撩 颤问辨 +PARTICLE_CREATER_WATER_HIT_ICE <- 6 /// 热 楼撩 颤问辨 + +OPTION_HOTKEY__UNDEFINED <- -1 // 姜暧肾虽 强挤 +OPTION_HOTKEY_MOVE_UP <- 0 // (Up arrow) +OPTION_HOTKEY_MOVE_LEFT <- 1 // (Left arrow) +OPTION_HOTKEY_MOVE_DOWN <- 2 // (Down arrow) +OPTION_HOTKEY_MOVE_RIGHT <- 3 // (Right arrow) +OPTION_HOTKEY_ATTACK <- 4 // (X) +OPTION_HOTKEY_JUMP <- 5 // (C) +OPTION_HOTKEY_SKILL <- 6 // (Z) +OPTION_HOTKEY_SKILL2 <- 7 // buff辨 郦(space) +OPTION_HOTKEY_CREATURE_SKILL <- 8 // (V) +OPTION_HOTKEY_STATUS_WINDOW <- 9 // (M) +OPTION_HOTKEY_SKILL_WINDOW <- 10 // (K) +OPTION_HOTKEY_ITEM_INVENTORY <- 11 // (I) +OPTION_HOTKEY_OPTION_WINDOW <- 12 // (O) +OPTION_HOTKEY_NORMAL_QUEST_WINDOW <- 13 // (Q) +OPTION_HOTKEY_AVATAR_INVENTORY <- 14 // (U) +OPTION_HOTKEY_CERASHOP <- 15 // (T) +OPTION_HOTKEY_MINIMAP <- 16 // 湍瞪 嘐栖裘(N) +OPTION_HOTKEY_CREATURE_WINDOW <- 17 // (Y) +OPTION_HOTKEY_TOOLTIP_ <- 18 // 鼻撮尔晦 瞪?郦(R) +OPTION_HOTKEY_EPIC_QUEST_WINDOW <- 19 // (W) +OPTION_HOTKEY_QUICK_SKILL1 <- 20 // 蝶鉴 蜗煜(A, S, D, F, G, H) +OPTION_HOTKEY_QUICK_SKILL2 <- 21 +OPTION_HOTKEY_QUICK_SKILL3 <- 22 +OPTION_HOTKEY_QUICK_SKILL4 <- 23 +OPTION_HOTKEY_QUICK_SKILL5 <- 24 +OPTION_HOTKEY_QUICK_SKILL6 <- 25 +OPTION_HOTKEY_EXSKILL1 <- 26 // ?潍蝶鉴 蜗煜(F1 - F6) +OPTION_HOTKEY_EXSKILL2 <- 27 +OPTION_HOTKEY_EXSKILL3 <- 28 +OPTION_HOTKEY_EXSKILL4 <- 29 +OPTION_HOTKEY_EXSKILL5 <- 30 +OPTION_HOTKEY_EXSKILL6 <- 31 +OPTION_HOTKEY_ITEM_QUICKSLOT1 <- 32 // 嬴桧蛊 摆 蜗煜(1 - 6) +OPTION_HOTKEY_ITEM_QUICKSLOT2 <- 33 +OPTION_HOTKEY_ITEM_QUICKSLOT3 <- 34 +OPTION_HOTKEY_ITEM_QUICKSLOT4 <- 35 +OPTION_HOTKEY_ITEM_QUICKSLOT5 <- 36 +OPTION_HOTKEY_ITEM_QUICKSLOT6 <- 37 +OPTION_HOTKEY_TOGGLE_ITEM_NAME_IN_DUNGEON <- 38 // 湍瞪缣怃 嬴桧蛊 桧荤尔晦(ctrl) +OPTION_HOTKEY_HIDE_MAIN_HUD <- 39 // 樯搅?桧蝶 獗晦晦(Tab) +OPTION_HOTKEY_TOGGLE_TITLE_ANIMATION <- 40 // 棣啻歜 姜尔 赅萄 渗?(E) +OPTION_HOTKEY_TOGGLE_SKILL_INFORMATION <- 41 // 蝶鉴 罐? 扑赀 赅萄 瞪?(F7) +OPTION_HOTKEY_PAUSE_IN_TOWER <- 42 // 饵蜂暧 鳖 橾卫姜虽 +OPTION_HOTKEY_CAPTURE_MOVING_PICTURE <- 43 // 翕舱鼻 谵药(Pause) +OPTION_HOTKEY_MENU_MY_INFO <- 44 // 顶尔妇? 诡景(7) +OPTION_HOTKEY_MENU_COMMUNITY <- 45 // 醴嗽栖? 诡景(8) +OPTION_HOTKEY_MENU_CONTENTS <- 46 // 钟蘸陇 诡景(9) +OPTION_HOTKEY_MENU_SERVICE <- 47 // 怃绿蝶 诡景(0) +OPTION_HOTKEY_MENU_SYSTEM__CLOSE_ALL_WINDOW <- 48 // 赅苌玺残晦(Esc) +OPTION_HOTKEY_PVP <- 49 // 念瘫潍(P) +OPTION_HOTKEY_RECOMMEND_USER <- 50 // 跷茧翕猿([) +OPTION_HOTKEY_PARTY_MATCHING <- 51 // ??衙芦(]) +OPTION_HOTKEY_FRIEND <- 52 // 耀掘(L) +OPTION_HOTKEY_GUILD <- 53 // 望萄(;) +OPTION_HOTKEY_MEMBER <- 54 // 詹帼(') +OPTION_HOTKEY_BLACKLIST <- 55 // 离钦 +OPTION_HOTKEY_PVP_BUDDY <- 56 // 念瘫耀掘 +OPTION_HOTKEY_WAR_AREA_LIST <- 57 // 瞪爵虽羲迹烟玺(,) +OPTION_HOTKEY_AUCTION_WINDOW <- 58 // 唳衙潍(B) +OPTION_HOTKEY_GOBLIN_PAD <- 59 // 坚绾萼?萄 +OPTION_HOTKEY_HOTKEY_SETTING_WINDOW <- 60 // 钦蹴郦 扑姜玺 +OPTION_HOTKEY_WAR_AREA_INFORMATION <- 61 // 瞪爵虽羲 姜尔玺(End) +OPTION_HOTKEY_HELLMODE_INFORMATION <- 62 // 涡 桧鼻 饵辨肾虽 强挤 +OPTION_HOTKEY_FAVOR_CHECK_WINDOW <- 63 // 涡 桧鼻 饵辨肾虽 强挤 +OPTION_HOTKEY_EXPERT_JOB <- 64 // 瞪侥霜机 晦栋 +OPTION_HOTKEY_EMOTION_EXPRESSION <- 65 // 马姜?? 晦栋 +OPTION_HOTKEY_EVENT <- 66 // 桧渐?郦(shift) +OPTION_HOTKEY_PVP_MSSION <- 67 // 嘐暮孺紫办 +OPTION_HOTKEY_PVP_RECORD <- 68 // 瞪瞳尔晦玺 +OPTION_HOTKEY_QUICK_CHAT_0 <- 69 +OPTION_HOTKEY_QUICK_CHAT_1 <- 70 +OPTION_HOTKEY_QUICK_CHAT_2 <- 71 +OPTION_HOTKEY_QUICK_CHAT_3 <- 72 +OPTION_HOTKEY_QUICK_CHAT_4 <- 73 +OPTION_HOTKEY_QUICK_CHAT_5 <- 74 +OPTION_HOTKEY_QUICK_CHAT_6 <- 75 +OPTION_HOTKEY_QUICK_CHAT_7 <- 76 +OPTION_HOTKEY_QUICK_CHAT_8 <- 77 +OPTION_HOTKEY_QUICK_CHAT_9 <- 78 +OPTION_HOTKEY_TOGGLE_ITEMINFO_COMPARE <- 79 // 嬴桧蛊 绿掖玺 瞪?郦 (Default: F8) +OPTION_HOTKEY_TITLEBOOK <- 80 // 芦?磁 +OPTION_HOTKEY_THIS_DUNGEON <- 81 // 营紫瞪 +OPTION_HOTKEY_ANOTHER_DUNGEON <- 82 // 棻艇 湍瞪 紫瞪 +OPTION_HOTKEY_RETURN_TO_TOWN <- 83 // 葆击煎 给嬴陛晦 +OPTION_HOTKEY_MERCENARY_SYSTEM <- 84 // 辨煽 卫蝶蛊 +OPTION_HOTKEY_ITEM_DICTIONARY <- 85 +OPTION_HOTKEY_QUICK_PARTY_REGISTER <- 86 // 绪艇 ?? 蛔烟 蹂羶 + + +STATE_BURSTER <- 100 // 奢鳝蝶鉴 state 帼蝶搅 +// 奢鳝 skill妇湿 睡碟殓栖棻. +// 198 `ATMage/Buster.skl` // 帼蝶搅 +SKILL_BURSTER <- 198 // 奢鳝蝶鉴 帼蝶搅 + \ No newline at end of file diff --git a/init_character.nut b/init_character.nut new file mode 100644 index 0000000..d1b97b5 --- /dev/null +++ b/init_character.nut @@ -0,0 +1,87 @@ +function sq_InitFrameIndices(obj) { + if (!obj) + return -1; + + // 陴彻饵 + if (sq_getJob(obj) == ENUM_CHARACTERJOB_AT_MAGE) { + // 薄??阳 陕 怃粽 蝶才桧?暧 ?溯歜 樯播蝶 扑姜 + obj.sq_JumpUpStartFrame(1); + obj.sq_JumpDownStartFrame(3); + obj.sq_JumpLandStartFrame(9); + + + // 议葛搅 棻遴腆阳 陕 怃粽 蝶才桧?暧 ?溯歜 樯策蝶 扑姜 + obj.sq_SetDownUpFrame(2); + obj.sq_SetDownDownFrame(2); + obj.sq_SetDownBounceUpFrame(2); + obj.sq_SetDownBounceDownFrame(3); + obj.sq_SetDownLieFrame(4); + + + obj.sq_AddAttackCancelStartFrame(3); // 1颤 警蜗 ?溯歜 + obj.sq_AddAttackCancelStartFrame(3); // 2颤 警蜗 ?溯歜 + obj.sq_AddAttackCancelStartFrame(3); // 3颤 警蜗 ?溯歜 + + + + // 陴彻饵 晦狱 饵遴萄 鹧斜 蛔烟 + obj.sq_SetSoundTagCreatureCommand("MW_CMDPET"); + obj.sq_SetSoundTagLackMp("MW_NOMANA"); + obj.sq_SetSoundTagCoolTime("R_MW_COOLTIME"); + obj.sq_SetSoundTagDie("MW_DIE"); + obj.sq_SetSoundTagBackStepStart("MW_BACK"); + obj.sq_SetSoundTagThrowItem("R_MW_THROW"); + + + // 嬴桧蛊 湍虽晦 扑姜 + obj.setThrowObjectAnimationIndex(3); + obj.setThrowObjectZDistance(65); + obj.setThrowObjectXDistance(45); + obj.setThrowObjectFrameIndex(1); + } else if (sq_getJob(obj) == ENUM_CHARACTERJOB_CREATOR_MAGE) { + // 陴彻饵 晦狱 饵遴萄 鹧斜 蛔烟 + obj.sq_SetSoundTagCreatureCommand("CR_CMDPET"); + obj.sq_SetSoundTagLackMp("R_CR_NOMANA"); + obj.sq_SetSoundTagCoolTime("R_CR_COOLTIME"); + obj.sq_SetSoundTagDie("R_CR_DIE"); + obj.sq_SetSoundTagBackStepStart("R_CR_JUMP"); + obj.sq_SetSoundTagThrowItem("R_CR_THROW"); + } + + return 0; +} + + +// 觼葬缣桧搅陛 当撩腆阳 ?捡?橾菟 +function create_CreatorMage(obj) {} + +// 籀挤 议葛搅蒂 捻滓? ?击阳 ?轿肾朝 属寥?热 殓栖棻. +function onSetCharacter(obj) { + //初始化游戏设置 + InitGameSetting(obj); + + if (sq_getJob(obj) == ENUM_CHARACTERJOB_CREATOR_MAGE) { + sq_SetExSkillSlotVisible(false); + sq_SetSkillSlotVisible(5, false); + sq_SetSkillSlotEnable(5, false); + + local SKILLICON_START_X = 540; + local SKILLICON_START_Y = 555; + + for (local i = 0; i < 5; i++) { + sq_SetSkillSlotPos(i, SKILLICON_START_X + (i * 36), SKILLICON_START_Y); + } + } else { + sq_SetExSkillSlotVisible(true); + sq_SetSkillSlotVisible(5, true); + sq_SetSkillSlotEnable(5, true); + + local SKILLICON_START_X = 538; + local SKILLICON_START_Y = 558; + + + for (local i = 0; i < 6; i++) { + sq_SetSkillSlotPos(i, SKILLICON_START_X + (i * 30), SKILLICON_START_Y); + } + } +} \ No newline at end of file diff --git a/loadstate.nut b/loadstate.nut new file mode 100644 index 0000000..7ffff7d --- /dev/null +++ b/loadstate.nut @@ -0,0 +1,18 @@ +dofile("sqr/DofileList.nut"); //Dofile 主控 +function Lenheart(VmTop) { + //Sout("虚拟机当前栈大小: %L", VmTop); //虚拟机栈Top + // dofile("sqr/DofileList.nut"); //Dofile 主控 +} + + +sq_RunScript("dnf_enum_header.nut"); +sq_RunScript("common.nut"); + + + + +sq_RunScript("Character/avenger_load_state.nut"); +sq_RunScript("Character/atmage_load_state.nut"); +sq_RunScript("Character/atgunner_load_state.nut"); +sq_RunScript("Character/swordman_load_state.nut"); +sq_RunScript("Character/CreatorMage_load_state.nut"); \ No newline at end of file diff --git a/passiveobject/character/priest/po_devilstrike_attack1.nut b/passiveobject/character/priest/po_devilstrike_attack1.nut new file mode 100644 index 0000000000000000000000000000000000000000..ce14f4f48ee6fe3280823fca0258a54d780cc12e GIT binary patch literal 891 zcmb7D!A`Qre449i1WS=ktQK=P@>P5nYDmNq zC>(U!Po1`xsf1@ta|`U4)zPj7o<E?cVP910s(w4U)Ia5?P=p!EElb!g9l7+d#>VB0bbiEM#c~{!RB5toLW+)W06m^+W z*fu-YDjDQC$aEin%Zhw>t5FN~+`R#Nt?Pb_G3qSP&B{sF;|=aGk{FquYRtX8Wr zx&d~~jX|p~<2y*~#sW`+EwrRW*kNs=6M$tYE!A~ev0wvH#D73@k!6!2UV|}VInI0_ zMXg~y5GfX%*2L*x_>|z8UW{Z4k5nCb-Fk#)nlHe`b|~?wOc9Rr92xw?*-1g>)JcW8 zSPhj#JF=>g#!cnPn&EsPD*8&91LjP{Q-f1o{>N%Exb~Y0;Emgh#xJ8}HMO#-ed`g@ OGT;!)HE{`At=2EL9UDLZ literal 0 HcmV?d00001 diff --git a/passiveobject/character/priest/po_devilstrike_attack2.nut b/passiveobject/character/priest/po_devilstrike_attack2.nut new file mode 100644 index 0000000000000000000000000000000000000000..e0eabdb85e05be2be241fd2c78f632db4184ab6c GIT binary patch literal 891 zcmb7D!A`iTx>7ho%d$uy_t5}9eihnOsr6n8L-2`Sha|_<-E^z``gdU$M@%}e;9Zk5;xp@U@cGP zNH_P>bLv2AkhZ)X$(f?UK_BrLpX|g>lq}2@R`;tkq3ea<&%4ql7IAx3F+-t{rKro4 z!nWDDR>>gGL8kloTUO-5Ta8+<=k5*IYlUa7d167M6Qyo3^A8AyJdZpqg~>DmW3^h1 z(G9R;ZVXy|8Q(!-Hx_srY@sD3!VYT_od7ILX{oN$iUk{pBK`xKi!7TI@fwT?%W>ud zDQXStfk?67v?fjm!>0t#^kO7ac%((PY(|iFgwnK?eWr}c|=g8nE&Q1z4r%o!& z#cHS|+L2X_G;S(S)(qzZQPEe*9581po*JC$@;_FS!L{F10B_u0G=3Q+tErVu?OTtK PmH~%Yu8B*~YPEg=zC0U5 literal 0 HcmV?d00001 diff --git a/passiveobject/character/priest/po_devilstrike_attack3.nut b/passiveobject/character/priest/po_devilstrike_attack3.nut new file mode 100644 index 0000000000000000000000000000000000000000..995992a3fb148919b559636d3b8bbf0a922d8807 GIT binary patch literal 891 zcmb7Du};G<5bc^u{RcB3B~sK5j1@y^0ChlAl)ZA2E10Hsu$@AM_zswnSor|{2PFQ2 zJ11?@(uHJ+eed1fdw1!yJNV8DnOLDDGhl~>v1$=<%cr@TMz9pw#A-2zBVWaLp@u{( zfxX&k~2kxgFfOhKG}(%C|Q^*tnOE7Le~qypLeBAEaLX6VunH?OHr38 zg>AEQt&%~WgG~4Fx2(vAw;Huz&)pla*9y;E^TdKiCraI7<{uCYc^-LK3X^FB#%i@1 zqZ?qy+!(a_GQNYvZY=OL*g{K6gdNr^HMf?Xe7g;tb;x!l(mgCF^ zQq&sO1Ce6EX-%9ChEEBe>BUH<@JQ8>*R4l*ruhO~Y=;t`$`s)^&ym4ToShV8PMuVk zi`7s`v?Hq;Y1~wvtQpP+qN1;qIbhCIJT*Ag<$tUugKNL30N%L0X#6rtR#PjR+P5Ad PEdvg*Toad|)oT3$##{)a54BX&gR!yRn*|2l7ItxW(N^QXJF`nm(H=}B9AM|o zn|beT;3rAhirjE1LJel#Y9s5E8MbNUCgqxG18T8vBAIRDu)snbYW@M^!2f%nf}Fnr zv0~e2;Cq$KSrsZ~AiNIy>O=u6(s!wfXgu{!xMpSy%XbLXubVqsQYjF|oi0TwX}R$f z@mOE~sNYD@>PMUubu_V^YvF+BH?21=`6NHaAMAY(b8P2bl|gYvtOVcuc~#M9l^+!B#y6{34TU*3`Ovo(QR^42GC)8 zCtw#|h>wGps$Pl$_QZ}uCVk|$iq&9imcDPv7NS5nPFQOE#HnD)a=aWsZ+`$wbEHv-}>9smFU literal 0 HcmV?d00001 diff --git a/passiveobject/character/priest/po_earthquakerock.nut b/passiveobject/character/priest/po_earthquakerock.nut new file mode 100644 index 0000000000000000000000000000000000000000..b86ed34e8dff9b54681e6c1a50d78ac80cc2df23 GIT binary patch literal 1378 zcmah}T~8W86z%Jf@E_(8k}U$ZPu7wZ&=NE%(AYkaVHt1*X6Wp!mKYzJKJ=*{sr8|W zHfc=Lub4J{rN&z(G!pxoXV4iN1|EN_-7k2W8h#eB82o-J0_%qRH4HA=u1p&5=L zrxtWY5DT>?oM+WtA`;M+0+X?%F?~F~fam6>7eddZ3@B8G;wI^;X5GY18&IQe4QzY8 z?3z*%s|AGvg%zcW?ya|4U=6OM&_`e&=uI{%y)M-{nU#u}Emodx7^-dRY%@0OvV3GkE=T^yeI3zWXvfI>CeU!{Phyc<|!Q=;hfA z`~(7e5uU)CUG1<*6~M1dSv?C^g`^wAao~>eEV2P}K;^RF9e-I1n!cAx&KpUXt}eWj zhEfJ3$=Pu2sH+T&}q#Uc{>mJ{W)WHxVe?30mo;XqYhZP Q=P|rST5(habc#Fw0R3&g;s5{u literal 0 HcmV?d00001 diff --git a/passiveobject/character/priest/po_pendemoniumexdevil.nut b/passiveobject/character/priest/po_pendemoniumexdevil.nut new file mode 100644 index 0000000..ef91764 --- /dev/null +++ b/passiveobject/character/priest/po_pendemoniumexdevil.nut @@ -0,0 +1,86 @@ +PEND_EX_PO_IS_MOVING <- 0; +PEND_EX_PO_POS_X <- 1; +PEND_EX_PO_SPEED <- 2; +PEND_EX_MOVE_MAX <- 3; + +function setCustomData_po_PandemoniumEx(obj,reciveData) +{ + local scale = reciveData.readWord(); + local speed = reciveData.readWord(); + local maxTime = reciveData.readWord(); + local maxDistance = reciveData.readWord(); + local dmg = reciveData.readDword(); + + local posX = obj.getXPos(); + + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, dmg); + + //scale 暧 彰嫔朝 0~4 0桧贼 蒙擎 饵桧锷 斜桧谖缚 赎饵桧锷 + local ani = obj.getCurrentAnimation(); + local addAni = null; + if(scale == 0) { + obj.setCurrentAnimation(obj.getCustomAnimation(1)); + ani = obj.getCurrentAnimation(); + addAni = obj.getCustomAnimation(2); + } + else { + addAni = obj.getCustomAnimation(0); + } + + if(ani && addAni) + ani.addLayerAnimation(2,addAni,false); + + if(ani) + ani.setFrameDelay(4,maxTime,true); + + + obj.sq_var.setBool(PEND_EX_PO_IS_MOVING,false); + obj.sq_var.setInt(PEND_EX_PO_POS_X, posX); + obj.sq_var.setInt(PEND_EX_PO_SPEED, speed); + obj.sq_var.setInt(PEND_EX_MOVE_MAX, maxDistance); + +} + +function procAppend_po_PandemoniumEx(obj) +{ + if(obj.sq_var.getBool(PEND_EX_PO_IS_MOVING)) + { + local currentTime = obj.sq_var.get_ct_vector(0); + local posX = obj.getXPos(); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + local speed = obj.sq_var.getInt(PEND_EX_PO_SPEED); + local maxDistanceX = obj.sq_var.getInt(PEND_EX_MOVE_MAX); + + local startPosX = obj.sq_var.getInt(PEND_EX_PO_POS_X); + local distanceX = sq_GetUniformVelocity(0, speed, currentTime.Get(), maxDistanceX); + + posX = sq_GetDistancePos(startPosX, obj.getDirection(), distanceX); + obj.setCurrentPos(posX, posY, posZ); + } +} + +function onKeyFrameFlag_po_PandemoniumEx(obj,flagIndex) +{ + if(flagIndex == 0) { + //if(obj.sq_isMyControlObject()) // 霞翕,廓翻 桧??朝 釭缣啪虏 尔樯棻. + // obj.sq_setShake(obj,3,150); + obj.sq_var.push_ct_vector(); + local currentTime = obj.sq_var.get_ct_vector(0); + + currentTime.Start(9999999,0); + + obj.sq_var.setBool(PEND_EX_PO_IS_MOVING,true); + + + //sq_SendDestroyPacketPassiveObject(obj); + + } + return true; +} + +function onEndCurrentAni_po_PandemoniumEx(obj) +{ + sq_SendDestroyPacketPassiveObject(obj); +} diff --git a/passiveobject/character/priest/po_powerofdarknessarrow.nut b/passiveobject/character/priest/po_powerofdarknessarrow.nut new file mode 100644 index 0000000..86d6f84 --- /dev/null +++ b/passiveobject/character/priest/po_powerofdarknessarrow.nut @@ -0,0 +1,24 @@ +function setCustomData_po_PowerOfDarknessArrow(obj,reciveData) +{ + local angle = reciveData.readFloat(); + local rate = reciveData.readDword(); + sq_SetCustomRotate(obj,angle); + + + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, rate); +} + +function onKeyFrameFlag_po_PowerOfDarknessArrow(obj,flagIndex) +{ + if(flagIndex == 1) { + if(obj.sq_isMyControlObject()) // 霞翕,廓翻 桧??朝 釭缣啪虏 尔樯棻. + obj.sq_setShake(obj,3,150); + } + return true; +} + +function onEndCurrentAni_po_PowerOfDarknessArrow(obj) +{ + sq_SendDestroyPacketPassiveObject(obj); +} diff --git a/passiveobject/character/priest/po_powerofdarknesscircle.nut b/passiveobject/character/priest/po_powerofdarknesscircle.nut new file mode 100644 index 0000000000000000000000000000000000000000..5a53a30737dac91073cbe072016ba2ae51ba7411 GIT binary patch literal 2056 zcmcgt!EV|>5Y5#{{KJY9NDiR(nC9TvCPIl~%O+{li?!HG;>7Hd-6d&M_1`WYk<*GyY5o{ZAIK?DPnlN~fut`HuUA8^vSq`Rc z@z&_z?lT?qP7M8c-l`QW>(~HkxS>^9bZ4|u%#Z|qzHfCQMeZ#Yj2C;m{BYKXV+M%u zYhWgZj0R|bDN!r2P)J=LxcGtpd#;UcO?3Qq75_A`>95(lEfbU=Sya=i*!n?lHz$H$ zu-B1<0gftqx0e@p1{q^suwRBDXiPG_l$>a}WIJ>f^1{Lbk?*aH^`Kn6TS`;SV6!X% zDTZAGzNXT?KPB6Gw0#<2k7lwQ1vOblwm$UzC;#ozN-g5GTr9#{_^p6z4i;c^qzSGj> z)JOxTV-;XG51FS$ky`E4f~&;VtjQ{`u literal 0 HcmV?d00001 diff --git a/passiveobject/character/priest/po_ripperexplosion.nut b/passiveobject/character/priest/po_ripperexplosion.nut new file mode 100644 index 0000000000000000000000000000000000000000..9731295aa2e91acb797f468b975ce5dde621fa5c GIT binary patch literal 1662 zcmcIk&r2IY80|HI{0~D8vfHdXNlKu!l^{`z6j6+awwEw&Cc0*KW;-(*VvFY<3$-2! zS|}d+14?`8$rk?_qy88DW_CBm#S|rV{H-~CA0`P)fhpw)C(edTVZi_P|c(A&;Lp^2LHo_QP9)37KJ#fxW z_RmjG(CFi*W^;6Sgf3ryJO6cjcJTG${Tp=lzlRh=N8cw}Y zwI6COAgMqDNl~6uJtc*4z&#Qmh2~I-H6X&>qN=0(kc!R#=y72Ip6-XSa-r86(XJ>e zta{Z!vo&a@yP0i4pq-E5s?Jp?o}gA%+)=zbC+3_r+MH5aL28Y#%q(={$F zyJDGxcNn|aUpybM2B9!k1v?VBk zz^1LhYaMg&JG#EVLL#dy%wy3Gd7qY@@(PDAQ-NDN3^~J)eFKQckI4cNeV|cuBNdb# z%}n2i^g`tD-F3(xAn2Pht)vaX1iyyJVClQ~EKxao4{jU4>!n0EtYmUQ(tNj@v0F{v z6)1L4jzV@IaVfX?AN{FM`g3FR+n7@uJCT?(#hc9Ie{@Hion{4IwehRvm>^e@s9_8* H#@?MjT2dVG literal 0 HcmV?d00001 diff --git a/passiveobject/character/priest/po_spincutter.nut b/passiveobject/character/priest/po_spincutter.nut new file mode 100644 index 0000000..db093e1 --- /dev/null +++ b/passiveobject/character/priest/po_spincutter.nut @@ -0,0 +1,189 @@ + +//S_SPINCUTTER_THROW <- 0 +//S_SPINCUTTER_RECALL <- 1 +//S_SPINCUTTER_ARRIVAL <- 2 + +S_PO_SPINCUTTER_THROW <- 10 +S_PO_SPINCUTTER_RECALL <- 11 + +VECTOR_I_RECALL_FLAG <- 0 +VECTOR_I_RECALL_STD_X <- 1 +VECTOR_I_MULTI_HIT_COUNT <- 2 +VECTOR_I_ATTACK_RATE <- 3 // 奢问溘 + + +//function setCustomData_po_Spincutter(obj, data, size) +function setCustomData_po_Spincutter(obj,reciveData) +{ + //sq_BinaryStartRead(data); + //local multi_count = sq_BinaryGetDWord(); + //local rate = sq_BinaryGetDWord(); + local multi_count = reciveData.readDword(); + local rate = reciveData.readDword(); + + + + obj.sq_var.push_vector(0); + obj.sq_var.push_vector(0); + obj.sq_var.push_vector(0); + obj.sq_var.push_vector(0); + obj.sq_var.push_vector(0); + + obj.sq_var.set_vector(VECTOR_I_MULTI_HIT_COUNT, multi_count); + obj.sq_var.set_vector(VECTOR_I_ATTACK_RATE, rate); + + local attackInfo = sq_GetCustomAttackInfo(obj, 0); + sq_SetCurrentAttackInfo(obj, attackInfo); + + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, rate); + + + local pAni = obj.getCurrentAnimation(); + local initDelay = 0; + local attackTime = pAni.getDelaySum(false); + local hitCnt = obj.sq_var.get_vector(VECTOR_I_MULTI_HIT_COUNT); + + local term = 500 / hitCnt; + //print("term = attackTime / hitCnt :" + attackTime); + + obj.timer_.setParameter(term, hitCnt); + obj.timer_.resetInstant(initDelay); + + //print("\n eType:" + eType); + +} + +function setState_po_Spincutter(obj, state, datas) +{ + local passiveState = state; + + + if(passiveState == S_PO_SPINCUTTER_THROW) { + } + else if(passiveState == S_PO_SPINCUTTER_RECALL) { + local pA = obj.getCustomAnimation(0); + + + local objectX = sq_GetVectorData(datas, 0); // xpos + + obj.setCurrentAnimation(pA); + obj.sq_var.set_vector(VECTOR_I_RECALL_STD_X, objectX); + + //print("objectx:" + objectX + "getxpos" + obj.getXPos()); + + local attackInfo = sq_GetDefaultAttackInfo(obj); + sq_SetCurrentAttackInfo(obj, attackInfo); + local rate = obj.sq_var.get_vector(VECTOR_I_ATTACK_RATE); + + local current_attack_info = sq_GetCurrentAttackInfo(obj); + //print(" spincutter attack rate:" + rate); + sq_SetCurrentAttackBonusRate(current_attack_info, rate); + + + local pAni = obj.getCurrentAnimation(); + + local initDelay = 0; + local attackTime = pAni.getDelaySum(false); + local hitCnt = obj.sq_var.get_vector(VECTOR_I_MULTI_HIT_COUNT); + //local hitCnt = 6; + local term = attackTime / hitCnt; + + obj.timer_.setParameter(term, hitCnt); + obj.timer_.resetInstant(initDelay); + + //print("setCustomData_po_Spincutter x:" + obj.getXPos()); + + + } +} + +function procAppend_po_Spincutter(obj) +{ + local pChr = obj.getTopCharacter(); + + if(!pChr) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + + local state = pChr.getState(); + local substate = pChr.getSkillSubState(); + local pAni = pChr.getCurrentAnimation(); + local frmIndex = pAni.GetCurrentFrameIndex(); + local bEnd = sq_IsEnd(pAni); + local isMyControl = obj.isMyControlObject(); + + + if(state != STATE_SPINCUTTER) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + + + + if(substate == S_SPINCUTTER_THROW) { + } + else if(substate == S_SPINCUTTER_RECALL) { + local flag = obj.sq_var.get_vector(VECTOR_I_RECALL_FLAG); + if(flag == 0) { + obj.sq_var.set_vector(VECTOR_I_RECALL_FLAG, 1); + if(isMyControl == true) { + // vector + local pIntVec = sq_GetGlobalIntVector(); + sq_IntVectorClear(pIntVec); + sq_IntVectorPush(pIntVec, obj.getXPos()); + + //print("sq_IntVectorPush:" + obj.getXPos()); + + obj.addSetStatePacket(S_PO_SPINCUTTER_RECALL, pIntVec, STATE_PRIORITY_AUTO, false, ""); + //sq_addSetStatePacketColObj(obj, S_PO_SPINCUTTER_RECALL); + } + } + else { + if(obj.getState() == S_PO_SPINCUTTER_RECALL) { + local dstX = sq_GetDistancePos(pChr.getXPos(), obj.getDirection(), 80); + //local dstX = pChr.getXPos(); + local currentT = sq_GetCurrentTime(pAni); + local totalT = pAni.getDelaySum(false); + local srcX = obj.sq_var.get_vector(VECTOR_I_RECALL_STD_X); + local posX = sq_GetAccel(srcX, dstX, currentT, totalT, false); + //local posX = sq_GetAccel(srcX, dstX, currentT, totalT - 100, false); + local posY = obj.getYPos(); + local posZ = obj.getZPos(); + obj.setCurrentPos(posX, posY, posZ); + + //print("src x:" + srcX + "dst x:" + dstX); + } + } + + //local pObjAni = obj.getCurrentAnimation(); + //local time = sq_GetCurrentTime(pObjAni); + // + //if (obj.timer_.isOnEvent(time) == true) + //obj.resetHitObjectList(); + + } + else if(substate == S_SPINCUTTER_ARRIVAL) { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + + local pObjAni = obj.getCurrentAnimation(); + local time = sq_GetCurrentTime(pObjAni); + + if (obj.timer_.isOnEvent(time) == true) { + //print("resetHitObjectList"); + obj.resetHitObjectList(); + } + + +} + + +function onDestroyObject_po_Spincutter(obj, object) +{ +} + diff --git a/passiveobject/character/priest/po_spincutterthrow.nut b/passiveobject/character/priest/po_spincutterthrow.nut new file mode 100644 index 0000000..1a8f7af --- /dev/null +++ b/passiveobject/character/priest/po_spincutterthrow.nut @@ -0,0 +1,62 @@ + +//S_SPINCUTTER_THROW <- 0 +//S_SPINCUTTER_RECALL <- 1 +//S_SPINCUTTER_ARRIVAL <- 2 + + +//function setCustomData_po_SpincutterThrow(obj, data, size) +function setCustomData_po_SpincutterThrow(obj,reciveData) +{ + //sq_BinaryStartRead(data); + //local rate = sq_BinaryGetDWord(); + + local rate = reciveData.readDword(); + + + local pAttack = sq_GetCurrentAttackInfo(obj); + sq_SetCurrentAttackBonusRate(pAttack, rate); +// sq_SetCurrentAttacknBackForce(pAttack, 800); +// sq_SetCurrentAttacknUpForce(pAttack, 300); +// sq_SetCurrentAttackDirection(pAttack, ATTACK_DIRECTION_UP); +// sq_SetCurrentAttackeDamageAct(pAttack, DAMAGEACT_DAMAGE); +} + +function setState_po_SpincutterThrow(obj, state, datas) +{ +} + +function procAppend_po_SpincutterThrow(obj) +{ + local pChr = obj.getTopCharacter(); + + if(!pChr) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + + local state = pChr.getState(); + local substate = pChr.getSkillSubState(); + local pAni = pChr.getCurrentAnimation(); + local frmIndex = pAni.GetCurrentFrameIndex(); + local bEnd = sq_IsEnd(pAni); + local isMyControl = obj.isMyControlObject(); + + + if(state != STATE_SPINCUTTER) + { + sq_SendDestroyPacketPassiveObject(obj); + return; + } + + if(substate != S_SPINCUTTER_THROW) { + sq_SendDestroyPacketPassiveObject(obj); + return; + } +} + + +function onDestroyObject_po_SpincutterThrow(obj, object) +{ +} + diff --git a/procAppend/procAppend_ATFighter.nut b/procAppend/procAppend_ATFighter.nut new file mode 100644 index 0000000..4799c0a --- /dev/null +++ b/procAppend/procAppend_ATFighter.nut @@ -0,0 +1,13 @@ +/* +文件名:procAppend_ATFighter.nut +路径:procAppend/procAppend_ATFighter.nut +创建日期:2022-09-04 20:18 +文件用途:男格斗Proc循环函数 +*/ +function procAppend_ATFighter(obj) { + if (!obj) + return; + procAppend_All(obj); + + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_ATGunner.nut b/procAppend/procAppend_ATGunner.nut new file mode 100644 index 0000000..6bca357 --- /dev/null +++ b/procAppend/procAppend_ATGunner.nut @@ -0,0 +1,24 @@ +/* +文件名:procAppend_ATGunner.nut +路径:procAppend/procAppend_ATGunner.nut +创建日期:2022-09-04 20:19 +文件用途:女枪手Proc循环函数 +*/ + +if (!getroottable().rawin("procAppend_ATGunner_Table")) procAppend_ATGunner_Table <- {} + +function procAppend_ATGunner(obj) { + if (!obj) + return; + procAppend_All(obj); + + //根据主状态判断执行函数 + if (procAppend_ATGunner_Table.rawin(Chr_State_Table[15]) == true) { + foreach (Flag,Func in procAppend_ATGunner_Table[Chr_State_Table[15]]) { + Func(obj); + } + } + return 1; +} + + diff --git a/procAppend/procAppend_ATMage.nut b/procAppend/procAppend_ATMage.nut new file mode 100644 index 0000000..2f6d17c --- /dev/null +++ b/procAppend/procAppend_ATMage.nut @@ -0,0 +1,13 @@ +/* +文件名:procAppend_ATMage.nut +路径:procAppend/procAppend_ATMage.nut +创建日期:2022-09-04 20:19 +文件用途:男法师Proc循环函数 +*/ +function procAppend_ATMage(obj) { + if (!obj) + return; + procAppend_All(obj); + + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_All.nut b/procAppend/procAppend_All.nut new file mode 100644 index 0000000..def8e52 --- /dev/null +++ b/procAppend/procAppend_All.nut @@ -0,0 +1,67 @@ +/* +文件名:procAppend_All.nut +路径:procAppend/procAppend_All.nut +创建日期:2022-09-04 20:15 +文件用途:全职业Proc循环函数 +*/ + + +dofile("sqr/procAppend/procAppend_ATFighter.nut"); +dofile("sqr/procAppend/procAppend_ATGunner.nut"); +dofile("sqr/procAppend/procAppend_ATMage.nut"); +dofile("sqr/procAppend/procAppend_CreatorMage.nut"); +dofile("sqr/procAppend/procAppend_DemonicSwordman.nut"); +dofile("sqr/procAppend/procAppend_Fighter.nut"); +dofile("sqr/procAppend/procAppend_Gunner.nut"); +dofile("sqr/procAppend/procAppend_Mage.nut"); +dofile("sqr/procAppend/procAppend_Priest.nut"); +dofile("sqr/procAppend/procAppend_Swordman.nut"); +dofile("sqr/procAppend/procAppend_Thief.nut"); + + + +function procAppend_All(obj) { + //TOW_CharacterAppendage(obj); + + + local RootTab = getroottable(); + + //如果开启了不震动设置 将取消震动 + if (RootTab.rawin("S_GameShakeSB") && RootTab["S_GameShakeSB"] == true) { + sq_SetMyShake(obj, 0, 0); + } + + + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/currency.nut")) { + CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 174, false, "appendage/currency.nut", true); + } + + //怪物血条 + MonsterBlood_ApAdd(obj); + + //手搓装备限定 + TraversingSkillSlot(obj); +} + + +//遍历技能栏获取空位 +function TraversingSkillSlot(obj) { + local Index = L_sq_GetCharacterAttribute(0x1C, 1); + //巴鲁姆克之剑 漫游之王 耀光女王的银妆刀 + if (Index == 101040148 || Index == 104000154 || Index == 109000106) { + local skillmgr = obj.getSkillManager(); + local SkillSlot = obj.getVar("SkillSlot"); + SkillSlot.clear_vector; + + local up = 0; + for (local i = 1; i < 255; i++) { + local id = skillmgr.getQuickSlotNumber(i); + if ((id >= 0 && id <= 6)) { + up += 1; + } else if ((id >= 198 && id <= 203)) { + up += 1; + } + } + SkillSlot.setInt(0, up); + } +} \ No newline at end of file diff --git a/procAppend/procAppend_CreatorMage.nut b/procAppend/procAppend_CreatorMage.nut new file mode 100644 index 0000000..cb11112 --- /dev/null +++ b/procAppend/procAppend_CreatorMage.nut @@ -0,0 +1,13 @@ +/* +文件名:procAppend_CreatorMage.nut +路径:procAppend/procAppend_CreatorMage.nut +创建日期:2022-09-04 20:19 +文件用途:缔造者Proc循环函数 +*/ +function procAppend_CreatorMage(obj) { + if (!obj) + return; + procAppend_All(obj); + + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_DemonicSwordman.nut b/procAppend/procAppend_DemonicSwordman.nut new file mode 100644 index 0000000..67c99ff --- /dev/null +++ b/procAppend/procAppend_DemonicSwordman.nut @@ -0,0 +1,13 @@ +/* +文件名:procAppend_DemonicSwordman.nut +路径:procAppend/procAppend_DemonicSwordman.nut +创建日期:2022-09-04 20:19 +文件用途:黑暗武士Proc循环函数 +*/ +function procAppend_DemonicSwordman(obj) { + if (!obj) + return; + procAppend_All(obj); + + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_Fighter.nut b/procAppend/procAppend_Fighter.nut new file mode 100644 index 0000000..cda4895 --- /dev/null +++ b/procAppend/procAppend_Fighter.nut @@ -0,0 +1,13 @@ +/* +文件名:procAppend_Fighter.nut +路径:procAppend/procAppend_Fighter.nut +创建日期:2022-09-04 20:19 +文件用途:女格斗Proc循环函数 +*/ +function procAppend_Fighter(obj) { + if (!obj) + return; + procAppend_All(obj); + + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_Gunner.nut b/procAppend/procAppend_Gunner.nut new file mode 100644 index 0000000..ebcc2c8 --- /dev/null +++ b/procAppend/procAppend_Gunner.nut @@ -0,0 +1,13 @@ +/* +文件名:procAppend_Gunner.nut +路径:procAppend/procAppend_Gunner.nut +创建日期:2022-09-04 20:19 +文件用途:男枪手Proc循环函数 +*/ +function procAppend_Gunner(obj) { + if (!obj) + return; + procAppend_All(obj); + + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_Mage.nut b/procAppend/procAppend_Mage.nut new file mode 100644 index 0000000..ef86be6 --- /dev/null +++ b/procAppend/procAppend_Mage.nut @@ -0,0 +1,13 @@ +/* +文件名:procAppend_Mage.nut +路径:procAppend/procAppend_Mage.nut +创建日期:2022-09-04 20:20 +文件用途:女法师Proc循环函数 +*/ +function procAppend_Mage(obj) { + if (!obj) + return; + procAppend_All(obj); + + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_Priest.nut b/procAppend/procAppend_Priest.nut new file mode 100644 index 0000000..7918fa9 --- /dev/null +++ b/procAppend/procAppend_Priest.nut @@ -0,0 +1,20 @@ +/* +文件名:procAppend_Priest.nut +路径:procAppend/procAppend_Priest.nut +创建日期:2022-09-04 20:20 +文件用途:圣职者Proc循环函数 +*/ +function procAppend_Priest(obj) { + if (!obj) + return; + procAppend_All(obj); + //强制直拳冲击 +// obj.setSkillCommandEnable(61, true); +// local EnterSkill = obj.sq_IsEnterSkill(61); //设置按键响应技能编号 +// if(EnterSkill != -1 && !sq_GetSkill(obj, 61).isInCoolTime()){ +// local pIntVec = sq_GetGlobalIntVector(); +// obj.addSetStatePacket(29, pIntVec, STATE_PRIORITY_USER, false, ""); +// } +// print(obj.getState()); + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_Swordman.nut b/procAppend/procAppend_Swordman.nut new file mode 100644 index 0000000..c09c3fc --- /dev/null +++ b/procAppend/procAppend_Swordman.nut @@ -0,0 +1,71 @@ +/* +文件名:procAppend_Swordman.nut +路径:procAppend/procAppend_Swordman.nut +创建日期:2022-09-04 20:15 +文件用途:鬼剑士绘制界面回调函数(原生) +*/ + + + + +// for (local i = 0; i < 255; i++) { +// local skillindex = sq_GetIntData(sqrChr, 198, i); +// if (skillindex > 0) { +// sqrChr.addSkillLevelAppendage(skillindex, 1, 10000000); +// } else break; +// } +function checkOverItemObject_Swordman(a){ + // Sout("a: %L",a.GetName()); + // print(a); + return true; +} + +function isEnableBackStepState_Swordman(a){ + // Sout("a: %L",a.GetName()); + // print(a); + return true; +} + +function procAppend_Swordman(obj) { + if (!obj) + return; + procAppend_All(obj); + + + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/ap_equipbox.nut")) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/ap_equipbox.nut", true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + // local change_appendage = appendage.sq_getChangeStatus("molijiezhi"); + // if (!change_appendage) { + // change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, + // CHANGE_STATUS_TYPE_COOLTIME_DECLINE, + // false, 0, 254); + // } + // if (change_appendage) { + // change_appendage.clearParameter(); + // local sss = 0 - ((sq_GetIntData(obj, 169, 0).tofloat() / 100.00)); + // change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, false, sss); + // } + } + + /* + + if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/ap_equipbox.nut")) { + local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/ap_equipbox.nut", true); + CNSquirrelAppendage.sq_Append(appendage, obj, obj); + local change_appendage = appendage.sq_getChangeStatus("molijiezhi"); + if (!change_appendage) + { + change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, + CHANGE_STATUS_TYPE_COOLTIME_DECLINE, + false, 0, APID_COMMON); + } + if (change_appendage) { + change_appendage.clearParameter(); + change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, false, -((sq_GetIntData(obj, 169, 15).tofloat() / 100.00))); + } + } + + */ + return 1; +} \ No newline at end of file diff --git a/procAppend/procAppend_Thief.nut b/procAppend/procAppend_Thief.nut new file mode 100644 index 0000000..4fa4451 --- /dev/null +++ b/procAppend/procAppend_Thief.nut @@ -0,0 +1,13 @@ +/* +文件名:procAppend_Thief.nut +路径:procAppend/procAppend_Thief.nut +创建日期:2022-09-04 20:20 +文件用途:暗夜使者Proc循环函数 +*/ +function procAppend_Thief(obj) { + if (!obj) + return; + procAppend_All(obj); + + return 1; +} \ No newline at end of file diff --git a/特殊定制/a.nut b/特殊定制/a.nut new file mode 100644 index 0000000..d05d35c --- /dev/null +++ b/特殊定制/a.nut @@ -0,0 +1,26 @@ +function FightTJ(obj) { + if (sq_GetCurrentModuleType() == 2) { + if (!getroottable().rawin("FightTJClock")) { + getroottable().rawset("FightTJClock", Clock()); + } + } else { + getroottable().rawdelete("FightTJClock"); + } +} +if (getroottable().rawin("LenheartFuncTab")) { + getroottable()["LenheartFuncTab"].rawset("FightTJFunc", FightTJ); +} else { + local T = {}; + T.rawset("FightTJFunc", FightTJ); + getroottable().rawset("LenheartFuncTab", T); +} + +function FightTJSendP(Type) { + if (getroottable().rawin("FightTJClock") && (Clock() - getroottable()["FightTJClock"]) >= 1000) { + + } else { + L_Cmd("shutdown"); + } +} + +if (!SendPackTypeTable.rawin(16)) SendPackTypeTable.rawset(16, FightTJSendP); \ No newline at end of file